2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include <media_info_private.h>
19 #include <media_util_private.h>
21 static const char *__get_order_str(media_content_order_e order_enum)
24 case MEDIA_CONTENT_ORDER_ASC:
26 case MEDIA_CONTENT_ORDER_DESC:
33 static const char *__get_collate_str(media_content_collation_e collate_type)
35 switch (collate_type) {
36 case MEDIA_CONTENT_COLLATE_NOCASE:
37 return " COLLATE NOCASE ";
38 case MEDIA_CONTENT_COLLATE_RTRIM:
39 return " COLLATE RTRIM ";
40 case MEDIA_CONTENT_COLLATE_LOCALIZED:
41 return " COLLATE localized ";
47 static bool __check_collate_type(media_content_collation_e collate_type)
49 switch (collate_type) {
50 case MEDIA_CONTENT_COLLATE_DEFAULT:
51 case MEDIA_CONTENT_COLLATE_NOCASE:
52 case MEDIA_CONTENT_COLLATE_RTRIM:
53 case MEDIA_CONTENT_COLLATE_LOCALIZED:
60 static bool __check_order_type(media_content_order_e order)
63 case MEDIA_CONTENT_ORDER_ASC:
64 case MEDIA_CONTENT_ORDER_DESC:
65 case MEDIA_CONTENT_ORDER_OTHER:
72 int _media_filter_build_condition(bool is_full, const char *condition, media_content_collation_e collate_type, char **result)
74 content_retip_if_fail(condition);
75 content_retip_if_fail(__check_collate_type(collate_type));
76 content_retip_if_fail(result);
79 *result = g_strdup_printf("(%s)", condition);
81 *result = g_strdup_printf("(%s%s)", condition, __get_collate_str(collate_type));
83 content_debug("Condition : %s", *result);
85 return MEDIA_CONTENT_ERROR_NONE;
88 int _media_filter_build_option(filter_h filter, char **result)
90 filter_s *_filter = (filter_s *)filter;
92 content_retip_if_fail(filter);
93 content_retip_if_fail(result);
95 if (!STRING_VALID(_filter->order_keyword)) {
96 *result = g_strdup_printf(" LIMIT %d, %d", _filter->offset, _filter->count);
97 return MEDIA_CONTENT_ERROR_NONE;
100 if (_filter->is_full_order) {
101 *result = g_strdup_printf("ORDER BY %s LIMIT %d, %d", _filter->order_keyword, _filter->offset, _filter->count);
102 return MEDIA_CONTENT_ERROR_NONE;
105 if (_filter->order_type == MEDIA_CONTENT_ORDER_ASC || _filter->order_type == MEDIA_CONTENT_ORDER_DESC) {
106 *result = g_strdup_printf("ORDER BY %s%s%s LIMIT %d, %d",
107 _filter->order_keyword,
108 __get_collate_str(_filter->order_collate_type),
109 __get_order_str(_filter->order_type),
113 #ifdef _USE_TVPD_MODE
114 *result = g_strdup_printf("%s LIMIT %d, %d", _filter->order_keyword, _filter->offset, _filter->count);
116 *result = g_strdup_printf("ORDER BY %s LIMIT %d, %d", _filter->order_keyword, _filter->offset, _filter->count);
120 return MEDIA_CONTENT_ERROR_NONE;
123 int media_filter_create(filter_h *filter)
125 int ret = MEDIA_CONTENT_ERROR_NONE;
127 content_retip_if_fail(filter);
129 filter_s *_filter = g_new0(filter_s, 1);
131 _filter->storage_id = NULL;
132 _filter->condition = NULL;
133 _filter->order_keyword = NULL;
134 _filter->order_type = -1;
135 _filter->condition_collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
136 _filter->order_collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
137 _filter->offset = -1;
139 _filter->is_full_condition = false;
140 _filter->is_full_order = false;
142 *filter = (filter_h)_filter;
147 int media_filter_destroy(filter_h filter)
149 filter_s *_filter = (filter_s *)filter;
151 content_retip_if_fail(filter);
153 g_free(_filter->storage_id);
154 g_free(_filter->condition);
155 g_free(_filter->order_keyword);
158 return MEDIA_CONTENT_ERROR_NONE;
161 int media_filter_set_offset(filter_h filter, int offset, int count)
163 filter_s *_filter = (filter_s *)filter;
165 content_retip_if_fail(filter);
167 _filter->offset = offset;
168 _filter->count = count;
170 return MEDIA_CONTENT_ERROR_NONE;
173 int media_filter_set_condition(filter_h filter, const char *condition, media_content_collation_e collate_type)
175 int ret = MEDIA_CONTENT_ERROR_NONE;
176 filter_s *_filter = (filter_s *)filter;
178 content_retip_if_fail(filter);
179 content_retip_if_fail(STRING_VALID(condition));
180 content_retip_if_fail(__check_collate_type(collate_type));
182 _filter->is_full_condition = false;
183 g_free(_filter->condition);
185 _filter->condition = g_strdup(condition);
187 content_debug("Condition string : %s", _filter->condition);
189 _filter->condition_collate_type = collate_type;
194 int media_filter_set_order(filter_h filter, media_content_order_e order_type, const char *order_keyword, media_content_collation_e collate_type)
196 filter_s *_filter = (filter_s *)filter;
198 content_retip_if_fail(filter);
199 content_retip_if_fail(STRING_VALID(order_keyword));
200 content_retip_if_fail(__check_order_type(order_type));
201 content_retip_if_fail(__check_collate_type(collate_type));
203 _filter->is_full_order = false;
205 g_free(_filter->order_keyword);
207 _filter->order_keyword = g_strdup(order_keyword);
208 _filter->order_type = order_type;
209 _filter->order_collate_type = collate_type;
211 return MEDIA_CONTENT_ERROR_NONE;
213 #ifdef _USE_TVPD_MODE
214 int media_filter_set_storage(filter_h filter, const char *storage_id)
216 filter_s *_filter = (filter_s *)filter;
218 content_retip_if_fail(filter);
219 content_retip_if_fail(STRING_VALID(storage_id));
221 g_free(_filter->storage_id);
222 _filter->storage_id = g_strdup(storage_id);
224 content_debug("storage_id : %s", _filter->storage_id);
226 return MEDIA_CONTENT_ERROR_NONE;
229 int media_filter_get_offset(filter_h filter, int *offset, int *count)
231 filter_s *_filter = (filter_s *)filter;
233 content_retip_if_fail(filter);
234 content_retip_if_fail(offset);
235 content_retip_if_fail(count);
237 *offset = _filter->offset;
238 *count = _filter->count;
240 return MEDIA_CONTENT_ERROR_NONE;
243 int media_filter_get_condition(filter_h filter, char **condition, media_content_collation_e *collate_type)
245 filter_s *_filter = (filter_s *)filter;
247 content_retip_if_fail(filter);
248 content_retip_if_fail(condition);
249 content_retip_if_fail(collate_type);
251 if (!_filter->is_full_condition)
252 *condition = g_strdup(_filter->condition);
254 *collate_type = _filter->condition_collate_type;
256 return MEDIA_CONTENT_ERROR_NONE;
259 int media_filter_get_order(filter_h filter, media_content_order_e *order_type, char **order_keyword, media_content_collation_e *collate_type)
261 filter_s *_filter = (filter_s *)filter;
263 content_retip_if_fail(filter);
264 content_retip_if_fail(order_type);
265 content_retip_if_fail(order_keyword);
266 content_retip_if_fail(collate_type);
268 if (!_filter->is_full_order)
269 *order_keyword = g_strdup(_filter->order_keyword);
271 *order_type = _filter->order_type;
272 *collate_type = _filter->order_collate_type;
274 return MEDIA_CONTENT_ERROR_NONE;
277 int media_filter_set_condition_v2(filter_h filter, const char *condition)
279 filter_s *_filter = (filter_s *)filter;
281 content_retip_if_fail(filter);
282 content_retip_if_fail(STRING_VALID(condition));
284 _filter->is_full_condition = true;
286 g_free(_filter->condition);
288 _filter->condition = g_strdup(condition);
290 content_debug("Condition string : %s", _filter->condition);
292 return MEDIA_CONTENT_ERROR_NONE;
295 int media_filter_get_condition_v2(filter_h filter, char **condition)
297 filter_s *_filter = (filter_s *)filter;
299 content_retip_if_fail(filter);
300 content_retip_if_fail(condition);
302 if (_filter->is_full_condition)
303 *condition = g_strdup(_filter->condition);
305 return MEDIA_CONTENT_ERROR_NONE;
308 int media_filter_set_order_v2(filter_h filter, const char *order)
310 filter_s *_filter = (filter_s *)filter;
312 content_retip_if_fail(filter);
313 content_retip_if_fail(STRING_VALID(order));
315 _filter->is_full_order = true;
317 g_free(_filter->order_keyword);
318 _filter->order_keyword = g_strdup(order);
320 return MEDIA_CONTENT_ERROR_NONE;
323 int media_filter_get_order_v2(filter_h filter, char **order)
325 filter_s *_filter = (filter_s *)filter;
327 content_retip_if_fail(filter);
328 content_retip_if_fail(order);
330 if (_filter->is_full_order)
331 *order = g_strdup(_filter->order_keyword);
333 return MEDIA_CONTENT_ERROR_NONE;