Autore Topic: wget e progress bar  (Letto 6916 volte)

Offline Pixel

  • Amministratore
  • Maestro Gambero
  • *****
  • Post: 414
    • Mostra profilo
    • http://www.gambas-it.org
Re: wget e progress bar
« Risposta #15 il: 10 Febbraio 2010, 13:55:14 »
Se con un browser qualsiasi andate sulla pagina in cui c'è il file da scaricare lo vedete?

tipo questo per intenderci..
Se sì è sufficiente scaricare l'html e leggere la dimensione del file.
Ubuntu Italian Member Ubuntu User 4683
Il mio Blog

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: wget e progress bar
« Risposta #16 il: 10 Febbraio 2010, 17:47:15 »
si sono ftp...
uno dei vari esempi può esser questo...

ftp://ftp.finanze.it/pub/

Codice: [Seleziona]
wget ftp://ftp.finanze.it/pub/ct93.exe

wget non da la percentuale, ma so che occupa 274 KB...

Offline Pixel

  • Amministratore
  • Maestro Gambero
  • *****
  • Post: 414
    • Mostra profilo
    • http://www.gambas-it.org
Re: wget e progress bar
« Risposta #17 il: 10 Febbraio 2010, 18:01:29 »
Perfetto, dopo il nome del file/directory c'è la dimensione in byte.
2 soluzioni:

a) usi l'oggetto webbrowser ed usi la proprietà di mostrarti il sorgente della pagina, poi scansioni i dati ed appena individui il file che ti interessa ne leggi la dimensione, attribuendola come valore ad una progressbar

b) usi l'oggetto socket per leggere direttamente in testuale la pagina (guarda uno degli esempi di Gambas)
Ubuntu Italian Member Ubuntu User 4683
Il mio Blog

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: wget e progress bar
« Risposta #18 il: 10 Febbraio 2010, 18:44:17 »
ok allora io da shell do:

Codice: [Seleziona]
wget link/$file.zip
cat index.html | grep $file.zip | cut -d'(' -f2 | cut -d' ' -f1
e come output ricevo la dimensione in byte
Codice: [Seleziona]
14147827

che in gambas è:
Codice: [Seleziona]
SHELL "rm -fr file.zip index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/file/" WAIT
SHELL "echo $( cat index.html | grep file.zip | cut -d'(' -f2 | cut -d' ' -f1)" WAIT

e ora? come la collego alla progress bar?

[postedit]
ho partorito questo...
Codice: [Seleziona]
PUBLIC SUB Form_Open()

DIM stato AS Variant
DIM avanzamento AS Integer
DIM Valore AS Integer
DIM controllo AS Variant
DIM myprocess AS Process

 
WAIT
SHELL "ping -c 4 www.google.it" TO controllo
WAIT

    IF Len(controllo) = 0 THEN
        Message.Error("Non è presente la connessione", "exit")
        installdocfa.Close()
    END IF
   


    IF NOT Exist(user.home &/ "Docfa") THEN
        MKDIR (user.home &/ "Docfa")
    END IF
   


SHELL "rm -fr docfa4-1.zip index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/docfa4/" WAIT
SHELL "echo $( cat index.html | grep docfa4-1.zip | cut -d'(' -f2 | cut -d' ' -f1)" TO avanzamento
SHELL "rm -fr index.html" WAIT

SHELL "wget ftp://ftp.finanze.it/pub/docfa4/docfa4-1.zip" WAIT

REPEAT
   SHELL "ls --size | grep docfa4-1.zip | cut -d' ' -f1" TO Valore
   stato = Valore / avanzamento
   ProgressBar1.Value = stato
UNTIL avanzamento = Valore


END


ovviamente non funge... sicuramente errori di sintassi, ma come procedimento potrebbe andare?

come mai non mi compare la finestrella grafica?
« Ultima modifica: 10 Febbraio 2010, 21:10:32 da ira83 »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: wget e progress bar
« Risposta #19 il: 10 Febbraio 2010, 22:28:30 »
non ti compare la finestra perchè utilizzi un wait sulla stessa linea di codice in cui hai il comando shell, ovvero dici a gambas di aspettare a fare qualsiasi cosa(anche refrescare la gui) finchè wget non ha scaricato il file.

wget dalle prove che ho fatto non scrive nel processo i dati di output, quindi ti conviene procedere così:

1) cerchi di trovare la dimensione del file da scaricare

2)lanci wget tramite processo(vedi il mio esempio)con opzione -o (output di wget in un file)e avvii un timer

3)ad ogni ciclo del timer neggi nel file di output di wget la dimensione scaricata per cui progressbar.value= dimensione scaricata/dimensione finale

4)quando wget ha finito di scaricare (tramite il processo lo puoi sapere con if hprocess=0) fermi il timer è fai quello che devi fare con il file scaricato

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: wget e progress bar
« Risposta #20 il: 10 Febbraio 2010, 22:31:50 »
ehm ok... ma "idealmente" il programma postato sopra potrebbe andare no? almeno a livello di logica mi pare di si...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: wget e progress bar
« Risposta #21 il: 11 Febbraio 2010, 20:09:32 »
così come è impossibile collegarci una progress bar, in alternativa puoi lanciare wget con

Codice: [Seleziona]
comando="wget ftp://ftp.finanze.it/pub/file/file.zip"
hProcess = SHELL comando FOR READ AS "hProcess"
timer1.start
così non si blocca la gui

poi con il timer controlli se wget ha finito oppure no, se non ha finito puoi fare uno stat del file scaricato, il risultato diviso la grandezza del file ti da il valore da applicare all aprogress

Codice: [Seleziona]
PUBLIC SUB Timer1_Timer()

DIM i AS Integer

 
      i = hProcess.State
 
  IF i = 0 THEN
    Timer1.Stop
   
    ProgressBar1.Value = 1
    Label1.Text = "finito"
  ELSE

        progressbar.value=   Stat(pat del file scaricato)/dimensione file da scaricare
   
  ENDIF
     
     
END

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: wget e progress bar
« Risposta #22 il: 11 Febbraio 2010, 21:25:00 »
ok ho buttato giu questo.. mi da errori su
comando= "wget..........."

sicuramente sbaglio a fare i dim dei processi e variabili

Codice: [Seleziona]
' Gambas class file

PUBLIC SUB Form_Open()

DIM controllo AS Variant
DIM comando AS Process
DIM hProcess AS Process
DIM Valore AS Integer
 

SHELL "ping -c 4 www.google.it" TO controllo


    IF Len(controllo) = 0 THEN
        Message.Error("Non è presente la connessione", "exit")
        installdocfa.Close()
    END IF
   


    IF NOT Exist(user.home &/ "Docfa") THEN
        MKDIR (user.home &/ "Docfa")
    END IF

END



PUBLIC SUB Button1_Click()

DIM controllo AS Variant
DIM comando AS Process
DIM hProcess AS Process
DIM Valore AS Integer
     

SHELL "rm -fr docfa4-1.zip index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/docfa4/" WAIT

SHELL "echo $(cat index.html | grep docfa4-1.zip | cut -d'(' -f2 | cut -d' ' -f1)" WAIT
SHELL "rm -fr index.html" WAIT



comando = "wget ftp://ftp.finanze.it/pub/Docfa4/docfa4-1.zip"
hProcess = SHELL comando FOR READ AS "hProcess"
timer1.start

END





PUBLIC SUB Timer1_Timer()

DIM controllo AS Variant
DIM comando AS Process
DIM hProcess AS Process
DIM Valore AS Integer


DIM i AS Integer

 
      i = hProcess.State
 
  IF i = 0 THEN
    Timer1.Stop
   
    ProgressBar1.Value = 1
 
  ELSE
Valore = Stat("docfa4-1.zip") / 13500
        ProgressBar1.value = Valore
   
  ENDIF
END

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: wget e progress bar
« Risposta #23 il: 11 Febbraio 2010, 21:51:41 »
ma zchè wget mi dice che quella cartella non esiste?

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: wget e progress bar
« Risposta #24 il: 11 Febbraio 2010, 21:58:41 »
esiste è una cartella cmq... ftp://ftp.finanze.it/pub/docfa4
il wget scarica l'index.html

cmq mi da errore "Type mismatch:wanted Process,got String instead"

e evidenzia la riga comando= "wget......"

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: wget e progress bar
« Risposta #25 il: 11 Febbraio 2010, 22:01:54 »
il codice deve essere così:

Codice: [Seleziona]
' Gambas class file
PRIVATE hProcess AS Process

PUBLIC SUB Form_Open()

DIM controllo AS Variant



  

SHELL "ping -c 4 www.google.it" TO controllo


    IF Len(controllo) = 0 THEN
        Message.Error("Non è presente la connessione", "exit")
        'installdocfa.Close()
    END IF
    


    IF NOT Exist(user.home &/ "Docfa") THEN
        MKDIR (user.home &/ "Docfa")
    END IF

END



PUBLIC SUB Button1_Click()


DIM comando AS String


      

SHELL "rm -fr docfa4-1.zip index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/docfa4/" WAIT

SHELL "echo $(cat index.html | grep docfa4-1.zip | cut -d'(' -f2 | cut -d' ' -f1)" WAIT
SHELL "rm -fr index.html" WAIT



comando = "wget ftp://ftp.finanze.it/pub/Docfa4/docfa4-1.zip"
hProcess = SHELL comando FOR READ AS "hProcess"
timer1.start

END





PUBLIC SUB Timer1_Timer()



DIM Valore AS Integer


DIM i AS Integer

 
      i = hProcess.State
  
  IF i = 0 THEN
    Timer1.Stop
    
    ProgressBar1.Value = 1
  
  ELSE
Valore = Stat("docfa4-1.zip") / 13500
        ProgressBar1.value = Valore
    
  ENDIF
END

hproces è una variabile globale
però a me da errore perche wget non scarica nulla
« Ultima modifica: 11 Febbraio 2010, 22:03:59 da fsurfing »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: wget e progress bar
« Risposta #26 il: 11 Febbraio 2010, 22:03:06 »
Valore = Stat("docfa4-1.zip") / 13500

dovrebbe forse essere:


Valore = Stat(percorso & "/docfa4-1.zip") / 13500

poi fai attenzione che sia il risultato di stat che il valore devono avere la stessa unità di misura

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: wget e progress bar
« Risposta #27 il: 11 Febbraio 2010, 22:08:30 »
effettivamente
Codice: [Seleziona]
comando = "wget ftp://ftp.finanze.it/pub/docfa4/docfa4-1.zip" 
hProcess = SHELL comando FOR READ AS "hProcess"

non funge... ma il wget dato da terminale cosi parte senza problemi...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: wget e progress bar
« Risposta #28 il: 11 Febbraio 2010, 22:13:58 »
a me da errore anche lanciandolo d aterminale wget:
Codice: [Seleziona]
sergio@pc-sergio:~$ wget ftp://ftp.finanze.it/pub/Docfa4/docfa4-1.zip
--2010-02-11 22:13:21--  ftp://ftp.finanze.it/pub/Docfa4/docfa4-1.zip
           => `docfa4-1.zip'
Risoluzione di ftp.finanze.it... 217.175.53.111
Connessione a ftp.finanze.it|217.175.53.111|:21... connesso.
Accesso come utente anonymous ... Login eseguito!
==> SYST ... fatto.    ==> PWD ... fatto.
==> TYPE I ... fatto.  ==> CWD /pub/Docfa4 ...
La directory "pub/Docfa4" non esiste.

sergio@pc-sergio:~$

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: wget e progress bar
« Risposta #29 il: 11 Febbraio 2010, 22:15:36 »
è sabgliato il link è tutto minuscolo :D l'ho corretto nelle ultime due cose che ho postato..

wget ftp://ftp.finanze.it/pub/docfa4/docfa4-1.zip