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);
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() {
delete listener_data_;
listener_data_ = nullptr;
}
+ ContentManager::getInstance()->setContentInstance(nullptr);
}
static gboolean CompletedCallback(const std::shared_ptr<ReplyCallbackData>& user_data) {
// 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) {
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);
using namespace std;
using namespace common;
+using common::tools::ReportSuccess;
using common::tools::ReportError;
namespace extension {
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");
}
else
m_dbConnected = false;
+ m_contentInstance = nullptr;
}
ContentManager::~ContentManager() {
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;
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) {
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);
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;
};
}
};
+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();