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>();
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.");
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();
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;