[Content] Replacing deprecated function 83/196983/1
authorSzymon Jastrzebski <s.jastrzebsk@partner.samsung.com>
Tue, 8 Jan 2019 09:46:38 +0000 (10:46 +0100)
committerSzymon Jastrzebski <s.jastrzebsk@partner.samsung.com>
Tue, 8 Jan 2019 09:46:38 +0000 (10:46 +0100)
+ Function media_info_create_thumbnail has been deprecated since 5.0,
  media_info_generate_thumbnail is used instead.

[Verification] TCT Content 100%

Change-Id: Ic79400e6ed2f8c18aa803e1d3f9953d9c82a78c7

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

index 736b869867d3f162f9f2183220a15cda9faf1ce1..bc75361b66335eee171fec8efce2217da7aa4483 100644 (file)
@@ -734,17 +734,37 @@ void ContentInstance::ContentManagerCreateThumbnail(const picojson::value& args,
                                                     picojson::object& out) {
   ScopeLogger();
   CHECK_PRIVILEGE_ACCESS(kPrivilegeContentWrite, &out);
-  common::PlatformResult result = common::PlatformResult(common::ErrorCode::NO_ERROR);
-
-  if (ContentManager::getInstance()->isConnected()) {
-    result = ContentManager::getInstance()->createThumbnail(args);
-  } else {
-    result = LogAndCreateResult(common::ErrorCode::UNKNOWN_ERR, "DB Connection is failed.");
-  }
-  if (!result) {
-    LogAndReportError(result, &out, ("Failed to create a thumbnail"));
-    common::Instance::PostMessage(this, picojson::value(out).serialize().c_str());
+  double callback_id = args.get("callbackId").get<double>();
+
+  if (not ContentManager::getInstance()->isConnected()) {
+    TaskQueue::GetInstance().Async([this, callback_id]() {
+      PlatformResult result =
+          LogAndCreateResult(common::ErrorCode::ABORT_ERR, "DB Connection is not established.");
+      picojson::value response = picojson::value(picojson::object());
+      picojson::object& obj = response.get<picojson::object>();
+      obj.emplace("callbackId", picojson::value(callback_id));
+      LogAndReportError(result, &obj, ("DB Connection is not established."));
+      Instance::PostMessage(this, response.serialize().c_str());
+    });
+    return;
   }
+
+  const std::string& id = args.get("id").get<std::string>();
+  auto work = [this, id, callback_id]() {
+    ScopeLogger();
+    picojson::value response = picojson::value(picojson::object());
+    picojson::object& obj = response.get<picojson::object>();
+    obj.emplace("callbackId", picojson::value(callback_id));
+    auto result = ContentManager::getInstance()->createThumbnail(id, &obj);
+    if (result) {
+      ReportSuccess(obj);
+    } else {
+      LogAndReportError(result, &obj);
+    }
+    Instance::PostMessage(this, response.serialize().c_str());
+  };
+  TaskQueue::GetInstance().Async(work);
+  ReportSuccess(out);
 }
 
 void ContentInstance::ContentManagerPlaylistAdd(const picojson::value& args,
index bff61831aabd339a596d4228d40779371160ec89..86e2655dc4aa64875635821a83e73e0ce41e8aa2 100644 (file)
@@ -644,38 +644,6 @@ static bool playlist_content_member_cb(int playlist_member_id, media_info_h medi
   return true;
 }
 
-void CreateThumbnailCallback(media_content_error_e err, const char* path, void* user_data) {
-  ScopeLogger();
-
-  std::unique_ptr<CreateThumbnailCallbackData> callback_data_ptr(
-      (CreateThumbnailCallbackData*)user_data);
-  if (0 == callback_data_ptr->callback_id) {
-    LoggerD("Callback id is 0");
-    return;
-  }
-
-  if (!(ContentManager::getInstance()->getContentInstance())) {
-    // There is not instance already
-    LoggerD("There is not instance now");
-    return;
-  }
-
-  picojson::object out;
-
-  out["callbackId"] = picojson::value(callback_data_ptr->callback_id);
-
-  if (MEDIA_CONTENT_ERROR_NONE == err) {
-    out["result"] = picojson::value(std::string(path));
-    ReportSuccess(out);
-  } else {
-    PlatformResult result = ContentManager::getInstance()->convertError(err);
-    LogAndReportError(result, &out, ("Failed to create a thumbnail"));
-  }
-
-  common::Instance::PostMessage(ContentManager::getInstance()->getContentInstance(),
-                                picojson::value(out).serialize().c_str());
-}
-
 ContentManager::ContentManager() {
   ScopeLogger("ContentManager called");
   if (media_content_connect() == MEDIA_CONTENT_ERROR_NONE) {
@@ -1577,27 +1545,35 @@ int ContentManager::getNumberOfTracks(int id, int* result) {
   return MEDIA_CONTENT_ERROR_NONE;
 }
 
-common::PlatformResult ContentManager::createThumbnail(const picojson::value& args) {
+common::PlatformResult ContentManager::createThumbnail(const std::string& id,
+                                                       picojson::object* obj) {
   ScopeLogger();
 
-  std::unique_ptr<CreateThumbnailCallbackData> callback_data_ptr{new CreateThumbnailCallbackData};
-  callback_data_ptr->callback_id = args.get("callbackId").get<double>();
-  std::string id = args.get("id").get<std::string>();
-
-  int ret = media_info_get_media_from_db(id.c_str(), &callback_data_ptr->media);
-  if (MEDIA_CONTENT_ERROR_NONE != ret && nullptr == callback_data_ptr->media) {
-    return LogAndCreateResult(ErrorCode::ABORT_ERR, "Getting media is failed.",
-                              ("Getting media is failed: %d (%s)", ret, get_error_message(ret)));
+  media_info_h media_h = nullptr;
+  int ret = media_info_get_media_from_db(id.c_str(), &media_h);
+  if (MEDIA_CONTENT_ERROR_NONE != ret || nullptr == media_h) {
+    return LogAndCreateResult(ErrorCode::ABORT_ERR, "Getting media failed.",
+                              ("Getting media failed: %d (%s)", ret, get_error_message(ret)));
   }
+  SCOPE_EXIT {
+    media_info_destroy(media_h);
+  };
 
-  ret = media_info_create_thumbnail(callback_data_ptr->media, CreateThumbnailCallback,
-                                    static_cast<void*>(callback_data_ptr.get()));
-
+  ret = media_info_generate_thumbnail(media_h);
   if (MEDIA_CONTENT_ERROR_NONE != ret) {
     return LogAndCreateResult(ErrorCode::ABORT_ERR, "Creating thumbnail failed.",
                               ("Creating thumbnail failed: %d (%s)", ret, get_error_message(ret)));
   }
-  callback_data_ptr.release();
+
+  char* path = nullptr;
+  ret = media_info_get_thumbnail_path(media_h, &path);
+  if (MEDIA_CONTENT_ERROR_NONE != ret) {
+    return LogAndCreateResult(
+        ErrorCode::ABORT_ERR, "Creating thumbnail succeeded, but failed to get thumbnail path.",
+        ("Getting thumbnail path failed: %d (%s)", ret, get_error_message(ret)));
+  }
+  obj->emplace("result", picojson::value(path));
+  std::unique_ptr<char[], decltype(&free)>(path, free);
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
index 9f86c960483a7d16cf61893f2cb12ef5ad3ff7af..af8efa76d58e4a9992c4b78ad303ef43935b437f 100644 (file)
@@ -38,14 +38,6 @@ typedef std::unique_ptr<std::remove_pointer<media_playlist_h>::type, void (*)(me
 void ContentToJson(media_info_h info, picojson::object& o);
 void ContentDirToJson(media_folder_h folder, picojson::object& o);
 
-struct CreateThumbnailCallbackData {
-  double callback_id;
-  media_info_h media;
-  ~CreateThumbnailCallbackData() {
-    media_info_destroy(media);
-  }
-};
-
 class ContentManager {
  public:
   virtual ~ContentManager();
@@ -91,7 +83,7 @@ class ContentManager {
   // thumbnail
   int getThumbnailUri(int id, std::string* result);
   int setThumbnailUri(int id, const std::string& thb_uri);
-  common::PlatformResult createThumbnail(const picojson::value& args);
+  common::PlatformResult createThumbnail(const std::string& id, picojson::object* obj);
 
  private:
   // int setContent(media_info_h media, picojson::value content);