}
}
+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;
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);
}
eina_list_free(priv->playlist.list);
+ _playlist_destroy(priv->playlist.list_org);
_list_free(priv);
inputmgr_remove_callback(priv->list, &_list_handler);