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.
17 #include <media_info.h>
18 #include <media-thumbnail.h>
19 #include <media-util-dcm.h>
20 #include <media_info_private.h>
21 #include <media_util_private.h>
22 #include <system_info.h>
23 #ifdef _USE_TV_PROFILE
24 #include <media_content_internal.h>
27 static void __media_info_insert_completed_cb(media_request_result_s *result, void *user_data);
28 static void __media_info_thumbnail_completed_cb(int error, const char *path, void *user_data);
29 static void __media_info_face_completed_cb(int error, const int face_count, void *user_data);
30 static bool __media_info_delete_batch_cb(media_info_h media, void *user_data);
31 static int __media_info_insert_batch(media_batch_insert_e insert_type, const char **path_array, unsigned int array_length, media_insert_completed_cb completed_cb, void *user_data);
33 static int __media_info_get_media_path_by_id_from_db(const char *media_id, char **path)
35 int ret = MEDIA_CONTENT_ERROR_NONE;
36 sqlite3_stmt *stmt = NULL;
37 char *select_query = NULL;
39 media_content_retvm_if(!STRING_VALID(media_id), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media_id");
41 select_query = sqlite3_mprintf(SELECT_MEDIA_PATH_BY_ID, media_id);
43 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
44 SQLITE3_SAFE_FREE(select_query);
45 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
47 if (sqlite3_step(stmt) == SQLITE_ROW) {
48 *path = g_strdup((const char *)sqlite3_column_text(stmt, 0));
50 media_content_error("There's no media with this ID : %s", media_id);
52 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
55 SQLITE3_FINALIZE(stmt);
60 static void __media_info_insert_completed_cb(media_request_result_s *result, void *user_data)
62 int ret = MEDIA_CONTENT_ERROR_NONE;
63 media_insert_cb_s *_cb_data = (media_insert_cb_s *)user_data;
67 ret = _content_error_capi(MEDIA_CONTENT_TYPE, result->result);
69 if (_cb_data->insert_completed_cb)
70 _cb_data->insert_completed_cb(ret, _cb_data->user_data);
72 if (STRING_VALID(_cb_data->insert_list_path)) {
73 if (unlink(_cb_data->insert_list_path) < 0)
74 media_content_stderror("failed to delete");
75 SAFE_FREE(_cb_data->insert_list_path);
84 static void __media_info_thumbnail_completed_cb(int error, const char *path, void *user_data)
86 int error_value = MEDIA_CONTENT_ERROR_NONE;
88 media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s *)user_data;
89 media_info_s *media = NULL;
91 if (_thumb_cb != NULL) {
92 media = _thumb_cb->handle;
93 if ((media != NULL) && STRING_VALID(path)) {
94 media->thumbnail_path = NULL;
95 media->thumbnail_path = g_strdup(path);
98 media_content_debug("error [%d], thumbnail_path [%s]", error, path);
99 error_value = _content_error_capi(MEDIA_THUMBNAIL_TYPE, error);
100 if (_thumb_cb->thumbnail_completed_cb)
101 _thumb_cb->thumbnail_completed_cb(error_value, path, _thumb_cb->user_data);
104 SAFE_FREE(_thumb_cb);
109 static bool __media_info_isFaceRecognition_feature_supported()
111 bool isFaceRecognitionSupported = false;
113 const int nRetVal = system_info_get_platform_bool("http://tizen.org/feature/vision.face_recognition", &isFaceRecognitionSupported);
115 if (nRetVal != SYSTEM_INFO_ERROR_NONE) {
116 media_content_debug("SYSTEM_INFO_ERROR: vision.face_recognition [%d]", nRetVal);
120 return isFaceRecognitionSupported;
123 static void __media_info_face_completed_cb(int error, const int face_count, void *user_data)
125 int error_value = MEDIA_CONTENT_ERROR_NONE;
127 media_face_cb_s *_face_cb = (media_face_cb_s *)user_data;
129 if (_face_cb != NULL) {
130 media_content_debug("error [%d], face_count [%d]", error, face_count);
131 error_value = _content_error_capi(MEDIA_THUMBNAIL_TYPE, error);
132 if (_face_cb->face_completed_cb)
133 _face_cb->face_completed_cb(error_value, face_count, _face_cb->user_data);
141 static bool __media_info_delete_batch_cb(media_info_h media, void *user_data)
143 int err = MEDIA_CONTENT_ERROR_NONE;
144 char *thumb_path = NULL;
145 media_content_type_e media_type = 0;
146 GArray *thumb_list = (GArray *)user_data;
149 media_content_debug("NO Item");
153 err = media_info_get_media_type(media, &media_type);
154 if (err == MEDIA_CONTENT_ERROR_NONE) {
155 media_content_debug("media_type : [%d]", media_type);
157 media_info_get_thumbnail_path(media, &thumb_path);
158 if (STRING_VALID(thumb_path) && STRING_VALID(MEDIA_CONTENT_THUMB_DEFAULT_PATH)) {
159 if (strncmp(MEDIA_CONTENT_THUMB_DEFAULT_PATH, thumb_path, strlen(MEDIA_CONTENT_THUMB_DEFAULT_PATH)) != 0)
160 g_array_append_val(thumb_list, thumb_path);
163 media_content_error("media_info_get_media_type failed");
169 static int __media_info_insert_batch(media_batch_insert_e insert_type, const char **path_array,
170 unsigned int array_length,
171 media_insert_completed_cb completed_cb,
174 int ret = MEDIA_CONTENT_ERROR_NONE;
176 char list_path[255] = {0, };
177 unsigned int idx = 0;
180 for (idx = 0; idx < BATCH_REQUEST_MAX; idx++) {
181 snprintf(list_path, sizeof(list_path), "%s/request-%ld-%d", MEDIA_CONTENT_INSERT_FILES_PATH, media_content_gettid(), idx);
183 if (g_file_test(list_path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
184 memset(list_path, 0x00, sizeof(list_path));
187 media_content_debug("The request file list path : %s", list_path);
192 if (idx == BATCH_REQUEST_MAX) {
193 media_content_error("Too many batch request for one thread");
194 return MEDIA_CONTENT_ERROR_DB_BUSY;
197 fp = fopen(list_path, "w");
199 media_content_error("failed to open file : [%s]", list_path);
200 media_content_stderror("failed to open file");
201 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
204 for (idx = 0; idx < array_length; idx++) {
205 if (STRING_VALID(path_array[idx])) {
206 int size = strlen(path_array[idx]);
208 ret = _media_util_check_file_exist(path_array[idx]);
209 if (ret != MEDIA_CONTENT_ERROR_NONE) {
211 if (unlink(list_path) < 0)
212 media_content_stderror("failed to delete");
216 nwrites = fwrite(path_array[idx], 1, size, fp);
217 if (nwrites != size) {
218 media_content_stderror("failed to write");
220 if (unlink(list_path) < 0)
221 media_content_stderror("failed to delete");
222 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
225 nwrites = fwrite("\n", 1, 1, fp);
227 media_content_stderror("failed to write");
229 if (unlink(list_path) < 0)
230 media_content_stderror("failed to delete");
231 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
234 media_content_error("path[%d] is invalid string", idx);
240 media_insert_cb_s *_cb_data = (media_insert_cb_s *)calloc(1, sizeof(media_insert_cb_s));
241 media_content_retvm_if(_cb_data == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
243 _cb_data->insert_completed_cb = completed_cb;
244 _cb_data->user_data = user_data;
245 _cb_data->insert_list_path = g_strdup(list_path);
247 if (insert_type == MEDIA_BATCH_INSERT_NORMAL)
248 ret = media_files_register(list_path, __media_info_insert_completed_cb, _cb_data, tzplatform_getuid(TZ_USER_NAME));
249 else if (insert_type == MEDIA_BATCH_INSERT_BURSTSHOT)
250 ret = media_burstshot_register(list_path, __media_info_insert_completed_cb, _cb_data, tzplatform_getuid(TZ_USER_NAME));
252 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
254 if (ret != MEDIA_CONTENT_ERROR_NONE) {
255 media_content_error("media_files_register failed : %d", ret);
256 if (unlink(list_path) < 0)
257 media_content_stderror("failed to delete");
258 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
264 void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media)
266 media_info_s *_media = (media_info_s*)media;
267 #ifndef _USE_TV_PROFILE
268 char *tmp_path = NULL;
269 char repl_path[MAX_QUERY_SIZE] = {0, };
272 _media->media_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_UUID));
273 #ifdef _USE_TV_PROFILE
274 _media->file_path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PATH));
276 tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PATH));
277 _media_content_rollback_path(tmp_path, repl_path);
278 _media->file_path = g_strdup(repl_path);
281 _media->display_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_FILE_NAME));
282 _media->media_type = (int)sqlite3_column_int(stmt, MEDIA_INFO_TYPE);
283 _media->mime_type = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_MIME_TYPE));
284 _media->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_INFO_SIZE);
285 _media->added_time = (int)sqlite3_column_int(stmt, MEDIA_INFO_ADDED_TIME);
286 _media->modified_time = (int)sqlite3_column_int(stmt, MEDIA_INFO_MODIFIED_TIME);
287 _media->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_THUMBNAIL_PATH));
288 _media->description = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_DESCRIPTION));
289 _media->rating = (int)sqlite3_column_int(stmt, MEDIA_INFO_RATING);
290 _media->favourite = (int)sqlite3_column_int(stmt, MEDIA_INFO_FAVOURITE);
291 _media->author = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_AUTHOR));
292 _media->provider = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PROVIDER));
293 _media->content_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_CONTENT_NAME));
294 _media->category = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_CATEGORY));
295 _media->location_tag = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_LOCATION_TAG));
296 _media->age_rating = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_AGE_RATING));
297 _media->keyword = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_KEYWORD));
298 _media->is_drm = (int)sqlite3_column_int(stmt, MEDIA_INFO_IS_DRM);
299 _media->storage_type = (int)sqlite3_column_int(stmt, MEDIA_INFO_STORAGE_TYPE);
300 _media->longitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_LONGITUDE);
301 _media->latitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_LATITUDE);
302 _media->altitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_ALTITUDE);
303 _media->played_count = sqlite3_column_int(stmt, MEDIA_INFO_PLAYED_COUNT);
304 _media->played_time = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_TIME);
305 _media->played_position = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_POSITION);
306 _media->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
307 _media->timeline = (double)sqlite3_column_double(stmt, MEDIA_INFO_TIMELINE);
308 _media->weather = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_WEATHER));
309 _media->sync_status = (int)sqlite3_column_int(stmt, MEDIA_INFO_SYNC_STATUS);
310 _media->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_STORAGE_UUID));
311 _media->is_360 = (int)sqlite3_column_int(stmt, MEDIA_INFO_IS_360);
313 if (_media->media_type == MEDIA_CONTENT_TYPE_IMAGE) {
314 _media->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
315 if (_media->image_meta) {
316 _media->image_meta->media_id = g_strdup(_media->media_id);
317 _media->image_meta->width = sqlite3_column_int(stmt, MEDIA_INFO_WIDTH);
318 _media->image_meta->height = sqlite3_column_int(stmt, MEDIA_INFO_HEIGHT);
319 _media->image_meta->fnumber = (double)sqlite3_column_double(stmt, MEDIA_INFO_FNUMBER);
320 _media->image_meta->iso = sqlite3_column_int(stmt, MEDIA_INFO_ISO);
321 _media->image_meta->date_taken = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_DATETAKEN));
322 _media->image_meta->orientation = sqlite3_column_int(stmt, MEDIA_INFO_ORIENTATION);
323 _media->image_meta->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
324 _media->image_meta->burst_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_BURST_ID));
325 _media->image_meta->weather = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_WEATHER));
326 _media->image_meta->exposure_time = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_EXPOSURE_TIME));
327 _media->image_meta->model = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_MODEL));
329 } else if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
330 _media->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
331 if (_media->video_meta) {
332 _media->video_meta->media_id = g_strdup(_media->media_id);
333 _media->video_meta->width = sqlite3_column_int(stmt, MEDIA_INFO_WIDTH);
334 _media->video_meta->height = sqlite3_column_int(stmt, MEDIA_INFO_HEIGHT);
335 _media->video_meta->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
336 _media->video_meta->album = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM));
337 _media->video_meta->artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ARTIST));
338 _media->video_meta->album_artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM_ARTIST));
339 _media->video_meta->genre = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_GENRE));
340 _media->video_meta->composer = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COMPOSER));
341 _media->video_meta->year = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_YEAR));
342 _media->video_meta->recorded_date = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_RECORDED_DATE));
343 _media->video_meta->copyright = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COPYRIGHT));
344 _media->video_meta->track_num = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TRACK_NUM));
345 _media->video_meta->bitrate = sqlite3_column_int(stmt, MEDIA_INFO_BITRATE);
346 _media->video_meta->duration = sqlite3_column_int(stmt, MEDIA_INFO_DURATION);
347 _media->video_meta->played_count = sqlite3_column_int(stmt, MEDIA_INFO_PLAYED_COUNT);
348 _media->video_meta->played_time = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_TIME);
349 _media->video_meta->played_position = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_POSITION);
352 } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
353 _media->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
354 if (_media->audio_meta) {
355 _media->audio_meta->media_id = g_strdup(_media->media_id);
356 _media->audio_meta->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
357 _media->audio_meta->album = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM));
358 _media->audio_meta->artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ARTIST));
359 _media->audio_meta->album_artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM_ARTIST));
360 _media->audio_meta->genre = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_GENRE));
361 _media->audio_meta->composer = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COMPOSER));
362 _media->audio_meta->year = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_YEAR));
363 _media->audio_meta->recorded_date = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_RECORDED_DATE));
364 _media->audio_meta->copyright = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COPYRIGHT));
365 _media->audio_meta->track_num = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TRACK_NUM));
366 _media->audio_meta->bitrate = sqlite3_column_int(stmt, MEDIA_INFO_BITRATE);
367 _media->audio_meta->bitpersample = sqlite3_column_int(stmt, MEDIA_INFO_BITPERSAMPLE);
368 _media->audio_meta->duration = sqlite3_column_int(stmt, MEDIA_INFO_DURATION);
369 _media->audio_meta->played_count = sqlite3_column_int(stmt, MEDIA_INFO_PLAYED_COUNT);
370 _media->audio_meta->played_time = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_TIME);
371 _media->audio_meta->played_position = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_POSITION);
372 _media->audio_meta->samplerate = sqlite3_column_int(stmt, MEDIA_INFO_SAMPLERATE);
373 _media->audio_meta->channel = sqlite3_column_int(stmt, MEDIA_INFO_CHANNEL);
378 int _media_info_get_media_info_from_db(const char *path, const char *storage_id, media_info_h media)
380 int ret = MEDIA_CONTENT_ERROR_NONE;
381 sqlite3_stmt *stmt = NULL;
382 char *select_query = NULL;
383 media_info_s *_media = (media_info_s*)media;
385 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media");
387 select_query = sqlite3_mprintf(SELECT_MEDIA_BY_PATH, storage_id, path);
389 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
390 SQLITE3_SAFE_FREE(select_query);
391 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
393 if (sqlite3_step(stmt) == SQLITE_ROW) {
394 _media_info_item_get_detail(stmt, (media_info_h)_media);
396 media_content_error("There's no media!!");
397 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
400 SQLITE3_FINALIZE(stmt);
405 int media_info_insert_to_db(const char *path, media_info_h *info)
407 bool ignore_file = FALSE;
408 bool ignore_dir = FALSE;
409 char *folder_path = NULL;
410 char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
411 char repl_path[MAX_QUERY_SIZE] = {0, };
412 int ret = MEDIA_CONTENT_ERROR_NONE;
414 media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid path");
415 media_content_retvm_if(info == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid info");
416 memset(repl_path, 0, sizeof(repl_path));
417 ret = _media_content_replace_path(path, repl_path);
418 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
420 ret = _media_util_check_ignore_file(repl_path, &ignore_file);
421 media_content_retvm_if(ignore_file == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path");
423 ret = _media_util_check_file_exist(repl_path);
424 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
426 folder_path = g_path_get_dirname(repl_path);
427 ret = _media_util_check_ignore_dir(folder_path, &ignore_dir);
428 SAFE_FREE(folder_path);
430 media_content_retvm_if(ignore_dir == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid folder path");
432 memset(storage_id, 0x00, sizeof(storage_id));
433 ret = media_svc_get_storage_id(_content_get_db_handle(), repl_path, storage_id);
434 if (ret != MS_MEDIA_ERR_NONE) {
435 media_content_error("media_svc_get_storage_id failed : %d", ret);
436 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
439 ret = media_svc_check_item_exist_by_path(_content_get_db_handle(), storage_id, repl_path);
440 if (ret == MS_MEDIA_ERR_DB_NO_RECORD) {
441 media_content_sec_debug("media_svc_check_item_exist_by_path : no record : %s", repl_path);
443 media_svc_storage_type_e storage_type = 0;
445 ret = media_svc_get_storage_type(repl_path, &storage_type, tzplatform_getuid(TZ_USER_NAME));
446 if (ret != MS_MEDIA_ERR_NONE) {
447 media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
448 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
451 ret = media_svc_insert_item_immediately(_content_get_db_handle(), storage_id, storage_type, repl_path, tzplatform_getuid(TZ_USER_NAME));
453 if (ret != MS_MEDIA_ERR_NONE) {
454 if (ret == MS_MEDIA_ERR_DB_CONSTRAINT_FAIL) {
455 media_content_sec_error("This item is already inserted. This may be normal operation because other process already did this (%s)", repl_path);
456 ret = MEDIA_CONTENT_ERROR_NONE;
458 media_content_sec_error("media_svc_insert_item_immediately failed : %d (%s)", ret, repl_path);
461 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
463 } else if (ret != MS_MEDIA_ERR_NONE) {
464 media_content_sec_error("media_svc_check_item_exist_by_path failed : %d (%s)", ret, repl_path);
465 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
468 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
469 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
471 if (STRING_VALID(storage_id))
472 ret = _media_info_get_media_info_from_db(repl_path, storage_id, (media_info_h)_media);
474 ret = _media_info_get_media_info_from_db(repl_path, DEFAULT_MEDIA_STORAGE_ID, (media_info_h)_media);
476 *info = (media_info_h)_media;
480 int media_info_insert_batch_to_db(
481 const char **path_array,
482 unsigned int array_length,
483 media_insert_completed_cb completed_cb,
486 char **repl_path_array = NULL;
488 int ret = MS_MEDIA_ERR_NONE;
489 char repl_path[MAX_QUERY_SIZE] = {0, };
491 media_content_retvm_if(path_array == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path_array");
492 media_content_retvm_if(array_length <= 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid array_length");
494 repl_path_array = calloc(1, sizeof(char *) * array_length);
496 for (idx = 0; idx < array_length; idx++) {
497 if (STRING_VALID(path_array[idx])) {
498 memset(repl_path, 0, sizeof(repl_path));
499 _media_content_replace_path(path_array[idx], repl_path);
500 repl_path_array[idx] = strndup(repl_path, strlen(repl_path));
502 media_content_error("path[%d] is invalid string", idx);
506 ret = __media_info_insert_batch(MEDIA_BATCH_INSERT_NORMAL, (const char **)repl_path_array, array_length, completed_cb, user_data);
507 for (idx = 0; idx < array_length; idx++)
508 SAFE_FREE(repl_path_array[idx]);
510 SAFE_FREE(repl_path_array);
515 int media_info_insert_burst_shot_to_db(const char **path_array, unsigned int array_length, media_insert_burst_shot_completed_cb callback, void *user_data)
517 char **repl_path_array = NULL;
519 int ret = MS_MEDIA_ERR_NONE;
520 char repl_path[MAX_QUERY_SIZE] = {0, };
522 media_content_retvm_if(path_array == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path_array");
523 media_content_retvm_if(array_length <= 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid array_length");
525 repl_path_array = calloc(1, sizeof(char *) * array_length);
527 for (idx = 0; idx < array_length; idx++) {
528 if (STRING_VALID(path_array[idx])) {
529 memset(repl_path, 0, sizeof(repl_path));
530 _media_content_replace_path(path_array[idx], repl_path);
531 repl_path_array[idx] = strndup(repl_path, strlen(repl_path));
533 media_content_error("path[%d] is invalid string", idx);
537 ret = __media_info_insert_batch(MEDIA_BATCH_INSERT_BURSTSHOT, (const char **)repl_path_array, array_length, callback, user_data);
538 for (idx = 0; idx < array_length; idx++)
539 SAFE_FREE(repl_path_array[idx]);
541 SAFE_FREE(repl_path_array);
546 #ifdef _USE_SENIOR_MODE
547 int media_info_insert_to_db_with_contact_data(const char *path, const char* contact, const char* app_data, media_info_h *info)
549 int ret = media_info_insert_to_db(path, info);
550 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_insert_to_db [%s] failed", path);
552 ret = media_info_set_contact(*info, contact);
553 if (ret != MEDIA_CONTENT_ERROR_NONE) {
554 media_content_error("media_info_set_contact [%s] failed", contact);
556 media_info_s* _media_info = (media_info_s*)*info;
557 ret = media_info_delete_from_db(_media_info->media_id);
558 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_delete_from_db [%s] failed", _media_info->media_id);
560 media_info_destroy(*info);
564 ret = media_info_set_app_data(*info, app_data);
565 if (ret != MEDIA_CONTENT_ERROR_NONE) {
566 media_content_error("media_info_set_app_data [%s] failed", app_data);
568 media_info_s* _media_info = (media_info_s*)*info;
569 ret = media_info_delete_from_db(_media_info->media_id);
570 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_delete_from_db [%s] failed", _media_info->media_id);
572 media_info_destroy(*info);
576 ret = media_info_update_to_db(*info);
577 if (ret != MEDIA_CONTENT_ERROR_NONE) {
578 media_content_error("media_info_update_to_db [] failed");
580 media_info_s* _media_info = (media_info_s*)*info;
581 ret = media_info_delete_from_db(_media_info->media_id);
582 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_delete_from_db [%s] failed", _media_info->media_id);
584 media_info_destroy(*info);
591 int media_info_delete_contact_from_db(const char* contact, const char* storage_id)
596 int media_info_get_media_info_by_path_from_db(const char* path, media_info_h* media)
598 char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0,};
599 int ret = MEDIA_CONTENT_ERROR_NONE;
600 media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid path");
601 media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid info");
603 memset(storage_id, 0x00, sizeof(storage_id));
604 ret = media_svc_get_storage_id(_content_get_db_handle(), path, storage_id);
605 if (ret != MS_MEDIA_ERR_NONE) {
606 media_content_error("media_svc_get_storage_id failed : %d", ret);
607 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
610 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
611 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
613 ret = _media_info_get_media_info_from_db(path, storage_id, (media_info_h)_media);
614 *media = (media_info_h)_media;
619 int media_info_delete_item(const char *media_id)
621 int ret = MEDIA_CONTENT_ERROR_NONE;
623 char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0,};
625 if (!STRING_VALID(media_id)) {
626 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
627 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
630 memset(storage_id, 0x00, sizeof(storage_id));
632 ret = __media_info_get_media_path_by_id_from_db(media_id, &path);
633 if (ret != MEDIA_CONTENT_ERROR_NONE) {
634 media_content_error("__media_info_get_media_path_by_id_from_db failed : %d", ret);
639 ret = _media_db_get_storage_id_by_media_id(media_id, storage_id);
640 if (ret != MEDIA_CONTENT_ERROR_NONE) {
641 media_content_error("_media_db_get_storage_id_by_media_id failed : %d", ret);
646 ret = media_svc_delete_item_by_path(_content_get_db_handle(), storage_id, path, tzplatform_getuid(TZ_USER_NAME));
647 if (ret != MEDIA_CONTENT_ERROR_NONE) {
648 media_content_error("remove from DB failed : %d", ret);
653 ret = media_svc_remove_file(path);
655 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
660 int media_info_delete_from_db(const char *media_id)
662 int ret = MEDIA_CONTENT_ERROR_NONE;
664 char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
666 if (!STRING_VALID(media_id)) {
667 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
668 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
671 memset(storage_id, 0x00, sizeof(storage_id));
673 ret = __media_info_get_media_path_by_id_from_db(media_id, &path);
674 if (ret != MEDIA_CONTENT_ERROR_NONE) {
675 media_content_error("__media_info_get_media_path_by_id_from_db failed : %d", ret);
680 ret = _media_db_get_storage_id_by_media_id(media_id, storage_id);
681 if (ret != MEDIA_CONTENT_ERROR_NONE) {
682 media_content_error("_media_db_get_storage_id_by_media_id failed : %d", ret);
687 ret = media_svc_delete_item_by_path(_content_get_db_handle(), storage_id, path, tzplatform_getuid(TZ_USER_NAME));
690 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
693 static int __media_info_delete_thumb_from_list(GArray *thumb_list)
697 char *thumb_path = NULL;
699 if (thumb_list != NULL) {
700 list_len = thumb_list->len;
701 for (i = 0; i < list_len; i++) {
702 thumb_path = g_array_index(thumb_list, char*, i);
703 media_content_debug("thumb path [%s]", thumb_path);
704 if (unlink(thumb_path) < 0)
705 media_content_stderror("failed to delete");
708 return MEDIA_CONTENT_ERROR_NONE;
711 static int __media_info_release_thumb_list(GArray *thumb_list)
715 char *thumb_path = NULL;
717 if (thumb_list != NULL) {
718 list_len = thumb_list->len;
719 for (i = 0; i < list_len; i++) {
720 thumb_path = g_array_index(thumb_list, char*, 0);
721 g_array_remove_index(thumb_list, 0);
722 SAFE_FREE(thumb_path);
725 g_array_free(thumb_list, FALSE);
728 return MEDIA_CONTENT_ERROR_NONE;
731 int media_info_delete_batch_from_db(filter_h filter)
733 int ret = MEDIA_CONTENT_ERROR_NONE;
735 char *query_string = NULL;
736 filter_s *_filter = NULL;
738 char *condition_query = NULL;
739 GArray *thumb_list = NULL;
741 media_content_retvm_if(filter == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid filter");
743 thumb_list = g_array_new(FALSE, FALSE, sizeof(char*));
745 /* Delete thumbnail of each item */
746 ret = _media_db_get_group_item(NULL, filter, __media_info_delete_batch_cb, thumb_list, MEDIA_GROUP_NONE);
748 _filter = (filter_s*)filter;
749 attr = _content_get_attirbute_handle();
751 if (_filter->condition) {
752 ret = _media_filter_attribute_generate(attr, _filter->condition, _filter->condition_collate_type, &condition_query);
753 if (ret != MEDIA_CONTENT_ERROR_NONE) {
754 __media_info_release_thumb_list(thumb_list);
759 if (STRING_VALID(condition_query)) {
760 if (_filter->storage_id == NULL) {
762 query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA_BATCH, "media", condition_query);
764 query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA_BATCH, _filter->storage_id, condition_query);
767 SAFE_FREE(condition_query);
768 __media_info_release_thumb_list(thumb_list);
770 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
773 ret = _content_query_sql(query_string);
774 if (ret == MEDIA_CONTENT_ERROR_NONE) {
775 /* Send notification for this
776 In this case, send noti for internal storage and external storage
778 media_content_debug("Batch deletion is successfull. Send notification for this");
779 if (_filter->storage_id != NULL) {
780 char *storage_path = NULL;
781 media_svc_get_storage_path(_content_get_db_handle(), _filter->storage_id, &storage_path);
782 if (STRING_VALID(storage_path))
783 media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, storage_path, -1, NULL, NULL);
785 SAFE_FREE(storage_path);
788 media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, MEDIA_ROOT_PATH_INTERNAL, -1, NULL, NULL);
789 media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, MEDIA_ROOT_PATH_SDCARD, -1, NULL, NULL);
792 __media_info_delete_thumb_from_list(thumb_list);
793 __media_info_release_thumb_list(thumb_list);
796 SAFE_FREE(condition_query);
797 SQLITE3_SAFE_FREE(query_string);
802 int media_info_destroy(media_info_h media)
804 int ret = MEDIA_CONTENT_ERROR_NONE;
805 media_info_s *_media = (media_info_s*)media;
808 SAFE_FREE(_media->media_id);
809 SAFE_FREE(_media->file_path);
810 SAFE_FREE(_media->display_name);
811 SAFE_FREE(_media->mime_type);
812 SAFE_FREE(_media->thumbnail_path);
813 SAFE_FREE(_media->description);
814 SAFE_FREE(_media->author);
815 SAFE_FREE(_media->provider);
816 SAFE_FREE(_media->content_name);
817 SAFE_FREE(_media->category);
818 SAFE_FREE(_media->location_tag);
819 SAFE_FREE(_media->age_rating);
820 SAFE_FREE(_media->keyword);
821 SAFE_FREE(_media->title);
822 #ifdef _USE_TV_PROFILE
823 SAFE_FREE(_media->modified_month);
825 SAFE_FREE(_media->weather);
826 SAFE_FREE(_media->storage_uuid);
827 #ifdef _USE_SENIOR_MODE
828 SAFE_FREE(_media->contact);
829 SAFE_FREE(_media->app_data);
832 if (_media->image_meta) {
833 SAFE_FREE(_media->image_meta->media_id);
834 SAFE_FREE(_media->image_meta->date_taken);
835 SAFE_FREE(_media->image_meta->burst_id);
836 SAFE_FREE(_media->image_meta->exposure_time);
837 SAFE_FREE(_media->image_meta->model);
838 SAFE_FREE(_media->image_meta->title);
839 SAFE_FREE(_media->image_meta->weather);
841 SAFE_FREE(_media->image_meta);
844 if (_media->video_meta) {
845 SAFE_FREE(_media->video_meta->media_id);
846 SAFE_FREE(_media->video_meta->title);
847 SAFE_FREE(_media->video_meta->album);
848 SAFE_FREE(_media->video_meta->artist);
849 SAFE_FREE(_media->video_meta->album_artist);
850 SAFE_FREE(_media->video_meta->genre);
851 SAFE_FREE(_media->video_meta->composer);
852 SAFE_FREE(_media->video_meta->year);
853 SAFE_FREE(_media->video_meta->recorded_date);
854 SAFE_FREE(_media->video_meta->copyright);
855 SAFE_FREE(_media->video_meta->track_num);
857 SAFE_FREE(_media->video_meta);
860 if (_media->audio_meta) {
861 SAFE_FREE(_media->audio_meta->media_id);
862 SAFE_FREE(_media->audio_meta->title);
863 SAFE_FREE(_media->audio_meta->album);
864 SAFE_FREE(_media->audio_meta->artist);
865 SAFE_FREE(_media->audio_meta->album_artist);
866 SAFE_FREE(_media->audio_meta->genre);
867 SAFE_FREE(_media->audio_meta->composer);
868 SAFE_FREE(_media->audio_meta->year);
869 SAFE_FREE(_media->audio_meta->recorded_date);
870 SAFE_FREE(_media->audio_meta->copyright);
871 SAFE_FREE(_media->audio_meta->track_num);
873 SAFE_FREE(_media->audio_meta);
878 ret = MEDIA_CONTENT_ERROR_NONE;
880 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
881 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
887 int media_info_clone(media_info_h *dst, media_info_h src)
889 int ret = MEDIA_CONTENT_ERROR_NONE;
890 media_info_s *_src = (media_info_s*)src;
893 media_info_s *_dst = (media_info_s*)calloc(1, sizeof(media_info_s));
894 media_content_retvm_if(_dst == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
896 if (_src->media_id) {
897 _dst->media_id = g_strdup(_src->media_id);
898 if (_dst->media_id == NULL) {
899 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
900 media_info_destroy((media_info_h)_dst);
901 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
904 if (_src->file_path) {
905 _dst->file_path = g_strdup(_src->file_path);
906 if (_dst->file_path == NULL) {
907 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
908 media_info_destroy((media_info_h)_dst);
909 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
912 if (_src->display_name != NULL) {
913 _dst->display_name = g_strdup(_src->display_name);
914 if (_dst->display_name == NULL) {
915 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
916 media_info_destroy((media_info_h)_dst);
917 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
920 if (_src->mime_type) {
921 _dst->mime_type = g_strdup(_src->mime_type);
922 if (_dst->mime_type == NULL) {
923 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
924 media_info_destroy((media_info_h)_dst);
925 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
928 if (_src->thumbnail_path != NULL) {
929 _dst->thumbnail_path = g_strdup(_src->thumbnail_path);
930 if (_dst->thumbnail_path == NULL) {
931 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
932 media_info_destroy((media_info_h)_dst);
933 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
936 if (_src->description != NULL) {
937 _dst->description = g_strdup(_src->description);
938 if (_dst->description == NULL) {
939 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
940 media_info_destroy((media_info_h)_dst);
941 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
945 if (_src->weather != NULL) {
946 _dst->weather = g_strdup(_src->weather);
947 if (_dst->weather == NULL) {
948 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
949 media_info_destroy((media_info_h)_dst);
950 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
954 if (_src->title != NULL) {
955 _dst->title = g_strdup(_src->title);
956 if (_dst->title == NULL) {
957 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
958 media_info_destroy((media_info_h)_dst);
959 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
962 if (_src->author != NULL) {
963 _dst->author = g_strdup(_src->author);
964 if (_dst->author == NULL) {
965 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
966 media_info_destroy((media_info_h)_dst);
967 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
970 if (_src->provider != NULL) {
971 _dst->provider = g_strdup(_src->provider);
972 if (_dst->provider == NULL) {
973 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
974 media_info_destroy((media_info_h)_dst);
975 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
978 if (_src->content_name != NULL) {
979 _dst->content_name = g_strdup(_src->content_name);
980 if (_dst->content_name == NULL) {
981 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
982 media_info_destroy((media_info_h)_dst);
983 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
986 if (_src->category != NULL) {
987 _dst->category = g_strdup(_src->category);
988 if (_dst->category == NULL) {
989 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
990 media_info_destroy((media_info_h)_dst);
991 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
994 if (_src->location_tag != NULL) {
995 _dst->location_tag = g_strdup(_src->location_tag);
996 if (_dst->location_tag == NULL) {
997 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
998 media_info_destroy((media_info_h)_dst);
999 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1002 if (_src->age_rating != NULL) {
1003 _dst->age_rating = g_strdup(_src->age_rating);
1004 if (_dst->age_rating == NULL) {
1005 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1006 media_info_destroy((media_info_h)_dst);
1007 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1010 if (_src->keyword != NULL) {
1011 _dst->keyword = g_strdup(_src->keyword);
1012 if (_dst->keyword == NULL) {
1013 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1014 media_info_destroy((media_info_h)_dst);
1015 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1019 if (_src->storage_uuid != NULL) {
1020 _dst->storage_uuid = g_strdup(_src->storage_uuid);
1021 if (_dst->storage_uuid == NULL) {
1022 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1023 media_info_destroy((media_info_h)_dst);
1024 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1027 #ifdef _USE_TV_PROFILE
1028 if (STRING_VALID(_src->modified_month)) {
1029 _dst->modified_month = strdup(_src->modified_month);
1030 if (_dst->modified_month == NULL) {
1031 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1032 media_info_destroy((media_info_h)_dst);
1033 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1037 #ifdef _USE_SENIOR_MODE
1038 if (STRING_VALID(_src->contact)) {
1039 _dst->contact = strdup(_src->contact);
1040 if (_dst->contact == NULL) {
1041 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1042 media_info_destroy((media_info_h)_dst);
1043 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1047 if (STRING_VALID(_src->app_data)) {
1048 _dst->app_data = strdup(_src->app_data);
1049 if (_dst->app_data == NULL) {
1050 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1051 media_info_destroy((media_info_h)_dst);
1052 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1057 _dst->media_type = _src->media_type;
1058 _dst->size = _src->size;
1059 _dst->added_time = _src->added_time;
1060 _dst->modified_time = _src->modified_time;
1061 _dst->timeline = _src->timeline;
1062 _dst->longitude = _src->longitude;
1063 _dst->latitude = _src->latitude;
1064 _dst->altitude = _src->altitude;
1065 _dst->rating = _src->rating;
1066 _dst->favourite = _src->favourite;
1067 _dst->is_drm = _src->is_drm;
1068 _dst->storage_type = _src->storage_type;
1069 _dst->played_count = _src->played_count;
1070 _dst->played_time = _src->played_time;
1071 _dst->played_position = _src->played_position;
1072 _dst->sync_status = _src->sync_status;
1073 _dst->request_id = _src->request_id;
1074 _dst->face_request_id = _src->face_request_id;
1075 _dst->is_360 = _src->is_360;
1076 #ifdef _USE_TV_PROFILE
1077 _dst->extract_flag = _src->extract_flag;
1080 if (_src->media_type == MEDIA_CONTENT_TYPE_IMAGE && _src->image_meta) {
1081 _dst->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
1082 if (_dst->image_meta == NULL) {
1083 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1084 media_info_destroy((media_info_h)_dst);
1085 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1088 if (_src->image_meta->media_id != NULL) {
1089 _dst->image_meta->media_id = g_strdup(_src->image_meta->media_id);
1090 if (_dst->image_meta->media_id == NULL) {
1091 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1092 media_info_destroy((media_info_h)_dst);
1093 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1097 if (_src->image_meta->date_taken != NULL) {
1098 _dst->image_meta->date_taken = g_strdup(_src->image_meta->date_taken);
1099 if (_dst->image_meta->date_taken == NULL) {
1100 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1101 media_info_destroy((media_info_h)_dst);
1102 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1106 if (_src->image_meta->burst_id != NULL) {
1107 _dst->image_meta->burst_id = g_strdup(_src->image_meta->burst_id);
1108 if (_dst->image_meta->burst_id == NULL) {
1109 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1110 media_info_destroy((media_info_h)_dst);
1111 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1115 if (_src->image_meta->weather != NULL) {
1116 _dst->image_meta->weather = g_strdup(_src->image_meta->weather);
1117 if (_dst->image_meta->weather == NULL) {
1118 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1119 media_info_destroy((media_info_h)_dst);
1120 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1124 if (_src->image_meta->exposure_time != NULL) {
1125 _dst->image_meta->exposure_time = g_strdup(_src->image_meta->exposure_time);
1126 if (_dst->image_meta->exposure_time == NULL) {
1127 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1128 media_info_destroy((media_info_h)_dst);
1129 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1133 if (_src->image_meta->model != NULL) {
1134 _dst->image_meta->model = g_strdup(_src->image_meta->model);
1135 if (_dst->image_meta->model == NULL) {
1136 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1137 media_info_destroy((media_info_h)_dst);
1138 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1142 _dst->image_meta->fnumber = _src->image_meta->fnumber;
1143 _dst->image_meta->iso = _src->image_meta->iso;
1144 _dst->image_meta->width = _src->image_meta->width;
1145 _dst->image_meta->height = _src->image_meta->height;
1146 _dst->image_meta->orientation = _src->image_meta->orientation;
1148 } else if (_src->media_type == MEDIA_CONTENT_TYPE_VIDEO && _src->video_meta) {
1149 _dst->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
1150 if (_dst->video_meta == NULL) {
1151 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1152 media_info_destroy((media_info_h)_dst);
1153 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1156 if (_src->video_meta->media_id != NULL) {
1157 _dst->video_meta->media_id = g_strdup(_src->video_meta->media_id);
1158 if (_dst->video_meta->media_id == NULL) {
1159 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1160 media_info_destroy((media_info_h)_dst);
1161 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1164 if (_src->video_meta->title != NULL) {
1165 _dst->video_meta->title = g_strdup(_src->video_meta->title);
1166 if (_dst->video_meta->title == NULL) {
1167 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1168 media_info_destroy((media_info_h)_dst);
1169 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1172 if (_src->video_meta->album != NULL) {
1173 _dst->video_meta->album = g_strdup(_src->video_meta->album);
1174 if (_dst->video_meta->album == NULL) {
1175 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1176 media_info_destroy((media_info_h)_dst);
1177 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1180 if (_src->video_meta->artist != NULL) {
1181 _dst->video_meta->artist = g_strdup(_src->video_meta->artist);
1182 if (_dst->video_meta->artist == NULL) {
1183 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1184 media_info_destroy((media_info_h)_dst);
1185 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1188 if (_src->video_meta->album_artist != NULL) {
1189 _dst->video_meta->album_artist = g_strdup(_src->video_meta->album_artist);
1190 if (_dst->video_meta->album_artist == NULL) {
1191 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1192 media_info_destroy((media_info_h)_dst);
1193 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1196 if (_src->video_meta->genre != NULL) {
1197 _dst->video_meta->genre = g_strdup(_src->video_meta->genre);
1198 if (_dst->video_meta->genre == NULL) {
1199 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1200 media_info_destroy((media_info_h)_dst);
1201 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1204 if (_src->video_meta->composer != NULL) {
1205 _dst->video_meta->composer = g_strdup(_src->video_meta->composer);
1206 if (_dst->video_meta->composer == NULL) {
1207 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1208 media_info_destroy((media_info_h)_dst);
1209 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1212 if (_src->video_meta->year != NULL) {
1213 _dst->video_meta->year = g_strdup(_src->video_meta->year);
1214 if (_dst->video_meta->year == NULL) {
1215 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1216 media_info_destroy((media_info_h)_dst);
1217 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1220 if (_src->video_meta->recorded_date != NULL) {
1221 _dst->video_meta->recorded_date = g_strdup(_src->video_meta->recorded_date);
1222 if (_dst->video_meta->recorded_date == NULL) {
1223 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1224 media_info_destroy((media_info_h)_dst);
1225 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1228 if (_src->video_meta->copyright != NULL) {
1229 _dst->video_meta->copyright = g_strdup(_src->video_meta->copyright);
1230 if (_dst->video_meta->copyright == NULL) {
1231 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1232 media_info_destroy((media_info_h)_dst);
1233 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1236 if (_src->video_meta->track_num != NULL) {
1237 _dst->video_meta->track_num = g_strdup(_src->video_meta->track_num);
1238 if (_dst->video_meta->track_num == NULL) {
1239 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1240 media_info_destroy((media_info_h)_dst);
1241 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1245 _dst->video_meta->width = _src->video_meta->width;
1246 _dst->video_meta->height = _src->video_meta->height;
1247 _dst->video_meta->duration = _src->video_meta->duration;
1248 _dst->video_meta->bitrate = _src->video_meta->bitrate;
1249 _dst->video_meta->played_count = _src->video_meta->played_count;
1250 _dst->video_meta->played_time = _src->video_meta->played_time;
1251 _dst->video_meta->played_position = _src->video_meta->played_position;
1253 } else if ((_src->media_type == MEDIA_CONTENT_TYPE_MUSIC || _src->media_type == MEDIA_CONTENT_TYPE_SOUND) && _src->audio_meta) {
1254 _dst->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
1255 if (_dst->audio_meta == NULL) {
1256 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1257 media_info_destroy((media_info_h)_dst);
1258 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1261 if (_src->audio_meta->media_id != NULL) {
1262 _dst->audio_meta->media_id = g_strdup(_src->audio_meta->media_id);
1263 if (_dst->audio_meta->media_id == NULL) {
1264 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1265 media_info_destroy((media_info_h)_dst);
1266 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1269 if (_src->audio_meta->title != NULL) {
1270 _dst->audio_meta->title = g_strdup(_src->audio_meta->title);
1271 if (_dst->audio_meta->title == NULL) {
1272 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1273 media_info_destroy((media_info_h)_dst);
1274 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1277 if (_src->audio_meta->album != NULL) {
1278 _dst->audio_meta->album = g_strdup(_src->audio_meta->album);
1279 if (_dst->audio_meta->album == NULL) {
1280 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1281 media_info_destroy((media_info_h)_dst);
1282 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1285 if (_src->audio_meta->artist != NULL) {
1286 _dst->audio_meta->artist = g_strdup(_src->audio_meta->artist);
1287 if (_dst->audio_meta->artist == NULL) {
1288 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1289 media_info_destroy((media_info_h)_dst);
1290 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1293 if (_src->audio_meta->album_artist != NULL) {
1294 _dst->audio_meta->album_artist = g_strdup(_src->audio_meta->album_artist);
1295 if (_dst->audio_meta->album_artist == NULL) {
1296 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1297 media_info_destroy((media_info_h)_dst);
1298 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1301 if (_src->audio_meta->genre != NULL) {
1302 _dst->audio_meta->genre = g_strdup(_src->audio_meta->genre);
1303 if (_dst->audio_meta->genre == NULL) {
1304 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1305 media_info_destroy((media_info_h)_dst);
1306 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1309 if (_src->audio_meta->composer != NULL) {
1310 _dst->audio_meta->composer = g_strdup(_src->audio_meta->composer);
1311 if (_dst->audio_meta->composer == NULL) {
1312 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1313 media_info_destroy((media_info_h)_dst);
1314 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1317 if (_src->audio_meta->year != NULL) {
1318 _dst->audio_meta->year = g_strdup(_src->audio_meta->year);
1319 if (_dst->audio_meta->year == NULL) {
1320 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1321 media_info_destroy((media_info_h)_dst);
1322 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1325 if (_src->audio_meta->recorded_date != NULL) {
1326 _dst->audio_meta->recorded_date = g_strdup(_src->audio_meta->recorded_date);
1327 if (_dst->audio_meta->recorded_date == NULL) {
1328 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1329 media_info_destroy((media_info_h)_dst);
1330 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1333 if (_src->audio_meta->copyright != NULL) {
1334 _dst->audio_meta->copyright = g_strdup(_src->audio_meta->copyright);
1335 if (_dst->audio_meta->copyright == NULL) {
1336 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1337 media_info_destroy((media_info_h)_dst);
1338 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1341 if (_src->audio_meta->track_num != NULL) {
1342 _dst->audio_meta->track_num = g_strdup(_src->audio_meta->track_num);
1343 if (_dst->audio_meta->track_num == NULL) {
1344 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1345 media_info_destroy((media_info_h)_dst);
1346 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1350 _dst->audio_meta->channel = _src->audio_meta->channel;
1351 _dst->audio_meta->samplerate = _src->audio_meta->samplerate;
1352 _dst->audio_meta->duration = _src->audio_meta->duration;
1353 _dst->audio_meta->bitrate = _src->audio_meta->bitrate;
1354 _dst->audio_meta->bitpersample = _src->audio_meta->bitpersample;
1355 _dst->audio_meta->played_count = _src->audio_meta->played_count;
1356 _dst->audio_meta->played_time = _src->audio_meta->played_time;
1357 _dst->audio_meta->played_position = _src->audio_meta->played_position;
1359 *dst = (media_info_h)_dst;
1361 ret = MEDIA_CONTENT_ERROR_NONE;
1363 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1364 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1370 int media_info_get_media_count_from_db(filter_h filter, int *media_count)
1372 int ret = MEDIA_CONTENT_ERROR_NONE;
1374 if (media_count == NULL) {
1375 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1376 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1381 ret = _media_db_get_group_item_count(NULL, filter, MEDIA_GROUP_NONE, media_count);
1386 int media_info_foreach_media_from_db(filter_h filter, media_info_cb callback, void *user_data)
1388 int ret = MEDIA_CONTENT_ERROR_NONE;
1390 media_content_retvm_if(callback == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid callback");
1392 ret = _media_db_get_group_item(NULL, filter, callback, user_data, MEDIA_GROUP_NONE);
1397 int media_info_get_tag_count_from_db(const char *media_id, filter_h filter, int *tag_count)
1399 int ret = MEDIA_CONTENT_ERROR_NONE;
1401 if (STRING_VALID(media_id) && tag_count) {
1402 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_TAG_BY_MEDIA_ID, tag_count);
1404 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1405 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1411 int media_info_foreach_tag_from_db(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
1413 int ret = MEDIA_CONTENT_ERROR_NONE;
1415 if ((callback != NULL) && STRING_VALID(media_id)) {
1416 ret = _media_db_get_tag(media_id, filter, callback, user_data);
1418 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1419 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1425 int media_info_get_bookmark_count_from_db(const char *media_id, filter_h filter, int *bookmark_count)
1427 int ret = MEDIA_CONTENT_ERROR_NONE;
1429 if (STRING_VALID(media_id) && bookmark_count) {
1430 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID, bookmark_count);
1432 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1433 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1439 int media_info_foreach_bookmark_from_db(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
1441 int ret = MEDIA_CONTENT_ERROR_NONE;
1443 if ((callback != NULL) && STRING_VALID(media_id)) {
1444 ret = _media_db_get_bookmark(media_id, filter, callback, user_data);
1446 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1447 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1453 int media_info_get_face_count_from_db(const char *media_id, filter_h filter, int *face_count)
1455 int ret = MEDIA_CONTENT_ERROR_NONE;
1457 if (STRING_VALID(media_id) && face_count) {
1458 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_FACE_BY_MEDIA_ID, face_count);
1460 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1461 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1467 int media_info_foreach_face_from_db(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
1469 int ret = MEDIA_CONTENT_ERROR_NONE;
1471 if ((callback != NULL) && STRING_VALID(media_id)) {
1472 ret = _media_db_get_face(media_id, filter, callback, user_data);
1474 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1475 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1481 int media_info_get_image(media_info_h media, image_meta_h *image)
1483 int ret = MEDIA_CONTENT_ERROR_NONE;
1485 media_info_s *_media = (media_info_s*)media;
1487 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
1488 media_content_retvm_if(_media->media_type != MEDIA_CONTENT_TYPE_IMAGE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_type");
1489 media_content_retvm_if(_media->image_meta == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid image_meta");
1491 image_meta_s *_image = (image_meta_s*)calloc(1, sizeof(image_meta_s));
1492 media_content_retvm_if(_image == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1494 _image->media_id = g_strdup(_media->media_id);
1495 _image->width = _media->image_meta->width;
1496 _image->height = _media->image_meta->height;
1497 _image->orientation = _media->image_meta->orientation;
1498 _image->fnumber = _media->image_meta->fnumber;
1499 _image->iso = _media->image_meta->iso;
1500 _image->date_taken = g_strdup(_media->image_meta->date_taken);
1501 _image->title = g_strdup(_media->image_meta->title);
1502 _image->burst_id = g_strdup(_media->image_meta->burst_id);
1503 _image->weather = g_strdup(_media->image_meta->weather);
1504 _image->exposure_time = g_strdup(_media->image_meta->exposure_time);
1505 _image->model = g_strdup(_media->image_meta->model);
1507 *image = (image_meta_h)_image;
1512 int media_info_get_video(media_info_h media, video_meta_h *video)
1514 int ret = MEDIA_CONTENT_ERROR_NONE;
1516 media_info_s *_media = (media_info_s*)media;
1518 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
1519 media_content_retvm_if(_media->media_type != MEDIA_CONTENT_TYPE_VIDEO, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_type");
1520 media_content_retvm_if(_media->video_meta == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid video_meta");
1522 video_meta_s *_video = (video_meta_s*)calloc(1, sizeof(video_meta_s));
1523 media_content_retvm_if(_video == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1525 _video->media_id = g_strdup(_media->media_id);
1526 _video->title = g_strdup(_media->video_meta->title);
1527 _video->album = g_strdup(_media->video_meta->album);
1528 _video->artist = g_strdup(_media->video_meta->artist);
1529 _video->album_artist = g_strdup(_media->video_meta->album_artist);
1530 _video->genre = g_strdup(_media->video_meta->genre);
1531 _video->composer = g_strdup(_media->video_meta->composer);
1532 _video->year = g_strdup(_media->video_meta->year);
1533 _video->recorded_date = g_strdup(_media->video_meta->recorded_date);
1534 _video->copyright = g_strdup(_media->video_meta->copyright);
1535 _video->track_num = g_strdup(_media->video_meta->track_num);
1537 _video->width = _media->video_meta->width;
1538 _video->height = _media->video_meta->height;
1539 _video->duration = _media->video_meta->duration;
1540 _video->bitrate = _media->video_meta->bitrate;
1541 _video->played_count = _media->video_meta->played_count;
1542 _video->played_time = _media->video_meta->played_time;
1543 _video->played_position = _media->video_meta->played_position;
1545 *video = (video_meta_h)_video;
1550 int media_info_get_audio(media_info_h media, audio_meta_h *audio)
1552 int ret = MEDIA_CONTENT_ERROR_NONE;
1554 media_info_s *_media = (media_info_s*)media;
1556 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
1557 media_content_retvm_if(_media->media_type != MEDIA_CONTENT_TYPE_MUSIC && _media->media_type != MEDIA_CONTENT_TYPE_SOUND, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_type");
1558 media_content_retvm_if(_media->audio_meta == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid audio_meta");
1560 audio_meta_s *_audio = (audio_meta_s*)calloc(1, sizeof(audio_meta_s));
1561 media_content_retvm_if(_audio == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1563 _audio->media_id = g_strdup(_media->media_id);
1564 _audio->title = g_strdup(_media->audio_meta->title);
1565 _audio->album = g_strdup(_media->audio_meta->album);
1566 _audio->artist = g_strdup(_media->audio_meta->artist);
1567 _audio->album_artist = g_strdup(_media->audio_meta->album_artist);
1568 _audio->genre = g_strdup(_media->audio_meta->genre);
1569 _audio->composer = g_strdup(_media->audio_meta->composer);
1570 _audio->year = g_strdup(_media->audio_meta->year);
1571 _audio->recorded_date = g_strdup(_media->audio_meta->recorded_date);
1572 _audio->copyright = g_strdup(_media->audio_meta->copyright);
1573 _audio->track_num = g_strdup(_media->audio_meta->track_num);
1575 _audio->duration = _media->audio_meta->duration;
1576 _audio->bitrate = _media->audio_meta->bitrate;
1577 _audio->bitpersample = _media->audio_meta->bitpersample;
1578 _audio->samplerate = _media->audio_meta->samplerate;
1579 _audio->channel = _media->audio_meta->channel;
1580 _audio->played_time = _media->audio_meta->played_time;
1581 _audio->played_count = _media->audio_meta->played_count;
1582 _audio->played_position = _media->audio_meta->played_position;
1584 *audio = (audio_meta_h)_audio;
1589 int media_info_get_media_id(media_info_h media, char **media_id)
1591 int ret = MEDIA_CONTENT_ERROR_NONE;
1592 media_info_s *_media = (media_info_s*)media;
1594 if (_media && media_id) {
1595 if (STRING_VALID(_media->media_id)) {
1596 *media_id = strdup(_media->media_id);
1597 media_content_retvm_if(*media_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1601 ret = MEDIA_CONTENT_ERROR_NONE;
1603 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1604 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1610 int media_info_get_file_path(media_info_h media, char **path)
1612 int ret = MEDIA_CONTENT_ERROR_NONE;
1613 media_info_s *_media = (media_info_s*)media;
1615 if (_media && path) {
1616 if (STRING_VALID(_media->file_path)) {
1617 *path = strdup(_media->file_path);
1618 media_content_retvm_if(*path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1622 ret = MEDIA_CONTENT_ERROR_NONE;
1625 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1626 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1632 int media_info_get_display_name(media_info_h media, char **name)
1634 int ret = MEDIA_CONTENT_ERROR_NONE;
1635 media_info_s *_media = (media_info_s*)media;
1636 if (_media && name) {
1637 if (_media->display_name != NULL) {
1638 *name = g_strdup(_media->display_name);
1639 media_content_retvm_if(*name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1643 ret = MEDIA_CONTENT_ERROR_NONE;
1646 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1647 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1653 int media_info_get_media_type(media_info_h media, media_content_type_e *type)
1655 int ret = MEDIA_CONTENT_ERROR_NONE;
1656 media_info_s *_media = (media_info_s*)media;
1657 if (_media && type) {
1658 *type = _media->media_type;
1659 ret = MEDIA_CONTENT_ERROR_NONE;
1661 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1662 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1668 int media_info_get_mime_type(media_info_h media, char **mime_type)
1670 int ret = MEDIA_CONTENT_ERROR_NONE;
1671 media_info_s *_media = (media_info_s*)media;
1673 if (_media && mime_type) {
1674 if (STRING_VALID(_media->mime_type)) {
1675 *mime_type = strdup(_media->mime_type);
1676 media_content_retvm_if(*mime_type == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1680 ret = MEDIA_CONTENT_ERROR_NONE;
1682 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1683 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1689 int media_info_get_size(media_info_h media, unsigned long long *size)
1691 int ret = MEDIA_CONTENT_ERROR_NONE;
1692 media_info_s *_media = (media_info_s*)media;
1694 if (_media && size) {
1695 *size = _media->size;
1696 ret = MEDIA_CONTENT_ERROR_NONE;
1698 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1699 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1705 int media_info_get_added_time(media_info_h media, time_t *added_time)
1707 int ret = MEDIA_CONTENT_ERROR_NONE;
1708 media_info_s *_media = (media_info_s*)media;
1709 if (_media && added_time) {
1710 *added_time = _media->added_time;
1711 ret = MEDIA_CONTENT_ERROR_NONE;
1713 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1714 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1720 int media_info_get_modified_time(media_info_h media, time_t* time)
1722 int ret = MEDIA_CONTENT_ERROR_NONE;
1723 media_info_s *_media = (media_info_s*)media;
1724 if (_media && time) {
1725 *time = _media->modified_time;
1726 ret = MEDIA_CONTENT_ERROR_NONE;
1728 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1729 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1735 int media_info_get_timeline(media_info_h media, time_t* time)
1737 int ret = MEDIA_CONTENT_ERROR_NONE;
1738 media_info_s *_media = (media_info_s*)media;
1739 if (_media && time) {
1740 *time = _media->timeline;
1741 ret = MEDIA_CONTENT_ERROR_NONE;
1743 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1744 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1750 int media_info_get_thumbnail_path(media_info_h media, char **path)
1752 int ret = MEDIA_CONTENT_ERROR_NONE;
1753 media_info_s *_media = (media_info_s*)media;
1754 if (_media && path) {
1755 if (_media->thumbnail_path != NULL) {
1756 *path = g_strdup(_media->thumbnail_path);
1757 media_content_retvm_if(*path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1761 ret = MEDIA_CONTENT_ERROR_NONE;
1764 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1765 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1771 int media_info_get_title(media_info_h media, char **title)
1773 int ret = MEDIA_CONTENT_ERROR_NONE;
1774 media_info_s *_media = (media_info_s*)media;
1776 if (_media && title) { /*title can be empty string*/
1777 if (_media->title != NULL) {
1778 *title = g_strdup(_media->title);
1779 media_content_retvm_if(*title == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1783 ret = MEDIA_CONTENT_ERROR_NONE;
1785 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1786 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1791 #ifdef _USE_TV_PROFILE
1792 int media_info_get_extract_flag(media_info_h media, int *extract_flag)
1794 int ret = MEDIA_CONTENT_ERROR_NONE;
1795 media_info_s *_media = (media_info_s *)media;
1797 if (_media && extract_flag) {
1798 *extract_flag = _media->extract_flag;
1799 ret = MEDIA_CONTENT_ERROR_NONE;
1801 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1802 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1809 int media_info_get_description(media_info_h media, char **description)
1811 int ret = MEDIA_CONTENT_ERROR_NONE;
1812 media_info_s *_media = (media_info_s*)media;
1814 if (_media && description) {
1815 if (_media->description != NULL) { /*description can be empty string*/
1816 *description = g_strdup(_media->description);
1817 media_content_retvm_if(*description == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1819 *description = NULL;
1821 ret = MEDIA_CONTENT_ERROR_NONE;
1823 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1824 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1830 int media_info_get_longitude(media_info_h media, double* longitude)
1832 int ret = MEDIA_CONTENT_ERROR_NONE;
1833 media_info_s *_media = (media_info_s*)media;
1835 if (_media && longitude) {
1836 *longitude = _media->longitude;
1837 ret = MEDIA_CONTENT_ERROR_NONE;
1839 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1840 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1845 int media_info_get_latitude(media_info_h media, double* latitude)
1847 int ret = MEDIA_CONTENT_ERROR_NONE;
1848 media_info_s *_media = (media_info_s*)media;
1850 if (_media && latitude) {
1851 *latitude = _media->latitude;
1852 ret = MEDIA_CONTENT_ERROR_NONE;
1854 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1855 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1861 int media_info_get_altitude(media_info_h media, double *altitude)
1863 int ret = MEDIA_CONTENT_ERROR_NONE;
1864 media_info_s *_media = (media_info_s*)media;
1866 if (_media && altitude) {
1867 *altitude = _media->altitude;
1868 ret = MEDIA_CONTENT_ERROR_NONE;
1870 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1871 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1877 int media_info_get_weather(media_info_h media, char **weather)
1879 int ret = MEDIA_CONTENT_ERROR_NONE;
1880 media_info_s *_media = (media_info_s*)media;
1882 if (_media && weather) {
1883 if (_media->weather != NULL) {
1884 *weather = strdup(_media->weather);
1885 media_content_retvm_if(*weather == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1889 ret = MEDIA_CONTENT_ERROR_NONE;
1891 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1892 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1898 int media_info_get_rating(media_info_h media, int *rating)
1900 int ret = MEDIA_CONTENT_ERROR_NONE;
1901 media_info_s *_media = (media_info_s*)media;
1903 if (_media && rating) {
1904 *rating = _media->rating;
1905 ret = MEDIA_CONTENT_ERROR_NONE;
1907 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1908 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1914 int media_info_get_favorite(media_info_h media, bool* favorite)
1916 int ret = MEDIA_CONTENT_ERROR_NONE;
1917 media_info_s *_media = (media_info_s*)media;
1919 if (_media && favorite) {
1920 *favorite = _media->favourite;
1921 ret = MEDIA_CONTENT_ERROR_NONE;
1923 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1924 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1930 int media_info_get_author(media_info_h media, char **author)
1932 int ret = MEDIA_CONTENT_ERROR_NONE;
1933 media_info_s *_media = (media_info_s*)media;
1935 if (_media && author) {
1936 if (_media->author != NULL) {
1937 *author = strdup(_media->author);
1938 media_content_retvm_if(*author == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1942 ret = MEDIA_CONTENT_ERROR_NONE;
1944 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1945 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1951 int media_info_get_provider(media_info_h media, char **provider)
1953 int ret = MEDIA_CONTENT_ERROR_NONE;
1954 media_info_s *_media = (media_info_s*)media;
1956 if (_media && provider) {
1957 if (_media->provider != NULL) {
1958 *provider = strdup(_media->provider);
1959 media_content_retvm_if(*provider == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1963 ret = MEDIA_CONTENT_ERROR_NONE;
1965 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1966 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1972 int media_info_get_content_name(media_info_h media, char **content_name)
1974 int ret = MEDIA_CONTENT_ERROR_NONE;
1975 media_info_s *_media = (media_info_s*)media;
1977 if (_media && content_name) {
1978 if (_media->content_name != NULL) {
1979 *content_name = strdup(_media->content_name);
1980 media_content_retvm_if(*content_name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1982 *content_name = NULL;
1984 ret = MEDIA_CONTENT_ERROR_NONE;
1986 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1987 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1993 int media_info_get_category(media_info_h media, char **category)
1995 int ret = MEDIA_CONTENT_ERROR_NONE;
1996 media_info_s *_media = (media_info_s*)media;
1998 if (_media && category) {
1999 if (_media->category != NULL) {
2000 *category = strdup(_media->category);
2001 media_content_retvm_if(*category == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2005 ret = MEDIA_CONTENT_ERROR_NONE;
2007 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2008 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2014 int media_info_get_location_tag(media_info_h media, char **location_tag)
2016 int ret = MEDIA_CONTENT_ERROR_NONE;
2017 media_info_s *_media = (media_info_s*)media;
2019 if (_media && location_tag) {
2020 if (_media->location_tag != NULL) {
2021 *location_tag = strdup(_media->location_tag);
2022 media_content_retvm_if(*location_tag == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2024 *location_tag = NULL;
2026 ret = MEDIA_CONTENT_ERROR_NONE;
2028 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2029 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2035 int media_info_get_age_rating(media_info_h media, char **age_rating)
2037 int ret = MEDIA_CONTENT_ERROR_NONE;
2038 media_info_s *_media = (media_info_s*)media;
2040 if (_media && age_rating) {
2041 if (_media->age_rating != NULL) {
2042 *age_rating = strdup(_media->age_rating);
2043 media_content_retvm_if(*age_rating == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2047 ret = MEDIA_CONTENT_ERROR_NONE;
2049 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2050 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2056 int media_info_get_keyword(media_info_h media, char **keyword)
2058 int ret = MEDIA_CONTENT_ERROR_NONE;
2059 media_info_s *_media = (media_info_s*)media;
2061 if (_media && keyword) {
2062 if (_media->keyword != NULL) {
2063 *keyword = strdup(_media->keyword);
2064 media_content_retvm_if(*keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2068 ret = MEDIA_CONTENT_ERROR_NONE;
2070 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2071 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2077 int media_info_get_storage_id(media_info_h media, char **storage_id)
2079 int ret = MEDIA_CONTENT_ERROR_NONE;
2080 media_info_s *_media = (media_info_s*)media;
2082 if (_media && storage_id) {
2083 if (STRING_VALID(_media->storage_uuid)) {
2084 *storage_id = strdup(_media->storage_uuid);
2085 media_content_retvm_if(*storage_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2088 ret = MEDIA_CONTENT_ERROR_DB_FAILED;
2090 ret = MEDIA_CONTENT_ERROR_NONE;
2092 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2093 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2099 int media_info_is_drm(media_info_h media, bool *is_drm)
2101 int ret = MEDIA_CONTENT_ERROR_NONE;
2102 media_info_s *_media = (media_info_s*)media;
2105 *is_drm = _media->is_drm;
2106 ret = MEDIA_CONTENT_ERROR_NONE;
2108 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2109 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2115 int media_info_is_360_content(media_info_h media, bool *is_360)
2117 int ret = MEDIA_CONTENT_ERROR_NONE;
2118 media_info_s *_media = (media_info_s*)media;
2121 *is_360 = _media->is_360;
2122 ret = MEDIA_CONTENT_ERROR_NONE;
2124 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2125 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2131 int media_info_get_storage_type(media_info_h media, media_content_storage_e *storage_type)
2133 int ret = MEDIA_CONTENT_ERROR_NONE;
2134 media_info_s *_media = (media_info_s*)media;
2136 if (_media && storage_type) {
2137 *storage_type = _media->storage_type;
2138 ret = MEDIA_CONTENT_ERROR_NONE;
2140 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2141 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2147 #ifdef _USE_TV_PROFILE
2148 int media_info_get_played_position(media_info_h media, int *played_position)
2150 int ret = MEDIA_CONTENT_ERROR_NONE;
2151 media_info_s *_media = (media_info_s*)media;
2154 *played_position = _media->played_position;
2155 ret = MEDIA_CONTENT_ERROR_NONE;
2157 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2158 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2165 int media_info_get_played_count(media_info_h media, int *played_count)
2167 int ret = MEDIA_CONTENT_ERROR_NONE;
2168 media_info_s *_media = (media_info_s*)media;
2171 *played_count = _media->played_count;
2172 ret = MEDIA_CONTENT_ERROR_NONE;
2174 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2175 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2181 int media_info_get_played_time(media_info_h media, time_t* played_time)
2183 int ret = MEDIA_CONTENT_ERROR_NONE;
2184 media_info_s *_media = (media_info_s*)media;
2187 *played_time = _media->played_time;
2188 ret = MEDIA_CONTENT_ERROR_NONE;
2190 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2191 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2197 int media_info_increase_played_count(media_info_h media)
2199 int ret = MEDIA_CONTENT_ERROR_NONE;
2201 media_info_s *_media = (media_info_s*)media;
2204 _media->played_count += 1;
2206 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2207 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2213 #ifdef _USE_TV_PROFILE
2214 int media_info_get_modified_month(media_info_h media, char **modified_month)
2216 int ret = MEDIA_CONTENT_ERROR_NONE;
2217 media_info_s *_media = (media_info_s*)media;
2219 if (_media && modified_month) {
2220 if (STRING_VALID(_media->modified_month)) {
2221 *modified_month = strdup(_media->modified_month);
2222 if (*modified_month == NULL) {
2223 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2224 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2227 *modified_month = NULL;
2229 ret = MEDIA_CONTENT_ERROR_NONE;
2231 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2232 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2238 #ifdef _USE_SENIOR_MODE
2239 int media_info_get_contact(media_info_h media, char **contact)
2241 int ret = MEDIA_CONTENT_ERROR_NONE;
2242 media_info_s *_media = (media_info_s*)media;
2244 if (_media && contact) {
2245 if (STRING_VALID(_media->contact)) {
2246 *contact = strdup(_media->contact);
2247 if (*contact == NULL) {
2248 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2249 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2254 ret = MEDIA_CONTENT_ERROR_NONE;
2256 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2257 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2263 int media_info_get_app_data(media_info_h media, char **app_data)
2265 int ret = MEDIA_CONTENT_ERROR_NONE;
2266 media_info_s *_media = (media_info_s*)media;
2268 if (_media && app_data) {
2269 if (STRING_VALID(_media->app_data)) {
2270 *app_data = strdup(_media->app_data);
2271 if (*app_data == NULL) {
2272 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2273 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2278 ret = MEDIA_CONTENT_ERROR_NONE;
2280 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2281 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2287 #ifdef _USE_TV_PROFILE
2288 int media_info_set_played_count(media_info_h media, int played_count)
2290 int ret = MEDIA_CONTENT_ERROR_NONE;
2292 media_info_s *_media = (media_info_s*)media;
2295 _media->played_count = played_count;
2297 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2298 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2305 int media_info_set_played_time(media_info_h media)
2307 int ret = MEDIA_CONTENT_ERROR_NONE;
2308 time_t current_time;
2310 media_info_s *_media = (media_info_s*)media;
2312 if (_media != NULL) {
2313 time(¤t_time);
2314 _media->played_time = current_time;
2316 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2317 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2322 #ifdef _USE_TV_PROFILE
2323 int media_info_set_played_position(media_info_h media, int played_position)
2325 int ret = MEDIA_CONTENT_ERROR_NONE;
2326 media_info_s *_media = (media_info_s*)media;
2328 if ((_media != NULL) && (played_position >= 0)) {
2329 _media->played_position = played_position;
2331 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2332 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2339 int media_info_get_media_from_db(const char *media_id, media_info_h *media)
2341 int ret = MEDIA_CONTENT_ERROR_NONE;
2342 char select_query[DEFAULT_QUERY_SIZE];
2343 char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
2344 sqlite3_stmt *stmt = NULL;
2346 if (!STRING_VALID(media_id) || (media == NULL)) {
2347 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2348 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2351 memset(select_query, 0x00, sizeof(select_query));
2352 memset(storage_id, 0x00, sizeof(storage_id));
2354 ret = _media_db_get_storage_id_by_media_id(media_id, storage_id);
2355 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2357 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_MEDIA, storage_id, media_id);
2359 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
2360 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2362 media_info_s *_media = NULL;
2364 while (sqlite3_step(stmt) == SQLITE_ROW) {
2366 media_info_destroy((media_info_h)_media);
2368 _media = (media_info_s*)calloc(1, sizeof(media_info_s));
2370 if (_media == NULL) {
2371 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2372 SQLITE3_FINALIZE(stmt);
2373 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2376 _media_info_item_get_detail(stmt, (media_info_h)_media);
2378 *media = (media_info_h)_media;
2381 SQLITE3_FINALIZE(stmt);
2386 int media_info_set_display_name(media_info_h media, const char *display_name)
2388 int ret = MEDIA_CONTENT_ERROR_NONE;
2389 media_info_s *_media = (media_info_s*)media;
2391 if (_media != NULL && STRING_VALID(display_name)) {
2392 SAFE_FREE(_media->display_name);
2394 _media->display_name = strdup(display_name);
2395 media_content_retvm_if(_media->display_name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2397 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2398 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2404 int media_info_set_description(media_info_h media, const char *description)
2406 int ret = MEDIA_CONTENT_ERROR_NONE;
2407 media_info_s *_media = (media_info_s*)media;
2409 if (_media != NULL) {
2410 SAFE_FREE(_media->description);
2412 if (STRING_VALID(description)) {
2413 _media->description = strdup(description);
2414 media_content_retvm_if(_media->description == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2416 _media->description = NULL;
2419 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2420 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2426 int media_info_set_longitude(media_info_h media, double longitude)
2428 int ret = MEDIA_CONTENT_ERROR_NONE;
2429 media_info_s *_media = (media_info_s*)media;
2431 if (_media != NULL) {
2432 _media->longitude = longitude;
2434 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2435 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2441 int media_info_set_latitude(media_info_h media, double latitude)
2443 int ret = MEDIA_CONTENT_ERROR_NONE;
2444 media_info_s *_media = (media_info_s*)media;
2446 if (_media != NULL) {
2447 _media->latitude = latitude;
2449 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2450 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2456 int media_info_set_altitude(media_info_h media, double altitude)
2458 int ret = MEDIA_CONTENT_ERROR_NONE;
2459 media_info_s *_media = (media_info_s*)media;
2461 if (_media != NULL) {
2462 _media->altitude = altitude;
2464 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2465 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2471 int media_info_set_weather(media_info_h media, const char *weather)
2473 int ret = MEDIA_CONTENT_ERROR_NONE;
2474 media_info_s *_media = (media_info_s*)media;
2476 if (_media != NULL) {
2477 SAFE_FREE(_media->weather);
2479 if (STRING_VALID(weather)) {
2480 _media->weather = strdup(weather);
2481 media_content_retvm_if(_media->weather == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2483 _media->weather = NULL;
2486 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2487 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2493 int media_info_set_rating(media_info_h media, int rating)
2495 int ret = MEDIA_CONTENT_ERROR_NONE;
2496 media_info_s *_media = (media_info_s*)media;
2498 if (_media != NULL) {
2499 _media->rating = rating;
2501 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2502 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2508 int media_info_set_added_time(media_info_h media, time_t added_time)
2510 int ret = MEDIA_CONTENT_ERROR_NONE;
2512 media_info_s *_media = (media_info_s*)media;
2514 if ((_media != NULL) && (added_time >= 0)) {
2515 _media->added_time = added_time;
2517 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2518 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2524 int media_info_set_favorite(media_info_h media, bool favorite)
2526 int ret = MEDIA_CONTENT_ERROR_NONE;
2527 media_info_s *_media = (media_info_s*)media;
2529 if (_media != NULL) {
2530 if (favorite == TRUE)
2531 time(&_media->favourite);
2533 _media->favourite = 0;
2535 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2536 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2542 int media_info_set_author(media_info_h media, const char *author)
2544 int ret = MEDIA_CONTENT_ERROR_NONE;
2545 media_info_s *_media = (media_info_s*)media;
2547 if (_media != NULL) {
2548 if (STRING_VALID(author)) {
2549 _media->author = strdup(author);
2550 media_content_retvm_if(_media->author == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2552 _media->author = NULL;
2555 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2556 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2562 int media_info_set_provider(media_info_h media, const char *provider)
2564 int ret = MEDIA_CONTENT_ERROR_NONE;
2565 media_info_s *_media = (media_info_s*)media;
2567 if (_media != NULL) {
2568 SAFE_FREE(_media->provider);
2570 if (STRING_VALID(provider)) {
2571 _media->provider = strdup(provider);
2572 media_content_retvm_if(_media->provider == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2574 _media->provider = NULL;
2577 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2578 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2584 int media_info_set_content_name(media_info_h media, const char *content_name)
2586 int ret = MEDIA_CONTENT_ERROR_NONE;
2587 media_info_s *_media = (media_info_s*)media;
2589 if (_media != NULL) {
2590 SAFE_FREE(_media->content_name);
2592 if (STRING_VALID(content_name)) {
2593 _media->content_name = strdup(content_name);
2594 media_content_retvm_if(_media->content_name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2596 _media->content_name = NULL;
2599 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2600 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2606 int media_info_set_category(media_info_h media, const char *category)
2608 int ret = MEDIA_CONTENT_ERROR_NONE;
2609 media_info_s *_media = (media_info_s*)media;
2611 if (_media != NULL) {
2612 SAFE_FREE(_media->category);
2614 if (STRING_VALID(category)) {
2615 _media->category = strdup(category);
2616 media_content_retvm_if(_media->category == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2618 _media->category = NULL;
2621 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2622 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2628 int media_info_set_location_tag(media_info_h media, const char *location_tag)
2630 int ret = MEDIA_CONTENT_ERROR_NONE;
2631 media_info_s *_media = (media_info_s*)media;
2633 if (_media != NULL) {
2634 SAFE_FREE(_media->location_tag);
2636 if (STRING_VALID(location_tag)) {
2637 _media->location_tag = strdup(location_tag);
2638 media_content_retvm_if(_media->location_tag == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2640 _media->location_tag = NULL;
2643 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2644 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2650 int media_info_set_age_rating(media_info_h media, const char *age_rating)
2652 int ret = MEDIA_CONTENT_ERROR_NONE;
2653 media_info_s *_media = (media_info_s*)media;
2655 if (_media != NULL) {
2656 SAFE_FREE(_media->age_rating);
2658 if (STRING_VALID(age_rating)) {
2659 _media->age_rating = strdup(age_rating);
2660 media_content_retvm_if(_media->age_rating == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2662 _media->age_rating = NULL;
2665 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2666 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2672 int media_info_set_keyword(media_info_h media, const char *keyword)
2674 int ret = MEDIA_CONTENT_ERROR_NONE;
2675 media_info_s *_media = (media_info_s*)media;
2677 if (_media != NULL) {
2678 SAFE_FREE(_media->keyword);
2680 if (STRING_VALID(keyword)) {
2681 _media->keyword = strdup(keyword);
2682 media_content_retvm_if(_media->keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2684 _media->keyword = NULL;
2687 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2688 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2694 int media_info_update_to_db(media_info_h media)
2696 int ret = MEDIA_CONTENT_ERROR_NONE;
2697 media_info_s *_media = (media_info_s*)media;
2698 char *set_sql = NULL;
2701 if (_media != NULL && STRING_VALID(_media->media_id)) {
2702 /* This sql is due to sqlite3_mprintf's wrong operation when using floating point in the text format */
2703 /* This code will be removed when sqlite3_mprintf works clearly */
2704 char *test_sql = sqlite3_mprintf("%f, %f, %f", _media->longitude, _media->latitude, _media->altitude);
2705 SQLITE3_SAFE_FREE(test_sql);
2707 /*Update Pinyin If Support Pinyin*/
2708 char *file_name_pinyin = NULL;
2709 char *description_pinyin = NULL;
2710 char *author_pinyin = NULL;
2711 char *provider_pinyin = NULL;
2712 char *content_name_pinyin = NULL;
2713 char *category_pinyin = NULL;
2714 char *location_tag_pinyin = NULL;
2715 char *age_rating_pinyin = NULL;
2716 char *keyword_pinyin = NULL;
2717 bool pinyin_support = FALSE;
2719 /*Update Pinyin If Support Pinyin*/
2720 media_svc_check_pinyin_support(&pinyin_support);
2721 if (pinyin_support) {
2722 if (STRING_VALID(_media->display_name))
2723 media_svc_get_pinyin(_media->display_name, &file_name_pinyin);
2724 if (STRING_VALID(_media->description))
2725 media_svc_get_pinyin(_media->description, &description_pinyin);
2726 if (STRING_VALID(_media->author))
2727 media_svc_get_pinyin(_media->author, &author_pinyin);
2728 if (STRING_VALID(_media->provider))
2729 media_svc_get_pinyin(_media->provider, &provider_pinyin);
2730 if (STRING_VALID(_media->content_name))
2731 media_svc_get_pinyin(_media->content_name, &content_name_pinyin);
2732 if (STRING_VALID(_media->category))
2733 media_svc_get_pinyin(_media->category, &category_pinyin);
2734 if (STRING_VALID(_media->location_tag))
2735 media_svc_get_pinyin(_media->location_tag, &location_tag_pinyin);
2736 if (STRING_VALID(_media->age_rating))
2737 media_svc_get_pinyin(_media->age_rating, &age_rating_pinyin);
2738 if (STRING_VALID(_media->keyword))
2739 media_svc_get_pinyin(_media->keyword, &keyword_pinyin);
2743 char *artist = NULL;
2745 char *recorded_date = NULL;
2747 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
2748 if (_media->video_meta->album != NULL)
2749 album = strdup(_media->video_meta->album);
2750 if (_media->video_meta->artist != NULL)
2751 artist = strdup(_media->video_meta->artist);
2752 if (_media->video_meta->genre != NULL)
2753 genre = strdup(_media->video_meta->genre);
2754 if (_media->video_meta->recorded_date != NULL)
2755 recorded_date = strdup(_media->video_meta->recorded_date);
2756 } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
2757 if (_media->audio_meta->album != NULL)
2758 album = strdup(_media->audio_meta->album);
2759 if (_media->audio_meta->artist != NULL)
2760 artist = strdup(_media->audio_meta->artist);
2761 if (_media->audio_meta->genre != NULL)
2762 genre = strdup(_media->audio_meta->genre);
2763 if (_media->audio_meta->recorded_date != NULL)
2764 recorded_date = strdup(_media->audio_meta->recorded_date);
2767 #ifdef _USE_SENIOR_MODE
2768 if (_media_content_is_support_senior_mode()) {
2769 set_sql = sqlite3_mprintf("file_name=%Q, added_time=%d, description=%Q, longitude=%f, latitude=%f, altitude=%f, \
2770 played_count=%d, last_played_time=%d, last_played_position=%d, \
2771 rating=%d, favourite=%d, author=%Q, provider=%Q, content_name=%Q, category=%Q, location_tag=%Q, age_rating=%Q, keyword=%Q, weather=%Q, sync_status=%d, \
2772 file_name_pinyin=%Q, description_pinyin=%Q, author_pinyin=%Q, provider_pinyin=%Q, content_name_pinyin=%Q, category_pinyin=%Q, location_tag_pinyin=%Q, age_rating_pinyin=%Q, keyword_pinyin=%Q, title=%Q, contact=%Q, app_data=%Q",
2773 _media->display_name, _media->added_time, _media->description, _media->longitude, _media->latitude, _media->altitude, _media->played_count, _media->played_time, _media->played_position, _media->rating, _media->favourite,
2774 _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword, _media->weather, _media->sync_status,
2775 file_name_pinyin, description_pinyin, author_pinyin, provider_pinyin, content_name_pinyin, category_pinyin, location_tag_pinyin, age_rating_pinyin, keyword_pinyin, _media->title, _media->contact, _media->app_data);
2779 set_sql = sqlite3_mprintf("file_name=%Q, added_time=%d, description=%Q, longitude=%f, latitude=%f, altitude=%f, \
2780 played_count=%d, last_played_time=%d, last_played_position=%d, \
2781 rating=%d, favourite=%d, author=%Q, provider=%Q, content_name=%Q, category=%Q, location_tag=%Q, age_rating=%Q, keyword=%Q, weather=%Q, sync_status=%d, \
2782 file_name_pinyin=%Q, description_pinyin=%Q, author_pinyin=%Q, provider_pinyin=%Q, content_name_pinyin=%Q, category_pinyin=%Q, location_tag_pinyin=%Q, age_rating_pinyin=%Q, keyword_pinyin=%Q, title=%Q, \
2783 album=%Q, artist=%Q, genre=%Q, recorded_date=%Q",
2784 _media->display_name, _media->added_time, _media->description, _media->longitude, _media->latitude, _media->altitude, _media->played_count, _media->played_time, _media->played_position, _media->rating, _media->favourite,
2785 _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword, _media->weather, _media->sync_status,
2786 file_name_pinyin, description_pinyin, author_pinyin, provider_pinyin, content_name_pinyin, category_pinyin, location_tag_pinyin, age_rating_pinyin, keyword_pinyin, _media->title,
2787 album, artist, genre, recorded_date);
2790 sql = sqlite3_mprintf("UPDATE %Q SET %s WHERE media_uuid=%Q", _media->storage_uuid, set_sql, _media->media_id);
2792 ret = _content_query_sql(sql);
2793 SQLITE3_SAFE_FREE(set_sql);
2794 SQLITE3_SAFE_FREE(sql);
2796 SAFE_FREE(description_pinyin);
2797 SAFE_FREE(author_pinyin);
2798 SAFE_FREE(provider_pinyin);
2799 SAFE_FREE(content_name_pinyin);
2800 SAFE_FREE(category_pinyin);
2801 SAFE_FREE(location_tag_pinyin);
2802 SAFE_FREE(age_rating_pinyin);
2803 SAFE_FREE(keyword_pinyin);
2808 SAFE_FREE(recorded_date);
2810 if (_media->storage_type == MEDIA_CONTENT_STORAGE_CLOUD) {
2814 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
2815 set_sql = sqlite3_mprintf("title=%Q, album=%Q, artist=%Q, genre=%Q, duration=%d, width=%d, height=%d", \
2816 _media->title, _media->video_meta->album, _media->video_meta->artist, _media->video_meta->genre, _media->video_meta->duration, _media->video_meta->width, _media->video_meta->height);
2817 } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
2818 set_sql = sqlite3_mprintf("title=%Q, album=%Q, artist=%Q, genre=%Q, duration=%d", \
2819 _media->title, _media->audio_meta->album, _media->audio_meta->artist, _media->audio_meta->genre, _media->audio_meta->duration);
2820 } else if (_media->media_type == MEDIA_CONTENT_TYPE_IMAGE) {
2821 set_sql = sqlite3_mprintf("title=%Q, width=%d, height=%d", _media->title, _media->image_meta->width, _media->image_meta->height);
2823 set_sql = sqlite3_mprintf("title=%Q", _media->title);
2826 sql = sqlite3_mprintf("UPDATE %Q SET %s WHERE media_uuid=%Q", _media->storage_uuid, set_sql, _media->media_id);
2828 ret = _content_query_sql(sql);
2830 SQLITE3_SAFE_FREE(set_sql);
2831 SQLITE3_SAFE_FREE(sql);
2834 if (ret == MEDIA_CONTENT_ERROR_NONE) {
2835 /* Send notification for this update */
2836 media_content_debug("Update is successfull. Send notification for this");
2837 if (_media->file_path && _media->mime_type)
2838 media_svc_publish_noti(MS_MEDIA_ITEM_FILE, MS_MEDIA_ITEM_UPDATE, _media->file_path, _media->media_type, _media->media_id, _media->mime_type);
2840 media_content_error("Can't Send Noti : path or mime type is NULL");
2843 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2844 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2850 int media_info_refresh_metadata_to_db(const char *media_id)
2852 int ret = MEDIA_CONTENT_ERROR_NONE;
2853 media_info_h media = NULL;
2854 char *file_path = NULL;
2855 media_content_storage_e storage_type = 0;
2856 char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
2857 char repl_path[MAX_QUERY_SIZE] = {0, };
2859 if (!STRING_VALID(media_id)) {
2860 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2861 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2864 ret = media_info_get_media_from_db(media_id, &media);
2865 if (ret != MEDIA_CONTENT_ERROR_NONE) {
2866 media_info_destroy(media);
2870 ret = media_info_get_storage_type(media, &storage_type);
2871 if (ret != MEDIA_CONTENT_ERROR_NONE) {
2872 media_info_destroy(media);
2876 if (storage_type == MEDIA_CONTENT_STORAGE_CLOUD) {
2877 media_info_destroy(media);
2878 media_content_error("Can't refresh cloud content!!");
2879 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2882 ret = media_info_get_file_path(media, &file_path);
2883 if (ret != MEDIA_CONTENT_ERROR_NONE) {
2884 media_info_destroy(media);
2887 memset(repl_path, 0, sizeof(repl_path));
2888 ret = _media_content_replace_path(file_path, repl_path);
2890 ret = _media_util_check_file_exist(repl_path);
2891 if (ret != MEDIA_CONTENT_ERROR_NONE) {
2892 SAFE_FREE(file_path);
2893 media_info_destroy(media);
2897 memset(storage_id, 0x00, sizeof(storage_id));
2898 ret = media_svc_get_storage_id(_content_get_db_handle(), repl_path, storage_id);
2899 if (ret != MS_MEDIA_ERR_NONE) {
2900 media_content_error("media_svc_get_storage_id failed : %d", ret);
2901 SAFE_FREE(file_path);
2902 media_info_destroy(media);
2903 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2906 ret = media_svc_refresh_item(_content_get_db_handle(), storage_id, storage_type, repl_path, tzplatform_getuid(TZ_USER_NAME));
2907 if (ret != MS_MEDIA_ERR_NONE)
2908 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2910 SAFE_FREE(file_path);
2911 media_info_destroy(media);
2916 int media_info_move_to_db(media_info_h media, const char* dst_path)
2918 int ret = MEDIA_CONTENT_ERROR_NONE;
2919 bool ignore_file = FALSE;
2920 bool ignore_dir = FALSE;
2921 char *folder_path = NULL;
2922 media_svc_storage_type_e src_storage_type = 0;
2923 media_svc_storage_type_e dst_storage_type = 0;
2924 char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
2925 char repl_path[MAX_QUERY_SIZE] = {0, };
2926 char org_repl_path[MAX_QUERY_SIZE] = {0, };
2928 media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media");
2929 media_content_retvm_if(!STRING_VALID(dst_path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid dst_path");
2930 memset(repl_path, 0, sizeof(repl_path));
2931 memset(org_repl_path, 0, sizeof(org_repl_path));
2932 ret = _media_content_replace_path(dst_path, repl_path);
2933 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
2935 media_info_s *_media = (media_info_s*)media;
2937 ret = _media_util_check_ignore_file(repl_path, &ignore_file);
2938 media_content_retvm_if(ignore_file == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path");
2939 ret = _media_content_replace_path(_media->file_path, org_repl_path);
2940 media_content_retvm_if(!STRING_VALID(org_repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
2942 ret = _media_util_check_file_exist(repl_path);
2943 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2945 folder_path = g_path_get_dirname(repl_path);
2946 ret = _media_util_check_ignore_dir(folder_path, &ignore_dir);
2947 SAFE_FREE(folder_path);
2949 media_content_retvm_if(ignore_dir == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid folder path");
2951 ret = media_svc_get_storage_type(org_repl_path, &src_storage_type, tzplatform_getuid(TZ_USER_NAME));
2952 if (ret != MS_MEDIA_ERR_NONE) {
2953 media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
2954 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2957 ret = media_svc_get_storage_type(repl_path, &dst_storage_type, tzplatform_getuid(TZ_USER_NAME));
2958 if (ret != MS_MEDIA_ERR_NONE) {
2959 media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
2960 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2963 memset(storage_id, 0x00, sizeof(storage_id));
2964 ret = media_svc_get_storage_id(_content_get_db_handle(), org_repl_path, storage_id);
2965 if (ret != MS_MEDIA_ERR_NONE) {
2966 media_content_error("media_svc_get_storage_id failed : %d", ret);
2967 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2970 ret = media_svc_move_item(_content_get_db_handle(), storage_id, src_storage_type, org_repl_path, dst_storage_type, repl_path, tzplatform_getuid(TZ_USER_NAME));
2971 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2974 int media_info_create_thumbnail(media_info_h media, media_thumbnail_completed_cb callback, void *user_data)
2976 int ret = MEDIA_CONTENT_ERROR_NONE;
2977 static unsigned int req_id = 0;
2978 char repl_path[MAX_QUERY_SIZE] = {0, };
2979 media_info_s *_media = (media_info_s*)media;
2981 if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path)) {
2982 memset(repl_path, 0, sizeof(repl_path));
2983 ret = _media_content_replace_path(_media->file_path, repl_path);
2984 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
2986 media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s*)calloc(1, sizeof(media_thumbnail_cb_s));
2987 media_content_retvm_if(_thumb_cb == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2989 _media->request_id = req_id;
2991 _thumb_cb->handle = _media;
2992 _thumb_cb->user_data = user_data;
2993 _thumb_cb->thumbnail_completed_cb = callback;
2995 ret = thumbnail_request_from_db_async(_media->request_id, repl_path, (ThumbFunc)__media_info_thumbnail_completed_cb, (void *)_thumb_cb, tzplatform_getuid(TZ_USER_NAME));
2996 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
2998 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2999 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3005 int media_info_cancel_thumbnail(media_info_h media)
3007 int ret = MEDIA_CONTENT_ERROR_NONE;
3008 media_info_s *_media = (media_info_s*)media;
3009 char repl_path[MAX_QUERY_SIZE] = {0, };
3011 if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path) && _media->request_id > 0) {
3012 memset(repl_path, 0, sizeof(repl_path));
3013 ret = _media_content_replace_path(_media->file_path, repl_path);
3014 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3016 ret = thumbnail_request_cancel_media(_media->request_id, repl_path);
3017 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3019 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3020 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3026 int media_info_start_face_detection(media_info_h media, media_face_detection_completed_cb callback, void *user_data)
3028 int ret = MEDIA_CONTENT_ERROR_NONE;
3029 static unsigned int req_id = 0;
3030 media_info_s *_media = (media_info_s*)media;
3031 char repl_path[MAX_QUERY_SIZE] = {0, };
3033 if (!__media_info_isFaceRecognition_feature_supported()) {
3034 media_content_error("NOT_SUPPORTED(0x%08x)", MEDIA_CONTENT_ERROR_NOT_SUPPORTED);
3035 return MEDIA_CONTENT_ERROR_NOT_SUPPORTED;
3038 if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path)) {
3039 memset(repl_path, 0, sizeof(repl_path));
3040 ret = _media_content_replace_path(_media->file_path, repl_path);
3041 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3042 media_face_cb_s *_face_cb = (media_face_cb_s*)calloc(1, sizeof(media_face_cb_s));
3043 media_content_retvm_if(_face_cb == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3045 _media->face_request_id = req_id;
3047 _face_cb->handle = _media;
3048 _face_cb->user_data = user_data;
3049 _face_cb->face_completed_cb = callback;
3051 ret = dcm_request_extract_face_async(_media->face_request_id, repl_path, (FaceFunc)__media_info_face_completed_cb, (void *)_face_cb, tzplatform_getuid(TZ_USER_NAME));
3052 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3054 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3055 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3061 int media_info_cancel_face_detection(media_info_h media)
3063 int ret = MEDIA_CONTENT_ERROR_NONE;
3064 media_info_s *_media = (media_info_s*)media;
3065 char repl_path[MAX_QUERY_SIZE] = {0, };
3067 if (!__media_info_isFaceRecognition_feature_supported()) {
3068 media_content_error("NOT_SUPPORTED(0x%08x)", MEDIA_CONTENT_ERROR_NOT_SUPPORTED);
3069 return MEDIA_CONTENT_ERROR_NOT_SUPPORTED;
3072 if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path) && _media->face_request_id > 0) {
3073 memset(repl_path, 0, sizeof(repl_path));
3074 ret = _media_content_replace_path(_media->file_path, repl_path);
3075 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3076 ret = dcm_request_cancel_face(_media->face_request_id, repl_path);
3077 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3079 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3080 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3086 static int __media_info_map_data_usr_to_svc(media_info_s *media, media_svc_content_info_s **service_content, media_content_storage_e storage_type)
3088 media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
3089 #ifndef _USE_TV_PROFILE
3090 char repl_path[MAX_QUERY_SIZE] = {0, };
3091 char *tmp_path = NULL;
3094 media_svc_content_info_s *svc_content_info = calloc(1, sizeof(media_svc_content_info_s));
3095 media_content_retvm_if(svc_content_info == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3097 #ifdef _USE_TV_PROFILE
3098 svc_content_info->path = g_strdup(media->file_path);
3100 memset(repl_path, 0, sizeof(repl_path));
3101 tmp_path = g_strdup(media->file_path);
3102 _media_content_replace_path(tmp_path, repl_path);
3103 svc_content_info->path = g_strdup(repl_path);
3104 SAFE_FREE(tmp_path);
3106 svc_content_info->file_name = g_strdup(media->display_name);
3107 svc_content_info->media_type = media->media_type;
3108 svc_content_info->mime_type = g_strdup(media->mime_type);
3109 svc_content_info->size = media->size;
3110 svc_content_info->storage_type = storage_type;
3111 svc_content_info->storage_uuid = g_strdup(media->storage_uuid);
3113 svc_content_info->added_time = media->added_time;
3114 svc_content_info->modified_time = media->modified_time;
3115 svc_content_info->thumbnail_path = g_strdup(media->thumbnail_path);
3116 svc_content_info->is_drm = media->is_drm;
3117 svc_content_info->last_played_time = media->played_time;
3118 svc_content_info->played_count = media->played_count;
3119 svc_content_info->favourate = media->favourite;
3121 #ifdef _USE_SENIOR_MODE
3122 if (_media_content_is_support_senior_mode()) {
3123 svc_content_info->contact = g_strdup(media->contact);
3124 svc_content_info->app_data = g_strdup(media->app_data);
3128 svc_content_info->media_meta.title = g_strdup(media->title);
3129 svc_content_info->media_meta.rating = media->rating;
3130 svc_content_info->media_meta.description = g_strdup(media->description);
3131 svc_content_info->media_meta.longitude = media->longitude;
3132 svc_content_info->media_meta.latitude = media->latitude;
3133 svc_content_info->media_meta.altitude = media->altitude;
3134 svc_content_info->media_meta.weather = g_strdup(media->weather);
3135 svc_content_info->media_meta.category = g_strdup(media->category);
3136 svc_content_info->media_meta.keyword = g_strdup(media->keyword);
3137 svc_content_info->media_meta.location_tag = g_strdup(media->location_tag);
3138 svc_content_info->media_meta.content_name = g_strdup(media->content_name);
3139 svc_content_info->media_meta.age_rating = g_strdup(media->age_rating);
3140 svc_content_info->media_meta.author = g_strdup(media->author);
3141 svc_content_info->media_meta.provider = g_strdup(media->provider);
3143 svc_content_info->media_meta.album = g_strdup(media->audio_meta->album);
3144 svc_content_info->media_meta.artist = g_strdup(media->audio_meta->artist);
3145 svc_content_info->media_meta.genre = g_strdup(media->audio_meta->genre);
3146 svc_content_info->media_meta.recorded_date = g_strdup(media->audio_meta->recorded_date);
3148 if (storage_type == MEDIA_CONTENT_STORAGE_CLOUD) {
3149 switch (media->media_type) {
3150 case MEDIA_CONTENT_TYPE_IMAGE:
3151 svc_content_info->media_meta.width = media->image_meta->width;
3152 svc_content_info->media_meta.height = media->image_meta->height;
3153 svc_content_info->media_meta.datetaken = g_strdup(media->image_meta->date_taken);
3154 svc_content_info->media_meta.orientation = media->image_meta->orientation;
3156 case MEDIA_CONTENT_TYPE_VIDEO:
3157 svc_content_info->media_meta.album_artist = g_strdup(media->audio_meta->album_artist);
3158 svc_content_info->media_meta.composer = g_strdup(media->audio_meta->composer);
3159 svc_content_info->media_meta.year = g_strdup(media->audio_meta->year);
3160 svc_content_info->media_meta.copyright = g_strdup(media->audio_meta->copyright);
3161 svc_content_info->media_meta.track_num = g_strdup(media->audio_meta->track_num);
3162 svc_content_info->media_meta.bitrate = media->audio_meta->bitrate;
3163 svc_content_info->media_meta.duration = media->audio_meta->duration;
3164 svc_content_info->media_meta.width = media->image_meta->width;
3165 svc_content_info->media_meta.height = media->image_meta->height;
3167 case MEDIA_CONTENT_TYPE_SOUND:
3168 case MEDIA_CONTENT_TYPE_MUSIC:
3169 svc_content_info->media_meta.album_artist = g_strdup(media->audio_meta->album_artist);
3170 svc_content_info->media_meta.composer = g_strdup(media->audio_meta->composer);
3171 svc_content_info->media_meta.year = g_strdup(media->audio_meta->year);
3172 svc_content_info->media_meta.copyright = g_strdup(media->audio_meta->copyright);
3173 svc_content_info->media_meta.track_num = g_strdup(media->audio_meta->track_num);
3174 svc_content_info->media_meta.bitrate = media->audio_meta->bitrate;
3175 svc_content_info->media_meta.duration = media->audio_meta->duration;
3176 svc_content_info->media_meta.channel = media->audio_meta->channel;
3177 svc_content_info->media_meta.samplerate = media->audio_meta->samplerate;
3179 case MEDIA_CONTENT_TYPE_OTHERS:
3185 *service_content = svc_content_info;
3187 return MEDIA_CONTENT_ERROR_NONE;
3190 static int __media_info_set_str_data(media_info_h media, media_info_item_e data_type, const char *str_data)
3192 media_info_s *_media = (media_info_s*)media;
3194 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3196 switch (data_type) {
3197 case MEDIA_INFO_PATH:
3198 SAFE_FREE(_media->file_path);
3199 if (STRING_VALID(str_data)) {
3200 _media->file_path = strdup(str_data);
3201 media_content_retvm_if(_media->file_path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3203 _media->file_path = NULL;
3206 case MEDIA_INFO_MIME_TYPE:
3207 SAFE_FREE(_media->mime_type);
3208 if (STRING_VALID(str_data)) {
3209 _media->mime_type = strdup(str_data);
3210 media_content_retvm_if(_media->mime_type == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3212 _media->mime_type = NULL;
3215 case MEDIA_INFO_THUMBNAIL_PATH:
3216 SAFE_FREE(_media->thumbnail_path);
3217 if (STRING_VALID(str_data)) {
3218 _media->thumbnail_path = strdup(str_data);
3219 media_content_retvm_if(_media->thumbnail_path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3221 _media->thumbnail_path = NULL;
3224 case MEDIA_INFO_TITLE:
3225 SAFE_FREE(_media->title);
3226 if (STRING_VALID(str_data)) {
3227 _media->title = strdup(str_data);
3228 media_content_retvm_if(_media->title == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3230 _media->title = NULL;
3233 case MEDIA_INFO_STORAGE_UUID:
3234 SAFE_FREE(_media->storage_uuid);
3235 if (STRING_VALID(str_data)) {
3236 _media->storage_uuid = strdup(str_data);
3237 media_content_retvm_if(_media->storage_uuid == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3239 _media->storage_uuid = NULL;
3242 case MEDIA_INFO_ALBUM:
3243 if (STRING_VALID(_media->media_id)) {
3244 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3245 SAFE_FREE(_media->video_meta->album);
3246 if (str_data != NULL) {
3247 _media->video_meta->album = strdup(str_data);
3248 media_content_retvm_if(_media->video_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3250 } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3251 SAFE_FREE(_media->audio_meta->album);
3252 if (str_data != NULL) {
3253 _media->audio_meta->album = strdup(str_data);
3254 media_content_retvm_if(_media->audio_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3258 SAFE_FREE(_media->video_meta->album);
3259 if (str_data != NULL) {
3260 _media->video_meta->album = strdup(str_data);
3261 media_content_retvm_if(_media->video_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3264 SAFE_FREE(_media->audio_meta->album);
3265 if (str_data != NULL) {
3266 _media->audio_meta->album = strdup(str_data);
3267 media_content_retvm_if(_media->audio_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3271 case MEDIA_INFO_ARTIST:
3272 if (STRING_VALID(_media->media_id)) {
3273 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3274 SAFE_FREE(_media->video_meta->artist);
3275 if (str_data != NULL) {
3276 _media->video_meta->artist = strdup(str_data);
3277 media_content_retvm_if(_media->video_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3279 } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3280 SAFE_FREE(_media->audio_meta->artist);
3281 if (str_data != NULL) {
3282 _media->audio_meta->artist = strdup(str_data);
3283 media_content_retvm_if(_media->audio_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3287 SAFE_FREE(_media->video_meta->artist);
3288 if (str_data != NULL) {
3289 _media->video_meta->artist = strdup(str_data);
3290 media_content_retvm_if(_media->video_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3293 SAFE_FREE(_media->audio_meta->artist);
3294 if (str_data != NULL) {
3295 _media->audio_meta->artist = strdup(str_data);
3296 media_content_retvm_if(_media->audio_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3300 case MEDIA_INFO_GENRE:
3301 if (STRING_VALID(_media->media_id)) {
3302 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3303 SAFE_FREE(_media->video_meta->genre);
3304 if (str_data != NULL) {
3305 _media->video_meta->genre = strdup(str_data);
3306 media_content_retvm_if(_media->video_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3308 } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3309 SAFE_FREE(_media->audio_meta->genre);
3310 if (str_data != NULL) {
3311 _media->audio_meta->genre = strdup(str_data);
3312 media_content_retvm_if(_media->audio_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3316 SAFE_FREE(_media->video_meta->genre);
3317 if (str_data != NULL) {
3318 _media->video_meta->genre = strdup(str_data);
3319 media_content_retvm_if(_media->video_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3322 SAFE_FREE(_media->audio_meta->genre);
3323 if (str_data != NULL) {
3324 _media->audio_meta->genre = strdup(str_data);
3325 media_content_retvm_if(_media->audio_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3329 case MEDIA_INFO_RECORDED_DATE:
3330 if (STRING_VALID(_media->media_id)) {
3331 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3332 SAFE_FREE(_media->video_meta->recorded_date);
3333 if (str_data != NULL) {
3334 _media->video_meta->recorded_date = strdup(str_data);
3335 media_content_retvm_if(_media->video_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3337 } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3338 SAFE_FREE(_media->audio_meta->recorded_date);
3339 if (str_data != NULL) {
3340 _media->audio_meta->recorded_date = strdup(str_data);
3341 media_content_retvm_if(_media->audio_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3345 SAFE_FREE(_media->video_meta->recorded_date);
3346 if (str_data != NULL) {
3347 _media->video_meta->recorded_date = strdup(str_data);
3348 media_content_retvm_if(_media->video_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3351 SAFE_FREE(_media->audio_meta->recorded_date);
3352 if (str_data != NULL) {
3353 _media->audio_meta->recorded_date = strdup(str_data);
3354 media_content_retvm_if(_media->audio_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3359 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3360 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3363 return MEDIA_CONTENT_ERROR_NONE;
3366 static int __media_info_destroy(media_info_h media)
3368 int ret = MEDIA_CONTENT_ERROR_NONE;
3369 media_info_s *_media = (media_info_s*)media;
3372 SAFE_FREE(_media->media_id);
3373 SAFE_FREE(_media->file_path);
3374 SAFE_FREE(_media->display_name);
3375 SAFE_FREE(_media->mime_type);
3376 SAFE_FREE(_media->thumbnail_path);
3377 SAFE_FREE(_media->description);
3378 SAFE_FREE(_media->author);
3379 SAFE_FREE(_media->provider);
3380 SAFE_FREE(_media->content_name);
3381 SAFE_FREE(_media->category);
3382 SAFE_FREE(_media->location_tag);
3383 SAFE_FREE(_media->age_rating);
3384 SAFE_FREE(_media->keyword);
3385 SAFE_FREE(_media->title);
3386 SAFE_FREE(_media->weather);
3387 SAFE_FREE(_media->storage_uuid);
3389 if (_media->image_meta) {
3390 SAFE_FREE(_media->image_meta->media_id);
3391 SAFE_FREE(_media->image_meta->date_taken);
3392 SAFE_FREE(_media->image_meta->burst_id);
3393 SAFE_FREE(_media->image_meta->exposure_time);
3394 SAFE_FREE(_media->image_meta->model);
3395 SAFE_FREE(_media->image_meta->title);
3396 SAFE_FREE(_media->image_meta->weather);
3398 SAFE_FREE(_media->image_meta);
3401 if (_media->video_meta) {
3402 SAFE_FREE(_media->video_meta->media_id);
3403 SAFE_FREE(_media->video_meta->title);
3404 SAFE_FREE(_media->video_meta->album);
3405 SAFE_FREE(_media->video_meta->artist);
3406 SAFE_FREE(_media->video_meta->album_artist);
3407 SAFE_FREE(_media->video_meta->genre);
3408 SAFE_FREE(_media->video_meta->composer);
3409 SAFE_FREE(_media->video_meta->year);
3410 SAFE_FREE(_media->video_meta->recorded_date);
3411 SAFE_FREE(_media->video_meta->copyright);
3412 SAFE_FREE(_media->video_meta->track_num);
3414 SAFE_FREE(_media->video_meta);
3417 if (_media->audio_meta) {
3418 SAFE_FREE(_media->audio_meta->media_id);
3419 SAFE_FREE(_media->audio_meta->title);
3420 SAFE_FREE(_media->audio_meta->album);
3421 SAFE_FREE(_media->audio_meta->artist);
3422 SAFE_FREE(_media->audio_meta->album_artist);
3423 SAFE_FREE(_media->audio_meta->genre);
3424 SAFE_FREE(_media->audio_meta->composer);
3425 SAFE_FREE(_media->audio_meta->year);
3426 SAFE_FREE(_media->audio_meta->recorded_date);
3427 SAFE_FREE(_media->audio_meta->copyright);
3428 SAFE_FREE(_media->audio_meta->track_num);
3430 SAFE_FREE(_media->audio_meta);
3433 ret = MEDIA_CONTENT_ERROR_NONE;
3435 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3436 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3442 int media_info_insert_to_db_with_data(media_info_h media)
3444 int ret = MEDIA_CONTENT_ERROR_NONE;
3445 char repl_path[MAX_QUERY_SIZE] = {0, };
3447 media_info_s *_media = (media_info_s*)media;
3449 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3450 media_content_retvm_if(!STRING_VALID(_media->file_path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid file_path");
3451 media_content_retvm_if(!STRING_VALID(_media->storage_uuid), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid storage_uuid");
3452 media_content_retvm_if(_media->storage_type < 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid storage_type [%d]", _media->storage_type);
3454 /* Cloud Item should be filled whole info*/
3455 if (_media->storage_type == MEDIA_CONTENT_STORAGE_CLOUD) {
3456 media_content_retvm_if(!STRING_VALID(_media->mime_type), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid mime_type");
3457 media_content_retvm_if(!STRING_VALID(_media->title), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid title");
3458 media_content_retvm_if(_media->size <= 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid size [%d]", _media->size);
3459 media_content_retvm_if(_media->modified_time <= 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid modified_time [%d]", _media->modified_time);
3461 if ((_media->media_type < MEDIA_CONTENT_TYPE_IMAGE) || (_media->media_type > MEDIA_CONTENT_TYPE_OTHERS)) {
3462 media_content_error("invalid media type [%d]", _media->media_type);
3463 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3467 media_content_sec_debug("storage[%d], path[%s], media_type[%d]", _media->storage_type, _media->file_path, _media->media_type);
3469 media_svc_content_info_s *svc_content_info = NULL;
3471 ret = __media_info_map_data_usr_to_svc(_media, &svc_content_info, _media->storage_type);
3472 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "__media_info_map_data_usr_to_svc fail");
3474 ret = media_svc_insert_item_immediately_with_data(_content_get_db_handle(), svc_content_info, tzplatform_getuid(TZ_USER_NAME));
3475 if (ret != MS_MEDIA_ERR_NONE) {
3476 media_content_sec_error("media_svc_insert_item_immediately_with_data failed : %d (%s)", ret, _media->file_path);
3477 media_svc_destroy_content_info(svc_content_info);
3478 SAFE_FREE(svc_content_info);
3479 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3481 /*free the svc_content_info*/
3482 media_svc_destroy_content_info(svc_content_info);
3483 SAFE_FREE(svc_content_info);
3485 /*Fill out the handle*/
3486 memset(repl_path, 0, sizeof(repl_path));
3487 ret = _media_content_replace_path(_media->file_path, repl_path);
3488 char *media_file_path = g_strdup(repl_path);
3490 char *media_string_uuid = g_strdup(_media->storage_uuid);
3492 __media_info_destroy(media);
3493 ret = _media_info_get_media_info_from_db(media_file_path, media_string_uuid, media);
3494 if (ret != MEDIA_CONTENT_ERROR_NONE)
3495 media_content_error("_media_info_get_media_info_from_db fail", ret);
3497 SAFE_FREE(media_file_path);
3498 SAFE_FREE(media_string_uuid);
3503 int media_info_create(const char *path, media_info_h *media)
3505 int ret = MEDIA_CONTENT_ERROR_NONE;
3506 char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
3507 media_svc_storage_type_e storage_type = 0;
3508 bool ignore_file = FALSE;
3509 char repl_path[MAX_QUERY_SIZE] = {0, };
3511 media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path");
3512 media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3513 memset(repl_path, 0, sizeof(repl_path));
3514 ret = _media_content_replace_path(path, repl_path);
3515 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3517 ret = _media_util_check_ignore_file(repl_path, &ignore_file);
3518 media_content_retvm_if(ignore_file == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path");
3520 memset(storage_id, 0x00, sizeof(storage_id));
3522 if (STRING_VALID(MEDIA_ROOT_PATH_CLOUD) && (strstr(repl_path, MEDIA_ROOT_PATH_CLOUD) == NULL)) {
3523 bool ignore_dir = FALSE;
3524 char *folder_path = NULL;
3526 ret = _media_util_check_file_exist(repl_path);
3527 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
3529 folder_path = g_path_get_dirname(repl_path);
3530 ret = _media_util_check_ignore_dir(folder_path, &ignore_dir);
3531 SAFE_FREE(folder_path);
3532 media_content_retvm_if(ignore_dir == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid folder path");
3534 ret = media_svc_get_storage_id(_content_get_db_handle(), repl_path, storage_id);
3535 if (ret != MS_MEDIA_ERR_NONE) {
3536 media_content_error("media_svc_get_storage_id failed : %d", ret);
3537 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3540 ret = media_svc_get_storage_type(repl_path, &storage_type, tzplatform_getuid(TZ_USER_NAME));
3541 if (ret != MS_MEDIA_ERR_NONE) {
3542 media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
3543 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3547 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
3548 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3550 _media->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
3551 if (_media->audio_meta == NULL) {
3553 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
3554 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
3557 _media->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
3558 if (_media->video_meta == NULL) {
3559 SAFE_FREE(_media->audio_meta);
3561 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
3562 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
3565 _media->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
3566 if (_media->image_meta == NULL) {
3567 SAFE_FREE(_media->audio_meta);
3568 SAFE_FREE(_media->video_meta);
3570 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
3571 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
3574 _media->file_path = g_strdup(path);
3575 _media->storage_type = -1;
3576 _media->media_type = 0;
3577 _media->modified_time = 0;
3579 _media->request_id = 0;
3580 _media->longitude = MEDIA_SVC_DEFAULT_GPS_VALUE;
3581 _media->latitude = MEDIA_SVC_DEFAULT_GPS_VALUE;
3582 _media->altitude = MEDIA_SVC_DEFAULT_GPS_VALUE;
3584 if (STRING_VALID(storage_id)) {
3585 _media->storage_uuid = g_strdup(storage_id);
3586 _media->storage_type = storage_type;
3589 *media = (media_info_h)_media;
3594 int media_info_set_mime_type(media_info_h media, const char *mime_type)
3596 return __media_info_set_str_data(media, MEDIA_INFO_MIME_TYPE, mime_type);
3599 int media_info_set_title(media_info_h media, const char *title)
3601 return __media_info_set_str_data(media, MEDIA_INFO_TITLE, title);
3604 int media_info_set_album(media_info_h media, const char *album)
3606 return __media_info_set_str_data(media, MEDIA_INFO_ALBUM, album);
3609 int media_info_set_artist(media_info_h media, const char *artist)
3611 return __media_info_set_str_data(media, MEDIA_INFO_ARTIST, artist);
3614 int media_info_set_genre(media_info_h media, const char *genre)
3616 return __media_info_set_str_data(media, MEDIA_INFO_GENRE, genre);
3619 int media_info_set_recorded_date(media_info_h media, const char *recorded_date)
3621 return __media_info_set_str_data(media, MEDIA_INFO_RECORDED_DATE, recorded_date);
3624 int media_info_set_thumbnail_path(media_info_h media, const char *thumbnail_path)
3626 return __media_info_set_str_data(media, MEDIA_INFO_THUMBNAIL_PATH, thumbnail_path);
3629 int media_info_set_storage_id(media_info_h media, const char *storage_id)
3631 return __media_info_set_str_data(media, MEDIA_INFO_STORAGE_UUID, storage_id);
3634 int media_info_set_size(media_info_h media, unsigned long long size)
3636 media_info_s *_media = (media_info_s*)media;
3638 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3640 _media->size = size;
3642 return MEDIA_CONTENT_ERROR_NONE;
3645 int media_info_set_modified_time(media_info_h media, time_t modified_time)
3647 media_info_s *_media = (media_info_s*)media;
3649 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3651 _media->modified_time = modified_time;
3653 return MEDIA_CONTENT_ERROR_NONE;
3656 int media_info_set_media_type(media_info_h media, media_content_type_e type)
3658 media_info_s *_media = (media_info_s*)media;
3660 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3662 _media->media_type = type;
3664 return MEDIA_CONTENT_ERROR_NONE;
3667 int media_info_set_duration(media_info_h media, int duration)
3669 media_info_s *_media = (media_info_s*)media;
3671 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3673 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO)
3674 _media->video_meta->duration = duration;
3675 else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND))
3676 _media->audio_meta->duration = duration;
3678 media_content_error("Invalid media type");
3679 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3682 return MEDIA_CONTENT_ERROR_NONE;
3685 int media_info_set_width(media_info_h media, int width)
3687 media_info_s *_media = (media_info_s*)media;
3689 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3691 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO)
3692 _media->video_meta->width = width;
3693 else if (_media->media_type == MEDIA_CONTENT_TYPE_IMAGE)
3694 _media->image_meta->width = width;
3696 media_content_error("Invalid media type");
3697 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3700 return MEDIA_CONTENT_ERROR_NONE;
3703 int media_info_set_height(media_info_h media, int height)
3705 media_info_s *_media = (media_info_s*)media;
3707 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3709 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO)
3710 _media->video_meta->height = height;
3711 else if (_media->media_type == MEDIA_CONTENT_TYPE_IMAGE)
3712 _media->image_meta->height = height;
3714 media_content_error("Invalid media type");
3715 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3718 return MEDIA_CONTENT_ERROR_NONE;
3721 int media_info_set_storage_type(media_info_h media, media_content_storage_e storage_type)
3723 media_info_s *_media = (media_info_s*)media;
3725 media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3727 _media->storage_type = storage_type;
3729 return MEDIA_CONTENT_ERROR_NONE;
3732 #ifdef _USE_SENIOR_MODE
3733 int media_info_set_contact(media_info_h media, const char *contact)
3735 return __media_info_set_str_data(media, MEDIA_INFO_CONTACT, contact);
3738 int media_info_set_app_data(media_info_h media, const char *app_data)
3740 return __media_info_set_str_data(media, MEDIA_INFO_APP_DATA, app_data);