sabato 6 dicembre 2014

Visualizzare lo stato di scaricamento di un file

Oggi vedremo come creare la barra di scaricamento di un file, mostrando istante per istante a che punto siamo.
Per fare questo Livecode mette a disposizione il comando load URL. Vediamo un esempio pratico di come crearlo.
Creiamo una finestra come la seguente:
Il campo in bianco chiamiamolo Indirizzo, mentre lo scrollbar chiamiamolo stato.
Mettiamo nel pulsante scarica il seguente codice:

on mouseUp
   put "http://" into temp
   put the text of field "Indirizzo" after temp
   set the indirizzo of me to temp
   load URL temp
   send controllo to me in 1 sec
end mouseUp

on controllo
   put the indirizzo of me into temp
   put URLstatus(temp) into temp2
   put item 1 of URLstatus(temp) into temp3
   switch temp3
      case "loading"
         set the thumbpos of scrollbar "stato" to ((item 2 of temp2) / (item 3 of temp2) * 100 )
         send controllo to me in 1 sec
         break
      case "cached"
         set the thumbpos of scrollbar "stato" to 100
         answer "Finito di scaricare"
         set itemdel to "/"
         put item -1 of temp into nomefile
         put URL temp into URL ("binfile:" & nomefile)
         break
      default
         #in caso di problemi
         answer temp2
   end switch   
end controllo




Finito. Adesso bisogna solo spiegare il codice.
Il messaggio load URL serve per scaricare uno o più file insieme, tutti i load URL lanciati sono eseguiti insieme all'uscita del messaggio corrente. Load URL serve anche per memorizzare temporaneamente una risorsa esterna. Tutte le volte che verrà chiamato quello specifico url (ad esempio www.miosito.it/musica.mp3) non verrà letto nuovamente dall'esterno, ma sarà letta la copia locale. In questo modo si può risparmiare tempo.
Una volta che abbiamo usato load URL, abbiamo a disposizione la funzione urlstatus() per sapere a che punto è il download della risorsa.
ulstatus() fornisce uno dei seguenti valori:
  • queued: è in fila a scaricare, probabilmente c'è la richiesta per lo stesso sito da aspettare.
  • contacted: sito contattato, in attesa di ricevere i dati
  • requested: l'url è stato richiesto, in attesa
  • loading,bytesRicevuti,bytesTotali: qui vengono forniti 3 dati separati da virgola; la parola loading, l'ammontare dei dati ricevuti fin'ora, i dati totali della risorsa
  • uploading,bytesReceived,bytesTotal: qui vengono forniti 3 dati separati da virgola; la parola loading, l'ammontare dei dati inviati fin'ora, i dati totali della risorsa da inviare.
  • cached: lo scaricamento della risorsa è completo
  • uploaded: il caricamento della risorsa è completo
  • error: c'è stato un errore, la trasmissione è incompleta
  • timeout: il sito non risponde più
  • empty: ("") non risulta alcun scaricamento per il sito indicato
Quindi mettendo nel campo un indirizzo (senza bisogno di "http://")  e prendo sul pulsante scarica:
  1. il pulsante memorizza il sito in una proprietà personalizzata
  2. lancia load URL per il sito in questione
  3. non può subito cominciare a verificare urlstatus(), ma deve apsettare di uscire dal messaggio corrente, quindi dice di lanciare il messaggio controllo tra 1 secondo
  4. il messaggio controllo verifica lo stato dello scaricamento, aggiorna opportunamente la barra stato, e se lo scaricamento non è completo si rilancia dopo 1 secondo.
  5. Siccome load URL tiene in memoria ma non salva sull'harddisk, dobbiamo poi salvarlo con il comando put URL. Siccome la risorsa è in memoria, put URL non leggera dal sito, ma dalla memoria.