bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list);
bool listmgr_update_play_info(struct listmgr *lmgr, app_media_info *info);
-bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update);
+bool listmgr_focus_content_list(struct listmgr *lmgr, const char *id);
bool listmgr_focus_play_info(struct listmgr *lmgr);
void listmgr_set_focus_state(struct listmgr *lmgr, Eina_Bool state);
struct listmgr_data *ldata;
struct mediadata *md;
- int cur_index;
Eina_List *media_list;
};
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
viewmgr_push_view(VIEW_VIEWER);
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata);
viewmgr_show_view(VIEW_ACTION_MENU);
{
struct view_update_data *vdata;
struct _priv *priv;
- bool update;
if (!layout_data) {
_ERR("failed to get layout data");
vdata = data;
- if (priv->cur_index != vdata->index)
- update = true;
- else
- update = false;
-
- listmgr_focus_content_list(priv->listmgr, vdata->index, update);
-
+ listmgr_focus_content_list(priv->listmgr, vdata->id);
break;
case UPDATE_RECENT:
if (!data) {
struct progressbar *prog;
Eina_List *media_list;
- int cur_index;
app_media *recent_info;
};
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
viewmgr_push_view(VIEW_VIEWER);
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata);
viewmgr_show_view(VIEW_ACTION_MENU);
return am;
}
-static void _update_recent_item(struct _priv *priv, int index)
+static void _update_recent_item(struct _priv *priv, const char *id)
{
Eina_List *list;
app_media *am;
list = mediadata_get_medialist(priv->md);
- if (index >= 0)
- am = eina_list_nth(list, index);
+ if (id)
+ am = util_find_media_info(list, id);
else
am = _get_recent_item(list);
switch (update_type) {
case UPDATE_CONTENT:
_update_content_list(priv);
- _update_recent_item(priv, -1);
+ _update_recent_item(priv, NULL);
break;
case UPDATE_CONTENT_ITEM:
listmgr_update_content_item(priv->listmgr);
- _update_recent_item(priv, -1);
+ _update_recent_item(priv, NULL);
break;
case UPDATE_FOCUS:
if (!data) {
vdata = data;
listmgr_focus_play_info(priv->listmgr);
- _update_recent_item(priv, vdata->index);
+ _update_recent_item(priv, vdata->id);
break;
case UPDATE_RECENT:
if (!data) {
struct mediadata *md;
Eina_List *media_list;
- int cur_index;
app_media *playing_info;
};
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata);
viewmgr_push_view(VIEW_MPLAYER);
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata);
viewmgr_show_view(VIEW_ACTION_MENU);
return am;
}
-static void _update_playing_item(struct _priv *priv, int index)
+static void _update_playing_item(struct _priv *priv, const char *id)
{
Eina_List *list;
app_media *am;
app_media_info *info;
list = mediadata_get_medialist(priv->md);
- if (index >= 0)
- am = eina_list_nth(list, index);
+ if (id)
+ am = util_find_media_info(list, id);
else
am = _get_playing_item(list);
switch (update_type) {
case UPDATE_CONTENT:
_update_content_list(priv);
- _update_playing_item(priv, -1);
+ _update_playing_item(priv, NULL);
break;
case UPDATE_CONTENT_ITEM:
listmgr_update_content_item(priv->listmgr);
- _update_playing_item(priv, -1);
+ _update_playing_item(priv, NULL);
break;
case UPDATE_PLAY_INFO:
if (!data) {
vdata = data;
- _update_playing_item(priv, vdata->index);
+ _update_playing_item(priv, vdata->id);
break;
case UPDATE_FOCUS:
listmgr_focus_play_info(priv->listmgr);
return true;
}
+Elm_Object_Item *_get_grid_item(Evas_Object *grid, const char *id)
+{
+ Elm_Object_Item *it;
+ app_media *am;
+ app_media_info *mi;
+
+ for (it = elm_gengrid_first_item_get(grid); it;
+ it = elm_gengrid_item_next_get(it)) {
+ am = elm_object_item_data_get(it);
+ if (!am)
+ continue;
+
+ mi = app_media_get_info(am);
+ if (!mi)
+ continue;
+
+ if (!strcmp(id, mi->media_id))
+ return it;
+ }
+
+ return NULL;
+}
+
void listmgr_set_focus_state(struct listmgr *lmgr, Eina_Bool state)
{
if (!lmgr) {
return true;
}
-bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update)
+bool listmgr_focus_content_list(struct listmgr *lmgr, const char *id)
{
Eina_List *item, *l;
Evas_Object *ly, *grid;
Elm_Object_Item *it;
- int count;
- int r;
- if (!update) {
- r = _focus_to_content(lmgr, lmgr->focused);
- if (!r)
- _ERR("failed to focus to content");
- return r;
+ if (!lmgr) {
+ _ERR("failed to get listmgr");
+ return false;
+ }
+
+ if (!id) {
+ _ERR("invalid argument");
+ return false;
}
item = elm_box_children_get(lmgr->box);
- if (lmgr->show_play_info)
- item = eina_list_next(item);
grid = NULL;
+ it = NULL;
EINA_LIST_FOREACH(item, l, ly) {
grid = elm_object_part_content_get(ly, PART_ITEM_CONTENT);
if (!grid) {
return false;
}
- count = elm_gengrid_items_count(grid);
-
- if (index < count)
+ it = _get_grid_item(grid, id);
+ if (it)
break;
-
- index -= count;
}
- it = elm_gengrid_first_item_get(grid);
- while (index--)
- it = elm_gengrid_item_next_get(it);
-
if (!it) {
_ERR("failed to get current grid item");
return false;