int mc_db_get_ability_supported(void *handle, const char *server_name, mc_ability_e ability, mc_ability_support_e *supported);
int mc_db_get_pb_action_ability(void *handle, const char *server_name, mc_playback_ability_h *ability);
int mc_db_get_foreach_playlist(void *handle, const char *server_name, mc_playlist_cb callback, void *user_data);
+int mc_db_get_playlist_by_name(void *handle, mc_priv_type_e type, const char *controller_name, const char *playlist_name, mc_playlist_h *playlist);
int mc_db_get_playlist_item(void *handle, const char *server_name, char *playlist_name, mc_playlist_item_cb callback, void *user_data);
int mc_db_insert_server_address_into_server_list(void *db_handle, const char *address);
int mc_db_delete_server_address_from_server_list(void *db_handle, const char *address);
--- /dev/null
+/*
+* Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef __TIZEN_MULTIMEDIA_MEDIA_CONTROLLER_INTERNAL_H__
+#define __TIZEN_MULTIMEDIA_MEDIA_CONTROLLER_INTERNAL_H__
+
+#include <media_controller_type.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @internal
+ * @file media_controller_internal.h
+ */
+
+/*To Support C#*/
+int mc_playlist_create(const char *playlist_name, mc_playlist_h *playlist);
+int mc_playlist_update_item(mc_playlist_h playlist, const char *index, mc_meta_e attribute, const char *value);
+int mc_server_get_playlist(mc_server_h server, const char *playlist_name, mc_playlist_h *playlist);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __TIZEN_MULTIMEDIA_MEDIA_CONTROLLER_INTERNAL_H__ */
#include "media_controller_server.h"
#include "media_controller_client.h"
#include "media_controller_socket.h"
+#include "media_controller_internal.h"
+
#ifdef LOG_TAG
#undef LOG_TAG
} media_controller_client_s;
typedef struct {
+ mc_priv_type_e type; //server or client
char *server_name;
char *playlist_name;
GList *item_list;
int mc_ipc_send_message_to_server(mc_msg_type_e msg_type, mc_priv_type_e priv_type, const char *request_msg);
int mc_ipc_service_connect(mc_priv_type_e type);
+int _mc_playlist_update(mc_priv_type_e type, void *handle, const char *controller_name, mc_playlist_h playlist);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Name: capi-media-controller
Summary: A media controller library in Tizen Native API
-Version: 0.1.69
+Version: 0.1.70
Release: 1
Group: Multimedia/API
License: Apache-2.0
char *sql_str = NULL;
sqlite3_stmt *stmt = NULL;
+ mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+ mc_retvm_if(callback == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "callback is NULL");
+
sql_str = sqlite3_mprintf("SELECT playlist_name from %s WHERE server_name = %Q GROUP BY playlist_name", MC_DB_TABLE_PLAYLIST, server_name);
mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null");
return MEDIA_CONTROLLER_ERROR_NONE;
}
+int mc_db_get_playlist_by_name(void *handle, mc_priv_type_e type, const char *controller_name, const char *playlist_name, mc_playlist_h *playlist)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ sqlite3 *db_handle = (sqlite3 *)handle;
+ char *sql_str = NULL;
+ sqlite3_stmt *stmt = NULL;
+ int count = 0;
+
+ mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ mc_retvm_if(controller_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+ mc_retvm_if(playlist_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "playlist_name is NULL");
+ mc_retvm_if(playlist == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "playlist is NULL");
+
+ sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM '%q' WHERE server_name = %Q AND playlist_name = %Q", MC_DB_TABLE_PLAYLIST, controller_name, playlist_name);
+ mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null");
+
+ ret = sqlite3_prepare_v2(db_handle, sql_str, strlen(sql_str), &stmt, NULL);
+ if (SQLITE_OK != ret) {
+ mc_error("prepare error [%s]", sqlite3_errmsg(db_handle));
+ SQLITE3_SAFE_FREE(sql_str);
+ return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ }
+
+ ret = sqlite3_step(stmt);
+ if (SQLITE_ROW != ret) {
+ mc_error("end of row [%s]", sqlite3_errmsg(db_handle));
+ SQLITE3_FINALIZE(stmt);
+ SQLITE3_SAFE_FREE(sql_str);
+ return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ }
+
+ count = sqlite3_column_int(stmt, 0);
+
+ if (count > 0) {
+ mc_playlist_s *_playlist = (mc_playlist_s *)calloc(1, sizeof(mc_playlist_s));
+ if (_playlist != NULL) {
+ _playlist->type = type;
+ _playlist->server_name = g_strdup(controller_name);
+ _playlist->playlist_name = g_strdup(playlist_name);
+
+ *playlist = (mc_playlist_h)_playlist;
+
+ ret = MEDIA_CONTROLLER_ERROR_NONE;
+ } else {
+ mc_error("OUT_OF_MEMORY");
+ ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
+ }
+ } else {
+ mc_error("playlist is not exist");
+ ret = MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER;
+ }
+
+ SQLITE3_FINALIZE(stmt);
+ SQLITE3_SAFE_FREE(sql_str);
+
+ return ret;
+}
+
int mc_db_get_playlist_item(void *handle, const char *server_name, char *playlist_name, mc_playlist_item_cb callback, void *user_data)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
int mc_db_check_server_table_exist(void *handle, const char *server_name, bool *exist)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ sqlite3 *db_handle = (sqlite3 *)handle;
char *sql_str = NULL;
sqlite3_stmt *stmt = NULL;
int count = 0;
sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM SQLITE_MASTER WHERE type='table' and name='%q'", server_name);
mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null");
- ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &stmt, NULL);
+ ret = sqlite3_prepare_v2(db_handle, sql_str, strlen(sql_str), &stmt, NULL);
if (SQLITE_OK != ret) {
- mc_error("prepare error [%s]", sqlite3_errmsg(handle));
+ mc_error("prepare error [%s]", sqlite3_errmsg(db_handle));
SQLITE3_SAFE_FREE(sql_str);
return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
}
ret = sqlite3_step(stmt);
if (SQLITE_ROW != ret) {
- mc_error("end of row [%s]", sqlite3_errmsg(handle));
+ mc_error("end of row [%s]", sqlite3_errmsg(db_handle));
SQLITE3_FINALIZE(stmt);
SQLITE3_SAFE_FREE(sql_str);
return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
int mc_db_check_client_table_exist(void *handle, const char *client_name, bool *exist)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ sqlite3 *db_handle = (sqlite3 *)handle;
char *sql_str = NULL;
sqlite3_stmt *stmt = NULL;
int count = 0;
sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM '%q' WHERE client_name='%q'", MC_DB_TABLE_CLIENT_LIST, client_name);
mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null");
- ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &stmt, NULL);
+ ret = sqlite3_prepare_v2(db_handle, sql_str, strlen(sql_str), &stmt, NULL);
if (SQLITE_OK != ret) {
- mc_error("prepare error [%s]", sqlite3_errmsg(handle));
+ mc_error("prepare error [%s]", sqlite3_errmsg(db_handle));
SQLITE3_SAFE_FREE(sql_str);
return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
}
ret = sqlite3_step(stmt);
if (SQLITE_ROW != ret) {
- mc_error("end of row [%s]", sqlite3_errmsg(handle));
+ mc_error("end of row [%s]", sqlite3_errmsg(db_handle));
SQLITE3_FINALIZE(stmt);
SQLITE3_SAFE_FREE(sql_str);
return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
#include "media_controller_private.h"
#include "media_controller_db.h"
+#define MAX_PLAYLIST_LEN 100
+
+int mc_playlist_create(const char *playlist_name, mc_playlist_h *playlist)
+{
+ mc_retvm_if(!MC_STRING_VALID(playlist_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist_name");
+ mc_retvm_if(playlist == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist");
+
+ mc_playlist_s *_playlist = (mc_playlist_s*)calloc(1, sizeof(mc_playlist_s));
+ mc_retvm_if(_playlist == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+
+ _playlist->playlist_name = g_strdup(playlist_name);
+
+ *playlist = (mc_playlist_h)_playlist;
+
+ return MEDIA_CONTROLLER_ERROR_NONE;
+}
+
+static int __mc_playlist_item_release(mc_playlist_item_s *playlist_item)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+
+ mc_retvm_if(playlist_item == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist_item");
+
+ MC_SAFE_FREE(playlist_item->index);
+ MC_SAFE_FREE(playlist_item->title);
+ MC_SAFE_FREE(playlist_item->artist);
+ MC_SAFE_FREE(playlist_item->album);
+ MC_SAFE_FREE(playlist_item->author);
+ MC_SAFE_FREE(playlist_item->genre);
+ MC_SAFE_FREE(playlist_item->duration);
+ MC_SAFE_FREE(playlist_item->date);
+ MC_SAFE_FREE(playlist_item->copyright);
+ MC_SAFE_FREE(playlist_item->description);
+ MC_SAFE_FREE(playlist_item->track_num);
+ MC_SAFE_FREE(playlist_item->picture);
+ MC_SAFE_FREE(playlist_item);
+
+ return ret ;
+}
+
+int _mc_playlist_update(mc_priv_type_e type, void *handle, const char *controller_name, mc_playlist_h playlist)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ GList *query_list = NULL;
+ int length = 0;
+ int idx = 0;
+ mc_playlist_s *_playlist = (mc_playlist_s*)playlist;
+
+ mc_retvm_if(_playlist == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist");
+ mc_retvm_if(_playlist->playlist_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist_name");
+
+ _playlist->type = type;
+ _playlist->server_name = g_strdup(controller_name);
+
+ if (_playlist->item_list != NULL) {
+ length = g_list_length(_playlist->item_list);
+
+ for (idx = 0; idx < length; idx++) {
+ mc_playlist_item_s *_item = NULL;
+ _item = (mc_playlist_item_s*)g_list_nth_data(_playlist->item_list, idx);
+
+
+ if (_item != NULL && _item->index != NULL) {
+ char *sql_str = NULL;
+
+ sql_str = sqlite3_mprintf("INSERT INTO '%q' (server_name, playlist_name, item_index, title, artist, album, author, genre, duration, date, copyright, description, track_num, picture) VALUES (%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q);",
+ MC_DB_TABLE_PLAYLIST, _playlist->server_name, _playlist->playlist_name, _item->index, _item->title, _item->artist, _item->album, _item->author, _item->genre, _item->duration, _item->date, _item->copyright, _item->description, _item->track_num, _item->picture);
+
+ if (sql_str != NULL)
+ query_list = g_list_append(query_list, sql_str);
+ else
+ mc_error("wrong playlist query");
+ } else {
+ mc_error("wrong playlist item");
+ }
+ }
+ } else {
+ char *sql_str = NULL;
+
+ sql_str = sqlite3_mprintf("INSERT INTO '%q' (server_name, playlist_name, item_index, title, artist, album, author, genre, duration, date, copyright, description, track_num, picture) VALUES (%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q);",
+ MC_DB_TABLE_PLAYLIST, _playlist->server_name, _playlist->playlist_name, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+
+ if (sql_str != NULL)
+ query_list = g_list_append(query_list, sql_str);
+ else
+ mc_error("wrong playlist query");
+ }
+
+ ret = mc_db_update_playlist(handle, controller_name, _playlist->playlist_name, query_list);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("fail to mc_db_update_playlist");
+ goto RELEASE;
+ }
+
+RELEASE:
+ for (idx = 0; idx < length; idx++) {
+ __mc_playlist_item_release((mc_playlist_item_s*)g_list_nth_data(_playlist->item_list, idx));
+ }
+
+ if (_playlist->item_list != NULL) {
+ g_list_free(_playlist->item_list);
+ _playlist->item_list = NULL;
+ }
+
+ length = g_list_length(query_list);
+
+ for (idx = 0; idx < length; idx++) {
+ char *query_str = g_list_nth_data(query_list, idx);
+ SQLITE3_SAFE_FREE(query_str);
+ }
+
+ g_list_free(query_list);
+
+ return ret;
+}
+
+int mc_playlist_update_item(mc_playlist_h playlist, const char *index, mc_meta_e attribute, const char *value)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ mc_playlist_s *_playlist = (mc_playlist_s*)playlist;
+ mc_playlist_item_s *_playlist_item = NULL;
+ int length = 0;
+ int idx = 0;
+ bool find = FALSE;
+
+ mc_retvm_if(_playlist == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist");
+ mc_retvm_if(!MC_STRING_VALID(index), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid index");
+
+ if (_playlist->item_list != NULL) {
+ length = g_list_length(_playlist->item_list);
+
+ mc_retvm_if((length > MAX_PLAYLIST_LEN), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Exceeding max playlist item [%d]", MAX_PLAYLIST_LEN);
+
+ for (idx = 0; idx < length; idx++) {
+ mc_playlist_item_s *_item = NULL;
+ _item = (mc_playlist_item_s*)g_list_nth_data(_playlist->item_list, idx);
+ if (_item != NULL) {
+ if (g_strcmp0(_item->index, index) == 0) {
+ _playlist_item = _item;
+ find = TRUE;
+
+ }
+ }
+ }
+ }
+
+ if (find == FALSE) {
+ _playlist_item = (mc_playlist_item_s*)calloc(1, sizeof(mc_playlist_item_s));
+ mc_retvm_if(_playlist_item == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "memory alloc fail");
+
+ _playlist_item->index = g_strdup(index);
+ }
+
+ switch (attribute) {
+ case MC_META_MEDIA_TITLE:
+ MC_SAFE_FREE(_playlist_item->title);
+ if (value != NULL)
+ _playlist_item->title = strdup(value);
+ break;
+ case MC_META_MEDIA_ARTIST:
+ MC_SAFE_FREE(_playlist_item->artist);
+ if (value != NULL)
+ _playlist_item->artist = strdup(value);
+ break;
+ case MC_META_MEDIA_ALBUM:
+ MC_SAFE_FREE(_playlist_item->album);
+ if (value != NULL)
+ _playlist_item->album = strdup(value);
+ break;
+ case MC_META_MEDIA_AUTHOR:
+ MC_SAFE_FREE(_playlist_item->author);
+ if (value != NULL)
+ _playlist_item->author = strdup(value);
+ break;
+ case MC_META_MEDIA_GENRE:
+ MC_SAFE_FREE(_playlist_item->genre);
+ if (value != NULL)
+ _playlist_item->genre = strdup(value);
+ break;
+ case MC_META_MEDIA_DURATION:
+ MC_SAFE_FREE(_playlist_item->duration);
+ if (value != NULL)
+ _playlist_item->duration = strdup(value);
+ break;
+ case MC_META_MEDIA_DATE:
+ MC_SAFE_FREE(_playlist_item->date);
+ if (value != NULL)
+ _playlist_item->date = strdup(value);
+ break;
+ case MC_META_MEDIA_COPYRIGHT:
+ MC_SAFE_FREE(_playlist_item->copyright);
+ if (value != NULL)
+ _playlist_item->copyright = strdup(value);
+ break;
+ case MC_META_MEDIA_DESCRIPTION:
+ MC_SAFE_FREE(_playlist_item->description);
+ if (value != NULL)
+ _playlist_item->description = strdup(value);
+ break;
+ case MC_META_MEDIA_TRACK_NUM:
+ MC_SAFE_FREE(_playlist_item->track_num);
+ if (value != NULL)
+ _playlist_item->track_num = strdup(value);
+ break;
+ case MC_META_MEDIA_PICTURE:
+ MC_SAFE_FREE(_playlist_item->picture);
+ if (value != NULL)
+ _playlist_item->picture = strdup(value);
+ break;
+ default:
+ mc_error("Invalid Parameter [%d]", attribute);
+
+ if (find == FALSE)
+ __mc_playlist_item_release(_playlist_item);
+
+ return MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER;
+ }
+
+ if (find == FALSE)
+ _playlist->item_list = g_list_append(_playlist->item_list, _playlist_item);
+
+ return ret;
+}
+
int mc_playlist_get_name(mc_playlist_h playlist, char **playlist_name)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
int mc_server_create_playlist(mc_server_h server, const char *playlist_name, mc_playlist_h *playlist)
{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
media_controller_server_s *mc_server = (media_controller_server_s *)server;
mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid server");
- mc_retvm_if(!MC_STRING_VALID(playlist_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist_name");
- mc_retvm_if(playlist == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist");
-
- mc_playlist_s *_playlist = (mc_playlist_s*)calloc(1, sizeof(mc_playlist_s));
- mc_retvm_if(_playlist == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
- _playlist->server_name = g_strdup(mc_server->server_name);
- _playlist->playlist_name = g_strdup(playlist_name);
-
- *playlist = (mc_playlist_h)_playlist;
-
- return ret;
-}
-
-static int __mc_server_playlist_item_release(mc_playlist_item_s *playlist_item)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
-
- mc_retvm_if(playlist_item == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist_item");
-
- MC_SAFE_FREE(playlist_item->index);
- MC_SAFE_FREE(playlist_item->title);
- MC_SAFE_FREE(playlist_item->artist);
- MC_SAFE_FREE(playlist_item->album);
- MC_SAFE_FREE(playlist_item->author);
- MC_SAFE_FREE(playlist_item->genre);
- MC_SAFE_FREE(playlist_item->duration);
- MC_SAFE_FREE(playlist_item->date);
- MC_SAFE_FREE(playlist_item->copyright);
- MC_SAFE_FREE(playlist_item->description);
- MC_SAFE_FREE(playlist_item->track_num);
- MC_SAFE_FREE(playlist_item->picture);
- MC_SAFE_FREE(playlist_item->picture);
- MC_SAFE_FREE(playlist_item);
-
- return ret ;
-}
-
-int __mc_server_append_item(mc_playlist_h playlist, const char *index, mc_meta_e attribute, const char *value)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- mc_playlist_s *_playlist = (mc_playlist_s*)playlist;
- mc_playlist_item_s *_playlist_item = NULL;
- int length = 0;
- int idx = 0;
- bool find = FALSE;
-
- mc_retvm_if(_playlist == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist");
- mc_retvm_if(!MC_STRING_VALID(index), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid index");
-
- if (_playlist->item_list != NULL) {
- length = g_list_length(_playlist->item_list);
-
- mc_retvm_if((length > MAX_PLAYLIST_LEN), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Exceeding max playlist item [%d]", MAX_PLAYLIST_LEN);
-
- for (idx = 0; idx < length; idx++) {
- mc_playlist_item_s *_item = NULL;
- _item = (mc_playlist_item_s*)g_list_nth_data(_playlist->item_list, idx);
- if (_item != NULL) {
- if (g_strcmp0(_item->index, index) == 0) {
- _playlist_item = _item;
- find = TRUE;
-
- }
- }
- }
- }
-
- if (find == FALSE) {
- _playlist_item = (mc_playlist_item_s*)calloc(1, sizeof(mc_playlist_item_s));
- mc_retvm_if(_playlist_item == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "memory alloc fail");
-
- _playlist_item->index = g_strdup(index);
- }
-
- switch (attribute) {
- case MC_META_MEDIA_TITLE:
- MC_SAFE_FREE(_playlist_item->title);
- if (value != NULL)
- _playlist_item->title = strdup(value);
- break;
- case MC_META_MEDIA_ARTIST:
- MC_SAFE_FREE(_playlist_item->artist);
- if (value != NULL)
- _playlist_item->artist = strdup(value);
- break;
- case MC_META_MEDIA_ALBUM:
- MC_SAFE_FREE(_playlist_item->album);
- if (value != NULL)
- _playlist_item->album = strdup(value);
- break;
- case MC_META_MEDIA_AUTHOR:
- MC_SAFE_FREE(_playlist_item->author);
- if (value != NULL)
- _playlist_item->author = strdup(value);
- break;
- case MC_META_MEDIA_GENRE:
- MC_SAFE_FREE(_playlist_item->genre);
- if (value != NULL)
- _playlist_item->genre = strdup(value);
- break;
- case MC_META_MEDIA_DURATION:
- MC_SAFE_FREE(_playlist_item->duration);
- if (value != NULL)
- _playlist_item->duration = strdup(value);
- break;
- case MC_META_MEDIA_DATE:
- MC_SAFE_FREE(_playlist_item->date);
- if (value != NULL)
- _playlist_item->date = strdup(value);
- break;
- case MC_META_MEDIA_COPYRIGHT:
- MC_SAFE_FREE(_playlist_item->copyright);
- if (value != NULL)
- _playlist_item->copyright = strdup(value);
- break;
- case MC_META_MEDIA_DESCRIPTION:
- MC_SAFE_FREE(_playlist_item->description);
- if (value != NULL)
- _playlist_item->description = strdup(value);
- break;
- case MC_META_MEDIA_TRACK_NUM:
- MC_SAFE_FREE(_playlist_item->track_num);
- if (value != NULL)
- _playlist_item->track_num = strdup(value);
- break;
- case MC_META_MEDIA_PICTURE:
- MC_SAFE_FREE(_playlist_item->picture);
- if (value != NULL)
- _playlist_item->picture = strdup(value);
- break;
- default:
- mc_error("Invalid Parameter [%d]", attribute);
-
- if (find == FALSE)
- __mc_server_playlist_item_release(_playlist_item);
-
- return MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER;
- }
-
- if (find == FALSE)
- _playlist->item_list = g_list_append(_playlist->item_list, _playlist_item);
-
- return ret;
+ return mc_playlist_create(playlist_name, playlist);
}
int mc_server_add_item_to_playlist(mc_server_h server, mc_playlist_h playlist, const char *index, mc_meta_e attribute, const char *value)
{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
media_controller_server_s *mc_server = (media_controller_server_s *)server;
- mc_playlist_s *_playlist = (mc_playlist_s*)playlist;
mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid server");
- mc_retvm_if(_playlist == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist");
- mc_retvm_if(!MC_STRING_VALID(index), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid index");
- ret = __mc_server_append_item(playlist, index, attribute, value);
-
- return ret;
+ return mc_playlist_update_item(playlist, index, attribute, value);
}
int mc_server_update_playlist_done(mc_server_h server, mc_playlist_h playlist)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
- GList *query_list = NULL;
- int length = 0;
- int idx = 0;
media_controller_server_s *mc_server = (media_controller_server_s *)server;
mc_playlist_s *_playlist = (mc_playlist_s*)playlist;
-
- mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid server");
mc_retvm_if(_playlist == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist");
- mc_retvm_if(_playlist->playlist_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist_name");
-
- if (_playlist->item_list != NULL) {
- length = g_list_length(_playlist->item_list);
-
- for (idx = 0; idx < length; idx++) {
- mc_playlist_item_s *_item = NULL;
- _item = (mc_playlist_item_s*)g_list_nth_data(_playlist->item_list, idx);
-
-
- if (_item != NULL && _item->index != NULL) {
- char *sql_str = NULL;
-
- sql_str = sqlite3_mprintf("INSERT INTO '%q' (server_name, playlist_name, item_index, title, artist, album, author, genre, duration, date, copyright, description, track_num, picture) VALUES (%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q);",
- MC_DB_TABLE_PLAYLIST, _playlist->server_name, _playlist->playlist_name, _item->index, _item->title, _item->artist, _item->album, _item->author, _item->genre, _item->duration, _item->date, _item->copyright, _item->description, _item->track_num, _item->picture);
-
- if (sql_str != NULL)
- query_list = g_list_append(query_list, sql_str);
- else
- mc_error("wrong playlist query");
- } else {
- mc_error("wrong playlist item");
- }
- }
- } else {
- char *sql_str = NULL;
- sql_str = sqlite3_mprintf("INSERT INTO '%q' (server_name, playlist_name, item_index, title, artist, album, author, genre, duration, date, copyright, description, track_num, picture) VALUES (%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q);",
- MC_DB_TABLE_PLAYLIST, _playlist->server_name, _playlist->playlist_name, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-
- if (sql_str != NULL)
- query_list = g_list_append(query_list, sql_str);
- else
- mc_error("wrong playlist query");
- }
+ mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid server");
- ret = mc_db_update_playlist(mc_server->db_handle, mc_server->server_name, _playlist->playlist_name, query_list);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("fail to mc_db_update_playlist");
- goto RELEASE;
- }
+ ret = _mc_playlist_update(MC_PRIV_TYPE_SERVER, mc_server->db_handle, mc_server->server_name, playlist);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to _mc_playlist_update");
ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYLIST, MC_PLAYLIST_UPDATED, 0, _playlist->playlist_name, 0);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("fail to __mc_server_send_message");
- goto RELEASE;
- }
-
-RELEASE:
- for (idx = 0; idx < length; idx++) {
- __mc_server_playlist_item_release((mc_playlist_item_s*)g_list_nth_data(_playlist->item_list, idx));
- }
-
- if (_playlist->item_list != NULL) {
- g_list_free(_playlist->item_list);
- _playlist->item_list = NULL;
- }
-
- length = g_list_length(query_list);
-
- for (idx = 0; idx < length; idx++) {
- char *query_str = g_list_nth_data(query_list, idx);
- SQLITE3_SAFE_FREE(query_str);
- }
-
- g_list_free(query_list);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to __mc_server_send_message");
return ret;
}
return ret;
}
+
+/* Internal API */
+int mc_server_get_playlist(mc_server_h server, const char *playlist_name, mc_playlist_h *playlist)
+{
+ media_controller_server_s *mc_server = (media_controller_server_s *)server;
+
+ mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid server");
+ mc_retvm_if(!MC_STRING_VALID(playlist_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist_name");
+ mc_retvm_if(playlist == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist");
+
+ return mc_db_get_playlist_by_name(mc_server->db_handle, MC_PRIV_TYPE_SERVER, mc_server->server_name, playlist_name, playlist);
+}
+
ret = mc_playlist_destroy(playlist_1);
ret = mc_playlist_destroy(playlist_2);
+
+ ret = mc_server_get_playlist(server, playlist_name_1, &playlist_2);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("Fail to mc_server_get_playlist [%d]", ret);
+
+ if (playlist_2 != NULL) {
+ char *playlist_name = NULL;
+ ret = mc_playlist_get_name(playlist_2, &playlist_name);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("Fail to mc_playlist_get_name [%d]", ret);
+
+ mc_debug("Get playlist [%s]", playlist_name);
+
+ MC_SAFE_FREE(playlist_name);
+ }
+
} else {
ret = mc_server_foreach_playlist(server, server_playlist_list_cb, &playlist_list);