From 20c0ce82b9b16915e0945dafff9c7245d555e23c Mon Sep 17 00:00:00 2001 From: zmike Date: Sat, 1 Mar 2014 13:29:23 -0500 Subject: [PATCH] add metadata fetcher flag to prevent exit while running --- src/bin/empc.h | 5 +++-- src/bin/empc_metadata.c | 3 ++- src/modules/glyr.c | 4 +++- src/modules/google_image.c | 4 +++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/bin/empc.h b/src/bin/empc.h index 88f1efa..50c01e9 100644 --- a/src/bin/empc.h +++ b/src/bin/empc.h @@ -20,8 +20,8 @@ typedef Empc_Module_Type (*Empc_Module_Type_Cb)(void); typedef int (*Empc_Module_Priority_Cb)(void); typedef void (*Empc_Module_Metadata_Save_Image_Cb)(Evas_Object *obj, const char *artist, const char *album); typedef void (*Empc_Module_Metadata_Save_Text_Cb)(const char *text, const char *artist, const char *song); -typedef Eina_Bool (*Empc_Module_Metadata_Fetch_Cb)(const Empc_Fetch_Request *); -typedef void (*Empc_Module_Metadata_Cancel_Cb)(const Empc_Fetch_Request *); +typedef Eina_Bool (*Empc_Module_Metadata_Fetch_Cb)(Empc_Fetch_Request *); +typedef void (*Empc_Module_Metadata_Cancel_Cb)(Empc_Fetch_Request *); typedef void (*Empc_Module_Metadata_Fetch_Result_Cb)(void *, Empc_Fetch_Request *, Evas_Object *img); struct Empc_Fetch_Request @@ -31,6 +31,7 @@ struct Empc_Fetch_Request Eina_Stringshare *song; Empc_Metadata_Type type; Eina_Bool force : 1; + Eina_Bool running : 1; //module is active }; void empc_metadata_fetch_done(Empc_Fetch_Request *req, Eina_List *l); diff --git a/src/bin/empc_metadata.c b/src/bin/empc_metadata.c index 00b0ce9..3b7885d 100644 --- a/src/bin/empc_metadata.c +++ b/src/bin/empc_metadata.c @@ -47,7 +47,7 @@ metadata_image_done(Metadata_Image *m, Eina_Bool deleted) E_FREE_LIST(m->ireq->urls_pending, eina_stringshare_del); } eina_binbuf_free(m->buf); - if (!m->ireq->urls) + if ((!m->ireq->urls) && (!m->ireq->req.running)) empc_metadata_fetch_done((void*)m->ireq, NULL); free(m); } @@ -220,6 +220,7 @@ metadata_fetch_cancel(Empc_Fetch_Request *req, Evas_Object *obj, Empc_Module_Met if (em->cancel) { em->cancel(req); + req->running = 0; eina_hash_del_by_data(empc_metadata_fetch_reqs[ireq->module->type], req); } else diff --git a/src/modules/glyr.c b/src/modules/glyr.c index 74ef838..85ffbdd 100644 --- a/src/modules/glyr.c +++ b/src/modules/glyr.c @@ -103,6 +103,7 @@ exe_del(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Exe_Event_Del *ev) if ((!tag) || strcmp(tag, "glyr")) return ECORE_CALLBACK_DONE; ecore_exe_tag_set(ev->exe, NULL); req = ecore_exe_data_get(ev->exe); + req->running = 0; empc_metadata_fetch_done(req, NULL); return ECORE_CALLBACK_DONE; } @@ -123,7 +124,7 @@ empc_module_metadata_cancel(const Empc_Fetch_Request *req) } EAPI Eina_Bool -empc_module_metadata_fetch(const Empc_Fetch_Request *req) +empc_module_metadata_fetch(Empc_Fetch_Request *req) { char buf[4096]; char *artist, *album; @@ -149,6 +150,7 @@ empc_module_metadata_fetch(const Empc_Fetch_Request *req) exe = ecore_exe_pipe_run(buf, ECORE_EXE_PIPE_ERROR | ECORE_EXE_PIPE_ERROR_LINE_BUFFERED, req); if (exe) { + req->running = 1; ecore_exe_tag_set(exe, "glyr"); exes = eina_list_append(exes, exe); } diff --git a/src/modules/google_image.c b/src/modules/google_image.c index a992da7..6d436f2 100644 --- a/src/modules/google_image.c +++ b/src/modules/google_image.c @@ -35,6 +35,7 @@ static void gend(GImage_Data *gi, Ecore_Thread *eth EINA_UNUSED) { eina_strbuf_free(gi->data); + gi->req->running = 0; empc_metadata_fetch_done(gi->req, NULL); free(gi); } @@ -92,7 +93,7 @@ gdata(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Con_Event_Url_Data *ev) } EAPI Eina_Bool -empc_module_metadata_fetch(const Empc_Fetch_Request *req) +empc_module_metadata_fetch(Empc_Fetch_Request *req) { Eina_Strbuf *sb = NULL; char buf[4096]; @@ -105,6 +106,7 @@ empc_module_metadata_fetch(const Empc_Fetch_Request *req) //if (eina_strlen_bounded(req->artist, 7) < 6) return EINA_FALSE; //too broad... } + req->running = 1; if (req->artist) {