From: Lukasz Bardeli Date: Wed, 17 Apr 2019 05:38:44 +0000 (+0200) Subject: [MediaController] Adding, updating and sending item. X-Git-Tag: submit/tizen/20190510.110853~10^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=871cd845a7e4dbdbe5830676b3b6555389cfdb22;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [MediaController] Adding, updating and sending item. Add methods - addItem - updatePlaybackItem - sendPlaybackItem Add callback - onplaybackitemrequest [Verification] Code compiles without error. Tested in chrome console ACR: TWDAPI-199 Signed-off-by: Lukasz Bardeli Change-Id: Iffeec9bc0473f9a9df54d3fbd5a57dfc3ca21913 --- diff --git a/src/mediacontroller/mediacontroller_api.js b/src/mediacontroller/mediacontroller_api.js index 269fde94..b1e450a6 100755 --- a/src/mediacontroller/mediacontroller_api.js +++ b/src/mediacontroller/mediacontroller_api.js @@ -153,6 +153,10 @@ var ServerPlaybackInfoListener = new ListenerManager(native_, '_ServerPlaybackIn if (msg.action === 'onrepeatstaterequest') { listener[msg.action](msg.state, msg.clientName); } + if (msg.action === 'onplaybackitemrequest') { + listener[msg.action](msg.playlistName, msg.index, msg.state, msg.position, msg.clientName); + } + }); var ServerInfoStatusListener = new ListenerManager(native_, '_ServerInfoStatusListener', function(msg, listener) { @@ -585,7 +589,8 @@ MediaControllerServer.prototype.addChangeRequestPlaybackInfoListener = function( 'onplaybackpositionrequest', 'onshufflemoderequest', 'onrepeatmoderequest', - 'onrepeatstaterequest' + 'onrepeatstaterequest', + 'onplaybackitemrequest' ] }]); @@ -712,6 +717,24 @@ MediaControllerServer.prototype.deletePlaylist = function(name, successCallback, } }; +MediaControllerServer.prototype.updatePlaybackItem = function(playlistName, index) { + var args = validator_.validateArgs(arguments, [ + {name: 'playlistName', type: types_.STRING}, + {name: 'index', type: types_.STRING} + ]); + + var data = { + playlistName: args.playlistName, + index: args.index + }; + + var result = native_.callSync('MediaControllerServer_updatePlaybackItem', data); + + if (native_.isFailure(result)) { + throw native_.getErrorObject(result); + } +}; + function MediaControllerClient() {} MediaControllerClient.prototype.findServers = function(successCallback, errorCallback) { @@ -999,6 +1022,29 @@ MediaControllerServerInfo.prototype.removePlaybackInfoChangeListener = function( } }; +MediaControllerServerInfo.prototype.sendPlaybackItem = function(playlistName, index, state, position) { + var args = validator_.validateArgs(arguments, [ + {name: 'playlistName', type: types_.STRING}, + {name: 'index', type: types_.STRING}, + {name: 'state', type: types_.ENUM, values: Object.keys(MediaControllerPlaybackState)}, + {name: 'position', type: types_.UNSIGNED_LONG_LONG} + ]); + + var data = { + name: this.name, + playlistName: args.playlistName, + index: args.index, + state: args.state, + position: args.position + }; + + var result = native_.callSync('MediaControllerServerInfo_sendPlaybackItem', data); + + if (native_.isFailure(result)) { + throw native_.getErrorObject(result); + } +}; + var MediaControllerPlaylistItem = function(data) { var _index = ""; var _metadata = new MediaControllerMetadata(); @@ -1059,4 +1105,23 @@ function MediaControllerPlaylist(data) { edit_.disallow(); } +MediaControllerPlaylist.prototype.addItem = function(index, metadata) { + var args = validator_.validateArgs(arguments, [ + {name: 'index', type: types_.STRING}, + {name: 'metadata', type: types_.DICTIONARY} + ]); + + var data = { + index: args.index, + metadata: args.metadata, + name: this.name + }; + + var result = native_.callSync('MediaControllerPlaylist_addItem', data); + + if (native_.isFailure(result)) { + throw native_.getErrorObject(result); + } +} + exports = new MediaControllerManager(); diff --git a/src/mediacontroller/mediacontroller_client.cc b/src/mediacontroller/mediacontroller_client.cc index c2c59d7d..dfb4bbb2 100644 --- a/src/mediacontroller/mediacontroller_client.cc +++ b/src/mediacontroller/mediacontroller_client.cc @@ -498,8 +498,7 @@ void MediaControllerClient::OnMetadataUpdate(const char* server_name, mc_metadat PlatformResult MediaControllerClient::SendCommand(const std::string& server_name, const std::string& command, const picojson::value& data, - const JsonCallback& reply_cb, - char** request_id) { + const JsonCallback& reply_cb, char** request_id) { ScopeLogger(); bundle* bundle = bundle_create(); SCOPE_EXIT { @@ -689,5 +688,34 @@ PlatformResult MediaControllerClient::SendRepeatState(const std::string& server_ return PlatformResult(ErrorCode::NO_ERROR); } +PlatformResult MediaControllerClient::SendPlaybackItem(const std::string& name, + const std::string& playlist_name, + const std::string& index, + const std::string& state, double position) { + ScopeLogger(); + + int state_e; + // In Native API, since Tizen 5.0 an action instead of a state is sent to change the state of a + // server. In Web API the names were not refactored. + PlatformResult result = + Types::StringToPlatformEnum(Types::kMediaControllerPlaybackAction, state, &state_e); + + if (!result) { + return result; + } + + int ret = mc_client_send_playlist_cmd(handle_, name.c_str(), playlist_name.c_str(), index.c_str(), + static_cast(state_e), + static_cast(position), nullptr); + + if (MEDIA_CONTROLLER_ERROR_NONE != ret) { + return LogAndCreateResult( + ErrorCode::UNKNOWN_ERR, "Error sending playlist item", + ("mc_client_send_playlist_cmd() error: %d, message: %s", ret, get_error_message(ret))); + } + + return PlatformResult(ErrorCode::NO_ERROR); +} + } // namespace mediacontroller } // namespace extension diff --git a/src/mediacontroller/mediacontroller_client.h b/src/mediacontroller/mediacontroller_client.h index f10243c1..e55bda1c 100644 --- a/src/mediacontroller/mediacontroller_client.h +++ b/src/mediacontroller/mediacontroller_client.h @@ -55,6 +55,9 @@ class MediaControllerClient { common::PlatformResult SetPlaybackInfoListener(const JsonCallback& callback); common::PlatformResult UnsetPlaybackInfoListener(); + common::PlatformResult SendPlaybackItem(const std::string& name, const std::string& playlist_name, + const std::string& index, const std::string& state, + double position); private: mc_client_h handle_; diff --git a/src/mediacontroller/mediacontroller_instance.cc b/src/mediacontroller/mediacontroller_instance.cc index 6d350ece..f1be7fa0 100644 --- a/src/mediacontroller/mediacontroller_instance.cc +++ b/src/mediacontroller/mediacontroller_instance.cc @@ -19,9 +19,9 @@ #include "common/logger.h" #include "common/picojson.h" #include "common/platform_result.h" +#include "common/scope_exit.h" #include "common/task-queue.h" #include "common/tools.h" -#include "common/scope_exit.h" #include "mediacontroller/mediacontroller_types.h" @@ -71,12 +71,11 @@ MediaControllerInstance::MediaControllerInstance() { 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); + REGISTER_SYNC("MediaControllerServer_createPlaylist", MediaControllerServerCreatePlaylist); + REGISTER_ASYNC("MediaControllerServer_savePlaylist", MediaControllerServerSavePlaylist); + REGISTER_ASYNC("MediaControllerServer_deletePlaylist", MediaControllerServerDeletePlaylist); + REGISTER_SYNC("MediaControllerServer_updatePlaybackItem", + MediaControllerServerUpdatePlaybackItem); // client REGISTER_SYNC("MediaControllerManager_getClient", MediaControllerManagerGetClient); @@ -103,6 +102,11 @@ MediaControllerInstance::MediaControllerInstance() { MediaControllerServerInfoAddPlaybackInfoChangeListener); REGISTER_SYNC("MediaControllerServerInfo_removePlaybackInfoChangeListener", MediaControllerServerInfoRemovePlaybackInfoChangeListener); + REGISTER_SYNC("MediaControllerServerInfo_sendPlaybackItem", + MediaControllerServerInfoSendPlaybackItem); + + // playlist + REGISTER_SYNC("MediaControllerPlaylist_addItem", MediaControllerPlaylistAddItem); #undef REGISTER_SYNC #undef REGISTER_ASYNC @@ -119,6 +123,17 @@ MediaControllerInstance::~MediaControllerInstance() { return; \ } +#define CHECK_TYPE(args, name, type, out) \ + if (!args.get(name).is()) { \ + LogAndReportError(PlatformResult(ErrorCode::TYPE_MISMATCH_ERR, name " is not a " #type), \ + &out); \ + return; \ + } + +#define CHECK_ARGS(args, name, type, out) \ + CHECK_EXIST(args, name, out) \ + CHECK_TYPE(args, name, type, out) + void MediaControllerInstance::MediaControllerManagerCreateServer(const picojson::value& args, picojson::object& out) { ScopeLogger(); @@ -303,7 +318,6 @@ void MediaControllerInstance::MediaControllerServerAddChangeRequestPlaybackInfoL LoggerE("No data passed to json callback"); return; } - picojson::object& request_o = data->get(); request_o["listenerId"] = args.get("listenerId"); @@ -370,10 +384,8 @@ void MediaControllerInstance::MediaControllerServerReplyCommand(const picojson:: CHECK_EXIST(args, "requestId", out) CHECK_EXIST(args, "data", out) - server_->CommandReply( - args.get("clientName").get(), - args.get("requestId").get(), - args.get("data")); + server_->CommandReply(args.get("clientName").get(), + args.get("requestId").get(), args.get("data")); ReportSuccess(out); } @@ -395,8 +407,8 @@ void MediaControllerInstance::MediaControllerServerRemoveCommandListener( ReportSuccess(out); } -void MediaControllerInstance::MediaControllerServerCreatePlaylist( - const picojson::value& args, picojson::object& out) { +void MediaControllerInstance::MediaControllerServerCreatePlaylist(const picojson::value& args, + picojson::object& out) { ScopeLogger(); if (!server_) { LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, @@ -404,7 +416,7 @@ void MediaControllerInstance::MediaControllerServerCreatePlaylist( return; } - CHECK_EXIST(args, "name", out) + CHECK_ARGS(args, "name", std::string, out) picojson::value playlist_info = picojson::value(); @@ -417,8 +429,8 @@ void MediaControllerInstance::MediaControllerServerCreatePlaylist( ReportSuccess(playlist_info, out); } -void MediaControllerInstance::MediaControllerServerSavePlaylist( - const picojson::value& args, picojson::object& out) { +void MediaControllerInstance::MediaControllerServerSavePlaylist(const picojson::value& args, + picojson::object& out) { ScopeLogger(); if (!server_) { LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, @@ -427,7 +439,7 @@ void MediaControllerInstance::MediaControllerServerSavePlaylist( } CHECK_EXIST(args, "callbackId", out) - CHECK_EXIST(args, "name", out) + CHECK_ARGS(args, "name", std::string, out) auto save = [this, args]() -> void { picojson::value response = picojson::value(picojson::object()); @@ -450,8 +462,8 @@ void MediaControllerInstance::MediaControllerServerSavePlaylist( ReportSuccess(out); } -void MediaControllerInstance::MediaControllerServerDeletePlaylist( - const picojson::value& args, picojson::object& out) { +void MediaControllerInstance::MediaControllerServerDeletePlaylist(const picojson::value& args, + picojson::object& out) { ScopeLogger(); if (!server_) { LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, @@ -460,7 +472,7 @@ void MediaControllerInstance::MediaControllerServerDeletePlaylist( } CHECK_EXIST(args, "callbackId", out) - CHECK_EXIST(args, "name", out) + CHECK_ARGS(args, "name", std::string, out) auto del = [this, args]() -> void { picojson::value response = picojson::value(picojson::object()); @@ -483,6 +495,28 @@ void MediaControllerInstance::MediaControllerServerDeletePlaylist( ReportSuccess(out); } +void MediaControllerInstance::MediaControllerServerUpdatePlaybackItem(const picojson::value& args, + picojson::object& out) { + ScopeLogger(); + if (!server_) { + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, + ("Failed: server_")); + return; + } + + CHECK_ARGS(args, "playlistName", std::string, out) + CHECK_ARGS(args, "index", std::string, out) + + auto result = server_->UpdatePlaybackItem(args.get("playlistName").get(), + args.get("index").get()); + if (!result) { + LogAndReportError(result, &out); + return; + } + + ReportSuccess(out); +} + void MediaControllerInstance::MediaControllerManagerGetClient(const picojson::value& args, picojson::object& out) { ScopeLogger(); @@ -772,12 +806,9 @@ void MediaControllerInstance::MediaControllerServerInfoSendCommand(const picojso free(request_id); }; - PlatformResult result = client_->SendCommand( - args.get("name").get(), - args.get("command").get(), - args.get("data"), - reply_cb, - &request_id); + PlatformResult result = client_->SendCommand(args.get("name").get(), + args.get("command").get(), + args.get("data"), reply_cb, &request_id); if (result) { ReportSuccess(out); @@ -878,6 +909,62 @@ void MediaControllerInstance::MediaControllerServerInfoRemovePlaybackInfoChangeL } } +void MediaControllerInstance::MediaControllerServerInfoSendPlaybackItem(const picojson::value& args, + picojson::object& out) { + ScopeLogger(); + + if (!client_) { + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Client not initialized."), &out, + ("Failed: client_")); + return; + } + + CHECK_ARGS(args, "name", std::string, out) + CHECK_ARGS(args, "playlistName", std::string, out) + CHECK_ARGS(args, "index", std::string, out) + CHECK_ARGS(args, "state", std::string, out) + CHECK_ARGS(args, "position", double, out) + + auto result = client_->SendPlaybackItem( + args.get("name").get(), args.get("playlistName").get(), + args.get("index").get(), args.get("state").get(), + args.get("position").get()); + if (!result) { + LogAndReportError(result, &out); + return; + } + + ReportSuccess(out); +} + +void MediaControllerInstance::MediaControllerPlaylistAddItem(const picojson::value& args, + picojson::object& out) { + ScopeLogger(); + + // MediaControllerPlaylistAddItem is implemented in MediaControllerServer because + // mc_server_add_item_to_playlist need mc_server_h as parameter + if (!server_) { + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Server not initialized."), &out, + ("Failed: server_")); + return; + } + + CHECK_ARGS(args, "index", std::string, out) + CHECK_ARGS(args, "metadata",picojson::object, out) + CHECK_ARGS(args, "name", std::string, out) + + const picojson::object& metadata = args.get("metadata").get(); + + auto result = server_->MediaControllerPlaylistAddItem( + args.get("name").get(), args.get("index").get(), metadata); + if (!result) { + LogAndReportError(result, &out); + return; + } + + ReportSuccess(out); +} + #undef CHECK_EXIST } // namespace mediacontroller diff --git a/src/mediacontroller/mediacontroller_instance.h b/src/mediacontroller/mediacontroller_instance.h index 227da85c..078e7020 100644 --- a/src/mediacontroller/mediacontroller_instance.h +++ b/src/mediacontroller/mediacontroller_instance.h @@ -54,6 +54,7 @@ class MediaControllerInstance : public common::ParsedInstance { 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); + void MediaControllerServerUpdatePlaybackItem(const picojson::value& args, picojson::object& out); // client void MediaControllerManagerGetClient(const picojson::value& args, picojson::object& out); @@ -76,6 +77,11 @@ class MediaControllerInstance : public common::ParsedInstance { picojson::object& out); void MediaControllerServerInfoRemovePlaybackInfoChangeListener(const picojson::value& args, picojson::object& out); + void MediaControllerServerInfoSendPlaybackItem(const picojson::value& args, + picojson::object& out); + + // playlist + void MediaControllerPlaylistAddItem(const picojson::value& args, picojson::object& out); std::shared_ptr client_; std::shared_ptr server_; diff --git a/src/mediacontroller/mediacontroller_server.cc b/src/mediacontroller/mediacontroller_server.cc index 973ea857..73a39adb 100644 --- a/src/mediacontroller/mediacontroller_server.cc +++ b/src/mediacontroller/mediacontroller_server.cc @@ -54,7 +54,6 @@ MediaControllerServer::~MediaControllerServer() { if (nullptr != command_listener_ && !UnsetCommandListener()) { 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()); @@ -275,8 +274,7 @@ PlatformResult MediaControllerServer::SetMetadata(const picojson::object& metada } void MediaControllerServer::OnCommandReceived(const char* client_name, const char* request_id, - const char* command, bundle* bundle, - void* user_data) { + const char* command, bundle* bundle, void* user_data) { ScopeLogger(); MediaControllerServer* server = static_cast(user_data); @@ -438,10 +436,70 @@ PlatformResult MediaControllerServer::DeletePlaylist(const std::string& name) { return PlatformResult(ErrorCode::NO_ERROR); } +PlatformResult MediaControllerServer::UpdatePlaybackItem(const std::string& playlist_name, const std::string& index) { + ScopeLogger(); + + if (playlist_handle_map_.find(playlist_name) == playlist_handle_map_.end()) { + return LogAndCreateResult(ErrorCode::INVALID_VALUES_ERR, "Playlist with given name doesn't exist"); + } + + int ret = mc_server_set_playlist_item_info(handle_, playlist_name.c_str(), index.c_str()); + + if (MEDIA_CONTROLLER_ERROR_NONE != ret) { + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Error updating playback item", + ("mc_server_set_playlist_item_info() error: %d, message: %s", ret, + get_error_message(ret))); + } + + ret = mc_server_update_playback_info(handle_); + if (MEDIA_CONTROLLER_ERROR_NONE != ret) { + return LogAndCreateResult( + ErrorCode::UNKNOWN_ERR, "Error updating playback info", + ("mc_server_update_playback_info() error: %d, message: %s", ret, get_error_message(ret))); + } + + + return PlatformResult(ErrorCode::NO_ERROR); +} + +PlatformResult MediaControllerServer::MediaControllerPlaylistAddItem(const std::string &name, const std::string &index, + const picojson::object &metadata) +{ + 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 attribute_int = MC_META_MEDIA_TITLE, ret = MEDIA_CONTROLLER_ERROR_NONE; + for (const auto& v: metadata) { + LoggerD("Key: %s - Value: %s ", v.first.c_str(), v.second.to_str().c_str()); + + PlatformResult result = Types::StringToPlatformEnum(Types::kMediaControllerMetadataAttribute, + v.first, &attribute_int); + if (!result) { + return result; + } + + ret = mc_server_add_item_to_playlist(handle_, playlist_handle_map_[name], index.c_str(), static_cast(attribute_int), + v.second.to_str().c_str()); + if (MEDIA_CONTROLLER_ERROR_NONE != ret) + { + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Error adding playlist item", + ("mc_server_add_item_to_playlist() error: %d, message: %s", ret, + get_error_message(ret))); + } + } + + return PlatformResult(ErrorCode::NO_ERROR); +} + PlatformResult MediaControllerServer::SetChangeRequestPlaybackInfoListener( const JsonCallback& callback) { ScopeLogger(); int failed_setter = 0; + SCOPE_EXIT { // Lambda function used to clean all set listeners (in case of failure of // SetPlaybackInfoListener method). @@ -451,7 +509,8 @@ PlatformResult MediaControllerServer::SetChangeRequestPlaybackInfoListener( mc_server_unset_playback_action_cmd_received_cb, mc_server_unset_playback_position_cmd_received_cb, mc_server_unset_shuffle_mode_cmd_received_cb, - /*mc_server_unset_repeat_mode_cmd_received_cb the last unsetter will never be used*/}; + mc_server_unset_repeat_mode_cmd_received_cb, + /*mc_server_unset_playlist_cmd_received_cb the last unsetter will never be used*/}; // This loop is no-op in case of success. for (int i = 0; i < failed_setter; ++i) { @@ -498,6 +557,14 @@ PlatformResult MediaControllerServer::SetChangeRequestPlaybackInfoListener( ret, get_error_message(ret))); } + ret = mc_server_set_playlist_cmd_received_cb(handle_, OnPlaybackItemCommand, this); + if (MEDIA_CONTROLLER_ERROR_NONE != ret) { + failed_setter = 4; + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unable to set playback item command listener", + ("mc_server_set_playlist_cmd_received_cb() error: %d, message: %s", + ret, get_error_message(ret))); + } + change_request_playback_info_listener_ = callback; return PlatformResult(ErrorCode::NO_ERROR); @@ -538,6 +605,14 @@ PlatformResult MediaControllerServer::UnsetChangeRequestPlaybackInfoListener() { get_error_message(ret))); } + ret = mc_server_unset_playlist_cmd_received_cb(handle_); + if (MEDIA_CONTROLLER_ERROR_NONE != ret) { + return LogAndCreateResult( + ErrorCode::UNKNOWN_ERR, "Unable to unset playback item command listener", + ("mc_server_unset_playlist_cmd_received_cb() error: %d, message: %s", ret, + get_error_message(ret))); + } + change_request_playback_info_listener_ = nullptr; return PlatformResult(ErrorCode::NO_ERROR); @@ -660,5 +735,34 @@ void MediaControllerServer::OnRepeatModeCommand(const char* client_name, const c server->change_request_playback_info_listener_(&data); } +void MediaControllerServer::OnPlaybackItemCommand(const char* client_name, const char *request_id, + const char *playlist_name, const char *index, mc_playback_action_e action, + unsigned long long position, void *user_data) { + ScopeLogger(); + + MediaControllerServer* server = static_cast(user_data); + + std::string state; + PlatformResult result = Types::PlatformEnumToString(Types::kMediaControllerPlaybackAction, + static_cast(action), &state); + + if (!result) { + LoggerE("PlatformEnumToString failed, error: %s", result.message().c_str()); + return; + } + + picojson::value data = picojson::value(picojson::object()); + picojson::object& data_o = data.get(); + + data_o["action"] = picojson::value(std::string("onplaybackitemrequest")); + data_o["playlistName"] = picojson::value(playlist_name); + data_o["index"] = picojson::value(index); + data_o["state"] = picojson::value(state); + data_o["position"] = picojson::value(static_cast(position)); + data_o["clientName"] = picojson::value(client_name); + + server->change_request_playback_info_listener_(&data); +} + } // namespace mediacontroller } // namespace extension diff --git a/src/mediacontroller/mediacontroller_server.h b/src/mediacontroller/mediacontroller_server.h index 55476db1..9ddd321a 100644 --- a/src/mediacontroller/mediacontroller_server.h +++ b/src/mediacontroller/mediacontroller_server.h @@ -52,6 +52,11 @@ class MediaControllerServer { 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); + common::PlatformResult UpdatePlaybackItem(const std::string& name, const std::string& index); + + common::PlatformResult MediaControllerPlaylistAddItem(const std::string& name, + const std::string& index, + const picojson::object& metadata); private: mc_server_h handle_; @@ -76,6 +81,10 @@ class MediaControllerServer { mc_shuffle_mode_e mode, void* user_data); static void OnRepeatModeCommand(const char* client_name, const char* request_id, mc_repeat_mode_e mode, void* user_data); + static void OnPlaybackItemCommand(const char* client_name, const char* request_id, + const char* playlist_name, const char* index, + mc_playback_action_e action, unsigned long long position, + void* user_data); static void OnCommandReceived(const char* client_name, const char* request_id, const char* command, bundle* data, void* user_data);