Scaricare un file dal web con Gtk e Glib (in Vala)

Autore: Fabio Di Matteo
Ultima revisione: 16/12/2015 - 16:41

In questo post vedremo come scaricare un file dal web tramite una comoda interfaccia Gtk.

Il codice

downloadFileGtk.vala

public class Win : Gtk.Window {
 
	static Gtk.ProgressBar bar;
 
 
	public Win () {
		// Preparo la finestra Gtk:
		this.title = "Prova download di un file";
		this.window_position = Gtk.WindowPosition.CENTER;
		this.destroy.connect (Gtk.main_quit);
 
		// The ProgressBar:
		bar = new Gtk.ProgressBar ();
		this.add (bar);
 
		// Display text:
		bar.set_text ("Scarico...");
		//bar.set_show_text (true); // gtk+-3
 
		myCopy();
 
		}
 
 
 
		void myCopy()
		{
			//GIO per scaricare il file
			File file1 = File.new_for_uri ("http://gapil.truelite.it/gapil.pdf");
			File file2 = File.new_for_path ("gapil.pdf");
			try {
				//Uso la versione asincrona della funzione cosi' interagisce correttamente con
				//il ciclo principale delle gtk.
				file1.copy_async.begin (file2, FileCopyFlags.OVERWRITE, Priority.DEFAULT, 
											null, ProgressCallback,EndDownload);
			} catch (Error e) {
				stdout.printf ("Error: %s\n", e.message);
			}
		}
 
 
		void ProgressCallback (int64 current_num_bytes, int64 total_num_bytes)
		{
			//Fa avanzare la progressbar
			double progress;
			progress= (double)current_num_bytes/(double)total_num_bytes;
			bar.set_fraction(progress);	
		}
 
		void EndDownload()
		{
			//Scaricamento terminato
			bar.set_text ("Scaricamento terminato.");
		}
}
 
 
	public static int main (string[] args) 
	{
		Gtk.init (ref args);
 
		Win myWin = new Win ();
		myWin.show_all ();
		Gtk.main ();
		return 0;
	}

Compilare con :

valac --pkg gtk+-2.0 downloadFileGtk.vala