viking

webkit based web browser for Enlightenment
Log | Files | Refs | LICENSE

download.c (2986B)


      1 
      2 #include <Elementary.h>
      3 #include <EWebKit2.h>
      4 
      5 #include "viking_state.h"
      6 #include "viking.h"
      7 #include "download.h"
      8 
      9 static Eina_Bool
     10 download_status_cb(void *data)
     11 {
     12 	Ewk_Download_Job *dl;
     13 	Eina_List *l;
     14 
     15 	Window_Data *wd = data;
     16 	App_Data *ad = wd->app;
     17 	unsigned int dl_count = eina_list_count(ad->downloads);
     18 	Eina_Strbuf *buf = eina_strbuf_new();
     19 	double percent_done;
     20 
     21 	eina_strbuf_append_printf(buf, "%i DL", eina_list_count(ad->downloads));
     22 
     23 	percent_done = 0.0;
     24 	EINA_LIST_FOREACH(ad->downloads, l, dl)
     25 		percent_done += 100.0 * ewk_download_job_estimated_progress_get(dl);
     26 
     27 	percent_done /= (double)dl_count;
     28 
     29 	eina_strbuf_append_printf(buf, " (%.1f%%)", percent_done);
     30 
     31 	EINA_LIST_FOREACH(ad->windows, l, wd) {
     32 		if (dl_count == 0) {
     33 			evas_object_size_hint_weight_set(wd->downloads, 0.0, 0.0);
     34 			elm_object_text_set(wd->downloads, "");
     35 		}
     36 		else {
     37 			evas_object_size_hint_weight_set(wd->downloads, EVAS_HINT_EXPAND, 0.0);
     38 			elm_object_text_set(wd->downloads, eina_strbuf_string_get(buf));
     39 		}
     40 	}
     41 	eina_strbuf_free(buf);
     42 
     43 	return ECORE_CALLBACK_RENEW;
     44 }
     45 
     46 void
     47 download_request_cb(void *data, Evas_Object *obj, void *event_info)
     48 {
     49 	Window_Data *wd = data;
     50 	App_Data *ad = wd->app;
     51 	Eina_Strbuf *full_path = eina_strbuf_new();
     52 	Ewk_Download_Job *dl = event_info;
     53 	const char *suggested_name = ewk_download_job_suggested_filename_get(dl);
     54 
     55 	eina_strbuf_append_printf(full_path, "%s/%s", efreet_desktop_dir_get(), suggested_name);
     56 	printf("download_request_cb() downloading to %s\n", eina_strbuf_string_get(full_path));
     57 	ewk_download_job_destination_set(dl, eina_strbuf_string_steal(full_path));
     58 
     59 	// ewk_object_ref(dl);
     60 	ad->downloads = eina_list_append(ad->downloads, dl);
     61 
     62 	if (eina_list_count(ad->downloads) == 1)
     63 		ad->download_status_timer = ecore_timer_loop_add(1, download_status_cb, wd);
     64 
     65 	download_status_cb(wd);
     66 }
     67 
     68 static void
     69 download_remove(Window_Data *wd, Ewk_Download_Job *dl)
     70 {
     71 	App_Data *ad = wd->app;
     72 
     73 	// ewk_object_unref(dl);
     74 	ad->downloads = eina_list_remove(ad->downloads, dl);
     75 
     76 	if (eina_list_count(ad->downloads) == 0)
     77 		ecore_timer_del(ad->download_status_timer);
     78 
     79 	download_status_cb(wd);
     80 }
     81 
     82 void
     83 download_finished_cb(void *data, Evas_Object *obj, void *event_info)
     84 {
     85 	Window_Data *wd = data;
     86 	Ewk_Download_Job *dl = event_info;
     87 
     88 	download_remove(wd, dl);
     89 }
     90 
     91 void
     92 download_failed_cb(void *data, Evas_Object *obj, void *event_info)
     93 {
     94 	Window_Data *wd = data;
     95 	Ewk_Download_Job_Error *err = event_info;
     96 	Ewk_Download_Job *dl = err->download_job;
     97 
     98 	/*
     99 	Arg a;
    100 
    101 	a.i = Error;
    102 	a.s = strdup_printf("download of %s failed!",
    103 			ewk_download_job_suggested_filename_get(dl));
    104 	echo(&a, wd);
    105 	free(a.s);
    106 	*/
    107 
    108 	download_remove(wd, dl);
    109 }
    110 
    111 void
    112 download_cancelled_cb(void *data, Evas_Object *obj, void *event_info)
    113 {
    114 	Window_Data *wd = data;
    115 	Ewk_Download_Job *dl = event_info;
    116 
    117 	/*
    118 	Arg a;
    119 
    120 	a.i = Info;
    121 	a.s = strdup_printf("download %s cancelled", ewk_download_job_suggested_filename_get(dl));
    122 	echo(&a, wd);
    123 	free(a.s);
    124 	*/
    125 
    126 	download_remove(wd, dl);
    127 }
    128