[Content] Replace media_info_set_display_name function with media_info_move_to_db 59/274659/2
authorMarcin Bialek <m.bialek@samsung.com>
Wed, 4 May 2022 10:04:34 +0000 (12:04 +0200)
committerMarcin Bialek <m.bialek@samsung.com>
Thu, 5 May 2022 08:35:50 +0000 (10:35 +0200)
media_info_set_display_name function is going to be removed and has to be replaced.

[Verification] Code compiles. TCT tests for content module pass. Changes were also tested manually.

Change-Id: Ia623409bd22836aff2089b5811e088f50c575810
Signed-off-by: Marcin Bialek <m.bialek@samsung.com>
src/content/content_manager.cc

index f7f5064..4f22a0d 100644 (file)
@@ -422,8 +422,7 @@ void ContentDirToJson(media_folder_h folder, picojson::object& o) {
 static int setContent(media_info_h media, const picojson::value& content) {
   ScopeLogger();
 
-  int ret;
-  std::string name = content.get("name").to_str();
+  int ret = MEDIA_CONTENT_ERROR_NONE;
   std::string description = content.get("description").to_str();
   int rating = std::stoi(content.get("rating").to_str());
   bool is_fav = content.get("isFavorite").get<bool>();
@@ -440,11 +439,6 @@ static int setContent(media_info_h media, const picojson::value& content) {
     return ret;
   }
 
-  ret = media_info_set_display_name(media, name.c_str());
-  if (ret != MEDIA_CONTENT_ERROR_NONE) {
-    LoggerE("Updating name failed.");
-  }
-
   ret = media_info_set_description(media, description.c_str());
   if (ret != MEDIA_CONTENT_ERROR_NONE) {
     LoggerE("Updating description failed.");
@@ -503,6 +497,68 @@ static int setContent(media_info_h media, const picojson::value& content) {
   return MEDIA_CONTENT_ERROR_NONE;
 }
 
+static int updateContent(const picojson::value& content) {
+  ScopeLogger();
+
+  int ret = MEDIA_CONTENT_ERROR_NONE;
+  std::string id = content.get("id").to_str();
+  std::string new_name = content.get("name").to_str();
+  media_info_h media = nullptr;
+  char* name = nullptr;
+  char* path = nullptr;
+  SCOPE_EXIT {
+    if (media) {
+      media_info_destroy(media);
+    }
+    if (name) {
+      free(name);
+    }
+    if (path) {
+      free(path);
+    }
+  };
+
+  ret = media_info_get_media_from_db(id.c_str(), &media);
+  if (ret != MEDIA_CONTENT_ERROR_NONE) {
+    LoggerE("media_info_get_media_from_db failed: %d", ret);
+    return ret;
+  }
+  ret = setContent(media, content);
+  if (ret != MEDIA_CONTENT_ERROR_NONE) {
+    LoggerE("setContent failed: %d", ret);
+    return ret;
+  }
+  ret = media_info_update_to_db(media);
+  if (ret != MEDIA_CONTENT_ERROR_NONE) {
+    LoggerE("media_info_update_to_db failed: %d", ret);
+    return ret;
+  }
+  ret = media_info_get_display_name(media, &name);
+  if (ret != MEDIA_CONTENT_ERROR_NONE) {
+    LoggerE("media_info_get_display_name failed: %d", ret);
+    return ret;
+  }
+  const std::string name_str(name);
+  if (name_str != new_name) {
+    ret = media_info_get_file_path(media, &path);
+    if (ret != MEDIA_CONTENT_ERROR_NONE) {
+      LoggerE("media_info_get_file_path failed: %d", ret);
+      return ret;
+    }
+    std::string path_str(path);
+    const size_t p = path_str.rfind(name_str);
+    path_str.replace(p, name_str.length(), new_name);
+    LoggerD("new media path: %s", path_str.c_str());
+    ret = media_info_move_to_db(media, path_str.c_str());
+    if (ret != MEDIA_CONTENT_ERROR_NONE) {
+      LoggerE("media_info_move_to_db failed: %d", ret);
+      return ret;
+    }
+  }
+
+  return ret;
+}
+
 static void FolderToJson(media_folder_h folder, picojson::object* out) {
   ScopeLogger();
 
@@ -987,46 +1043,25 @@ void ContentManager::removePlaylist(std::string playlistId,
 
 int ContentManager::update(const picojson::value& args) {
   ScopeLogger();
-
-  int ret;
-  picojson::value content = args.get("content");
-  std::string id = content.get("id").to_str();
-
-  media_info_h media = NULL;
-  ret = media_info_get_media_from_db(id.c_str(), &media);
-  if (ret == MEDIA_CONTENT_ERROR_NONE) {
-    setContent(media, content);
-    ret = media_info_update_to_db(media);
-    media_info_destroy(media);
+  const picojson::value content = args.get("content");
+  int ret = updateContent(content);
+  if (ret != MEDIA_CONTENT_ERROR_NONE) {
+    LoggerE("updateContent failed: %d", ret);
   }
-
   return ret;
 }
 
 int ContentManager::updateBatch(const picojson::value& args) {
   ScopeLogger();
-  int ret = 0;
+  int ret = MEDIA_CONTENT_ERROR_NONE;
   std::vector<picojson::value> contents = args.get("contents").get<picojson::array>();
 
   for (picojson::value::array::iterator it = contents.begin(); it != contents.end(); ++it) {
-    picojson::value content = *it;
-    std::string id = content.get("id").to_str();
-    media_info_h media = NULL;
-    ret = media_info_get_media_from_db(id.c_str(), &media);
-    if (media != NULL && ret == MEDIA_CONTENT_ERROR_NONE) {
-      ret = setContent(media, content);
-      if (ret != MEDIA_CONTENT_ERROR_NONE) {
-        LoggerE("setContent failed");
-        return ret;
-      }
-
-      ret = media_info_update_to_db(media);
-      if (ret != MEDIA_CONTENT_ERROR_NONE) {
-        LoggerE("update to db failed");
-      }
-      media_info_destroy(media);
-    } else {
-      return ret;
+    const picojson::value content = *it;
+    ret = updateContent(content);
+    if (ret != MEDIA_CONTENT_ERROR_NONE) {
+      LoggerE("updateContent failed: %d", ret);
+      break;
     }
   }
   return ret;