From: Rafal Galka Date: Mon, 23 Mar 2015 14:42:21 +0000 (+0100) Subject: [Content] getDirectories() fix X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~257 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7946c4d3006d77d476e3991a6e098216c199854c;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Content] getDirectories() fix [Verification] ContentDirectory_modifiedDate_attribute and other ContentDirectory_* tests should pass Change-Id: I63e9f842908c31504cb204fbf0dadbc11238ffbd --- diff --git a/src/content/content_instance.cc b/src/content/content_instance.cc index 3e251e86..eb407701 100755 --- a/src/content/content_instance.cc +++ b/src/content/content_instance.cc @@ -197,7 +197,7 @@ static void changedContentCallback(media_content_error_e error, ret = media_info_get_media_from_db(uuid, &media); if (ret == MEDIA_CONTENT_ERROR_NONE && media != NULL) { picojson::object o; - contentToJson(media, o); + ContentToJson(media, o); ReportSuccess(picojson::value(o), obj); if (update_type == MEDIA_CONTENT_INSERT) { diff --git a/src/content/content_manager.cc b/src/content/content_manager.cc index 26178737..c6cd6e88 100755 --- a/src/content/content_manager.cc +++ b/src/content/content_manager.cc @@ -53,7 +53,7 @@ static int get_utc_offset() { } -void contentToJson(media_info_h info, picojson::object& o) { +void ContentToJson(media_info_h info, picojson::object& o) { int ret; int tmpInt = 0; bool tmpBool = false; @@ -417,17 +417,51 @@ static int setContent(media_info_h media, const picojson::value& content) { return MEDIA_CONTENT_ERROR_NONE; } +static void FolderToJson(media_folder_h folder, picojson::object* out) { + LOGGER(DEBUG) << "entered"; + + int ret; + char* name = NULL; + char* id = NULL; + char* path = NULL; + time_t date; + media_content_storage_e storageType; + + media_folder_get_folder_id(folder, &id); + media_folder_get_name(folder, &name); + media_folder_get_path(folder, &path); + ret = media_folder_get_modified_time(folder, &date); + media_folder_get_storage_type(folder, &storageType); + + (*out)["id"] = picojson::value(std::string(id)); + (*out)["directoryURI"] = picojson::value(std::string(path)); + (*out)["title"] = picojson::value(std::string(name)); + + if (storageType == MEDIA_CONTENT_STORAGE_INTERNAL) { + (*out)["storageType"] = picojson::value(std::string("INTERNAL")); + } else if (storageType == MEDIA_CONTENT_STORAGE_EXTERNAL) { + (*out)["storageType"] = picojson::value(std::string("EXTERNAL")); + } + + (*out)["modifiedDate"] = picojson::value(static_cast(date)); + + free(name); + free(id); + free(path); +} + static bool media_foreach_directory_cb(media_folder_h folder, void *user_data) { - std::vector *dir = static_cast*>(user_data); - media_folder_h nfolder = NULL; - media_folder_clone (&nfolder, folder); - dir->push_back(nfolder); + picojson::array *array = static_cast(user_data); + picojson::object json; + FolderToJson(folder, &json); + array->push_back(picojson::value(json)); + return true; } static bool media_foreach_content_cb(media_info_h media, void *user_data) { picojson::value::array *contents = static_cast(user_data); picojson::value::object o; - contentToJson(media, o); + ContentToJson(media, o); contents->push_back(picojson::value(o)); return true; } @@ -490,7 +524,7 @@ static bool playlist_content_member_cb(int playlist_member_id, media_info_h medi media_info_get_display_name(media, &name); o["playlist_member_id"] = picojson::value(static_cast(playlist_member_id)); - contentToJson(media, o); + ContentToJson(media, o); contents->push_back(picojson::value(o)); return true; } @@ -524,14 +558,23 @@ bool ContentManager::isConnected() { void ContentManager::getDirectories(const std::shared_ptr& user_data) { - picojson::value::array pico_dirs; - int ret; filter_h filter = NULL; - std::vector dirs; + ret = media_filter_create(&filter); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + LOGGER(ERROR) << "media_filter_create failed"; + return; + } + + SCOPE_EXIT { + media_filter_destroy(filter); + }; - ret = media_folder_foreach_folder_from_db(filter, media_foreach_directory_cb, &dirs); + std::string condition = "(FOLDER_STORAGE_TYPE = 0 OR FOLDER_STORAGE_TYPE = 1)"; + media_filter_set_condition(filter, condition.c_str(), MEDIA_CONTENT_COLLATE_DEFAULT); + picojson::array pico_dirs; + ret = media_folder_foreach_folder_from_db(filter, media_foreach_directory_cb, &pico_dirs); if (ret != MEDIA_CONTENT_ERROR_NONE) { UnknownException err("Getting the directories failed."); user_data->isSuccess = false; @@ -539,37 +582,6 @@ void ContentManager::getDirectories(const std::shared_ptr& us return; } - for (std::vector::iterator it = dirs.begin(); it != dirs.end(); ++it) { - char* name = NULL; - char* id = NULL; - char* path = NULL; - time_t date; - media_content_storage_e storageType; - picojson::value::object o; - - media_folder_get_folder_id(*it, &id); - media_folder_get_name(*it, &name); - media_folder_get_path(*it, &path); - media_folder_get_modified_time(*it, &date); - media_folder_get_storage_type(*it, &storageType); - - o["id"] = picojson::value(std::string(id)); - o["directoryURI"] = picojson::value(std::string(path)); - o["title"] = picojson::value(std::string(name)); - - if (storageType == MEDIA_CONTENT_STORAGE_INTERNAL) { - o["storageType"] = picojson::value(std::string("INTERNAL")); - } else if (storageType == MEDIA_CONTENT_STORAGE_EXTERNAL) { - o["storageType"] = picojson::value(std::string("EXTERNAL")); - } - - o["modifiedDate"] = picojson::value(static_cast(date)); - pico_dirs.push_back(picojson::value(o)); - - free(name); - free(id); - free(path); - } user_data->isSuccess = true; user_data->result = picojson::value(pico_dirs); } diff --git a/src/content/content_manager.h b/src/content/content_manager.h index 03dde469..13248362 100755 --- a/src/content/content_manager.h +++ b/src/content/content_manager.h @@ -19,8 +19,8 @@ namespace extension { namespace content { -void contentToJson(media_info_h info, picojson::object& o); - +void ContentToJson(media_info_h info, picojson::object& o); + class ContentManager { public: virtual ~ContentManager(); @@ -31,7 +31,7 @@ class ContentManager { void find(const std::shared_ptr& user_data); int update(picojson::value args); int updateBatch(picojson::value args); - + int scanFile(std::string& uri); int setChangeListener(media_content_db_update_cb callback, void *user_data); void unSetChangeListener(); @@ -42,15 +42,15 @@ class ContentManager { //playlist void createPlaylist(std::string name, const std::shared_ptr& user_data); void getPlaylists(const std::shared_ptr& user_data); - void removePlaylist(std::string playlistId, const std::shared_ptr& user_data); + void removePlaylist(std::string playlistId, const std::shared_ptr& user_data); int playlistAdd(std::string playlist_id, std::string content_id); int playlistRemove(std::string playlist_id, int member_id); void playlistAddbatch(const std::shared_ptr& user_data); void playlistGet(const std::shared_ptr& user_data); void playlistRemovebatch(const std::shared_ptr& user_data); void playlistSetOrder(const std::shared_ptr& user_data); - void playlistMove(const std::shared_ptr& user_data); - + void playlistMove(const std::shared_ptr& user_data); + //playlistSetOrder common::PlatformException convertError(int err); private: diff --git a/src/content/js/datatypes.js b/src/content/js/datatypes.js index 11d3da5a..3dc178bd 100644 --- a/src/content/js/datatypes.js +++ b/src/content/js/datatypes.js @@ -35,7 +35,7 @@ function ContentDirectory(data) { var directoryURI; var title; var storageType; - var modifiedDate; + var modifiedDate = null; Object.defineProperties(this, { id: {