2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <media_filter.h>
19 #include <media_info.h>
20 #include <media_info_private.h>
21 #include <media_util_private.h>
23 static void __media_playlist_item_free(gpointer item)
25 media_playlist_item_s *_item = (media_playlist_item_s *)item;
27 g_free(_item->media_id);
28 g_free(_item->playlist_name);
29 g_free(_item->thumbnail_path);
33 static void __media_playlist_item_release(media_playlist_s *playlist)
35 if (!playlist || !playlist->item_list)
38 g_list_free_full(playlist->item_list, __media_playlist_item_free);
39 playlist->item_list = NULL;
42 static int __media_playlist_insert_playlist_record(const char *playlist_name, int *playlist_id)
44 int ret = MEDIA_CONTENT_ERROR_NONE;
46 sqlite3_stmt *stmt = NULL;
48 query = sqlite3_mprintf(INSERT_PLAYLIST_TO_PLAYLIST, playlist_name);
50 ret = _content_query_sql(query);
51 SQLITE3_SAFE_FREE(query);
52 content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
54 query = sqlite3_mprintf(SELECT_PLAYLIST_ID_FROM_PLAYLIST, playlist_name);
56 ret = _content_get_result(query, &stmt);
57 SQLITE3_SAFE_FREE(query);
58 content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
60 if (sqlite3_step(stmt) == SQLITE_ROW)
61 *playlist_id = sqlite3_column_int(stmt, 0);
63 SQLITE3_FINALIZE(stmt);
65 return MEDIA_CONTENT_ERROR_NONE;
68 static int __media_playlist_insert_item_to_playlist(int playlist_id, const char *media_id)
70 int ret = MEDIA_CONTENT_ERROR_NONE;
71 sqlite3_stmt *stmt = NULL;
75 query = sqlite3_mprintf(SELECT_MAX_PLAY_ORDER_FROM_PLAYLIST_VIEW, playlist_id);
77 /* get the max play_order */
78 ret = _content_get_result(query, &stmt);
79 SQLITE3_SAFE_FREE(query);
80 content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
82 if (sqlite3_step(stmt) == SQLITE_ROW)
83 play_order = sqlite3_column_int(stmt, 0);
85 SQLITE3_FINALIZE(stmt);
87 query = sqlite3_mprintf(INSERT_PLAYLIST_ITEM_TO_PLAYLIST_MAP, playlist_id, media_id, ++play_order);
88 ret = media_svc_append_query(query, _content_get_uid());
90 return _content_error_capi(ret);
93 static int __media_playlist_remove_item_from_playlist(int playlist_id, int playlist_member_id)
95 int ret = MEDIA_CONTENT_ERROR_NONE;
96 char *query_str = NULL;
98 query_str = sqlite3_mprintf(REMOVE_PLAYLIST_ITEM_FROM_PLAYLIST_MAP, playlist_id, playlist_member_id);
99 ret = media_svc_append_query(query_str, _content_get_uid());
101 return _content_error_capi(ret);
104 static int __media_playlist_update_playlist_name(int playlist_id, const char *playlist_name)
106 int ret = MEDIA_CONTENT_ERROR_NONE;
107 char *query_str = NULL;
109 query_str = sqlite3_mprintf(UPDATE_PLAYLIST_NAME_FROM_PLAYLIST, playlist_name, playlist_id);
110 ret = media_svc_append_query(query_str, _content_get_uid());
112 return _content_error_capi(ret);
115 static int __media_playlist_update_thumbnail_path(int playlist_id, const char *path)
117 int ret = MEDIA_CONTENT_ERROR_NONE;
118 char *query_str = NULL;
120 query_str = sqlite3_mprintf(UPDATE_PLAYLIST_THUMBNAIL_FROM_PLAYLIST, path, playlist_id);
121 ret = media_svc_append_query(query_str, _content_get_uid());
123 return _content_error_capi(ret);
126 static int __media_playlist_update_play_order(int playlist_id, int playlist_member_id, int play_order)
128 int ret = MEDIA_CONTENT_ERROR_NONE;
129 char *query_str = NULL;
131 query_str = sqlite3_mprintf(UPDATE_PLAYLIST_ORDER_FROM_PLAYLIST_MAP, play_order, playlist_id, playlist_member_id);
132 ret = media_svc_append_query(query_str, _content_get_uid());
134 return _content_error_capi(ret);
137 static bool __media_playlist_member_cb(int playlist_member_id, media_info_h media, void *user_data)
139 int ret = MEDIA_CONTENT_ERROR_NONE;
140 GList **list = (GList**)user_data;
143 ret = media_info_get_file_path(media, &path);
144 content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, FALSE, "media_info_get_file_path fail");
146 *list = g_list_append(*list, path);
151 static int __media_playlist_reset_file(const char *playlist_path)
155 fp = fopen(playlist_path, "wb");
157 content_stderror("fopen failed");
158 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
161 fputs("", fp); /* remove previous playlist */
165 return MEDIA_CONTENT_ERROR_NONE;
168 static int __media_playlist_append_to_file(const char *playlist_path, const char *path)
172 fp = fopen(playlist_path, "a"); /* append only */
174 content_stderror("fopen failed");
175 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
184 return MEDIA_CONTENT_ERROR_NONE;
187 static int __media_playlist_import_item_from_file(const char *playlist_path, GSList **item_list)
190 char tmp_str[MAX_PATH_LEN] = {0, };
193 fp = fopen(playlist_path, "rb");
195 content_stderror("fopen failed");
196 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
199 while (fgets(tmp_str, MAX_PATH_LEN, fp) != NULL) {
200 tmp_str_len = strlen(tmp_str);
201 /* Check for empty file */
202 if (tmp_str_len <= 1)
205 if (tmp_str[0] == '#')
209 if (tmp_str[tmp_str_len - 1] == '\n')
210 tmp_str[tmp_str_len - 1] = '\0';
212 *item_list = g_slist_append(*item_list, g_strdup(tmp_str));
217 return MEDIA_CONTENT_ERROR_NONE;
220 int media_playlist_insert_to_db(const char *name, media_playlist_h *playlist)
222 int ret = MEDIA_CONTENT_ERROR_NONE;
225 content_retip_if_fail(STRING_VALID(name));
226 content_retip_if_fail(playlist);
228 media_playlist_s *_playlist = g_new0(media_playlist_s, 1);
230 ret = __media_playlist_insert_playlist_record(name, &playlist_id);
231 if (ret != MEDIA_CONTENT_ERROR_NONE) {
236 _playlist->playlist_id = playlist_id;
237 _playlist->name = g_strdup(name);
239 *playlist = (media_playlist_h)_playlist;
244 int media_playlist_delete_from_db(int playlist_id)
246 int ret = MEDIA_CONTENT_ERROR_NONE;
247 char *query_str = NULL;
249 content_retipm_if_fail(playlist_id >= 0, "%d", playlist_id);
251 query_str = sqlite3_mprintf(DELETE_PLAYLIST_FROM_PLAYLIST, playlist_id);
253 ret = _content_query_sql(query_str);
254 SQLITE3_SAFE_FREE(query_str);
259 int media_playlist_get_playlist_count_from_db(filter_h filter, int *playlist_count)
261 content_retip_if_fail(playlist_count);
263 return _media_db_get_group_count(filter, MEDIA_GROUP_PLAYLIST, playlist_count);
266 int media_playlist_foreach_playlist_from_db(filter_h filter, media_playlist_cb callback, void *user_data)
268 content_retip_if_fail(callback);
270 return _media_db_get_playlist(filter, callback, user_data);
273 int media_playlist_get_media_count_from_db(int playlist_id, filter_h filter, int *media_count)
275 content_retip_if_fail(media_count);
276 content_retipm_if_fail(playlist_id > 0, "%d", playlist_id);
278 return _media_db_get_group_item_count_by_id(playlist_id, filter, MEDIA_GROUP_PLAYLIST, media_count);
281 int media_playlist_foreach_media_from_db(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
283 content_retip_if_fail(callback);
284 content_retipm_if_fail(playlist_id > 0, "%d", playlist_id);
286 return _media_db_get_playlist_item(playlist_id, filter, callback, user_data);
289 int media_playlist_destroy(media_playlist_h playlist)
291 media_playlist_s *_playlist = (media_playlist_s *)playlist;
293 content_retip_if_fail(playlist);
295 __media_playlist_item_release(_playlist);
297 g_free(_playlist->name);
298 g_free(_playlist->thumbnail_path);
301 return MEDIA_CONTENT_ERROR_NONE;
304 int media_playlist_clone(media_playlist_h *dst, media_playlist_h src)
306 media_playlist_s *_src = (media_playlist_s *)src;
308 content_retip_if_fail(dst);
309 content_retip_if_fail(src);
311 media_playlist_s *_dst = g_new0(media_playlist_s, 1);
313 _dst->playlist_id = _src->playlist_id;
314 _dst->name = g_strdup(_src->name);
316 *dst = (media_playlist_h)_dst;
318 return MEDIA_CONTENT_ERROR_NONE;
321 int media_playlist_get_playlist_from_db(int playlist_id, media_playlist_h *playlist)
323 int ret = MEDIA_CONTENT_ERROR_NONE;
324 sqlite3_stmt *stmt = NULL;
327 content_retipm_if_fail(playlist_id > 0, "%d", playlist_id);
328 content_retip_if_fail(playlist);
330 query = sqlite3_mprintf(SELECT_PLAYLIST_FROM_PLAYLIST, playlist_id);
332 ret = _content_get_result(query, &stmt);
333 SQLITE3_SAFE_FREE(query);
334 content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
336 media_playlist_s *_playlist = NULL;
338 if (sqlite3_step(stmt) == SQLITE_ROW) {
339 _playlist = g_new0(media_playlist_s, 1);
341 _playlist->playlist_id = playlist_id;
342 _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
343 _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
345 *playlist = (media_playlist_h)_playlist;
347 content_error("Nonexistent playlist id[%d]", playlist_id);
348 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
351 SQLITE3_FINALIZE(stmt);
356 int media_playlist_get_playlist_id(media_playlist_h playlist, int *playlist_id)
358 media_playlist_s *_playlist = (media_playlist_s *)playlist;
360 content_retip_if_fail(playlist);
361 content_retip_if_fail(playlist_id);
363 *playlist_id = _playlist->playlist_id;
365 return MEDIA_CONTENT_ERROR_NONE;
368 int media_playlist_get_name(media_playlist_h playlist, char **name)
370 media_playlist_s *_playlist = (media_playlist_s *)playlist;
372 content_retip_if_fail(playlist);
373 content_retip_if_fail(name);
375 *name = g_strdup(_playlist->name);
377 return MEDIA_CONTENT_ERROR_NONE;
380 int media_playlist_get_thumbnail_path(media_playlist_h playlist, char **path)
382 media_playlist_s *_playlist = (media_playlist_s *)playlist;
384 content_retip_if_fail(playlist);
385 content_retip_if_fail(path);
387 *path = g_strdup(_playlist->thumbnail_path);
389 return MEDIA_CONTENT_ERROR_NONE;
392 int media_playlist_get_play_order(media_playlist_h playlist, int playlist_member_id, int *play_order)
394 int ret = MEDIA_CONTENT_ERROR_NONE;
395 media_playlist_s *_playlist = (media_playlist_s *)playlist;
396 sqlite3_stmt *stmt = NULL;
399 content_retip_if_fail(playlist);
400 content_retipm_if_fail(playlist_member_id >= 0, "%d", playlist_member_id);
401 content_retip_if_fail(play_order);
403 query = sqlite3_mprintf(SELECT_PLAY_ORDER_FROM_PLAYLIST_VIEW, _playlist->playlist_id, playlist_member_id);
404 ret = _content_get_result(query, &stmt);
405 SQLITE3_SAFE_FREE(query);
406 content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
408 if (sqlite3_step(stmt) == SQLITE_ROW)
409 *play_order = sqlite3_column_int(stmt, 0);
411 SQLITE3_FINALIZE(stmt);
416 int media_playlist_set_name(media_playlist_h playlist, const char *playlist_name)
418 media_playlist_s *_playlist = (media_playlist_s *)playlist;
419 media_playlist_item_s *item = NULL;
421 content_retip_if_fail(playlist);
422 content_retip_if_fail(STRING_VALID(playlist_name));
424 g_free(_playlist->name);
426 item = g_new0(media_playlist_item_s, 1);
428 item->playlist_name = g_strdup(playlist_name);
429 item->function = MEDIA_PLAYLIST_UPDATE_PLAYLIST_NAME;
431 _playlist->name = g_strdup(playlist_name);
432 _playlist->item_list = g_list_append(_playlist->item_list, item);
434 return MEDIA_CONTENT_ERROR_NONE;
437 int media_playlist_set_thumbnail_path(media_playlist_h playlist, const char *path)
439 media_playlist_s *_playlist = (media_playlist_s *)playlist;
440 media_playlist_item_s *item = NULL;
442 content_retip_if_fail(playlist);
443 content_retip_if_fail(STRING_VALID(path));
445 g_free(_playlist->thumbnail_path);
447 item = g_new0(media_playlist_item_s, 1);
449 item->thumbnail_path = g_strdup(path);
450 item->function = MEDIA_PLAYLIST_UPDATE_THUMBNAIL_PATH;
452 _playlist->thumbnail_path = g_strdup(path);
453 _playlist->item_list = g_list_append(_playlist->item_list, item);
455 return MEDIA_CONTENT_ERROR_NONE;
458 int media_playlist_set_play_order(media_playlist_h playlist, int playlist_member_id, int play_order)
460 media_playlist_s *_playlist = (media_playlist_s *)playlist;
461 media_playlist_item_s *item = NULL;
463 content_retip_if_fail(playlist);
464 content_retipm_if_fail(playlist_member_id > 0, "%d", playlist_member_id);
465 content_retipm_if_fail(play_order >= 0, "%d", play_order);
467 item = g_new0(media_playlist_item_s, 1);
469 item->playlist_member_id = playlist_member_id;
470 item->function = MEDIA_PLAYLIST_UPDATE_PLAY_ORDER;
471 item->play_order = play_order;
473 _playlist->item_list = g_list_append(_playlist->item_list, item);
475 return MEDIA_CONTENT_ERROR_NONE;
478 int media_playlist_add_media(media_playlist_h playlist, const char *media_id)
480 media_playlist_s *_playlist = (media_playlist_s *)playlist;
481 media_playlist_item_s *item = NULL;
483 content_retip_if_fail(playlist);
484 content_retip_if_fail(STRING_VALID(media_id));
486 item = g_new0(media_playlist_item_s, 1);
488 item->media_id = g_strdup(media_id);
489 item->function = MEDIA_PLAYLIST_ADD;
491 _playlist->item_list = g_list_append(_playlist->item_list, item);
493 return MEDIA_CONTENT_ERROR_NONE;
496 int media_playlist_remove_media(media_playlist_h playlist, int playlist_member_id)
498 media_playlist_s *_playlist = (media_playlist_s *)playlist;
499 media_playlist_item_s *item = NULL;
501 content_retip_if_fail(playlist);
502 content_retipm_if_fail(playlist_member_id > 0, "%d", playlist_member_id);
504 item = g_new0(media_playlist_item_s, 1);
506 item->playlist_member_id = playlist_member_id;
507 item->function = MEDIA_PLAYLIST_REMOVE;
509 _playlist->item_list = g_list_append(_playlist->item_list, item);
511 return MEDIA_CONTENT_ERROR_NONE;
514 void __media_playlist_foreach_request(gpointer data, gpointer user_data)
516 int ret = MEDIA_CONTENT_ERROR_NONE;
517 media_playlist_item_s *_playlist_item = (media_playlist_item_s *)data;
518 int playlist_id = *((int *)user_data);
523 switch (_playlist_item->function) {
524 case MEDIA_PLAYLIST_ADD:
525 ret = __media_playlist_insert_item_to_playlist(playlist_id, _playlist_item->media_id);
528 case MEDIA_PLAYLIST_REMOVE:
529 ret = __media_playlist_remove_item_from_playlist(playlist_id, _playlist_item->playlist_member_id);
532 case MEDIA_PLAYLIST_UPDATE_PLAYLIST_NAME:
533 ret = __media_playlist_update_playlist_name(playlist_id, _playlist_item->playlist_name);
536 case MEDIA_PLAYLIST_UPDATE_THUMBNAIL_PATH:
537 ret = __media_playlist_update_thumbnail_path(playlist_id, _playlist_item->thumbnail_path);
540 case MEDIA_PLAYLIST_UPDATE_PLAY_ORDER:
541 ret = __media_playlist_update_play_order(playlist_id, _playlist_item->playlist_member_id, _playlist_item->play_order);
548 if (ret != MEDIA_CONTENT_ERROR_NONE)
549 content_error("Failed some operation[%d]", _playlist_item->function);
552 int media_playlist_update_to_db(media_playlist_h playlist)
554 int ret = MEDIA_CONTENT_ERROR_NONE;
555 media_playlist_s *_playlist = (media_playlist_s *)playlist;
557 content_retip_if_fail(playlist);
558 content_retvm_if(!_playlist->item_list, MEDIA_CONTENT_ERROR_NONE, "operation list length is 0");
560 g_list_foreach(_playlist->item_list, __media_playlist_foreach_request, &(_playlist->playlist_id));
562 ret = media_svc_send_query(_content_get_uid());
564 __media_playlist_item_release(_playlist);
566 return _content_error_capi(ret);
569 static int __media_playlist_get_media_id_by_path(const char *path, char **media_id)
571 int ret = MEDIA_CONTENT_ERROR_NONE;
573 sqlite3_stmt *stmt = NULL;
575 content_retip_if_fail(path);
576 content_retip_if_fail(media_id);
578 #ifdef _USE_TVPD_MODE
579 query = sqlite3_mprintf("SELECT media_id FROM '%q' WHERE media_path='%q'", DB_VIEW_MEDIA, path);
581 query = sqlite3_mprintf("SELECT media_id FROM '%q' WHERE media_path='%q'", DB_TABLE_MEDIA, path);
583 ret = _content_get_result(query, &stmt);
584 SQLITE3_SAFE_FREE(query);
585 content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "Failed to get media_id");
587 if (sqlite3_step(stmt) == SQLITE_ROW)
588 *media_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
590 SQLITE3_FINALIZE(stmt);
595 static void __media_playlist_foreach_item(gpointer item, gpointer user_data)
597 int ret = MEDIA_CONTENT_ERROR_NONE;
598 char *path = (char *)item;
599 media_playlist_h *playlist = (media_playlist_h *)user_data;
600 char *media_id = NULL;
602 ret = __media_playlist_get_media_id_by_path(path, &media_id);
603 if (ret != MEDIA_CONTENT_ERROR_NONE) {
604 content_sec_error("Fail to get media_id [%s]", path);
608 ret = media_playlist_add_media(*playlist, media_id);
610 if (ret != MEDIA_CONTENT_ERROR_NONE) {
611 content_sec_error("Fail to add media [%s]", path);
616 int media_playlist_import_from_file(const char *path, const char *playlist_name, media_playlist_h *playlist)
618 int ret = MEDIA_CONTENT_ERROR_NONE;
619 GSList *item_list = NULL;
621 content_retip_if_fail(STRING_VALID(path));
622 content_retip_if_fail(STRING_VALID(playlist_name));
624 ret = media_playlist_insert_to_db(playlist_name, playlist);
625 content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_playlist_insert_to_db fail");
627 ret = __media_playlist_import_item_from_file(path, &item_list);
628 content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "Fail to get playlist from file");
630 g_slist_foreach(item_list, __media_playlist_foreach_item, playlist);
632 ret = media_playlist_update_to_db(*playlist);
633 g_slist_free_full(item_list, g_free);
638 int media_playlist_export_to_file(media_playlist_h playlist, const char *path)
640 int ret = MEDIA_CONTENT_ERROR_NONE;
641 media_playlist_s *_playlist = (media_playlist_s *)playlist;
642 GList *item_list = NULL;
646 content_retip_if_fail(STRING_VALID(path));
647 content_retip_if_fail(playlist);
648 content_retipm_if_fail(_playlist->playlist_id > 0, "%d", _playlist->playlist_id);
650 ret = _media_db_get_playlist_item(_playlist->playlist_id, NULL, __media_playlist_member_cb, &item_list);
651 content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "_media_db_get_playlist_item fail");
653 ret = __media_playlist_reset_file(path);
654 if (ret != MEDIA_CONTENT_ERROR_NONE) {
655 content_error("Fail to init playlist file");
659 for (iter = item_list; iter; iter = g_list_next(iter)) {
660 item = (char *)iter->data;
661 if (!STRING_VALID(item))
664 ret = __media_playlist_append_to_file(path, item);
665 if (ret != MEDIA_CONTENT_ERROR_NONE) {
666 content_error("Fail to export paths into file");
672 g_list_free_full(item_list, g_free);
677 int media_playlist_create(media_playlist_h *playlist)
679 content_retip_if_fail(playlist);
681 media_playlist_s *_playlist = g_new0(media_playlist_s, 1);
683 _playlist->playlist_id = -1;
684 _playlist->name = NULL;
685 _playlist->thumbnail_path = NULL;
686 _playlist->item_list = NULL;
688 *playlist = (media_playlist_h)_playlist;
690 return MEDIA_CONTENT_ERROR_NONE;
693 int media_playlist_get_play_order_v2(int playlist_id, int playlist_member_id, int *play_order)
695 int ret = MEDIA_CONTENT_ERROR_NONE;
696 sqlite3_stmt *stmt = NULL;
699 content_retipm_if_fail(playlist_id >= 0, "%d", playlist_id);
700 content_retipm_if_fail(playlist_member_id >= 0, "%d", playlist_member_id);
701 content_retip_if_fail(play_order);
703 query = sqlite3_mprintf(SELECT_PLAY_ORDER_FROM_PLAYLIST_VIEW, playlist_id, playlist_member_id);
705 ret = _content_get_result(query, &stmt);
706 SQLITE3_SAFE_FREE(query);
707 content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
709 if (sqlite3_step(stmt) == SQLITE_ROW)
710 *play_order = sqlite3_column_int(stmt, 0);
712 SQLITE3_FINALIZE(stmt);
717 int media_playlist_insert_to_db_v2(media_playlist_h playlist)
719 int ret = MEDIA_CONTENT_ERROR_NONE;
720 media_playlist_s *_playlist = (media_playlist_s *)playlist;
723 content_retip_if_fail(playlist);
724 content_retipm_if_fail(_playlist->playlist_id == -1, "%d", _playlist->playlist_id);
726 ret = __media_playlist_insert_playlist_record(_playlist->name, &playlist_id);
727 if (ret != MEDIA_CONTENT_ERROR_NONE) {
728 __media_playlist_item_release(_playlist);
729 content_error("Insert playlist Fail");
733 _playlist->playlist_id = playlist_id;
735 return media_playlist_update_to_db(playlist);
738 int media_playlist_update_to_db_v2(int playlist_id, media_playlist_h playlist)
740 media_playlist_s *_playlist = (media_playlist_s *)playlist;
741 content_retip_if_fail(playlist);
743 _playlist->playlist_id = playlist_id;
745 return media_playlist_update_to_db(playlist);