From: Michal Michalski Date: Thu, 25 Apr 2019 14:16:37 +0000 (+0200) Subject: [mediacontroller] Get/set server icon API. X-Git-Tag: submit/tizen/20190704.075556~5^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6ce2ff9ae84abb221aa6528ed11dc893f64621cc;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [mediacontroller] Get/set server icon API. http://suprem.sec.samsung.net/jira/browse/TWDAPI-221 + readonly attribute MediaControllerServerInfo::iconURI + attribute MediaControllerServer::iconURI + MediaControllerServer::updateIconURI() [Verification] Manual testing. Signed-off-by: Michal Michalski Change-Id: If587a5958c74c224699345ef0ab7ff2575dd12ec --- diff --git a/src/mediacontroller/mediacontroller_api.js b/src/mediacontroller/mediacontroller_api.js index a7a95112..89fd3fed 100755 --- a/src/mediacontroller/mediacontroller_api.js +++ b/src/mediacontroller/mediacontroller_api.js @@ -456,11 +456,22 @@ var MediaControllerPlaybackInfo = function(data) { }; function MediaControllerServer(data) { + var _iconURI = null; + Object.defineProperties(this, { playbackInfo: { value: new MediaControllerPlaybackInfo(data), writable: false, enumerable: true + }, + iconURI: { + get: function() { + return _iconURI; + }, + set: function(v) { + _iconURI = edit_.isAllowed ? (v ? v : null) : _iconURI; + }, + enumerable: true } }); } @@ -485,6 +496,25 @@ MediaControllerServer.prototype.updatePlaybackState = function(state) { edit_.disallow(); }; +MediaControllerServer.prototype.updateIconURI = function(iconURI) { + var args = validator_.validateArgs(arguments, [ + {name: 'iconURI', type: types_.STRING, nullable: true} + ]); + + var data = { + iconURI: args.iconURI + }; + + var result = native_.callSync('MediaControllerServer_updateIconURI', data); + if (native_.isFailure(result)) { + throw new WebAPIException(WebAPIException.UNKNOWN_ERR, native_.getErrorObject(result).message); + } + + edit_.allow(); + this.iconURI = args.iconURI; + edit_.disallow(); +}; + MediaControllerServer.prototype.updatePlaybackPosition = function(position) { var args = validator_.validateArgs(arguments, [ {name: 'position', type: types_.UNSIGNED_LONG_LONG} @@ -867,6 +897,18 @@ function MediaControllerServerInfo(data) { }.bind(this), set: function() {}, enumerable: true + }, + iconURI: { + get: function() { + var result = native_.callSync('MediaControllerServerInfo_getIconURI', {name: this.name}); + if (native_.isFailure(result)) { + throw new native_.getErrorObject(result); + } + var data = native_.getResultObject(result); + return data.iconURI; + }.bind(this), + set: function() {}, + enumerable: true } }); } diff --git a/src/mediacontroller/mediacontroller_client.cc b/src/mediacontroller/mediacontroller_client.cc index 2db0e8df..87303d88 100644 --- a/src/mediacontroller/mediacontroller_client.cc +++ b/src/mediacontroller/mediacontroller_client.cc @@ -287,6 +287,27 @@ PlatformResult MediaControllerClient::GetMetadata(const std::string& server_name return PlatformResult(ErrorCode::NO_ERROR); } +PlatformResult MediaControllerClient::GetServerIconURI(const std::string& name, common::optional* icon_uri) { + ScopeLogger(); + + char* icon_uri_str = nullptr; + SCOPE_EXIT { + free(icon_uri_str); + }; + + int ret = mc_client_get_server_icon(handle_, name.c_str(), &icon_uri_str); + if (MEDIA_CONTROLLER_ERROR_NONE != ret) { + return PlatformResult(ErrorCode::UNKNOWN_ERR); + } + + *icon_uri = nullptr; + if (nullptr != icon_uri_str) { + *icon_uri = std::string(icon_uri_str); + } + + return PlatformResult(ErrorCode::NO_ERROR); +} + PlatformResult MediaControllerClient::SetServerStatusChangeListener(const JsonCallback& callback) { ScopeLogger(); diff --git a/src/mediacontroller/mediacontroller_client.h b/src/mediacontroller/mediacontroller_client.h index 7acfbc38..c11c389e 100644 --- a/src/mediacontroller/mediacontroller_client.h +++ b/src/mediacontroller/mediacontroller_client.h @@ -21,6 +21,7 @@ #include #include "common/platform_result.h" +#include "common/optional.h" #include "mediacontroller/mediacontroller_utils.h" @@ -60,6 +61,7 @@ class MediaControllerClient { double position); common::PlatformResult SetPlaylistUpdateListener(const JsonCallback& callback); common::PlatformResult UnsetPlaylistUpdateListener(); + common::PlatformResult GetServerIconURI(const std::string& name, common::optional* icon_uri); private: mc_client_h handle_; diff --git a/src/mediacontroller/mediacontroller_instance.cc b/src/mediacontroller/mediacontroller_instance.cc index cb03b720..fcf528e6 100644 --- a/src/mediacontroller/mediacontroller_instance.cc +++ b/src/mediacontroller/mediacontroller_instance.cc @@ -78,6 +78,7 @@ MediaControllerInstance::MediaControllerInstance() { REGISTER_SYNC("MediaControllerServer_updatePlaybackItem", MediaControllerServerUpdatePlaybackItem); REGISTER_ASYNC("MediaControllerServer_getAllPlaylists", MediaControllerServerGetAllPlaylists); + REGISTER_SYNC("MediaControllerServer_updateIconURI", MediaControllerServerUpdateIconURI); // client REGISTER_SYNC("MediaControllerManager_getClient", MediaControllerManagerGetClient); @@ -112,6 +113,8 @@ MediaControllerInstance::MediaControllerInstance() { MediaControllerServerInfoRemovePlaylistUpdateListener); REGISTER_ASYNC("MediaControllerServerInfo_getAllPlaylists", MediaControllerServerInfoGetAllPlaylists); + REGISTER_SYNC("MediaControllerServerInfo_getIconURI", + MediaControllerServerInfoGetIconURI); // playlist REGISTER_SYNC("MediaControllerPlaylist_addItem", MediaControllerPlaylistAddItem); @@ -185,6 +188,38 @@ void MediaControllerInstance::MediaControllerServerUpdatePlaybackState(const pic ReportSuccess(out); } +void MediaControllerInstance::MediaControllerServerUpdateIconURI(const picojson::value& args, + picojson::object& out) { + ScopeLogger(); + CHECK_EXIST(args, "iconURI", out); + + if (!server_) { + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, + ("Failed: server_")); + return; + } + + const char* icon_uri = nullptr; + if (args.get("iconURI").is()) { + icon_uri = args.get("iconURI").get().c_str(); + } + else if (!args.get("iconURI").is()) { + LogAndReportError(PlatformResult(ErrorCode::INVALID_VALUES_ERR, + "Icon URI must be a string or null."), + &out, + ("Icon URI is not a string or null.")); + return; + } + + PlatformResult result = server_->UpdateIconURI(icon_uri); + if (!result) { + LogAndReportError(result, &out, ("Failed server_->UpdateIconURI()")); + return; + } + + ReportSuccess(out); +} + void MediaControllerInstance::MediaControllerServerUpdatePlaybackPosition( const picojson::value& args, picojson::object& out) { ScopeLogger(); @@ -1074,6 +1109,38 @@ void MediaControllerInstance::MediaControllerServerInfoGetAllPlaylists(const pic ReportSuccess(out); } +void MediaControllerInstance::MediaControllerServerInfoGetIconURI(const picojson::value& args, + picojson::object& out) { + ScopeLogger(); + CHECK_ARGS(args, "name", std::string, out); + + if (!client_) { + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, + ("Failed: client_")); + return; + } + + std::string server_name = args.get("name").get(); + + common::optional icon_uri; + PlatformResult status = client_->GetServerIconURI(server_name, &icon_uri); + if (!status) { + LogAndReportError(status, &out, ("Failed: client_->GetServerIconURI()")); + return; + } + + picojson::object result; + if (icon_uri) { + result["iconURI"] = picojson::value(*icon_uri); + } + else { + result["iconURI"] = picojson::value(); + } + + ReportSuccess(picojson::value(result), out); +} + + void MediaControllerInstance::MediaControllerPlaylistAddItem(const picojson::value& args, picojson::object& out) { ScopeLogger(); diff --git a/src/mediacontroller/mediacontroller_instance.h b/src/mediacontroller/mediacontroller_instance.h index a614174b..6e7a8434 100644 --- a/src/mediacontroller/mediacontroller_instance.h +++ b/src/mediacontroller/mediacontroller_instance.h @@ -56,6 +56,7 @@ class MediaControllerInstance : public common::ParsedInstance { void MediaControllerServerDeletePlaylist(const picojson::value& args, picojson::object& out); void MediaControllerServerUpdatePlaybackItem(const picojson::value& args, picojson::object& out); void MediaControllerServerGetAllPlaylists(const picojson::value& args, picojson::object& out); + void MediaControllerServerUpdateIconURI(const picojson::value& args, picojson::object& out); // client void MediaControllerManagerGetClient(const picojson::value& args, picojson::object& out); @@ -85,6 +86,7 @@ class MediaControllerInstance : public common::ParsedInstance { void MediaControllerServerInfoRemovePlaylistUpdateListener(const picojson::value& args, picojson::object& out); void MediaControllerServerInfoGetAllPlaylists(const picojson::value& args, picojson::object& out); + void MediaControllerServerInfoGetIconURI(const picojson::value& args, picojson::object& out); // playlist void MediaControllerPlaylistAddItem(const picojson::value& args, picojson::object& out); diff --git a/src/mediacontroller/mediacontroller_server.cc b/src/mediacontroller/mediacontroller_server.cc index 6eafb392..0af46945 100644 --- a/src/mediacontroller/mediacontroller_server.cc +++ b/src/mediacontroller/mediacontroller_server.cc @@ -459,6 +459,17 @@ PlatformResult MediaControllerServer::UpdatePlaybackItem(const std::string& play return PlatformResult(ErrorCode::NO_ERROR); } +common::PlatformResult MediaControllerServer::UpdateIconURI(const char* icon_uri) { + ScopeLogger(); + int ret = mc_server_set_icon(handle_, icon_uri); + if (MEDIA_CONTROLLER_ERROR_NONE != ret) { + return LogAndCreateResult( + ErrorCode::UNKNOWN_ERR, "Error setting server icon uri", + ("mc_server_set_icon() 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(); diff --git a/src/mediacontroller/mediacontroller_server.h b/src/mediacontroller/mediacontroller_server.h index 7b990fef..6c0d16ff 100644 --- a/src/mediacontroller/mediacontroller_server.h +++ b/src/mediacontroller/mediacontroller_server.h @@ -59,6 +59,7 @@ class MediaControllerServer { const picojson::object& metadata); common::PlatformResult MediaControllerPlaylistGetItems(const std::string& name, picojson::array* items); + common::PlatformResult UpdateIconURI(const char* icon_uri); private: mc_server_h handle_;