Merge "[ACR-960] Deprecate cloud storage API" into tizen
[platform/core/api/media-content.git] / src / media_group.c
1 /*
2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16
17
18 #include <media_info_private.h>
19
20
21 int media_album_get_album_count_from_db(filter_h filter, int *album_count)
22 {
23         int ret = MEDIA_CONTENT_ERROR_NONE;
24
25         if (album_count != NULL)
26                 ret = _media_db_get_group_count(filter, MEDIA_GROUP_ALBUM, album_count);
27         else {
28                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
29                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
30         }
31
32         return ret;
33 }
34
35 int media_album_foreach_album_from_db(filter_h filter, media_album_cb callback, void *user_data)
36 {
37         int ret = MEDIA_CONTENT_ERROR_NONE;
38
39         if (callback == NULL) {
40                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
41                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
42         }
43
44         ret = _media_db_get_album(filter, callback, user_data);
45
46         return ret;
47 }
48
49 int media_album_get_media_count_from_db(int album_id, filter_h filter, int *media_count)
50 {
51         int ret = MEDIA_CONTENT_ERROR_NONE;
52
53         if ((album_id > 0) && (media_count != NULL))
54                 ret = _media_db_get_group_item_count_by_id(album_id, filter, MEDIA_GROUP_ALBUM, media_count);
55         else {
56                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
57                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
58         }
59
60         return ret;
61 }
62
63 int media_album_foreach_media_from_db(int album_id, filter_h filter, media_info_cb callback, void *user_data)
64 {
65         int ret = MEDIA_CONTENT_ERROR_NONE;
66
67         if ((album_id > 0) && (callback != NULL))
68                 ret = _media_db_get_group_item_by_id(album_id, filter, callback, user_data, MEDIA_GROUP_ALBUM);
69         else {
70                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
71                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
72         }
73
74         return ret;
75 }
76
77 int media_album_get_album_from_db(int album_id, media_album_h *album)
78 {
79         int ret = MEDIA_CONTENT_ERROR_NONE;
80         sqlite3_stmt *stmt = NULL;
81         char select_query[DEFAULT_QUERY_SIZE] = {0, };
82
83         if (album_id < 0) {
84                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
85                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
86         }
87
88         memset(select_query, 0x00, sizeof(select_query));
89
90         snprintf(select_query, sizeof(select_query), SELECT_ALBUM_FROM_ALBUM, album_id);
91
92         ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
93         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
94
95         while (sqlite3_step(stmt) == SQLITE_ROW) {
96                 media_album_s *_album = (media_album_s*)calloc(1, sizeof(media_album_s));
97                 if (_album == NULL) {
98                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
99                         SQLITE3_FINALIZE(stmt);
100                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
101                 }
102
103                 _album->album_id = (int)sqlite3_column_int(stmt, 0);
104                 _album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
105                 _album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2));
106
107                 *album = (media_album_h)_album;
108         }
109
110         SQLITE3_FINALIZE(stmt);
111
112         return ret;
113 }
114
115 int media_album_destroy(media_album_h album)
116 {
117         int ret = MEDIA_CONTENT_ERROR_NONE;
118         media_album_s *_album = (media_album_s*)album;
119
120         if (_album) {
121                 SAFE_FREE(_album->name);
122                 SAFE_FREE(_album->artist);
123                 SAFE_FREE(_album->album_art_path);
124                 SAFE_FREE(_album);
125
126                 ret = MEDIA_CONTENT_ERROR_NONE;
127         } else {
128                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
129                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
130         }
131
132         return ret;
133 }
134
135 int media_album_clone(media_album_h *dst, media_album_h src)
136 {
137         int ret = MEDIA_CONTENT_ERROR_NONE;
138         media_album_s *_src = (media_album_s*)src;
139
140         if (_src != NULL) {
141                 media_album_s *_dst = (media_album_s*)calloc(1, sizeof(media_album_s));
142                 media_content_retvm_if(_dst == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
143
144                 _dst->album_id = _src->album_id;
145
146                 if (_src->name != NULL) {
147                         _dst->name = g_strdup(_src->name);
148                         if (_dst->name == NULL) {
149                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
150                                 media_album_destroy((media_album_h)_dst);
151                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
152                         }
153                 }
154
155                 if (_src->artist != NULL) {
156                         _dst->artist = g_strdup(_src->artist);
157                         if (_dst->artist == NULL) {
158                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
159                                 media_album_destroy((media_album_h)_dst);
160                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
161                         }
162                 }
163
164                 if (_src->album_art_path != NULL) {
165                         _dst->album_art_path = g_strdup(_src->album_art_path);
166                         if (_dst->album_art_path == NULL) {
167                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
168                                 media_album_destroy((media_album_h)_dst);
169                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
170                         }
171                 }
172
173                 *dst = (media_album_h)_dst;
174
175                 ret = MEDIA_CONTENT_ERROR_NONE;
176         } else {
177                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
178                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
179         }
180
181         return ret;
182 }
183
184 int media_album_get_album_id(media_album_h album, int *album_id)
185 {
186         int ret = MEDIA_CONTENT_ERROR_NONE;
187         media_album_s *_album = (media_album_s*)album;
188
189         if (_album && album_id) {
190                 *album_id = _album->album_id;
191                 ret = MEDIA_CONTENT_ERROR_NONE;
192         } else {
193                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
194                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
195         }
196
197         return ret;
198 }
199
200 int media_album_get_name(media_album_h album, char **name)
201 {
202         int ret = MEDIA_CONTENT_ERROR_NONE;
203         media_album_s *_album = (media_album_s*)album;
204
205         if (_album) {
206                 if (_album->name != NULL) {
207                         *name = g_strdup(_album->name);
208                         media_content_retvm_if(*name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
209                 } else {
210                         *name = NULL;
211                 }
212
213                 ret = MEDIA_CONTENT_ERROR_NONE;
214         } else {
215                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
216                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
217         }
218
219         return ret;
220 }
221
222 int media_album_get_artist(media_album_h album, char **artist)
223 {
224         int ret = MEDIA_CONTENT_ERROR_NONE;
225         media_album_s *_album = (media_album_s*)album;
226
227         if (_album) {
228                 if (_album->artist != NULL) {
229                         *artist = g_strdup(_album->artist);
230                         media_content_retvm_if(*artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
231                 } else {
232                         *artist = NULL;
233                 }
234
235                 ret = MEDIA_CONTENT_ERROR_NONE;
236         } else {
237                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
238                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
239         }
240
241         return ret;
242 }
243
244 int media_album_get_album_art(media_album_h album, char **album_art)
245 {
246         int ret = MEDIA_CONTENT_ERROR_NONE;
247         media_album_s *_album = (media_album_s*)album;
248
249         if (_album) {
250                 if (_album->album_art_path != NULL) {
251                         *album_art = g_strdup(_album->album_art_path);
252                         media_content_retvm_if(*album_art == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
253                 } else {
254                         *album_art = NULL;
255                 }
256
257                 ret = MEDIA_CONTENT_ERROR_NONE;
258         } else {
259                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
260                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
261         }
262
263         return ret;
264 }
265
266 int media_group_get_group_count_from_db(filter_h filter, media_group_e group, int *group_count)
267 {
268         int ret = MEDIA_CONTENT_ERROR_NONE;
269 #ifdef _USE_TV_PROFILE
270         if ((group < MEDIA_CONTENT_GROUP_DISPLAY_NAME) || (group >= MEDIA_GROUP_MAX) || (group_count == NULL)) {
271 #else
272         if ((group < MEDIA_CONTENT_GROUP_DISPLAY_NAME) || (group >= MEDIA_CONTENT_GROUP_MAX) || (group_count == NULL)) {
273 #endif
274                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
275                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
276         } else {
277                 ret = _media_db_get_media_group_count(group, filter, group_count);
278         }
279
280         return ret;
281 }
282 #ifdef _USE_TV_PROFILE
283 int media_group_foreach_group_and_count_from_db(filter_h filter, media_group_e group, media_group_and_count_cb callback, void *user_data)
284 {
285         int ret = MEDIA_CONTENT_ERROR_NONE;
286
287         if ((callback == NULL) || (group < MEDIA_CONTENT_GROUP_DISPLAY_NAME) || (group >= MEDIA_GROUP_MAX)) {
288                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
289                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
290         } else {
291                 ret = _media_db_get_media_group_and_count(group, filter, callback, user_data);
292         }
293
294         return ret;
295 }
296 #endif
297
298 int media_group_foreach_group_from_db(filter_h filter, media_group_e group, media_group_cb callback, void *user_data)
299 {
300         int ret = MEDIA_CONTENT_ERROR_NONE;
301 #ifdef _USE_TV_PROFILE
302         if ((callback == NULL) || (group < MEDIA_CONTENT_GROUP_DISPLAY_NAME) || (group >= MEDIA_GROUP_MAX)) {
303 #else
304         if ((callback == NULL) || (group < MEDIA_CONTENT_GROUP_DISPLAY_NAME) || (group >= MEDIA_CONTENT_GROUP_MAX)) {
305 #endif
306                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
307                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
308         } else {
309                 ret = _media_db_get_media_group(group, filter, callback, user_data);
310         }
311
312         return ret;
313 }
314
315 int media_group_get_media_count_from_db(const char *group_name, media_group_e group, filter_h filter, int *media_count)
316 {
317         int ret = MEDIA_CONTENT_ERROR_NONE;
318 #ifdef _USE_TV_PROFILE
319         if ((media_count == NULL) || (group < MEDIA_CONTENT_GROUP_DISPLAY_NAME) || (group >= MEDIA_GROUP_MAX)) {
320 #else
321         if ((media_count == NULL) || (group < MEDIA_CONTENT_GROUP_DISPLAY_NAME) || (group >= MEDIA_CONTENT_GROUP_MAX)) {
322 #endif
323                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
324                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
325         } else {
326                 ret = _media_db_get_media_group_item_count(group_name, filter, group, media_count);
327         }
328
329         return ret;
330 }
331
332 int media_group_foreach_media_from_db(const char *group_name, media_group_e group, filter_h filter, media_info_cb callback, void *user_data)
333 {
334         int ret = MEDIA_CONTENT_ERROR_NONE;
335 #ifdef _USE_TV_PROFILE
336         if ((callback == NULL) || (group < MEDIA_CONTENT_GROUP_DISPLAY_NAME) || (group >= MEDIA_GROUP_MAX)) {
337 #else
338         if ((callback == NULL) || (group < MEDIA_CONTENT_GROUP_DISPLAY_NAME) || (group >= MEDIA_CONTENT_GROUP_MAX)) {
339 #endif
340                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
341                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
342         } else {
343                 ret = _media_db_get_media_group_item(group_name, filter, group, callback, user_data);
344         }
345
346         return ret;
347 }