diff options
author | Minkyu Kang <mk7.kang@samsung.com> | 2016-01-06 02:45:24 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@review.vlan103.tizen.org> | 2016-01-06 02:45:24 -0800 |
commit | 3b005c07b970a92f2aa099c747063867c0174332 (patch) | |
tree | 02893cfd78ca8b7c1f405642e00807a18e9dbd8b | |
parent | 6f00dfab339a5dfbfb548e87ac62126c6803a1c9 (diff) | |
parent | 90c163050492c8385269f503eebf4cc58a4f1c76 (diff) | |
download | air_mediahub-3b005c07b970a92f2aa099c747063867c0174332.tar.gz air_mediahub-3b005c07b970a92f2aa099c747063867c0174332.tar.bz2 air_mediahub-3b005c07b970a92f2aa099c747063867c0174332.zip |
Merge "mplayer: clone the playlist" into tizensubmit/tizen/20160106.104556accepted/tizen/tv/20160106.122525
-rw-r--r-- | src/view/mplayer.c | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/src/view/mplayer.c b/src/view/mplayer.c index 754da9f..ab5ad4c 100644 --- a/src/view/mplayer.c +++ b/src/view/mplayer.c @@ -257,6 +257,33 @@ static void _playlist_set_repeat_mode(struct _priv *priv) } } +static void _playlist_clone(Eina_List *src, Eina_List **dst) +{ + Eina_List *l; + media_info_h media; + app_media *am; + app_media *am2; + + EINA_LIST_FOREACH(src, l, am) { + media = app_media_get_media_handle(am); + am2 = app_media_create(media); + if (!am2) { + _ERR("failed to create app media"); + return; + } + + *dst = eina_list_append(*dst, am2); + } +} + +static void _playlist_destroy(Eina_List *list) +{ + app_media *am; + + EINA_LIST_FREE(list, am) + app_media_destroy(am); +} + static void _update_info(struct _priv *priv, app_media_info *mi) { struct view_update_data vdata; @@ -1114,18 +1141,18 @@ static void _update(void *view_data, int update_type, void *data) switch (update_type) { case UPDATE_CONTENT: - if (priv->playlist.list_org != vdata->list) { - priv->playlist.list_org = vdata->list; - priv->playlist.list = eina_list_clone(vdata->list); - - _playlist_set_list(priv, - priv->playlist.shuffle, vdata->index); - } else { - priv->playlist.cur = _playlist_get_index( - priv->playlist.list, - vdata->list, vdata->index); + if (priv->playlist.list_org) { + _player_stop(priv); + _playlist_destroy(priv->playlist.list_org); + priv->playlist.list_org = NULL; } + _playlist_clone(vdata->list, &priv->playlist.list_org); + priv->playlist.list = eina_list_clone(priv->playlist.list_org); + + _playlist_set_list(priv, + priv->playlist.shuffle, vdata->index); + priv->prev_view = vdata->id; _add_playlist_item(priv); @@ -1177,6 +1204,7 @@ static void _destroy(void *view_data) } eina_list_free(priv->playlist.list); + _playlist_destroy(priv->playlist.list_org); _list_free(priv); inputmgr_remove_callback(priv->list, &_list_handler); |