2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
23 #include <JSWebAPIError.h>
24 #include <Commons/StringUtils.h>
25 #include <GlobalContextManager.h>
27 #include "ContentUtility.h"
28 #include "ContentHelper.h"
30 #include "ContentGetDirectoryCallback.h"
31 #include "ContentScanFileCallback.h"
32 #include "ContentFindCallback.h"
33 #include "ContentFilterQueryGenerator.h"
34 #include "ContentUpdateBatchCallback.h"
35 #include "ContentChangeCallback.h"
36 #include <TimeTracer.h>
40 using namespace WrtDeviceApis::Commons;
45 #define TAG_DELIMETER '/'
46 #define UNDEFINED_GEO -200.0
48 ContentHelper::ContentHelper()
52 ContentHelper::~ContentHelper()
56 bool ContentHelper::Connect()
59 int err = media_content_connect();
60 if( MEDIA_CONTENT_ERROR_NONE == err)
62 LOGI("Content DB is connected.");
66 LOGE("%s", ContentUtility::getMediaContentLogMessage(
67 err, "media_content_connect()").c_str());
72 bool ContentHelper::DisConnect()
75 int err = media_content_disconnect();
76 if ( MEDIA_CONTENT_ERROR_NONE == err)
78 LOGI("Content DB is disconnected.");
81 LOGE("%s", ContentUtility::getMediaContentLogMessage(
82 err, "media_content_disconnect()").c_str());
88 int ContentHelper::getCallbackCompleted(void *data)
90 ContentCallbackPtr callbackPtr(static_cast<ContentCallback*>(data));
93 callbackPtr->onSuccess();
97 callbackPtr->onError("This operation is failed by platform.");
100 LOGI("getCallbackCompleted");
104 int ContentHelper::getCallbackCanceled(void *data)
106 ContentCallbackPtr callbackPtr(static_cast<ContentCallback*>(data));
108 callbackPtr->onError();
112 gboolean ContentHelper::getDirectoryWork(void* data)
114 ContentGetDirectoryCallback* callback = static_cast<ContentGetDirectoryCallback*>(data);
115 DirectoryLst *directories = callback->getDirectories();
117 filter_h filter = NULL;
118 TIME_TRACER_ITEM_BEGIN("getDirectoriesPlatform", 1);
119 int err = media_filter_create(&filter);
120 if ( MEDIA_CONTENT_ERROR_NONE == err)
122 std::string condition="(FOLDER_STORAGE_TYPE = 0 OR FOLDER_STORAGE_TYPE = 1)";
124 err = media_filter_set_condition(filter, condition.c_str(), MEDIA_CONTENT_COLLATE_DEFAULT);
125 if ( MEDIA_CONTENT_ERROR_NONE != err)
127 LOGW("%s", ContentUtility::getMediaContentLogMessage(
128 err, "media_filter_set_condition()").c_str());
131 err = media_folder_foreach_folder_from_db(filter, ContentHelper::getDirectoryCallback, directories);
132 if( MEDIA_CONTENT_ERROR_NONE == err)
134 TIME_TRACER_ITEM_END("getDirectoriesPlatform", 1);
135 if (G_IDLE_FAILED == g_idle_add(ContentHelper::getCallbackCompleted, callback)) {
138 LOGE("g_idle addition failed");
143 LOGW("%s", ContentUtility::getMediaContentLogMessage(
144 err, "media_folder_foreach_folder_from_db()").c_str());
146 callback->setErrMsg("getDirectoryWork() is failed");
147 if (G_IDLE_FAILED == g_idle_add(ContentHelper::getCallbackCanceled, callback)) {
150 LOGE("g_idle addition failed");
154 err = media_filter_destroy(filter);
155 if ( MEDIA_CONTENT_ERROR_NONE != err)
157 LOGW("%s", ContentUtility::getMediaContentLogMessage(
158 err, "media_filter_destroy()").c_str());
163 LOGE("%s", ContentUtility::getMediaContentLogMessage(
164 err, "media_filter_create()").c_str());
170 bool ContentHelper::getDirectoryCallback(media_folder_h folder, void *user_data)
173 if (user_data != NULL) {
174 if (folder != NULL) {
176 ContentDirectoryPtr dirPtr = ContentDirectoryPtr(new ContentDirectory());
178 err = media_folder_get_folder_id(folder, &str);
179 if (MEDIA_CONTENT_ERROR_NONE == err) {
188 LOGE("%s", ContentUtility::getMediaContentLogMessage(
189 err, "media_folder_get_folder_id()").c_str());
192 err = media_folder_get_path(folder, &str);
193 if (MEDIA_CONTENT_ERROR_NONE == err) {
195 dirPtr->setDirectoryURI(str);
202 LOGE("%s", ContentUtility::getMediaContentLogMessage(
203 err, "media_folder_get_path()").c_str());
206 err = media_folder_get_name(folder, &str);
207 if (MEDIA_CONTENT_ERROR_NONE == err) {
209 dirPtr->setTitle(str);
216 LOGE("%s", ContentUtility::getMediaContentLogMessage(
217 err, "media_folder_get_name()").c_str());
222 err = media_folder_get_modified_time(folder, &date);
223 if (MEDIA_CONTENT_ERROR_NONE == err) {
224 dirPtr->setModifiedDate(date);
228 LOGE("%s", ContentUtility::getMediaContentLogMessage(
229 err, "media_folder_get_modified_time()").c_str());
233 media_content_storage_e storageType;
234 err = media_folder_get_storage_type(folder, &storageType);
235 if (MEDIA_CONTENT_ERROR_NONE == err) {
236 if (storageType == MEDIA_CONTENT_STORAGE_INTERNAL) {
237 dirPtr->setStorageType("INTERNAL");
239 else if (storageType == MEDIA_CONTENT_STORAGE_EXTERNAL) {
240 dirPtr->setStorageType("EXTERNAL");
245 LOGE("%s", ContentUtility::getMediaContentLogMessage(
246 err, "media_folder_get_storage_type()").c_str());
250 if (DirectoryLst* directories = static_cast<DirectoryLst*>(user_data)) {
251 directories->push_back(dirPtr);
254 LOGE("User data is invalid.");
258 LOGE("Get Directories Iterator is failed.");
263 LOGD("user data is NULL");
270 gboolean ContentHelper::scanFileWork(void* data)
273 ContentScanFileCallback* callback = static_cast<ContentScanFileCallback*>(data);
274 std::string uri = callback->getContentURI();
276 TIME_TRACER_ITEM_BEGIN("scanFilePlatform", 1);
278 int err = media_content_scan_file(uri.c_str());
279 if( MEDIA_CONTENT_ERROR_NONE == err)
281 TIME_TRACER_ITEM_END("scanFilePlatform", 1);
282 if (G_IDLE_FAILED == g_idle_add(ContentHelper::getCallbackCompleted, callback)) {
285 LOGE("g_idle addition failed");
290 LOGE("%s", ContentUtility::getMediaContentLogMessage(
291 err, "media_content_scan_file()").c_str());
292 callback->setErrMsg("scanFile operation is failed.");
293 if (G_IDLE_FAILED == g_idle_add(ContentHelper::getCallbackCanceled, callback)) {
296 LOGE("g_idle addition failed");
302 gboolean ContentHelper::findWork(void* data)
304 ContentFindCallback* callback = static_cast<ContentFindCallback*>(data);
305 ContentLst *contents = callback->getContents();
307 TIME_TRACER_ITEM_BEGIN("findPlatform", 1);
312 filter_h filter = NULL;
313 err = media_filter_create(&filter);
314 if ( MEDIA_CONTENT_ERROR_NONE == err)
316 std::shared_ptr<ContentFilterQueryGenerator> query(new ContentFilterQueryGenerator());
317 std::string condition;
318 AbstractFilterPtr& jsfilter = callback->getFilter();
322 query->generate(jsfilter);
323 condition = query->getResult();
324 err = media_filter_set_condition(
325 filter, condition.c_str(), MEDIA_CONTENT_COLLATE_DEFAULT);
326 if (MEDIA_CONTENT_ERROR_NONE != err)
328 LOGE("ret: %d", err);
329 ContentUtility::throwMediaContentException<Common::UnknownException>(
330 err, "media_filter_set_condition()");
334 SortModePtr& jssortMode = callback->getSortMode();
337 media_content_order_e order = MEDIA_CONTENT_ORDER_ASC;
338 std::string attrName = query->getPlatformAttr(jssortMode->getAttributeName());
339 if(jssortMode->getOrder() == Tizen::ASC)
341 order = MEDIA_CONTENT_ORDER_ASC;
343 else if(jssortMode->getOrder() == Tizen::DESC)
345 order = MEDIA_CONTENT_ORDER_DESC;
349 throw Common::UnknownException("SortMode is invalid value.");
352 err = media_filter_set_order(
353 filter, order, attrName.c_str(), MEDIA_CONTENT_COLLATE_DEFAULT);
354 if (MEDIA_CONTENT_ERROR_NONE != err)
356 LOGE("ret: %d", err);
357 ContentUtility::throwMediaContentException<Common::UnknownException>(
358 err, "media_filter_set_order()");
362 int count = callback->getCount();
363 int offset = callback->getOffset();
365 err = media_filter_set_offset(filter, offset, count);
366 if ( MEDIA_CONTENT_ERROR_NONE != err)
368 LOGE("ret: %d", err);
369 ContentUtility::throwMediaContentException<Common::UnknownException>(
370 err, "media_filter_set_offset()");
373 if(callback->getDirectoryId().empty())
375 err = media_info_foreach_media_from_db(filter,findCallback, contents);
376 if( MEDIA_CONTENT_ERROR_NONE != err)
378 LOGE("ret: %d", err);
379 ContentUtility::throwMediaContentException<Common::UnknownException>(
380 err, "media_info_foreach_media_from_db()");
385 err = media_folder_foreach_media_from_db(
386 callback->getDirectoryId().c_str(),
390 if( MEDIA_CONTENT_ERROR_NONE != err)
392 LOGE("ret: %d", err);
393 ContentUtility::throwMediaContentException<Common::UnknownException>(
394 err, "media_folder_foreach_media_from_db()");
397 TIME_TRACER_ITEM_END("findPlatform", 1);
398 if (G_IDLE_FAILED == g_idle_add(ContentHelper::getCallbackCompleted, callback)) {
401 LOGE("g_idle addition failed");
406 LOGE("ret: %d", err);
407 ContentUtility::throwMediaContentException<Common::UnknownException>(
408 err, "media_filter_create()");
411 int ret = media_filter_destroy(filter);
412 if ( MEDIA_CONTENT_ERROR_NONE != ret){
413 LOGE("%s", ContentUtility::getMediaContentLogMessage(
414 ret, "media_filter_destroy()").c_str());
417 catch (const BasePlatformException &err) {
418 callback->setErrMsg(err.getMessage().c_str());
419 if (G_IDLE_FAILED == g_idle_add(ContentHelper::getCallbackCanceled, callback)) {
422 LOGE("g_idle addition failed");
429 bool ContentHelper::findCallback(media_info_h info, void *user_data)
432 if (user_data != NULL) {
434 ContentLst* contents = static_cast<ContentLst*>(user_data);
436 media_content_type_e type;
438 err = media_info_get_media_type(info, &type);
439 if (MEDIA_CONTENT_ERROR_NONE
441 if (type == MEDIA_CONTENT_TYPE_IMAGE) {
442 ImageContentPtr image = ImageContentPtr(new ImageContent());
443 ContentHelper::loadImageContentFromPlatform(info, image);
444 contents->push_back(image);
446 else if (type == MEDIA_CONTENT_TYPE_VIDEO) {
447 VideoContentPtr video = VideoContentPtr(new VideoContent());
448 ContentHelper::loadVideoContentFromPlatform(info, video);
449 contents->push_back(video);
451 else if (type == MEDIA_CONTENT_TYPE_MUSIC) {
452 AudioContentPtr audio = AudioContentPtr(new AudioContent());
453 ContentHelper::loadAudioContentFromPlatform(info, audio);
454 contents->push_back(audio);
456 else if (type == MEDIA_CONTENT_TYPE_OTHERS) {
457 ContentPtr content = ContentPtr(new Content());
458 ContentHelper::loadContentFromPlatform(info, content);
459 contents->push_back(content);
464 LOGW("%s", ContentUtility::getMediaContentLogMessage(
465 err, "media_info_get_media_type()").c_str());
469 LOGE("content handle is not valid.");
474 LOGD("user data is NULL");
480 bool ContentHelper::update(ContentPtr content)
483 TIME_TRACER_ITEM_BEGIN("updatePlatform", 1);
484 ret = updateContentToPlatform(content);
485 TIME_TRACER_ITEM_END("updatePlatform", 1);
490 gboolean ContentHelper::updateBatchWork(void* data)
492 ContentUpdateBatchCallback* callback = static_cast<ContentUpdateBatchCallback*>(data);
493 ContentLst *contents = callback->getContents();
495 TIME_TRACER_ITEM_BEGIN("updateBatchPlatform", 1);
497 if(!(contents->empty()))
499 for(unsigned int i = 0 ; i < contents->size(); i++)
501 updateContentToPlatform(contents->at(i));
503 TIME_TRACER_ITEM_END("updateBatchPlatform", 1);
504 if (G_IDLE_FAILED == g_idle_add(ContentHelper::getCallbackCompleted, callback)) {
507 LOGE("g_idle addition failed");
512 callback->setErrMsg("The Private object is null.");
514 if (G_IDLE_FAILED == g_idle_add(ContentHelper::getCallbackCanceled, callback)) {
517 LOGE("g_idle addition failed");
524 bool ContentHelper::updateContentToPlatform(ContentPtr content)
530 std::string id = content->getId();
533 media_info_h info = NULL;
534 err = media_info_get_media_from_db(id.c_str(), &info);
535 if(MEDIA_CONTENT_ERROR_NONE == err)
537 err = media_info_set_rating(info, content->getRating());
538 if(MEDIA_CONTENT_ERROR_NONE != err)
540 LOGE("%s", ContentUtility::getMediaContentLogMessage(
541 err, "media_info_set_rating()").c_str());
544 err = media_info_set_description (info, content->getDescription().c_str());
545 if(MEDIA_CONTENT_ERROR_NONE != err)
547 LOGE("%s", ContentUtility::getMediaContentLogMessage(
548 err, "media_info_set_description()").c_str());
551 err = media_info_set_display_name (info, content->getName().c_str());
552 if(MEDIA_CONTENT_ERROR_NONE != err)
554 LOGE("%s", ContentUtility::getMediaContentLogMessage(
555 err, "media_info_set_display_name()").c_str());
558 err = media_info_set_favorite (info, content->getIsFavorite());
559 if(MEDIA_CONTENT_ERROR_NONE != err)
561 LOGE("%s", ContentUtility::getMediaContentLogMessage(
562 err, "media_info_set_favorite()").c_str());
565 if(content->getType().compare("IMAGE") == 0)
567 image_meta_h img=NULL;
568 ImageContentPtr imagePtr = std::dynamic_pointer_cast<ImageContent>(content);
571 err = media_info_get_image(info, &img);
572 if(MEDIA_CONTENT_ERROR_NONE == err)
574 err = image_meta_set_orientation(img, imagePtr->getOrientationEnum());
575 if(MEDIA_CONTENT_ERROR_NONE != err)
577 LOGE("%s", ContentUtility::getMediaContentLogMessage(
578 err, "image_meta_set_orientation()").c_str());
581 double latitude = UNDEFINED_GEO;
582 double longitude = UNDEFINED_GEO;
583 if (imagePtr->isGeolocationSet()) {
584 latitude = imagePtr->getLatitude();
585 longitude = imagePtr->getLongitude();
588 err = media_info_set_latitude(info, latitude);
589 if(MEDIA_CONTENT_ERROR_NONE != err)
591 LOGE("%s", ContentUtility::getMediaContentLogMessage(
592 err, "media_info_set_latitude()").c_str());
595 err = media_info_set_longitude(info, longitude);
596 if(MEDIA_CONTENT_ERROR_NONE != err)
598 LOGE("%s", ContentUtility::getMediaContentLogMessage(
599 err, "media_info_set_longitude()").c_str());
602 err = image_meta_update_to_db(img);
603 if(MEDIA_CONTENT_ERROR_NONE != err)
605 LOGE("%s", ContentUtility::getMediaContentLogMessage(
606 err, "image_meta_update_to_db()").c_str());
610 err = image_meta_destroy(img);
611 if ( MEDIA_CONTENT_ERROR_NONE != err)
613 LOGE("%s", ContentUtility::getMediaContentLogMessage(
614 err, "image_meta_destroy()").c_str());
619 LOGE("%s", ContentUtility::getMediaContentLogMessage(
620 err, "media_info_get_image()").c_str());
624 if(content->getType().compare("VIDEO") == 0)
626 video_meta_h video = NULL;
627 VideoContentPtr videoPtr = std::dynamic_pointer_cast<VideoContent>(content);
630 err = media_info_get_video(info, &video);
631 if ( MEDIA_CONTENT_ERROR_NONE == err)
633 double latitude = UNDEFINED_GEO;
634 double longitude = UNDEFINED_GEO;
635 if (videoPtr->isGeolocationSet()) {
636 latitude = videoPtr->getLatitude();
637 longitude = videoPtr->getLongitude();
640 err = media_info_set_latitude(info, latitude);
641 if(MEDIA_CONTENT_ERROR_NONE != err)
643 LOGE("%s", ContentUtility::getMediaContentLogMessage(
644 err, "media_info_set_latitude()").c_str());
647 err = media_info_set_longitude(info, longitude);
648 if(MEDIA_CONTENT_ERROR_NONE != err)
650 LOGE("%s", ContentUtility::getMediaContentLogMessage(
651 err, "media_info_set_longitude()").c_str());
654 err = video_meta_update_to_db(video);
655 if(MEDIA_CONTENT_ERROR_NONE != err)
657 LOGE("%s", ContentUtility::getMediaContentLogMessage(
658 err, "video_meta_update_to_db()").c_str());
662 err = video_meta_destroy(video);
663 if(MEDIA_CONTENT_ERROR_NONE != err)
665 LOGE("%s", ContentUtility::getMediaContentLogMessage(
666 err, "video_meta_destroy()").c_str());
671 LOGW("%s", ContentUtility::getMediaContentLogMessage(
672 err, "media_info_get_video()").c_str());
677 err = media_info_update_to_db(info);
678 if(MEDIA_CONTENT_ERROR_NONE != err)
680 LOGE("%s", ContentUtility::getMediaContentLogMessage(
681 err, "media_info_update_to_db()").c_str());
687 LOGW("%s", ContentUtility::getMediaContentLogMessage(
688 err, "media_info_get_media_from_db()").c_str());
690 int error = media_info_destroy(info);
691 if (error != MEDIA_CONTENT_ERROR_NONE) {
692 LOGE("%s", ContentUtility::getMediaContentLogMessage(
693 error, "media_info_destroy()").c_str());
702 void ContentHelper::changeCallbackWork(
703 media_content_error_e error,
705 media_content_db_update_item_type_e update_item,
706 media_content_db_update_type_e update_type,
707 media_content_type_e media_type,
713 ContentChangeCallbackPtrList listener = *(ContentChangeCallbackPtrList*)user_data;
716 if( error == MEDIA_CONTENT_ERROR_NONE)
720 if( update_item == MEDIA_ITEM_FILE)
722 std::string condition = "MEDIA_ID=\"";
727 if(update_type == MEDIA_CONTENT_INSERT ||
728 update_type == MEDIA_CONTENT_UPDATE) {
730 filter_h filter = NULL;
731 err = media_filter_create(&filter);
732 if (MEDIA_CONTENT_ERROR_NONE == err) {
734 err = media_filter_set_condition(filter, condition.c_str(),
735 MEDIA_CONTENT_COLLATE_DEFAULT);
736 if ( MEDIA_CONTENT_ERROR_NONE != err)
738 LOGW("%s", ContentUtility::getMediaContentLogMessage(
739 err, "media_filter_set_condition()").c_str());
742 if(media_type == MEDIA_CONTENT_TYPE_IMAGE) {
743 content = ContentPtr(new ImageContent());
745 else if(media_type == MEDIA_CONTENT_TYPE_VIDEO) {
746 content = ContentPtr(new VideoContent());
748 else if(media_type == MEDIA_CONTENT_TYPE_SOUND ||
749 media_type == MEDIA_CONTENT_TYPE_MUSIC) {
750 content = ContentPtr(new AudioContent());
753 content = ContentPtr(new Content());
756 ContentHolder* content_ptr_holder = new ContentHolder();
757 content_ptr_holder->ptr = content;
759 err = media_info_foreach_media_from_db(
760 filter, loadContent, (void*)content_ptr_holder);
761 if( MEDIA_CONTENT_ERROR_NONE == err) {
763 content->setContentURI(ContentUtility::convertPathToUri(content->getContentURI()));
764 ContentChangeCallbackPtrList::iterator itr = listener.begin();
765 while( itr != listener.end() ) {
766 ContentChangeCallbackPtr callback = *itr;
768 if(!GlobalContextManager::getInstance()->isAliveGlobalContext(
769 callback->getContext())) {
770 LOGW("context was closed, so skip");
775 if(update_type == MEDIA_CONTENT_INSERT) {
776 callback->oncontentadded(content);
779 callback->oncontentupdated(content);
786 delete content_ptr_holder;
787 content_ptr_holder = NULL;
789 LOGW("%s", ContentUtility::getMediaContentLogMessage(
790 err, "media_info_foreach_media_from_db()").c_str());
793 err = media_filter_destroy(filter);
794 if (MEDIA_CONTENT_ERROR_NONE != err) {
795 LOGW("%s", ContentUtility::getMediaContentLogMessage(
796 err, "media_filter_destroy()").c_str());
801 LOGW("%s", ContentUtility::getMediaContentLogMessage(
802 err, "media_filter_create()").c_str());
805 else if(update_type == MEDIA_CONTENT_DELETE)
807 ContentChangeCallbackPtrList::iterator itr = listener.begin();
808 while( itr != listener.end() ) {
809 ContentChangeCallbackPtr callback = *itr;
811 if(!GlobalContextManager::getInstance()->isAliveGlobalContext(
812 callback->getContext())) {
813 LOGW("context was closed, so skip");
818 callback->oncontentremoved(uuid);
827 LOGW("%s", ContentUtility::getMediaContentLogMessage(
828 error, "media_content_set_db_updated_cb()").c_str());
835 int ContentHelper::get_utc_offset()
837 time_t zero = 24*60*60L;
841 /* get the local time for Jan 2, 1900 00:00 UTC */
842 timeptr = localtime( &zero );
843 gmtime_hours = timeptr->tm_hour;
845 /* if the local time is the "day before" the UTC, subtract 24 hours
846 from the hours to get the UTC offset */
847 if( timeptr->tm_mday < 2 )
854 bool ContentHelper::loadContent(media_info_h info, void* user_data)
856 ContentHolder* hold = static_cast<ContentHolder*>(user_data);
857 media_content_type_e type;
860 err = media_info_get_media_type(info, &type);
861 if ( MEDIA_CONTENT_ERROR_NONE == err) {
862 if ( type == MEDIA_CONTENT_TYPE_IMAGE) {
863 loadImageContentFromPlatform(info,
864 std::dynamic_pointer_cast<ImageContent>(hold->ptr));
866 else if ( type == MEDIA_CONTENT_TYPE_VIDEO) {
867 loadVideoContentFromPlatform(info,
868 std::dynamic_pointer_cast<VideoContent>(hold->ptr));
870 else if ( type == MEDIA_CONTENT_TYPE_MUSIC || type == MEDIA_CONTENT_TYPE_SOUND) {
871 loadAudioContentFromPlatform(info,
872 std::dynamic_pointer_cast<AudioContent>(hold->ptr));
874 else if( type == MEDIA_CONTENT_TYPE_OTHERS) {
875 loadContentFromPlatform(info, hold->ptr);
880 LOGE("%s", ContentUtility::getMediaContentLogMessage(
881 err, "media_info_get_media_type()").c_str());
889 void ContentHelper::loadContentFromPlatform(media_info_h info, ContentPtr content)
893 LOGE("Content creation is failed.");
899 LOGE("find operation is failed.");
905 unsigned long long tmplong = 0;
906 bool tmpBool = false;
911 int err = media_info_get_media_id(info, &tmpStr);
912 if(MEDIA_CONTENT_ERROR_NONE == err)
916 content->setId(tmpStr);
923 LOGW("%s", ContentUtility::getMediaContentLogMessage(
924 err, "media_info_get_media_id()").c_str());
927 err = media_info_get_mime_type(info, &tmpStr);
928 if(MEDIA_CONTENT_ERROR_NONE == err)
932 content->setMimeType(tmpStr);
939 LOGW("%s", ContentUtility::getMediaContentLogMessage(
940 err, "media_info_get_mime_type()").c_str());
943 err = media_info_get_display_name(info, &tmpStr);
944 if(MEDIA_CONTENT_ERROR_NONE == err)
948 content->setName(tmpStr);
955 LOGW("%s", ContentUtility::getMediaContentLogMessage(
956 err, "media_info_get_display_name()").c_str());
959 err = media_info_get_title(info, &tmpStr);
960 if (MEDIA_CONTENT_ERROR_NONE == err)
964 content->setTitle(tmpStr);
971 LOGW("%s", ContentUtility::getMediaContentLogMessage(
972 err, "media_info_get_title()").c_str());
975 err = media_info_get_file_path(info, &tmpStr);
976 if(MEDIA_CONTENT_ERROR_NONE == err)
980 content->setContentURI(ContentUtility::convertPathToUri(tmpStr));
987 LOGW("%s", ContentUtility::getMediaContentLogMessage(
988 err, "media_info_get_file_path()").c_str());
991 err = media_info_get_thumbnail_path (info, &tmpStr);
992 if(MEDIA_CONTENT_ERROR_NONE == err)
996 std::vector<std::string> thumbnailURIs;
997 thumbnailURIs.push_back(ContentUtility::convertPathToUri(tmpStr));
998 content->setThumbnailURIs(thumbnailURIs);
1005 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1006 err, "media_info_get_thumbnail_path()").c_str());
1009 err = media_info_get_description(info, &tmpStr);
1010 if(MEDIA_CONTENT_ERROR_NONE == err)
1014 content->setDescription(tmpStr);
1021 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1022 err, "media_info_get_description()").c_str());
1025 err = media_info_get_modified_time(info, &tmpDate);
1026 if(MEDIA_CONTENT_ERROR_NONE == err)
1030 content->setModifiedDate(tmpDate);
1035 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1036 err, "media_info_get_modified_time()").c_str());
1039 err = media_info_get_rating(info, &tmpInt);
1040 if(MEDIA_CONTENT_ERROR_NONE == err)
1042 content->setRating(tmpInt);
1046 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1047 err, "media_info_get_rating()").c_str());
1050 err = media_info_get_favorite(info, &tmpBool);
1051 if(MEDIA_CONTENT_ERROR_NONE == err)
1053 content->setIsFavorite(tmpBool);
1057 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1058 err, "media_info_get_favorite()").c_str());
1061 err = media_info_get_size(info, &tmplong);
1062 if(MEDIA_CONTENT_ERROR_NONE == err)
1064 content->setSize(tmplong);
1068 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1069 err, "media_info_get_size()").c_str());
1073 ImageContentPtr ContentHelper::loadImageContentFromPlatform(media_info_h info,
1074 ImageContentPtr image)
1079 LOGE("Image Content creation is failed.");
1080 return ImageContentPtr();
1085 LOGE("find operation is failed.");
1086 return ImageContentPtr();
1089 char* tmpStr = NULL;
1095 ContentHelper::loadContentFromPlatform(info, image);
1097 int err = media_info_get_image(info, &img);
1098 if(MEDIA_CONTENT_ERROR_NONE == err)
1101 err = image_meta_get_date_taken(img, &tmpStr);
1102 if(MEDIA_CONTENT_ERROR_NONE == err)
1106 struct tm *result = (struct tm *)calloc(1, sizeof(struct tm));
1107 if(strptime(tmpStr, "%Y:%m:%d %H:%M:%S", result) == NULL)
1109 LOGE( "Couldn't convert supplied date.");
1112 time_t t = mktime( result );// + get_utc_offset() * 3600;
1113 image->setReleaseDate(t);
1121 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1122 err, "image_meta_get_date_taken()").c_str());
1125 err = image_meta_get_width(img, &tmpInt);
1126 if(MEDIA_CONTENT_ERROR_NONE == err)
1128 image->setWidth(tmpInt);
1132 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1133 err, "image_meta_get_width()").c_str());
1136 err = image_meta_get_height(img, &tmpInt);
1137 if(MEDIA_CONTENT_ERROR_NONE == err)
1139 image->setHeight(tmpInt);
1143 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1144 err, "image_meta_get_height()").c_str());
1147 err = media_info_get_latitude(info, &tmpDouble);
1148 if(MEDIA_CONTENT_ERROR_NONE == err)
1150 LOGD("Latitude: %f", tmpDouble);
1151 if (UNDEFINED_GEO != tmpDouble) {
1152 image->setLatitude(tmpDouble);
1157 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1158 err, "media_info_get_latitude()").c_str());
1161 err = media_info_get_longitude(info, &tmpDouble);
1162 if(MEDIA_CONTENT_ERROR_NONE == err)
1164 LOGD("Longitude: %f", tmpDouble);
1165 if (UNDEFINED_GEO != tmpDouble) {
1166 image->setLongitude(tmpDouble);
1171 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1172 err, "media_info_get_longitude()").c_str());
1175 media_content_orientation_e orientation;
1176 err = image_meta_get_orientation(img, &orientation);
1177 if(MEDIA_CONTENT_ERROR_NONE == err)
1179 image->setOrientation(orientation);
1183 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1184 err, "image_meta_get_orientation()").c_str());
1187 err = image_meta_destroy(img);
1188 if(MEDIA_CONTENT_ERROR_NONE != err)
1190 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1191 err, "image_meta_destroy()").c_str());
1196 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1197 err, "media_info_get_image()").c_str());
1202 VideoContentPtr ContentHelper::loadVideoContentFromPlatform(media_info_h info,
1203 VideoContentPtr videoPtr)
1208 LOGE("Video Content creation is failed.");
1209 return VideoContentPtr();
1214 LOGE("find operation is failed.");
1215 return VideoContentPtr();
1224 ContentHelper::loadContentFromPlatform(info, videoPtr);
1226 int err = media_info_get_video(info, &video);
1227 if(MEDIA_CONTENT_ERROR_NONE == err)
1229 err = video_meta_get_recorded_date(video, &tmpStr);
1230 if(MEDIA_CONTENT_ERROR_NONE == err)
1234 struct tm *result=(struct tm *)calloc(1, sizeof(struct tm));
1235 if (strptime(tmpStr, "%Y:%m:%d %H:%M:%S", result) == NULL) {
1236 LOGE( "Couldn't convert supplied date.");
1238 time_t t = mktime( result ) + get_utc_offset() * 3600;
1239 videoPtr->setReleaseDate(t);
1247 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1248 err, "video_meta_get_recorded_date()").c_str());
1251 err = video_meta_get_album(video, &tmpStr);
1252 if(MEDIA_CONTENT_ERROR_NONE == err)
1256 videoPtr->setAlbum(tmpStr);
1263 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1264 err, "video_meta_get_album()").c_str());
1267 err = video_meta_get_artist(video, &tmpStr);
1268 if(MEDIA_CONTENT_ERROR_NONE == err)
1272 std::vector<std::string> artists = WrtDeviceApis::Commons::String::split(tmpStr, TAG_DELIMETER);
1273 videoPtr->setArtists(artists);
1280 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1281 err, "video_meta_get_artist()").c_str());
1284 err = media_info_get_latitude(info, &tmpDouble);
1285 if(MEDIA_CONTENT_ERROR_NONE == err)
1287 LOGD("Latitude: %f", tmpDouble);
1288 if (UNDEFINED_GEO != tmpDouble) {
1289 videoPtr->setLatitude(tmpDouble);
1294 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1295 err, "media_info_get_latitude()").c_str());
1298 err = media_info_get_longitude(info, &tmpDouble);
1299 if(MEDIA_CONTENT_ERROR_NONE == err)
1301 LOGD("Longitude: %f", tmpDouble);
1302 if (UNDEFINED_GEO != tmpDouble) {
1303 videoPtr->setLongitude(tmpDouble);
1308 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1309 err, "media_info_get_longitude()").c_str());
1312 err = video_meta_get_width(video, &tmpInt);
1313 if(MEDIA_CONTENT_ERROR_NONE == err)
1315 videoPtr->setWidth(tmpInt);
1319 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1320 err, "video_meta_get_width()").c_str());
1323 err = video_meta_get_height(video, &tmpInt);
1324 if(MEDIA_CONTENT_ERROR_NONE == err)
1326 videoPtr->setHeight(tmpInt);
1330 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1331 err, "video_meta_get_height()").c_str());
1334 err = video_meta_get_duration(video, &tmpInt);
1335 if(MEDIA_CONTENT_ERROR_NONE == err)
1337 videoPtr->setDuration(tmpInt);
1341 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1342 err, "video_meta_get_duration()").c_str());
1345 err = video_meta_destroy(video);
1346 if(MEDIA_CONTENT_ERROR_NONE != err)
1348 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1349 err, "video_meta_destroy()").c_str());
1354 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1355 err, "media_info_get_video()").c_str());
1361 AudioContentPtr ContentHelper::loadAudioContentFromPlatform(media_info_h info,
1362 AudioContentPtr audioPtr)
1366 LOGE("Video Content creation is failed.");
1367 return AudioContentPtr();
1372 LOGE("find operation is failed.");
1373 return AudioContentPtr();
1381 ContentHelper::loadContentFromPlatform(info, audioPtr);
1383 int err = media_info_get_audio(info, &audio);
1384 if(MEDIA_CONTENT_ERROR_NONE == err)
1386 err = audio_meta_get_recorded_date(audio, &tmpStr);
1387 if(MEDIA_CONTENT_ERROR_NONE == err)
1391 struct tm *result = (struct tm *)calloc(1, sizeof(struct tm));
1392 if (strptime(tmpStr, "%Y:%m:%d %H:%M:%S", result) == NULL)
1394 LOGE( "Couldn't convert supplied date.");
1396 time_t t = mktime( result ) + get_utc_offset() * 3600;
1397 audioPtr->setReleaseDate(t);
1405 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1406 err, "audio_meta_get_recorded_date()").c_str());
1409 err = audio_meta_get_album(audio, &tmpStr);
1410 if(MEDIA_CONTENT_ERROR_NONE == err)
1414 audioPtr->setAlbum(tmpStr);
1421 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1422 err, "audio_meta_get_album()").c_str());
1425 err = audio_meta_get_artist(audio, &tmpStr);
1426 if(MEDIA_CONTENT_ERROR_NONE == err)
1430 std::vector<std::string> artists = String::split(tmpStr, TAG_DELIMETER);
1431 audioPtr->setArtists(artists);
1438 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1439 err, "audio_meta_get_artist()").c_str());
1442 err = audio_meta_get_composer(audio, &tmpStr);
1443 if(MEDIA_CONTENT_ERROR_NONE == err)
1447 std::vector<std::string> composers = String::split(tmpStr, TAG_DELIMETER);
1448 audioPtr->setComposers(composers);
1455 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1456 err, "audio_meta_get_composer()").c_str());
1459 err = audio_meta_get_duration(audio, &tmpInt);
1460 if(MEDIA_CONTENT_ERROR_NONE == err)
1462 audioPtr->setDuration(tmpInt);
1466 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1467 err, "audio_meta_get_duration()").c_str());
1470 err = audio_meta_get_copyright(audio, &tmpStr);
1471 if(MEDIA_CONTENT_ERROR_NONE == err)
1475 audioPtr->setCopyright(tmpStr);
1482 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1483 err, "audio_meta_get_copyright()").c_str());
1486 err = audio_meta_get_track_num(audio, &tmpStr);
1487 if(MEDIA_CONTENT_ERROR_NONE == err)
1491 audioPtr->setTrackNumber(atoi(tmpStr));
1498 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1499 err, "audio_meta_get_track_num()").c_str());
1502 err = audio_meta_get_bit_rate(audio, &tmpInt);
1503 if(MEDIA_CONTENT_ERROR_NONE == err)
1505 audioPtr->setBitrate(tmpInt);
1509 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1510 err, "audio_meta_get_bit_rate()").c_str());
1513 err = audio_meta_get_genre(audio, &tmpStr);
1514 if(MEDIA_CONTENT_ERROR_NONE == err)
1518 std::vector<std::string> genres = String::split(tmpStr, TAG_DELIMETER);
1520 audioPtr->setGenres(genres);
1527 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1528 err, "audio_meta_get_genre()").c_str());
1531 err = audio_meta_destroy(audio);
1532 if(MEDIA_CONTENT_ERROR_NONE != err)
1534 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1535 err, "audio_meta_destroy()").c_str());
1540 LOGW("%s", ContentUtility::getMediaContentLogMessage(
1541 err, "media_info_get_audio()").c_str());