}
};
+MediaControllerServer.prototype.createPlaylist = function(name) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'name', type: types_.STRING}
+ ]);
+
+ var data = {
+ name: args.name
+ };
+
+ var result = native_.callSync('MediaControllerServer_createPlaylist', data);
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ }
+
+ return new MediaControllerPlaylist(native_.getResultObject(result));
+};
+
+MediaControllerServer.prototype.savePlaylist = function(playlist, successCallback, errorCallback) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'playlist', type: types_.PLATFORM_OBJECT, values: MediaControllerPlaylist},
+ {name: 'successCallback', type: types_.FUNCTION, optional: true, nullable: true},
+ {name: 'errorCallback', type: types_.FUNCTION, optional: true, nullable: true}
+ ]);
+
+ var data = {
+ name: args.playlist.name
+ };
+
+ var callback = function(result) {
+ if (native_.isFailure(result)) {
+ native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+ return;
+ }
+ native_.callIfPossible(args.successCallback);
+ };
+
+ var result = native_.call('MediaControllerServer_savePlaylist', data, callback);
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ }
+};
+
+MediaControllerServer.prototype.deletePlaylist = function(name, successCallback, errorCallback) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'name', type: types_.STRING},
+ {name: 'successCallback', type: types_.FUNCTION, optional: true, nullable: true},
+ {name: 'errorCallback', type: types_.FUNCTION, optional: true, nullable: true}
+ ]);
+
+ var data = {
+ name: args.name
+ };
+
+ var callback = function(result) {
+ if (native_.isFailure(result)) {
+ native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+ return;
+ }
+ native_.callIfPossible(args.successCallback);
+ };
+
+ var result = native_.call('MediaControllerServer_deletePlaylist', data, callback);
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ }
+};
function MediaControllerClient() {}
}
};
+var MediaControllerPlaylistItem = function(data) {
+ var _index = "";
+ var _metadata = new MediaControllerMetadata();
+ Object.defineProperties(this, {
+ index: {
+ get: function() {
+ return _index;
+ },
+ set: function(v) {
+ _index = edit_.isAllowed && v ? v : _index;
+ },
+ enumerable: true
+ },
+ metadata: {
+ get: function() {
+ return _metadata;
+ },
+ set: function(v) {
+ _metadata = edit_.isAllowed && v ? new MediaControllerMetadata(v) : _metadata;
+ },
+ enumerable: true
+ }
+ });
+
+ edit_.allow();
+ if (data instanceof _global.Object) {
+ for (var prop in data) {
+ if (data.hasOwnProperty(prop) && this.hasOwnProperty(prop)) {
+ this[prop] = data[prop];
+ }
+ }
+ }
+ edit_.disallow();
+};
+
+function MediaControllerPlaylist(data) {
+ var _name = "";
+
+ Object.defineProperties(this, {
+ name: {
+ get: function() {
+ return _name;
+ },
+ set: function(v) {
+ _name = edit_.isAllowed && v ? v : _name;
+ },
+ enumerable: true
+ }
+ });
+ edit_.allow();
+ if (data instanceof _global.Object) {
+ for (var prop in data) {
+ if (data.hasOwnProperty(prop) && this.hasOwnProperty(prop)) {
+ this[prop] = data[prop];
+ }
+ }
+ }
+ edit_.disallow();
+}
exports = new MediaControllerManager();
REGISTER_SYNC("MediaControllerServer_replyCommand", MediaControllerServerReplyCommand);
REGISTER_SYNC("MediaControllerServer_removeCommandListener",
MediaControllerServerRemoveCommandListener);
+ REGISTER_SYNC("MediaControllerServer_createPlaylist",
+ MediaControllerServerCreatePlaylist);
+ REGISTER_ASYNC("MediaControllerServer_savePlaylist",
+ MediaControllerServerSavePlaylist);
+ REGISTER_ASYNC("MediaControllerServer_deletePlaylist",
+ MediaControllerServerDeletePlaylist);
// client
REGISTER_SYNC("MediaControllerManager_getClient", MediaControllerManagerGetClient);
ReportSuccess(out);
}
+void MediaControllerInstance::MediaControllerServerCreatePlaylist(
+ const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+ if (!server_) {
+ LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out,
+ ("Failed: server_"));
+ return;
+ }
+
+ CHECK_EXIST(args, "name", out)
+
+ picojson::value playlist_info = picojson::value();
+
+ auto result = server_->CreatePlaylist(args.get("name").get<std::string>(), &playlist_info);
+ if (!result) {
+ LogAndReportError(result, &out, ("Failed: server_->CreatePlaylist["));
+ return;
+ }
+
+ ReportSuccess(playlist_info, out);
+}
+
+void MediaControllerInstance::MediaControllerServerSavePlaylist(
+ const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+ if (!server_) {
+ LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out,
+ ("Failed: server_"));
+ return;
+ }
+
+ CHECK_EXIST(args, "callbackId", out)
+ CHECK_EXIST(args, "name", out)
+
+ auto save = [this, args]() -> void {
+ picojson::value response = picojson::value(picojson::object());
+ picojson::object& response_obj = response.get<picojson::object>();
+ response_obj["callbackId"] = args.get("callbackId");
+
+ auto result = server_->SavePlaylist(args.get("name").get<std::string>());
+
+ if (result) {
+ ReportSuccess(response_obj);
+ } else {
+ LogAndReportError(result, &response_obj, ("Failed: server_->SavePlaylist"));
+ }
+
+ Instance::PostMessage(this, response.serialize().c_str());
+ };
+
+ TaskQueue::GetInstance().Async(save);
+
+ ReportSuccess(out);
+}
+
+void MediaControllerInstance::MediaControllerServerDeletePlaylist(
+ const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+ if (!server_) {
+ LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out,
+ ("Failed: server_"));
+ return;
+ }
+
+ CHECK_EXIST(args, "callbackId", out)
+ CHECK_EXIST(args, "name", out)
+
+ auto del = [this, args]() -> void {
+ picojson::value response = picojson::value(picojson::object());
+ picojson::object& response_obj = response.get<picojson::object>();
+ response_obj["callbackId"] = args.get("callbackId");
+
+ auto result = server_->DeletePlaylist(args.get("name").get<std::string>());
+
+ if (result) {
+ ReportSuccess(response_obj);
+ } else {
+ LogAndReportError(result, &response_obj, ("Failed: server_->DeletePlaylist"));
+ }
+
+ Instance::PostMessage(this, response.serialize().c_str());
+ };
+
+ TaskQueue::GetInstance().Async(del);
+
+ ReportSuccess(out);
+}
+
void MediaControllerInstance::MediaControllerManagerGetClient(const picojson::value& args,
picojson::object& out) {
ScopeLogger();
void MediaControllerServerReplyCommand(const picojson::value& args, picojson::object& out);
void MediaControllerServerRemoveCommandListener(const picojson::value& args,
picojson::object& out);
+ void MediaControllerServerCreatePlaylist(const picojson::value& args, picojson::object& out);
+ void MediaControllerServerSavePlaylist(const picojson::value& args, picojson::object& out);
+ void MediaControllerServerDeletePlaylist(const picojson::value& args, picojson::object& out);
// client
void MediaControllerManagerGetClient(const picojson::value& args, picojson::object& out);
LoggerE("Failed to unset command listener");
}
+ for (auto const& v : playlist_handle_map_) {
+ if (MEDIA_CONTROLLER_ERROR_NONE != mc_playlist_destroy(v.second)) {
+ LoggerE("Unable to destroy playlist %s", v.first.c_str());
+ }
+ }
+
if (nullptr != handle_ && MEDIA_CONTROLLER_ERROR_NONE != mc_server_destroy(handle_)) {
LoggerE("Unable to destroy media controller server");
}
return PlatformResult(ErrorCode::NO_ERROR);
}
+PlatformResult MediaControllerServer::CreatePlaylist(const std::string& name, picojson::value* playlist_info) {
+ ScopeLogger();
+
+ if (playlist_handle_map_.find(name) != playlist_handle_map_.end()) {
+ return LogAndCreateResult(ErrorCode::INVALID_VALUES_ERR, "Playlist with given name already exists");
+ }
+
+ mc_playlist_h playlist_handle_ = nullptr;
+
+ int ret = mc_server_create_playlist(handle_, name.c_str(), &playlist_handle_);
+
+ if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unable to createPlaylist",
+ ("mc_server_create_playlist() error: %d, message: %s",
+ ret, get_error_message(ret)));
+ }
+
+ playlist_handle_map_[name] = playlist_handle_;
+
+ if (playlist_info == nullptr) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unable to createPlaylist",
+ ("playlist_info is nullptr"));
+ }
+
+ *playlist_info = picojson::value(picojson::object());
+ picojson::object& obj = playlist_info->get<picojson::object>();
+ obj["name"] = picojson::value(name);
+
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
+PlatformResult MediaControllerServer::SavePlaylist(const std::string& name) {
+ ScopeLogger();
+
+ if (playlist_handle_map_.find(name) == playlist_handle_map_.end()) {
+ return LogAndCreateResult(ErrorCode::INVALID_VALUES_ERR, "Playlist with given name doesn't exist");
+ }
+
+ int ret = mc_server_update_playlist_done(handle_, playlist_handle_map_[name]);
+
+ if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Error saving playlist",
+ ("mc_server_update_playlist_done() error: %d, message: %s", ret,
+ get_error_message(ret)));
+ }
+
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
+PlatformResult MediaControllerServer::DeletePlaylist(const std::string& name) {
+ ScopeLogger();
+
+ if (playlist_handle_map_.find(name) == playlist_handle_map_.end()) {
+ return LogAndCreateResult(ErrorCode::INVALID_VALUES_ERR, "Playlist with given name doesn't exist");
+ }
+
+ int ret = mc_server_delete_playlist(handle_, playlist_handle_map_[name]);
+
+ if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Error deleting playlist",
+ ("mc_server_delete_playlist() error: %d, message: %s", ret,
+ get_error_message(ret)));
+ }
+
+ playlist_handle_map_.erase(name);
+
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
PlatformResult MediaControllerServer::SetChangeRequestPlaybackInfoListener(
const JsonCallback& callback) {
ScopeLogger();
common::PlatformResult SetCommandListener(const JsonCallback& callback);
common::PlatformResult UnsetCommandListener();
+ common::PlatformResult CreatePlaylist(const std::string& name, picojson::value* playlist_info);
+ common::PlatformResult SavePlaylist(const std::string& name);
+ common::PlatformResult DeletePlaylist(const std::string& name);
+
private:
mc_server_h handle_;
bool is_repeat_mode_set_;
JsonCallback command_listener_;
+ std::map<std::string, mc_playlist_h> playlist_handle_map_;
static void OnPlaybackActionCommand(const char* client_name, const char* request_id,
mc_playback_action_e action, void* user_data);