Autore Topic: Pacman e progressbar  (Letto 1120 volte)

Offline godric94

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Pacman e progressbar
« il: 11 Dicembre 2010, 15:13:38 »
Salve a tutti vi espongo un altro problema che mi affiigge. Sono un utilizzatore di Archlinux e per sfizio l'altra ho provato ad abbozzare un programma di gestione di pacman, aggiornamento di repository, aggiornamento di sistema, pulizia della cache. Il problema è che non so come indicare la fine di un determinato processo, poichè l'output non viene visualizzato. Si potrebbe far passare l'output del terminale in una textarea all'interno del programma stesso, cosa che già so fare, ma totalmente inutile poichè l'output non viene aggiornato e di conseguenza sarei punto e a capo. Pensavo di collegare una progress bar ma non so come, in qualche modo potrei collegare la progress bar di pacman (testuale) a una progress bar grafica all'interno della gui del programma in gambas?

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Pacman e progressbar
« Risposta #1 il: 12 Dicembre 2010, 15:12:58 »
Posto un esempio con una progressbar che si aggiorna man mano che wget scarica un file (una canzone).
E' solo per farti vedere come leggere l'output e trasformarlo in valore per la progressbar.
non ci sono altri controlli sul processo o su quante volte clicchi "Scarica" etc etc. Spero che ti serva come base di partenza. P.S. Ogni volta che lanci l'esempio ti ritroverai nella tua home una nuova copia della canzone :-)

Offline godric94

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Pacman e progressbar
« Risposta #2 il: 14 Dicembre 2010, 15:09:16 »
Grazie mille dell'esempio, ho capito molto meglio come funzioni l'interlacciamento tra Wget e Gambas, cosa che mi serviva. Però non credo funga allo stesso modo con Pacman, potete dirmi cosa studiare affinchè possa risolvere tale problema da solo? Grazie.

vaillant86

  • Visitatore
Re: Pacman e progressbar
« Risposta #3 il: 03 Gennaio 2012, 13:35:13 »
Ciao giulio, ho provato il tuo codice per adattarlo al progetto su cui sto lavorando.

Preso singolarmente il download viene eseguito e la progress bar avanza correttamente, mentre quando adatto il codice a quello già presente non funziona (ho segnalo il codice che attualmente ho nella mia form).

Codice: gambas [Seleziona]

PRIVATE $sAllWgetOutput AS String

PUBLIC SUB Form_Open()
  ME.Center   'già presente
  ME.Caption = ("Get Ubuntu")   'già presente
  Dialog.Path = User.Home   'già presente
  ProgressBar1.Value = 0
END

PUBLIC SUB Download_Click()
  DIM HTTP, FileName AS String   'già presente
  DIM procWget AS Process

  $sAllWgetOutput = ""
  ProgressBar1.Value = 0
  WAIT

  SELECT CASE Release.Text   'tutto il SELECT CASE è già presente
    CASE "11.10 Oneiric Mini Remix (i386)"
      HTTP = "http://www.ubuntu-mini-remix.org/download/11.10/ubuntu-mini-remix-11.10-i386.iso"
      FileName = "ubuntu-mini-remix-11.10-i386.iso"
    CASE "11.10 Oneiric Mini Remix (amd64)"
      HTTP = "http://www.ubuntu-mini-remix.org/download/11.10/ubuntu-mini-remix-11.10-amd64.iso"
      FileName = "ubuntu-mini-remix-11.10-amd64.iso"
    CASE "11.04 Natty Mini Remix (i386)"
      HTTP = "http://www.ubuntu-mini-remix.org/download/11.04/ubuntu-mini-remix-11.04-i386.iso"
      FileName = "ubuntu-mini-remix-11.04-i386.iso"
    CASE "11.04 Natty Mini Remix (amd64)"
      HTTP = "http://www.ubuntu-mini-remix.org/download/11.04/ubuntu-mini-remix-11.04-amd64.iso"
      FileName = "ubuntu-mini-remix-11.04-amd64.iso"
    CASE "10.10 Maverick Mini Remix (i386)"
      HTTP = "http://www.ubuntu-mini-remix.org/download/10.10/ubuntu-mini-remix-10.10-i386.iso"
      FileName = "ubuntu-mini-remix-10.10-i386.iso"
    CASE "10.10 Maverick Mini Remix (amd64)"
      HTTP = "http://www.ubuntu-mini-remix.org/download/10.10/ubuntu-mini-remix-10.10-amd64.iso"
      FileName = "ubuntu-mini-remix-10.10-amd64.iso"
    CASE "10.04.1 Lucid Mini Remix (i386)"
      HTTP = "http://www.ubuntu-mini-remix.org/download/10.04.1/ubuntu-mini-remix-10.04.1-i386.iso"
      FileName = "ubuntu-mini-remix-10.04.1-i386.iso"
    CASE "10.04.1 Lucid Mini Remix (amd64)"
      HTTP = "http://www.ubuntu-mini-remix.org/download/10.04.1/ubuntu-mini-remix-10.04.1-amd64.iso"
      FileName = "ubuntu-mini-remix-10.04.1-amd64.iso"
    CASE "10.04 Lucid Mini Remix (i386)"
      HTTP = "http://www.ubuntu-mini-remix.org/download/10.04/ubuntu-mini-remix-10.04-i386.iso"
      FileName = "ubuntu-mini-remix-10.04-i386.iso"
    CASE "10.04 Lucid Mini Remix (amd64)"
      HTTP = "http://www.ubuntu-mini-remix.org/download/10.04/ubuntu-mini-remix-10.04-amd64.iso"
      FileName = "ubuntu-mini-remix-10.04-amd64.iso"
    END SELECT
   
'    SHELL "wget -O " & Dir.Value & "/" & FileName & " " & HTTP    'già presente ma attualmente disabilitato
    procWget = SHELL "wget -O " & Dir.Value & "/" & FileName & " " & HTTP FOR READ AS "DownloadProgress"
END

PUBLIC SUB DownloadProgress_Read()

  DIM sWgetMessage AS String
  DIM sPercentuale AS String
 
  'leggo i messaggi dal processo wget 
  READ #LAST, sWgetMessage, -256
 
  'Tolgo i falsi positivi (% nell'URL da scaricare)
  IF InStr(sWgetMessage, "http://") > 0 THEN RETURN
 
  'Salvo comunque tutto l'output per controllare poi
  'che il download non sia già finito mentre aggiorno la progressbar
 
  $sAllWgetOutput &= sWgetMessage
   
  'Se nell'output di wget c'è la percentuale aggiorno la progress bar
  IF InStr(sWgetMessage, "%") > 0 THEN
       
    'ricavo la percentuale dal primo elemento della stringa dopo '%'
    sPercentuale = Split(sWgetMessage, "%", "", TRUE)[0]
   
    'elimino i punti e gli spazi
    sPercentuale = Trim$(Replace$(sPercentuale, ".", ""))
   
    TRY ProgressBar1.Value = Val(sPercentuale) / 100
    WAIT 0.01
   
    'se nel output totale c'e' il 100% aggiorno la progressbar
    IF InStr($sAllWgetOutput, "100%") > 0 THEN
      ProgressBar1.Value = 1
      WAIT
    ENDIF
   
  ENDIF
 
END

PUBLIC SUB Quit_Click()
  ME.Close
  FMain.Show
END

grazie :)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Pacman e progressbar
« Risposta #4 il: 03 Gennaio 2012, 16:41:44 »
prova ad usare input invece di read nel comando di wget

vaillant86

  • Visitatore
Re: Pacman e progressbar
« Risposta #5 il: 03 Gennaio 2012, 20:25:52 »
Funziona, grazie :)