[Content] getDirectories() fix
authorRafal Galka <r.galka@samsung.com>
Mon, 23 Mar 2015 14:42:21 +0000 (15:42 +0100)
committerRafal Galka <r.galka@samsung.com>
Mon, 23 Mar 2015 15:36:42 +0000 (00:36 +0900)
[Verification]
ContentDirectory_modifiedDate_attribute
and other ContentDirectory_* tests should pass

Change-Id: I63e9f842908c31504cb204fbf0dadbc11238ffbd

src/content/content_instance.cc
src/content/content_manager.cc
src/content/content_manager.h
src/content/js/datatypes.js

index 3e251e864702dc190e57b73839d2f6b2321ad175..eb40770157b0d8bb69b8f7a7c1fab2be498e6b9b 100755 (executable)
@@ -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) {
index 26178737ff2e1dd9ff5464ed89022e208097597b..c6cd6e88894f11187b2533dbbd981b7b7f723c88 100755 (executable)
@@ -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<double>(date));
+
+  free(name);
+  free(id);
+  free(path);
+}
+
 static bool media_foreach_directory_cb(media_folder_h folder, void *user_data) {
-  std::vector<media_folder_h> *dir = static_cast<std::vector<media_folder_h>*>(user_data);
-  media_folder_h nfolder = NULL;
-  media_folder_clone (&nfolder, folder);
-  dir->push_back(nfolder);
+  picojson::array *array = static_cast<picojson::array*>(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<picojson::value::array*>(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<double>(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<ReplyCallbackData>& user_data) {
 
-  picojson::value::array pico_dirs;
-
   int ret;
   filter_h filter = NULL;
-  std::vector<media_folder_h> 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<ReplyCallbackData>& us
     return;
   }
 
-  for (std::vector<media_folder_h>::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<double>(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);
 }
index 03dde469448ec12556f2b278b63b98351eec9d69..13248362e202f45f95cebd5eb5bd43976eb461df 100755 (executable)
@@ -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<ReplyCallbackData>& 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<ReplyCallbackData>& user_data);
   void getPlaylists(const std::shared_ptr<ReplyCallbackData>& user_data);
-  void removePlaylist(std::string playlistId, const std::shared_ptr<ReplyCallbackData>& user_data);  
+  void removePlaylist(std::string playlistId, const std::shared_ptr<ReplyCallbackData>& 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<ReplyCallbackData>& user_data);
   void playlistGet(const std::shared_ptr<ReplyCallbackData>& user_data);
   void playlistRemovebatch(const std::shared_ptr<ReplyCallbackData>& user_data);
   void playlistSetOrder(const std::shared_ptr<ReplyCallbackData>& user_data);
-  void playlistMove(const std::shared_ptr<ReplyCallbackData>& user_data);  
-  
+  void playlistMove(const std::shared_ptr<ReplyCallbackData>& user_data);
+
 //playlistSetOrder
   common::PlatformException convertError(int err);
  private:
index 11d3da5a888dc7d9a40bc7df926ab81ec5658b2d..3dc178bdc6e444b95164d9c191b5d9156b8bd5ae 100644 (file)
@@ -35,7 +35,7 @@ function ContentDirectory(data) {
   var directoryURI;
   var title;
   var storageType;
-  var modifiedDate;
+  var modifiedDate = null;
 
   Object.defineProperties(this, {
     id: {