add metadata fetcher flag to prevent exit while running

This commit is contained in:
zmike 2014-03-01 13:29:23 -05:00
parent 76c74ee8f3
commit 20c0ce82b9
4 changed files with 11 additions and 5 deletions

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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)
{