viking

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

commit 901ae07f0efee9ae463d80882cba7b185d4afd7d
parent ae28e70ae23578bbbe77afc0a7a782e7c383c201
Author: Kyle Milz <kmilz@ucalgary.ca>
Date:   Mon, 17 Dec 2012 13:38:54 -0700

download: break out into own file

Diffstat:
Msrc/Makefile | 2+-
Msrc/buffer.c | 114+------------------------------------------------------------------------------
Asrc/download.c | 128+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/download.h | 6++++++
4 files changed, 136 insertions(+), 114 deletions(-)

diff --git a/src/Makefile b/src/Makefile @@ -1,7 +1,7 @@ TARGET = viking # Objectfiles, needed for $(TARGET) -OBJ = main.o utilities.o commands.o jsmn.o viking_state.o window.o buffer.o +OBJ = main.o utilities.o commands.o jsmn.o viking_state.o window.o buffer.o download.o # Manpages MAN1 = evi2.1 MAN5 = evirc.5 diff --git a/src/buffer.c b/src/buffer.c @@ -9,6 +9,7 @@ #include "commands.h" #include "window.h" #include "buffer.h" +#include "download.h" typedef struct { @@ -461,119 +462,6 @@ webview_create_window_cb(void *data, Evas_Object *obj, Eina_Bool js, const Elm_W } */ -static Eina_Bool -download_status_cb(void *data) -{ - Ewk_Download_Job *dl; - Eina_List *l; - - Window_Data *wd = data; - App_Data *ad = wd->app; - unsigned int dl_count = eina_list_count(ad->downloads); - Eina_Strbuf *buf = eina_strbuf_new(); - double percent_done; - - eina_strbuf_append_printf(buf, "%i DL", eina_list_count(ad->downloads)); - - percent_done = 0.0; - EINA_LIST_FOREACH(ad->downloads, l, dl) - percent_done += 100.0 * ewk_download_job_estimated_progress_get(dl); - - percent_done /= (double)dl_count; - - eina_strbuf_append_printf(buf, " (%.1f%%)", percent_done); - - EINA_LIST_FOREACH(ad->windows, l, wd) { - if (dl_count == 0) { - evas_object_size_hint_weight_set(wd->downloads, 0.0, 0.0); - elm_object_text_set(wd->downloads, ""); - } - else { - evas_object_size_hint_weight_set(wd->downloads, EVAS_HINT_EXPAND, 0.0); - elm_object_text_set(wd->downloads, eina_strbuf_string_get(buf)); - } - } - eina_strbuf_free(buf); - - return ECORE_CALLBACK_RENEW; -} - -static void -download_request_cb(void *data, Evas_Object *obj, void *event_info) -{ - Window_Data *wd = data; - App_Data *ad = wd->app; - Eina_Strbuf *full_path = eina_strbuf_new(); - Ewk_Download_Job *dl = event_info; - const char *suggested_name = ewk_download_job_suggested_filename_get(dl); - - eina_strbuf_append_printf(full_path, "%s/%s", efreet_desktop_dir_get(), suggested_name); - ewk_download_job_destination_set(dl, eina_strbuf_string_steal(full_path)); - - ewk_object_ref(dl); - ad->downloads = eina_list_append(ad->downloads, dl); - - if (eina_list_count(ad->downloads) == 1) - ad->download_status_timer = ecore_timer_loop_add(1, download_status_cb, wd); - - download_status_cb(wd); -} - -static void -download_remove(Window_Data *wd, Ewk_Download_Job *dl) -{ - App_Data *ad = wd->app; - - ewk_object_unref(dl); - ad->downloads = eina_list_remove(ad->downloads, dl); - - if (eina_list_count(ad->downloads) == 0) - ecore_timer_del(ad->download_status_timer); - - download_status_cb(wd); -} - -static void -download_finished_cb(void *data, Evas_Object *obj, void *event_info) -{ - Window_Data *wd = data; - Ewk_Download_Job *dl = event_info; - - download_remove(wd, dl); -} - -static void -download_failed_cb(void *data, Evas_Object *obj, void *event_info) -{ - Arg a; - Window_Data *wd = data; - Ewk_Download_Job_Error *err = event_info; - Ewk_Download_Job *dl = err->download_job; - - a.i = Error; - a.s = strdup_printf("download of %s failed!", - ewk_download_job_suggested_filename_get(dl)); - echo(&a, wd); - free(a.s); - - download_remove(wd, dl); -} - -static void -download_cancelled_cb(void *data, Evas_Object *obj, void *event_info) -{ - Arg a; - Window_Data *wd = data; - Ewk_Download_Job *dl = event_info; - - a.i = Info; - a.s = strdup_printf("download %s cancelled", ewk_download_job_suggested_filename_get(dl)); - echo(&a, wd); - free(a.s); - - download_remove(wd, dl); -} - static void title_changed_cb(void *data, Evas_Object *obj, void *event_info) { diff --git a/src/download.c b/src/download.c @@ -0,0 +1,128 @@ + +#include <Elementary.h> +#include <EWebKit2.h> + +#include "viking_state.h" +#include "viking.h" +#include "download.h" + +static Eina_Bool +download_status_cb(void *data) +{ + Ewk_Download_Job *dl; + Eina_List *l; + + Window_Data *wd = data; + App_Data *ad = wd->app; + unsigned int dl_count = eina_list_count(ad->downloads); + Eina_Strbuf *buf = eina_strbuf_new(); + double percent_done; + + eina_strbuf_append_printf(buf, "%i DL", eina_list_count(ad->downloads)); + + percent_done = 0.0; + EINA_LIST_FOREACH(ad->downloads, l, dl) + percent_done += 100.0 * ewk_download_job_estimated_progress_get(dl); + + percent_done /= (double)dl_count; + + eina_strbuf_append_printf(buf, " (%.1f%%)", percent_done); + + EINA_LIST_FOREACH(ad->windows, l, wd) { + if (dl_count == 0) { + evas_object_size_hint_weight_set(wd->downloads, 0.0, 0.0); + elm_object_text_set(wd->downloads, ""); + } + else { + evas_object_size_hint_weight_set(wd->downloads, EVAS_HINT_EXPAND, 0.0); + elm_object_text_set(wd->downloads, eina_strbuf_string_get(buf)); + } + } + eina_strbuf_free(buf); + + return ECORE_CALLBACK_RENEW; +} + +void +download_request_cb(void *data, Evas_Object *obj, void *event_info) +{ + Window_Data *wd = data; + App_Data *ad = wd->app; + Eina_Strbuf *full_path = eina_strbuf_new(); + Ewk_Download_Job *dl = event_info; + const char *suggested_name = ewk_download_job_suggested_filename_get(dl); + + eina_strbuf_append_printf(full_path, "%s/%s", efreet_desktop_dir_get(), suggested_name); + printf("download_request_cb() downloading to %s\n", eina_strbuf_string_get(full_path)); + ewk_download_job_destination_set(dl, eina_strbuf_string_steal(full_path)); + + // ewk_object_ref(dl); + ad->downloads = eina_list_append(ad->downloads, dl); + + if (eina_list_count(ad->downloads) == 1) + ad->download_status_timer = ecore_timer_loop_add(1, download_status_cb, wd); + + download_status_cb(wd); +} + +static void +download_remove(Window_Data *wd, Ewk_Download_Job *dl) +{ + App_Data *ad = wd->app; + + // ewk_object_unref(dl); + ad->downloads = eina_list_remove(ad->downloads, dl); + + if (eina_list_count(ad->downloads) == 0) + ecore_timer_del(ad->download_status_timer); + + download_status_cb(wd); +} + +void +download_finished_cb(void *data, Evas_Object *obj, void *event_info) +{ + Window_Data *wd = data; + Ewk_Download_Job *dl = event_info; + + download_remove(wd, dl); +} + +void +download_failed_cb(void *data, Evas_Object *obj, void *event_info) +{ + Window_Data *wd = data; + Ewk_Download_Job_Error *err = event_info; + Ewk_Download_Job *dl = err->download_job; + + /* + Arg a; + + a.i = Error; + a.s = strdup_printf("download of %s failed!", + ewk_download_job_suggested_filename_get(dl)); + echo(&a, wd); + free(a.s); + */ + + download_remove(wd, dl); +} + +void +download_cancelled_cb(void *data, Evas_Object *obj, void *event_info) +{ + Window_Data *wd = data; + Ewk_Download_Job *dl = event_info; + + /* + Arg a; + + a.i = Info; + a.s = strdup_printf("download %s cancelled", ewk_download_job_suggested_filename_get(dl)); + echo(&a, wd); + free(a.s); + */ + + download_remove(wd, dl); +} + diff --git a/src/download.h b/src/download.h @@ -0,0 +1,6 @@ + +void download_request_cb(void *data, Evas_Object *obj, void *event_info); +void download_finished_cb(void *data, Evas_Object *obj, void *event_info); +void download_failed_cb(void *data, Evas_Object *obj, void *event_info); +void download_cancelled_cb(void *data, Evas_Object *obj, void *event_info); +