From: Andrzej Popowski Date: Mon, 13 Jun 2016 12:48:20 +0000 (+0200) Subject: [Content] - The function createThumbnail() implemented X-Git-Tag: submit/tizen/20160808.053811~8^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fdce93945c9998c69b5d18be4644b02e5fda24b0;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Content] - The function createThumbnail() implemented Change-Id: I0b3589ea25c87db9b5765f77d0b308dc7b25f9f8 Signed-off-by: Andrzej Popowski --- diff --git a/src/content/content_instance.cc b/src/content/content_instance.cc index 659c4f1..9008f68 100755 --- a/src/content/content_instance.cc +++ b/src/content/content_instance.cc @@ -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& user_data) { @@ -593,7 +597,22 @@ void ContentInstance::ContentManagerRemoveplaylist(const picojson::value& args, // implement it common::TaskQueue::GetInstance().Queue(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) { diff --git a/src/content/content_instance.h b/src/content/content_instance.h index 0025d2b..a631e62 100755 --- a/src/content/content_instance.h +++ b/src/content/content_instance.h @@ -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); diff --git a/src/content/content_manager.cc b/src/content/content_manager.cc index 6aa319d..28140da 100644 --- a/src/content/content_manager.cc +++ b/src/content/content_manager.cc @@ -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(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(args.get("callbackId").get()); + std::string id = args.get("id").get(); + + 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) { diff --git a/src/content/content_manager.h b/src/content/content_manager.h index 36b52d5..60a177f 100644 --- a/src/content/content_manager.h +++ b/src/content/content_manager.h @@ -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& user_data); void find(const std::shared_ptr& user_data); @@ -74,23 +76,26 @@ class ContentManager { void playlistRemovebatch(const std::shared_ptr& user_data); void playlistSetOrder(const std::shared_ptr& user_data); void playlistMove(const std::shared_ptr& 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; }; diff --git a/src/content/js/manager.js b/src/content/js/manager.js index 009156d..00ffadd 100755 --- a/src/content/js/manager.js +++ b/src/content/js/manager.js @@ -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();