diff --git a/configure.ac b/configure.ac index ef44fad..bf2713d 100644 --- a/configure.ac +++ b/configure.ac @@ -183,6 +183,12 @@ AC_ARG_ENABLE([module-google-image], [want_google_image=$enableval], []) AM_CONDITIONAL([MOD_GOOGLE_IMAGE], [test "x$want_google_image" = "xyes"]) +want_meta=yes +AC_ARG_ENABLE([module-meta], + [AC_HELP_STRING([--disable-module-meta], [disable meta image module. @<:@default=detect@:>@])], + [want_meta=$enableval], []) +AM_CONDITIONAL([MOD_META], [test "x$want_meta" = "xyes"]) + ######################################## want_auto_playlist_manager=yes @@ -277,6 +283,7 @@ Modules: * glyr_gmpc............: $want_glyr_gmpc * glyr.................: $want_glyr * google_image.........: $want_google_image + * meta.................: $want_meta * elyr.................: $want_elyr * eet_saver............: $want_eet_saver * eet_loader...........: $want_eet_loader diff --git a/src/bin/empc.c b/src/bin/empc.c index ef69610..0f3f962 100644 --- a/src/bin/empc.c +++ b/src/bin/empc.c @@ -92,6 +92,7 @@ static int empd_song_track = -1; static Eina_Stringshare *empd_song_title = NULL; static Eina_Stringshare *empd_song_artist = NULL; static Eina_Stringshare *empd_song_album = NULL; +static Eina_Stringshare *empd_song_albumimage = NULL; static Elm_Object_Item *empd_song_item = NULL; static unsigned int empd_song_length = 0; static unsigned int empd_song_elapsed = 0; @@ -720,6 +721,7 @@ fetch_req_free(Empc_Fetch_Request_Internal *ireq) eina_stringshare_del(ireq->req.album); eina_stringshare_del(ireq->req.song); eina_stringshare_del(ireq->req.uri); + eina_stringshare_del(ireq->req.albumimage); ecore_job_del(ireq->fail_job); E_FREE_LIST(ireq->results, free); E_FREE_LIST(ireq->urls_pending, eina_stringshare_del); @@ -810,7 +812,7 @@ bg_changed(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *sig } static Empc_Fetch_Request * -bg_update(int num, Eina_Stringshare *artist, Eina_Stringshare *album, Eina_Stringshare *uri) +bg_update(int num, Eina_Stringshare *artist, Eina_Stringshare *album, Eina_Stringshare *uri, Eina_Stringshare *albumimage) { Evas_Object *o; @@ -819,7 +821,7 @@ bg_update(int num, Eina_Stringshare *artist, Eina_Stringshare *album, Eina_Strin { bgselector_clear(o); bgselector_info_set(o, artist, album); - return metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, o, artist, album, uri, EINA_FALSE, EINA_FALSE, bg_add, NULL); + return metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, o, artist, album, uri, albumimage, EINA_FALSE, EINA_FALSE, bg_add, NULL); } return NULL; } @@ -1046,7 +1048,7 @@ status_update(int state) static int songid_update(int songid) { - Eina_Bool artist, album, first = (empd_songid == -1); + Eina_Bool artist, album, albumimage, first = (empd_songid == -1); Elm_Object_Item *it, *itp = NULL; Empd_Empdd_Song *so, *sop = NULL; int ret, uid = background_num; @@ -1069,10 +1071,11 @@ songid_update(int songid) eina_stringshare_refplace(&empd_song_title, so->title); artist = eina_stringshare_refplace(&empd_song_artist, so->artist); album = eina_stringshare_refplace(&empd_song_album, so->album); - if (artist || album) + albumimage = eina_stringshare_refplace(&empd_song_albumimage, so->albumimage); + if (artist || album || albumimage) { uid = first ? background_num : bg_next_get(); - bg_update(uid, empd_song_artist, empd_song_album, so->uri); + bg_update(uid, empd_song_artist, empd_song_album, so->uri, so->albumimage); } ret = songid - empd_songid; empd_songid = songid; @@ -1100,7 +1103,7 @@ songid_update(int songid) elm_genlist_item_fields_update(it, EMPC_TEXT_TIME, ELM_GENLIST_ITEM_FIELD_TEXT); elm_object_part_content_set(layout, EMPC_SWALLOW_LYRICS, NULL); if (lyrics_visible) - metadata_fetch_begin(EMPC_METADATA_TYPE_TEXT, layout, empd_song_artist, empd_song_title, so->uri, EINA_FALSE, EINA_FALSE, lyrics_set, NULL); + metadata_fetch_begin(EMPC_METADATA_TYPE_TEXT, layout, empd_song_artist, empd_song_title, so->uri, NULL, EINA_FALSE, EINA_FALSE, lyrics_set, NULL); so = elm_object_item_data_get(it); if ((!itp) || (so->album != sop->album) || (so->artist != sop->artist)) { @@ -1653,14 +1656,14 @@ filesystem_item_content_get(Empc_Entity *ent, Evas_Object *obj, const char *part if (img || uri) save_image(EINA_TRUE, uri ? NULL : img, uri, artist, album, uri ? filesystem_item_content_get_post_save : NULL); else - req = metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, obj, artist, album, dir->uri, EINA_FALSE, EINA_FALSE, filesystem_item_image, cur); + req = metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, obj, artist, album, dir->uri, NULL, EINA_FALSE, EINA_FALSE, filesystem_item_image, cur); } else { if (img || uri) save_image(EINA_TRUE, uri ? NULL : img, uri, artist, p, uri ? filesystem_item_content_get_post_save : NULL); else - req = metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, obj, artist, p, dir->uri, EINA_FALSE, EINA_FALSE, filesystem_item_image, cur); + req = metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, obj, artist, p, dir->uri, NULL, EINA_FALSE, EINA_FALSE, filesystem_item_image, cur); } } else @@ -1668,7 +1671,7 @@ filesystem_item_content_get(Empc_Entity *ent, Evas_Object *obj, const char *part if (img || uri) save_image(EINA_TRUE, uri ? NULL : img, uri, dir->uri, NULL, uri ? filesystem_item_content_get_post_save : NULL); else - req = metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, obj, dir->uri, NULL, dir->uri, EINA_FALSE, EINA_FALSE, filesystem_item_image, cur); + req = metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, obj, dir->uri, NULL, dir->uri, NULL, EINA_FALSE, EINA_FALSE, filesystem_item_image, cur); } if (img) evas_object_unref(img); @@ -1909,7 +1912,7 @@ empc_bg_changed() } background_num = bg_next_get(); bgselector_clear(bg[background_num]); - req = bg_update(background_num, empd_song_artist, empd_song_album, uri); + req = bg_update(background_num, empd_song_artist, empd_song_album, uri, empd_song_albumimage); metadata_fetch_cb_add(req, bg_changed_post, NULL); elm_object_signal_emit(layout, "empc,bg,next", "empc"); return ECORE_CALLBACK_RENEW; @@ -2103,8 +2106,8 @@ empc_status(void *d EINA_UNUSED, int t EINA_UNUSED, Empd_Empdd_Status_Data *ev) if (!it) it = elm_genlist_first_item_get(queue_list); so = elm_object_item_data_get(it); - if ((so->artist != empd_song_artist) || (so->album != empd_song_album)) - bg_update(bg_next_get(), so->artist, so->album, so->uri); + if ((so->artist != empd_song_artist) || (so->album != empd_song_album) || (so->albumimage != empd_song_albumimage)) + bg_update(bg_next_get(), so->artist, so->album, so->uri, so->albumimage); } //if (empd_song_item && queue_list_state) //elm_genlist_item_fields_update(empd_song_item, EMPC_TEXT_TIME, ELM_GENLIST_ITEM_FIELD_TEXT); @@ -2564,7 +2567,7 @@ queue_list_header_content_get(Empd_Empdd_Song *so, Evas_Object *obj, const char cur = evas_object_box_add(evas_object_evas_get(obj)); EXPAND(cur); FILL(cur); - req = metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, obj, so->artist, so->album, so->uri, EINA_FALSE, EINA_FALSE, queue_list_header_image, cur); + req = metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, obj, so->artist, so->album, so->uri, so->albumimage, EINA_FALSE, EINA_FALSE, queue_list_header_image, cur); evas_object_event_callback_add(cur, EVAS_CALLBACK_DEL, queue_list_header_content_del, req); return cur; } @@ -3001,8 +3004,8 @@ queue_list_handler(Eina_Value *value, Eina_Bool update) empd_song_item = it; /* force updates in case song info has changed */ - if ((so->artist != empd_song_artist) || (so->album != empd_song_album)) - bg_update(bg_next_get(), so->artist, so->album, so->uri); + if ((so->artist != empd_song_artist) || (so->album != empd_song_album) || (so->albumimage != empd_song_albumimage)) + bg_update(bg_next_get(), so->artist, so->album, so->uri, so->albumimage); eina_stringshare_refplace(&empd_song_album, so->album); title = eina_stringshare_refplace(&empd_song_title, so->title); if (title || (empd_song_track != so->track)) @@ -3519,7 +3522,7 @@ lyrics_request() so = elm_object_item_data_get(empd_song_item); uri = so->uri; } - metadata_fetch_begin(EMPC_METADATA_TYPE_TEXT, layout, empd_song_artist, empd_song_title, uri, EINA_FALSE, EINA_FALSE, lyrics_set, NULL); + metadata_fetch_begin(EMPC_METADATA_TYPE_TEXT, layout, empd_song_artist, empd_song_title, uri, NULL, EINA_FALSE, EINA_FALSE, lyrics_set, NULL); } } @@ -3574,7 +3577,7 @@ bg_chooser_show(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char } bgchooser = EINA_TRUE; bgs = elm_object_part_content_get(layout, EMPC_SWALLOW_BACKGROUND); - bgfetch = metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, bgs, empd_song_artist, empd_song_album, uri, EINA_TRUE, EINA_FALSE, bg_add, NULL); + bgfetch = metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, bgs, empd_song_artist, empd_song_album, uri, empd_song_albumimage, EINA_TRUE, EINA_FALSE, bg_add, NULL); bgselector_active_set(bgs, EINA_TRUE); elm_object_tooltip_hide(bgs); } @@ -3733,7 +3736,7 @@ dbus_getbg(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Messa return ret; } so = elm_object_item_data_get(empd_song_item); - metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, win, empd_song_artist, empd_song_title, so->uri, EINA_FALSE, EINA_TRUE, dbus_getbg_fetch_cb, ret); + metadata_fetch_begin(EMPC_METADATA_TYPE_IMAGE, win, empd_song_artist, empd_song_title, so->uri, so->albumimage, EINA_FALSE, EINA_TRUE, dbus_getbg_fetch_cb, ret); return NULL; } diff --git a/src/bin/empc.h b/src/bin/empc.h index 75bd398..18f98d8 100644 --- a/src/bin/empc.h +++ b/src/bin/empc.h @@ -63,6 +63,7 @@ struct Empc_Fetch_Request Eina_Stringshare *album; Eina_Stringshare *song; Eina_Stringshare *uri; + Eina_Stringshare *albumimage; Empc_Metadata_Type type; Eina_Bool local : 1; //only local fetches Eina_Bool force : 1; diff --git a/src/bin/empc_metadata.c b/src/bin/empc_metadata.c index 7f1d723..9c05582 100644 --- a/src/bin/empc_metadata.c +++ b/src/bin/empc_metadata.c @@ -158,7 +158,7 @@ metadata_fail_cb(Empc_Fetch_Request_Internal *ireq) } Empc_Fetch_Request * -metadata_fetch_begin(Empc_Metadata_Type type, Evas_Object *obj, const char *attr1, const char *attr2, const char *uri, Eina_Bool force, Eina_Bool local, Empc_Module_Metadata_Fetch_Result_Cb cb, const void *data) +metadata_fetch_begin(Empc_Metadata_Type type, Evas_Object *obj, const char *attr1, const char *attr2, const char *uri, const char *albumimage, Eina_Bool force, Eina_Bool local, Empc_Module_Metadata_Fetch_Result_Cb cb, const void *data) { Empc_Fetch_Request_Internal *ireq; Empc_Fetch_Request *req; @@ -202,6 +202,7 @@ metadata_fetch_begin(Empc_Metadata_Type type, Evas_Object *obj, const char *attr ireq->req.local = !!local; ireq->req.type = type; ireq->req.uri = eina_stringshare_add(uri); + ireq->req.albumimage = eina_stringshare_add(albumimage); res = malloc(sizeof(Empc_Metadata_Result_Cb)); res->cb = cb; res->data = (void*)data; diff --git a/src/bin/empc_private.h b/src/bin/empc_private.h index 2412bf1..306ce7c 100644 --- a/src/bin/empc_private.h +++ b/src/bin/empc_private.h @@ -75,7 +75,7 @@ extern int empc_log_dom; extern Eina_Inlist *empc_modules[]; extern Eina_Hash *empc_metadata_fetch_reqs[]; -Empc_Fetch_Request *metadata_fetch_begin(Empc_Metadata_Type type, Evas_Object *obj, const char *attr1, const char *attr2, const char *uri, Eina_Bool force, Eina_Bool local, Empc_Module_Metadata_Fetch_Result_Cb cb, const void *data); +Empc_Fetch_Request *metadata_fetch_begin(Empc_Metadata_Type type, Evas_Object *obj, const char *attr1, const char *attr2, const char *uri, const char *albumimage, Eina_Bool force, Eina_Bool local, Empc_Module_Metadata_Fetch_Result_Cb cb, const void *data); void metadata_fetch_cancel(Empc_Fetch_Request *req, Evas_Object *obj, Empc_Module_Metadata_Fetch_Result_Cb cb, const void *data); void metadata_fetch_cb_add(Empc_Fetch_Request *req, Ecore_End_Cb cb, const void *data); void metadata_shutdown(void); diff --git a/src/modules/Makefile.mk b/src/modules/Makefile.mk index 8d6cfcc..639953e 100644 --- a/src/modules/Makefile.mk +++ b/src/modules/Makefile.mk @@ -80,6 +80,29 @@ src_modules_google_image_la_LDFLAGS = -module -avoid-version src_modules_google_image_la_LIBTOOLFLAGS = --tag=disable-static endif +if MOD_META +mod_LTLIBRARIES += src/modules/meta.la + +src_modules_meta_la_SOURCES = \ +src/modules/meta.c \ +src/bin/empc.h + +src_modules_meta_la_CPPFLAGS = \ +$(AM_CFLAGS) \ +$(mod_cppflags) \ +@EFL_CFLAGS@ \ +@ELM_CFLAGS@ \ +-I$(top_srcdir)/src/bin \ +-I$(top_builddir) + +src_modules_meta_la_LIBADD = \ +@EFL_LIBS@ + +src_modules_meta_la_LDFLAGS = -module -avoid-version + +src_modules_meta_la_LIBTOOLFLAGS = --tag=disable-static +endif + if MOD_ELYR ELYR_AZY_SRC = \ src/modules/Lyricwiki_Common_Azy.c \ diff --git a/src/modules/meta.c b/src/modules/meta.c new file mode 100644 index 0000000..2ac00f5 --- /dev/null +++ b/src/modules/meta.c @@ -0,0 +1,50 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "empdd.h" +#include "empc.h" + +EAPI Eina_Bool +empc_module_metadata_fetch(Empc_Fetch_Request *req) +{ + if (req->type != EMPC_METADATA_TYPE_IMAGE) return EINA_FALSE; + if ((!req->albumimage) || (!req->albumimage[0])) return EINA_FALSE; + if (req->force) + empc_metadata_image_download(req, req->albumimage); + else + empc_metadata_image_download_queue(req, req->albumimage); + return EINA_TRUE; +} + +EAPI Eina_Bool +empc_module_remote(void) +{ + return EINA_TRUE; +} + +EAPI Empc_Module_Type +empc_module_type(void) +{ + return EMPC_MODULE_TYPE_METADATA_FETCH; +} + +EAPI int +empc_module_priority(void) +{ + return 6; +} + +static Eina_Bool +meta_init(void) +{ + return EINA_TRUE; +} + +static void +meta_shutdown(void) +{ +} + +EINA_MODULE_INIT(meta_init); +EINA_MODULE_SHUTDOWN(meta_shutdown);