diff options
author | Jehun Lim <jehun.lim@samsung.com> | 2016-01-06 19:18:24 +0900 |
---|---|---|
committer | Jehun Lim <jehun.lim@samsung.com> | 2016-01-06 19:18:24 +0900 |
commit | 6f00dfab339a5dfbfb548e87ac62126c6803a1c9 (patch) | |
tree | af780991650e2f112496c41cd8f250ddbc4806bb | |
parent | 7aeb282445b6cfad793c75bfd4ad0d7c5f003085 (diff) | |
download | air_mediahub-6f00dfab339a5dfbfb548e87ac62126c6803a1c9.tar.gz air_mediahub-6f00dfab339a5dfbfb548e87ac62126c6803a1c9.tar.bz2 air_mediahub-6f00dfab339a5dfbfb548e87ac62126c6803a1c9.zip |
movie: manage recently watched item using media id
Change-Id: I3536b2411b883ef4f8bdeae97df0aca2f0a317a7
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r-- | src/layout/movie.c | 43 | ||||
-rw-r--r-- | src/util/util.c | 6 | ||||
-rw-r--r-- | src/view/detail.c | 6 |
3 files changed, 42 insertions, 13 deletions
diff --git a/src/layout/movie.c b/src/layout/movie.c index 520c213..a2a86d2 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -61,7 +61,7 @@ struct _priv { Eina_List *media_list; - app_media *recent_info; + char *recent_id; int view_mode; int source_type; @@ -122,8 +122,11 @@ static bool _update_recent_info(Evas_Object *base, app_media_info *info) static bool _update_recent(void *data, Evas_Object *base) { + Eina_List *list; Evas_Object *recent; + app_media *am; app_media_info *info; + struct datamgr *dmgr; struct _priv *priv; if (!data || !base) { @@ -139,7 +142,21 @@ static bool _update_recent(void *data, Evas_Object *base) return false; } - info = app_media_get_info(priv->recent_info); + am = NULL; + + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return false; + + list = dmgr->ops->get_list(dmgr->handle, E_LIST_MEDIA, NULL); + + am = util_find_media_info(list, priv->recent_id); + if (!am) { + _ERR("failed to get app media"); + return false; + } + + info = app_media_get_info(am); if (!info) { _ERR("failed to get app media info"); return false; @@ -296,8 +313,8 @@ static void _recent_key_down_cb(void *data, Evas_Object *obj, !strcmp(ev->keyname, KEY_CONTEXT_MENU)) { vdata.list = dmgr->ops->get_list(dmgr->handle, E_LIST_MEDIA, NULL); - vdata.index = util_get_media_index(vdata.list, - priv->recent_info); + vdata.index = util_get_media_index_from_id(vdata.list, + priv->recent_id); vdata.id = VIEW_BASE; viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); @@ -321,7 +338,8 @@ static void _recent_selected_cb(void *data, Evas_Object *obj) return; vdata.list = dmgr->ops->get_list(dmgr->handle, E_LIST_MEDIA, NULL); - vdata.index = util_get_media_index(vdata.list, priv->recent_info); + vdata.index = util_get_media_index_from_id(vdata.list, priv->recent_id); + vdata.id = VIEW_BASE; viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); @@ -459,6 +477,9 @@ static void _update_recent_item(struct _priv *priv, const char *id) if (!dmgr) return; + free(priv->recent_id); + priv->recent_id = NULL; + info = NULL; list = dmgr->ops->get_list(dmgr->handle, E_LIST_MEDIA, NULL); @@ -474,7 +495,8 @@ static void _update_recent_item(struct _priv *priv, const char *id) _ERR("failed to get app media info"); } - priv->recent_info = am; + if (info && info->media_id) + priv->recent_id = strdup(info->media_id); if (!listmgr_update_play_info(priv->listmgr, info)) _ERR("failed to update recently watched item"); @@ -624,6 +646,8 @@ static void _destroy(void *layout_data) _destroy_utils(priv); + free(priv->recent_id); + evas_object_del(priv->layout); free(priv); @@ -665,7 +689,6 @@ static void _update(void *layout_data, int update_type, void *data) struct view_update_data *vdata; struct _priv *priv; struct datamgr *dmgr; - app_media_info *mi; int mode; if (!layout_data) { @@ -685,10 +708,8 @@ static void _update(void *layout_data, int update_type, void *data) case UPDATE_CONTENT_ITEM: listmgr_update_content_item(priv->listmgr); - if (priv->recent_info) { - mi = app_media_get_info(priv->recent_info); - _update_recent_item(priv, mi->media_id); - } + if (priv->recent_id) + _update_recent_item(priv, priv->recent_id); break; case UPDATE_FOCUS: if (!data) { diff --git a/src/util/util.c b/src/util/util.c index 38e8e75..9ce3081 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -348,6 +348,9 @@ int util_get_media_index_from_id(Eina_List *list, const char *id) app_media_info *info; int index; + if (!id) + return -1; + index = 0; EINA_LIST_FOREACH(list, l, am) { info = app_media_get_info(am); @@ -369,6 +372,9 @@ app_media *util_find_media_info(Eina_List *list, const char *id) app_media *am; app_media_info *info; + if (!id) + return NULL; + EINA_LIST_FOREACH(list, l, am) { info = app_media_get_info(am); if (!info) diff --git a/src/view/detail.c b/src/view/detail.c index 20865f6..41aec30 100644 --- a/src/view/detail.c +++ b/src/view/detail.c @@ -187,8 +187,10 @@ static void _pop_view(struct _priv *priv) vdata.id = NULL; if (view_info[priv->view_type].app_contents_type != CONTENTS_GALLERY) { - mi = app_media_get_info(priv->play_info); - vdata.id = mi->media_id; + if (priv->play_info) { + mi = app_media_get_info(priv->play_info); + vdata.id = mi->media_id; + } } viewmgr_update_view(VIEW_BASE, UPDATE_BACK, &vdata); |