04bb17a6ef8313c4335ec9aa7652a058fdbef437
[framework/api/media-content.git] / src / media_bookmark.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_content.h>
19 #include <media_info_private.h>
20 #include <media-svc.h>
21
22 int media_bookmark_foreach_bookmark_from_db (filter_h filter, media_bookmark_cb callback, void *user_data);
23 int media_bookmark_get_media_id(media_bookmark_h bookmark, char **media_id);
24
25 int media_bookmark_insert_to_db(const char *media_id, time_t time, const char *thumbnail_path)
26 {
27         int ret = MEDIA_CONTENT_ERROR_NONE;
28         char *sql = NULL;
29
30         if(STRING_VALID(media_id))
31         {
32                 sql = sqlite3_mprintf(INSERT_BOOKMARK_TO_BOOKMARK, media_id, time, thumbnail_path);
33                 ret = _content_query_sql(sql);
34                 sqlite3_free(sql);
35         }
36         else
37         {
38                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
39                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
40         }
41
42         return ret;
43 }
44
45 int media_bookmark_delete_from_db(int bookmark_id)
46 {
47         int ret = MEDIA_CONTENT_ERROR_NONE;
48         char *query_str = NULL;
49
50         if(bookmark_id < 0)
51         {
52                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
53                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
54         }
55
56         query_str = sqlite3_mprintf(DELETE_BOOKMARK_FROM_BOOKMARK, bookmark_id);
57
58         ret = _content_query_sql(query_str);
59
60         sqlite3_free(query_str);
61
62         return ret;
63 }
64
65 int media_bookmark_get_bookmark_count_from_db(filter_h filter, int *bookmark_count)
66 {
67         int ret = MEDIA_CONTENT_ERROR_NONE;
68
69         media_content_debug_func();
70
71         if (bookmark_count == NULL)
72         {
73                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
74                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
75         }
76
77         ret = _media_db_get_group_count(filter, MEDIA_GROUP_BOOKMARK, bookmark_count);
78
79         return ret;
80 }
81
82 int media_bookmark_foreach_bookmark_from_db (filter_h filter, media_bookmark_cb callback, void *user_data)
83 {
84         int ret = MEDIA_CONTENT_ERROR_NONE;
85
86         media_content_debug_func();
87
88         if(callback == NULL)
89         {
90                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
91                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
92         }
93
94         ret = _media_db_get_bookmark(NULL, filter, callback, user_data);
95
96         return ret;
97 }
98
99 int media_bookmark_destroy(media_bookmark_h bookmark)
100 {
101         int ret = MEDIA_CONTENT_ERROR_NONE;
102         media_bookmark_s *_bookmark = (media_bookmark_s*)bookmark;
103
104         if(_bookmark)
105         {
106                 SAFE_FREE(_bookmark->media_id);
107                 SAFE_FREE(_bookmark->thumbnail_path);
108                 free(_bookmark);
109                 ret = MEDIA_CONTENT_ERROR_NONE;
110         }
111         else
112         {
113                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
114                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
115         }
116
117         return ret;
118 }
119 int media_bookmark_clone(media_bookmark_h *dst, media_bookmark_h src)
120 {
121         int ret = MEDIA_CONTENT_ERROR_NONE;
122
123         if((src != NULL))
124         {
125                 media_bookmark_s *_src = (media_bookmark_s*)src;
126                 media_bookmark_s *_dst = (media_bookmark_s*)calloc(1, sizeof(media_bookmark_s));
127
128                 if(NULL == _dst)
129                 {
130                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
131                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
132                 }
133
134                 _dst->bookmark_id = _src->bookmark_id;
135
136                 if(STRING_VALID(_src->media_id))
137                 {
138                         _dst->media_id = (char*)strdup(_src->media_id);
139                         if(_dst->media_id == NULL)
140                         {
141                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
142                                 media_bookmark_destroy((media_bookmark_h)_dst);
143                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
144                         }
145                 }
146
147                 _dst->marked_time = _src->marked_time;
148
149                 if(STRING_VALID(_src->thumbnail_path))
150                 {
151                         _dst->thumbnail_path = (char*)strdup(_src->thumbnail_path);
152                         if(_dst->thumbnail_path == NULL)
153                         {
154                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
155                                 media_bookmark_destroy((media_bookmark_h)_dst);
156                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
157                         }
158                 }
159
160                 *dst = (media_bookmark_h)_dst;
161
162                 ret = MEDIA_CONTENT_ERROR_NONE;
163         }
164         else
165         {
166                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
167                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
168         }
169
170         return ret;
171 }
172
173 int media_bookmark_get_bookmark_id(media_bookmark_h bookmark, int *bookmark_id)
174 {
175         int ret = MEDIA_CONTENT_ERROR_NONE;
176         media_bookmark_s *_bookmark = (media_bookmark_s*)bookmark;
177
178         if(_bookmark)
179         {
180                 *bookmark_id = _bookmark->bookmark_id;
181                 ret = MEDIA_CONTENT_ERROR_NONE;
182         }
183         else
184         {
185                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
186                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
187         }
188
189         return ret;
190 }
191
192 int media_bookmark_get_media_id(media_bookmark_h bookmark, char **media_id)
193 {
194         int ret = MEDIA_CONTENT_ERROR_NONE;
195         media_bookmark_s *_bookmark = (media_bookmark_s*)bookmark;
196
197         if(_bookmark)
198         {
199                 if(STRING_VALID(_bookmark->media_id))
200                 {
201                         *media_id = strdup(_bookmark->media_id);
202                         if(*media_id == NULL)
203                         {
204                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
205                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
206                         }
207                 }
208                 else
209                 {
210                         *media_id = NULL;
211                 }
212
213                 ret = MEDIA_CONTENT_ERROR_NONE;
214         }
215         else
216         {
217                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
218                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
219         }
220
221         return ret;
222 }
223
224 int media_bookmark_get_marked_time(media_bookmark_h bookmark, time_t* marked_time)
225 {
226         int ret = MEDIA_CONTENT_ERROR_NONE;
227         media_bookmark_s *_bookmark = (media_bookmark_s*)bookmark;
228
229         if(_bookmark)
230         {
231                 *marked_time = _bookmark->marked_time;
232                 ret = MEDIA_CONTENT_ERROR_NONE;
233         }
234         else
235         {
236                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
237                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
238         }
239
240         return ret;
241 }
242
243 int media_bookmark_get_thumbnail_path(media_bookmark_h bookmark, char **path)
244 {
245         int ret = MEDIA_CONTENT_ERROR_NONE;
246         media_bookmark_s *_bookmark = (media_bookmark_s*)bookmark;
247
248         if(_bookmark)
249         {
250                 if(STRING_VALID(_bookmark->thumbnail_path))
251                 {
252                         *path = strdup(_bookmark->thumbnail_path);
253                         if(*path == NULL)
254                         {
255                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
256                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
257                         }
258                 }
259                 else
260                 {
261                         *path = NULL;
262                 }
263
264                 ret = MEDIA_CONTENT_ERROR_NONE;
265         }
266         else
267         {
268                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
269                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
270         }
271
272         return ret;
273 }