81af59ba400079b77be204b182082b9cc566640b
[platform/core/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_info_private.h>
19
20 static int __media_bookmark_check_media_id(const char *media_id)
21 {
22         int ret = MEDIA_CONTENT_ERROR_NONE;
23         char *query_str = NULL;
24         sqlite3_stmt *stmt = NULL;
25         int item_count = 0;
26
27         content_retvm_if(!STRING_VALID(media_id), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media_id");
28
29         query_str = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_MEDIA_BY_ID, media_id);
30         ret = _content_get_result(query_str, &stmt);
31         SQLITE3_SAFE_FREE(query_str);
32         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
33
34         if (sqlite3_step(stmt) == SQLITE_ROW)
35                 item_count = (int)sqlite3_column_int(stmt, 0);
36
37         SQLITE3_FINALIZE(stmt);
38
39         content_retvm_if(item_count == 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_id");
40
41         return MEDIA_CONTENT_ERROR_NONE;
42 }
43
44 int media_bookmark_insert_to_db(const char *media_id, time_t time, const char *thumbnail_path)
45 {
46         int ret = MEDIA_CONTENT_ERROR_NONE;
47         char *sql = NULL;
48         content_retvm_if(!STRING_VALID(media_id), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid parameter");
49
50         sql = sqlite3_mprintf(INSERT_BOOKMARK_TO_BOOKMARK, media_id, time, thumbnail_path, MEDIA_CONTENT_EMPTY_STRING);
51         ret = _content_query_sql(sql);
52         SQLITE3_SAFE_FREE(sql);
53
54         return ret;
55 }
56
57 int media_bookmark_delete_from_db(int bookmark_id)
58 {
59         int ret = MEDIA_CONTENT_ERROR_NONE;
60         char *query_str = NULL;
61         content_retvm_if(bookmark_id < 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid parameter");
62
63         query_str = sqlite3_mprintf(DELETE_BOOKMARK_FROM_BOOKMARK, bookmark_id);
64         ret = _content_query_sql(query_str);
65         SQLITE3_SAFE_FREE(query_str);
66
67         return ret;
68 }
69
70 int media_bookmark_get_bookmark_count_from_db(filter_h filter, int *bookmark_count)
71 {
72         content_retvm_if(!bookmark_count, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid parameter");
73
74         return _media_db_get_group_count(filter, MEDIA_GROUP_BOOKMARK, bookmark_count);
75 }
76
77 int media_bookmark_foreach_bookmark_from_db(filter_h filter, media_bookmark_cb callback, void *user_data)
78 {
79         content_retvm_if(!callback, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid paramter");
80
81         return _media_db_get_bookmark(NULL, filter, callback, user_data);
82 }
83
84 int media_bookmark_destroy(media_bookmark_h bookmark)
85 {
86         media_bookmark_s *_bookmark = (media_bookmark_s *)bookmark;
87         content_retvm_if(!_bookmark, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid paramter");
88
89         g_free(_bookmark->media_id);
90         g_free(_bookmark->thumbnail_path);
91         g_free(_bookmark->name);
92         g_free(_bookmark);
93
94         return MEDIA_CONTENT_ERROR_NONE;
95 }
96 int media_bookmark_clone(media_bookmark_h *dst, media_bookmark_h src)
97 {
98         media_bookmark_s *_src = (media_bookmark_s *)src;
99
100         content_retip_if_fail(dst);
101         content_retip_if_fail(src);
102
103         media_bookmark_s *_dst = g_new0(media_bookmark_s, 1);
104
105         _dst->bookmark_id = _src->bookmark_id;
106         _dst->media_id = g_strdup(_src->media_id);
107         _dst->marked_time = _src->marked_time;
108         _dst->thumbnail_path = g_strdup(_src->thumbnail_path);
109         _dst->name = g_strdup(_src->name);
110
111         *dst = (media_bookmark_h)_dst;
112
113         return MEDIA_CONTENT_ERROR_NONE;
114 }
115
116 int media_bookmark_get_bookmark_id(media_bookmark_h bookmark, int *bookmark_id)
117 {
118         media_bookmark_s *_bookmark = (media_bookmark_s *)bookmark;
119         content_retvm_if(!_bookmark || !bookmark_id, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid parameter");
120
121         *bookmark_id = _bookmark->bookmark_id;
122
123         return MEDIA_CONTENT_ERROR_NONE;
124 }
125
126 int media_bookmark_get_marked_time(media_bookmark_h bookmark, time_t* marked_time)
127 {
128         media_bookmark_s *_bookmark = (media_bookmark_s *)bookmark;
129         content_retvm_if(!_bookmark || !marked_time, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid parameter");
130
131         *marked_time = _bookmark->marked_time;
132
133         return MEDIA_CONTENT_ERROR_NONE;
134 }
135
136 int media_bookmark_get_thumbnail_path(media_bookmark_h bookmark, char **path)
137 {
138         media_bookmark_s *_bookmark = (media_bookmark_s *)bookmark;
139
140         content_retip_if_fail(bookmark);
141         content_retip_if_fail(path);
142
143         *path = g_strdup(_bookmark->thumbnail_path);
144
145         return MEDIA_CONTENT_ERROR_NONE;
146 }
147
148 int media_bookmark_get_name(media_bookmark_h bookmark, char **name)
149 {
150         media_bookmark_s *_bookmark = (media_bookmark_s *)bookmark;
151
152         content_retip_if_fail(bookmark);
153         content_retip_if_fail(name);
154
155         *name = g_strdup(_bookmark->name);
156
157         return MEDIA_CONTENT_ERROR_NONE;
158 }
159
160 int media_bookmark_set_name(media_bookmark_h bookmark, const char *name)
161 {
162         media_bookmark_s *_bookmark = (media_bookmark_s *)bookmark;
163
164         content_retip_if_fail(bookmark);
165
166         g_free(_bookmark->name);
167         _bookmark->name = g_strdup(STRING_VALID(name) ? name : MEDIA_CONTENT_EMPTY_STRING);
168
169         return MEDIA_CONTENT_ERROR_NONE;
170 }
171
172 int media_bookmark_update_to_db(media_bookmark_h bookmark)
173 {
174         int ret = MEDIA_CONTENT_ERROR_NONE;
175         media_bookmark_s *_bookmark = (media_bookmark_s *)bookmark;
176         char *sql = NULL;
177         content_retvm_if(!_bookmark, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid parameter");
178
179         sql = sqlite3_mprintf(UPDATE_BOOKMARK_FROM_BOOKMARK, _bookmark->name, _bookmark->bookmark_id);
180         ret = _content_query_sql(sql);
181         SQLITE3_SAFE_FREE(sql);
182
183         return ret;
184 }
185
186 int media_bookmark_create(const char *media_id, time_t time, media_bookmark_h *bookmark)
187 {
188         int ret = MEDIA_CONTENT_ERROR_NONE;
189
190         content_retip_if_fail(bookmark);
191
192         ret = __media_bookmark_check_media_id(media_id);
193         content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "Not exist media_id");
194
195         media_bookmark_s *_bookmark = g_new0(media_bookmark_s, 1);
196
197         _bookmark->media_id = g_strdup(media_id);
198         _bookmark->bookmark_id = -1;
199         _bookmark->marked_time = time;
200
201         *bookmark = (media_bookmark_h)_bookmark;
202
203         return ret;
204 }
205
206 int media_bookmark_set_thumbnail_path(media_bookmark_h bookmark, const char *path)
207 {
208         media_bookmark_s *_bookmark = (media_bookmark_s *)bookmark;
209
210         content_retip_if_fail(bookmark);
211
212         g_free(_bookmark->thumbnail_path);
213         _bookmark->thumbnail_path = g_strdup(path);
214
215         return MEDIA_CONTENT_ERROR_NONE;
216 }
217
218 int media_bookmark_insert_to_db_v2(media_bookmark_h bookmark)
219 {
220         int ret = MEDIA_CONTENT_ERROR_NONE;
221         media_bookmark_s *_bookmark = (media_bookmark_s *)bookmark;
222         char *sql = NULL;
223         sqlite3_stmt *stmt = NULL;
224         int bookmark_id = -1;
225
226         content_retvm_if(!_bookmark, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid bookmark");
227         content_retvm_if(_bookmark->bookmark_id != -1, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid bookmark");
228
229         sql = sqlite3_mprintf(INSERT_BOOKMARK_TO_BOOKMARK,
230                 _bookmark->media_id, _bookmark->marked_time, _bookmark->thumbnail_path, _bookmark->name);
231
232         ret = _content_query_sql(sql);
233         SQLITE3_SAFE_FREE(sql);
234         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
235
236         sql = sqlite3_mprintf(SELECT_BOOKMARK_ID_FROM_BOOKMARK, _bookmark->media_id, _bookmark->marked_time);
237         ret = _content_get_result(sql, &stmt);
238         SQLITE3_SAFE_FREE(sql);
239         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
240
241         if (sqlite3_step(stmt) == SQLITE_ROW)
242                 bookmark_id = sqlite3_column_int(stmt, 0);
243
244         SQLITE3_FINALIZE(stmt);
245
246         _bookmark->bookmark_id = bookmark_id;
247
248         return ret;
249 }