[Content] - The function createThumbnail() implemented 84/74284/6
authorAndrzej Popowski <a.popowski@samsung.com>
Mon, 13 Jun 2016 12:48:20 +0000 (14:48 +0200)
committerHyunjin Park <hj.na.park@samsung.com>
Tue, 2 Aug 2016 04:52:36 +0000 (13:52 +0900)
Change-Id: I0b3589ea25c87db9b5765f77d0b308dc7b25f9f8
Signed-off-by: Andrzej Popowski <a.popowski@samsung.com>
src/content/content_instance.cc
src/content/content_instance.h
src/content/content_manager.cc
src/content/content_manager.h
src/content/js/manager.js

index 659c4f1..9008f68 100755 (executable)
@@ -51,7 +51,7 @@ ContentInstance::ContentInstance() :
   using std::placeholders::_1;
   using std::placeholders::_2;
 
-  #define REGISTER_SYNC(c,x) \
+#define REGISTER_SYNC(c,x) \
     RegisterSyncHandler(c, std::bind(&ContentInstance::x, this, _1, _2));
 
   REGISTER_SYNC("ContentManager_find", ContentManagerFind);
@@ -80,7 +80,10 @@ ContentInstance::ContentInstance() :
   REGISTER_SYNC("ContentPlaylist_getThumbnailUri", PlaylistGetThumbnailUri);
   REGISTER_SYNC("ContentPlaylist_setThumbnailUri", PlaylistSetThumbnailUri);
   REGISTER_SYNC("ContentPlaylist_getNumberOfTracks", PlaylistGetNumberOfTracks);
-  #undef REGISTER_SYNC
+  REGISTER_SYNC("ContentManager_createThumbnail", ContentManagerCreateThumbnail);
+#undef REGISTER_SYNC
+
+  ContentManager::getInstance()->setContentInstance(this);
 }
 
 ContentInstance::~ContentInstance() {
@@ -93,6 +96,7 @@ ContentInstance::~ContentInstance() {
     delete listener_data_;
     listener_data_ = nullptr;
   }
+  ContentManager::getInstance()->setContentInstance(nullptr);
 }
 
 static gboolean CompletedCallback(const std::shared_ptr<ReplyCallbackData>& user_data) {
@@ -593,7 +597,22 @@ void ContentInstance::ContentManagerRemoveplaylist(const picojson::value& args,
 
   // implement it
   common::TaskQueue::GetInstance().Queue<ReplyCallbackData>(WorkThread, CompletedCallback, cbData);
+}
+
+void ContentInstance::ContentManagerCreateThumbnail(const picojson::value& args, picojson::object& out) {
+  LoggerD("entered");
+  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());
+  }
 }
 
 void ContentInstance::ContentManagerPlaylistAdd(const picojson::value& args, picojson::object& out) {
index 0025d2b..a631e62 100755 (executable)
@@ -84,6 +84,7 @@ class ContentInstance : public common::ParsedInstance {
   void ContentManagerPlaylistSetorder(const picojson::value& args, picojson::object& out);
   void ContentManagerPlaylistMove(const picojson::value& args, picojson::object& out);
   void ContentManagerAudioGetLyrics(const picojson::value& args, picojson::object& out);
+  void ContentManagerCreateThumbnail(const picojson::value& args, picojson::object& out);
 
   void PlaylistGetName(const picojson::value& args, picojson::object& out);
   void PlaylistSetName(const picojson::value& args, picojson::object& out);
index 6aa319d..28140da 100644 (file)
@@ -36,6 +36,7 @@
 using namespace std;
 using namespace common;
 
+using common::tools::ReportSuccess;
 using common::tools::ReportError;
 
 namespace extension {
@@ -660,6 +661,31 @@ 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) {
+  LoggerD("Enter");
+
+  if (!(ContentManager::getInstance()->getContentInstance())) {
+    // There is not instance already
+    LoggerD("There is not instance now");
+    return;
+  }
+
+  unsigned int callbackId = (unsigned int) user_data;
+  picojson::object out;
+
+  out["callbackId"] = picojson::value(static_cast<double>(callbackId));
+
+  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() {
   LoggerD("ContentManager called");
@@ -668,6 +694,7 @@ ContentManager::ContentManager() {
   }
   else
       m_dbConnected = false;
+  m_contentInstance = nullptr;
 }
 
 ContentManager::~ContentManager() {
@@ -685,6 +712,16 @@ ContentManager* ContentManager::getInstance() {
   return &instance;
 }
 
+ContentInstance* ContentManager::getContentInstance() {
+  LoggerD("Enter");
+  return m_contentInstance;
+}
+
+void ContentManager::setContentInstance(ContentInstance* const content_instance) {
+  LoggerD("Enter");
+  m_contentInstance = content_instance;
+}
+
 bool ContentManager::isConnected() {
   LoggerD("Enter");
   return m_dbConnected;
@@ -1596,6 +1633,29 @@ int ContentManager::getNumberOfTracks(int id, int* result) {
   return MEDIA_CONTENT_ERROR_NONE;
 }
 
+common::PlatformResult ContentManager::createThumbnail(const picojson::value& args) {
+  LoggerD("Enter");
+
+  unsigned int callbackId = static_cast<unsigned int>(args.get("callbackId").get<double>());
+  std::string id = args.get("id").get<std::string>();
+
+  media_info_h media = NULL;
+  int ret = media_info_get_media_from_db(id.c_str(), &media);
+  if(MEDIA_CONTENT_ERROR_NONE != ret && nullptr == media) {
+    return LogAndCreateResult(ErrorCode::ABORT_ERR, "Getting media is failed.",
+                              ("Getting media is failed: %d (%s)", ret, get_error_message(ret)));
+  }
+
+  ret = media_info_create_thumbnail(media, CreateThumbnailCallback, (void*) callbackId);
+  media_info_destroy(media);
+  if(MEDIA_CONTENT_ERROR_NONE != ret) {
+    return LogAndCreateResult(ErrorCode::ABORT_ERR, "Creating thumbnail failed.",
+                              ("Creating thumbnail failed: %d (%s)", ret, get_error_message(ret)));
+  }
+
+  return PlatformResult(ErrorCode::NO_ERROR);
+}
+
 PlatformResult ContentManager::convertError(int err) {
   char* error_msg = get_error_message(err);
   switch (err) {
index 36b52d5..60a177f 100644 (file)
@@ -43,6 +43,8 @@ class ContentManager {
   virtual ~ContentManager();
   bool isConnected();
   static ContentManager* getInstance();
+  ContentInstance* getContentInstance();
+  void setContentInstance(ContentInstance* const content_instance);
 
   void getDirectories(const std::shared_ptr<ReplyCallbackData>& user_data);
   void find(const std::shared_ptr<ReplyCallbackData>& user_data);
@@ -74,23 +76,26 @@ class ContentManager {
   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);
-
   int getPlaylistName(int id, std::string* result);
   int setPlaylistName(int id, const std::string& name);
 
-  int getThumbnailUri(int id, std::string* result);
-  int setThumbnailUri(int id, const std::string& thb_uri);
-
   int getNumberOfTracks(int id, int* result);
 
 //playlistSetOrder
   static common::PlatformResult convertError(int err);
+
+//thumbnail
+  int getThumbnailUri(int id, std::string* result);
+  int setThumbnailUri(int id, const std::string& thb_uri);
+  common::PlatformResult createThumbnail(const picojson::value& args);
+
  private:
   //int setContent(media_info_h media, picojson::value content);
   ContentManager();
 
  private:
   bool m_dbConnected;
+  ContentInstance* m_contentInstance;
 
 };
 
index 009156d..00ffadd 100755 (executable)
@@ -371,4 +371,30 @@ ContentManager.prototype.removePlaylist = function(id, successCallback, errorCal
   }
 };
 
+ContentManager.prototype.createThumbnail = function(content, successCallback, errorCallback) {
+  var args = validator_.validateArgs(arguments, [
+    {name: 'content', type: types_.PLATFORM_OBJECT, values: Content},
+    {name: 'successCallback', type: types_.FUNCTION},
+    {name: 'errorCallback', type: types_.FUNCTION, optional: true, nullable: true}
+  ]);
+
+  var data = {
+    id: args.content.id
+  };
+
+  var callback = function(result) {
+    if (native_.isFailure(result)) {
+      native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+      return;
+    }
+    args.successCallback(native_.getResultObject(result));
+  };
+
+  var result = native_.call('ContentManager_createThumbnail', data, callback);
+
+  if (native_.isFailure(result)) {
+    throw native_.getErrorObject(result);
+  }
+};
+
 exports = new ContentManager();