return ret;
}
+static void __mc_db_playlist_destroy(gpointer data)
+{
+ mc_playlist_destroy((mc_playlist_h)data);
+}
+
+static void __mc_db_playlist_item_destroy(gpointer data)
+{
+ mc_playlist_item_s *item = (mc_playlist_item_s *)data;
+ mc_retm_if_failed(item);
+
+ g_free(item->index);
+ mc_metadata_destroy((mc_metadata_h)item->metadata);
+ g_free(item);
+}
+
int _mc_db_update_playback_info(const char *server_name, const media_controller_playback_s playback)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
int ret = MEDIA_CONTROLLER_ERROR_NONE;
char *sql_str = NULL;
sqlite3_stmt *stmt = NULL;
+ GList *playlists = NULL;
+ GList *node = NULL;
mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
_playlist->server_name = g_strdup(server_name);
_playlist->playlist_name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
- if (callback((mc_playlist_h)_playlist, user_data) == false) {
- mc_playlist_destroy((mc_playlist_h)_playlist);
+ playlists = g_list_append(playlists, _playlist);
+ }
+
+ SQLITE3_FINALIZE(stmt);
+
+ node = playlists;
+
+ while (node) {
+ if (!callback(node->data, user_data))
break;
- }
- mc_playlist_destroy((mc_playlist_h)_playlist);
+ node = g_list_next(node);
}
- SQLITE3_FINALIZE(stmt);
+ g_list_free_full(playlists, __mc_db_playlist_destroy);
return MEDIA_CONTROLLER_ERROR_NONE;
}
int ret = MEDIA_CONTROLLER_ERROR_NONE;
char *sql_str = NULL;
sqlite3_stmt *stmt = NULL;
- char *index = NULL;
- mc_metadata_h _metadata = NULL;
+ mc_playlist_item_s *item = NULL;
+ GList *item_list = NULL;
+ unsigned int idx = 0, length = 0;
mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
mc_retvm_if(SQLITE_OK != ret, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "prepare error [%s]", sqlite3_errmsg(handle));
while (sqlite3_step(stmt) == SQLITE_ROW) {
- ret = __mc_db_get_metadata(stmt, 1, &_metadata);
+ item = g_new0(mc_playlist_item_s, 1);
+
+ ret = __mc_db_get_metadata(stmt, 1, (mc_metadata_h *)&item->metadata);
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
mc_error("fail to __mc_db_get_metadata");
SQLITE3_FINALIZE(stmt);
+ g_list_free_full(item_list, __mc_db_playlist_item_destroy);
return ret;
}
- index = g_strdup((char *)sqlite3_column_text(stmt, 0));
-
- if (callback(index, (mc_metadata_h)_metadata, user_data) == false) {
- g_free(index);
- mc_metadata_destroy((mc_metadata_h)_metadata);
- break;
- }
+ item->index = g_strdup((char *)sqlite3_column_text(stmt, 0));
- g_free(index);
- mc_metadata_destroy(_metadata);
+ item_list = g_list_append(item_list, item);
}
SQLITE3_FINALIZE(stmt);
+ length = g_list_length(item_list);
+ for (idx = 0; idx < length; idx++) {
+ item = g_list_nth_data(item_list, idx);
+ if (callback(item->index, (mc_metadata_h)item->metadata, user_data) == false)
+ break;
+ }
+
+ g_list_free_full(item_list, __mc_db_playlist_item_destroy);
+
return MEDIA_CONTROLLER_ERROR_NONE;
}
char *sql_str = NULL;
sqlite3_stmt *stmt = NULL;
int idx = 0;
+ GList *list = NULL;
+ GList *node = NULL;
mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
idx++;
mc_info("[%d] %s", idx, server_name);
- if (callback != NULL) {
- if (callback(server_name, user_data) == false) {
- g_free(server_name);
- break;
- }
- }
-
- g_free(server_name);
+ if (callback)
+ list = g_list_append(list, server_name);
ret = sqlite3_step(stmt);
}
SQLITE3_FINALIZE(stmt);
+ if (callback) {
+ node = list;
+
+ while (node) {
+ if (!callback(node->data, user_data))
+ break;
+
+ node = g_list_next(node);
+ }
+
+ g_list_free_full(list, g_free);
+ }
+
return MEDIA_CONTROLLER_ERROR_NONE;
}
char *sql_str = NULL;
sqlite3_stmt *stmt = NULL;
int idx = 0;
+ GList *list = NULL;
+ GList *node = NULL;
mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
idx++;
mc_info("[%d] %s", idx, client_name);
- if (callback != NULL) {
- if (callback(client_name, user_data) == false) {
- g_free(client_name);
- break;
- }
- }
- g_free(client_name);
+ if (callback)
+ list = g_list_append(list, client_name);
ret = sqlite3_step(stmt);
}
SQLITE3_FINALIZE(stmt);
+ if (callback) {
+ node = list;
+
+ while (node) {
+ if (!callback(node->data, user_data))
+ break;
+
+ node = g_list_next(node);
+ }
+
+ g_list_free_full(list, g_free);
+ }
+
return MEDIA_CONTROLLER_ERROR_NONE;
}