From f8dc4def80cfe45442c81896fedaf66fffd7728e Mon Sep 17 00:00:00 2001 From: Michal Michalski Date: Tue, 8 Oct 2019 13:19:00 +0200 Subject: [PATCH] [mediacontroller] Add MediaControllerClientInfo interface. [ACR] http://suprem.sec.samsung.net/jira/browse/TWDAPI-209 + MediaControllerClientInfo: + attribute name: string MediaControllerServer: + getAllClientsInfo() [Verification] Unit tests for MediaControllerClientInfo pass. Signed-off-by: Michal Michalski Change-Id: I321865c99059a21b02f6bdf9f48f9f001fbf2642 --- src/mediacontroller/mediacontroller_api.js | 29 +++++++++++++++++++++++++ src/mediacontroller/mediacontroller_instance.cc | 20 +++++++++++++++++ src/mediacontroller/mediacontroller_instance.h | 1 + src/mediacontroller/mediacontroller_server.cc | 20 +++++++++++++++++ src/mediacontroller/mediacontroller_server.h | 3 +++ 5 files changed, 73 insertions(+) diff --git a/src/mediacontroller/mediacontroller_api.js b/src/mediacontroller/mediacontroller_api.js index 823abf0..3bd97ab 100755 --- a/src/mediacontroller/mediacontroller_api.js +++ b/src/mediacontroller/mediacontroller_api.js @@ -2827,6 +2827,35 @@ var setDisplayRotationAbility = function(displayRotationAbility, support) { } }; +MediaControllerServer.prototype.getAllClientsInfo = function() { + var nativeResult = native_.callSync('MediaControllerServer_getAllClientsInfo'); + if (native_.isFailure(nativeResult)) { + throw native_.getErrorObject(nativeResult); + } + + var results = native_.getResultObject(nativeResult); + if (!type_.isArray(results)) { + throw new WebAPIException(WebAPIException.UNKNOWN_ERR); + } + + var clientsInfo = []; + for (var index in results) { + clientsInfo.push(new MediaControllerClientInfo(results[index])); + } + + return clientsInfo; +}; + +function MediaControllerClientInfo(data) { + Object.defineProperties(this, { + name: { + value: data.name, + writable: false, + enumerable: true + } + }); +} + function MediaControllerClient() {} MediaControllerClient.prototype.findServers = function(successCallback, errorCallback) { diff --git a/src/mediacontroller/mediacontroller_instance.cc b/src/mediacontroller/mediacontroller_instance.cc index f31ed1f..766828c 100644 --- a/src/mediacontroller/mediacontroller_instance.cc +++ b/src/mediacontroller/mediacontroller_instance.cc @@ -90,6 +90,7 @@ MediaControllerInstance::MediaControllerInstance() { REGISTER_SYNC("MediaControllerServer_setDisplayRotationAbility", MediaControllerServerSetDisplayRotationAbility); REGISTER_SYNC("MediaControllerServer_setSimpleAbility", MediaControllerServerSetSimpleAbility); + REGISTER_SYNC("MediaControllerServer_getAllClientsInfo", MediaControllerServerGetAllClientsInfo); // client REGISTER_SYNC("MediaControllerManager_getClient", MediaControllerManagerGetClient); @@ -866,6 +867,25 @@ void MediaControllerInstance::MediaControllerServerSetSimpleAbility(const picojs ReportSuccess(out); } +void MediaControllerInstance::MediaControllerServerGetAllClientsInfo(const picojson::value& args, + picojson::object& out) { + ScopeLogger(); + if (!server_) { + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, + ("Failed: server_")); + return; + } + + picojson::array clientsInfo; + auto result = server_->GetAllClientsInfo(&clientsInfo); + if (!result) { + LogAndReportError(result, &out); + return; + } + + ReportSuccess(picojson::value(clientsInfo), out); +} + void MediaControllerInstance::MediaControllerManagerGetClient(const picojson::value& args, picojson::object& out) { ScopeLogger(); diff --git a/src/mediacontroller/mediacontroller_instance.h b/src/mediacontroller/mediacontroller_instance.h index 3681ad5..8110eb6 100644 --- a/src/mediacontroller/mediacontroller_instance.h +++ b/src/mediacontroller/mediacontroller_instance.h @@ -72,6 +72,7 @@ class MediaControllerInstance : public common::ParsedInstance { void MediaControllerServerSetDisplayRotationAbility(const picojson::value& args, picojson::object& out); void MediaControllerServerSetSimpleAbility(const picojson::value& args, picojson::object& out); + void MediaControllerServerGetAllClientsInfo(const picojson::value& args, picojson::object& out); // client void MediaControllerManagerGetClient(const picojson::value& args, picojson::object& out); diff --git a/src/mediacontroller/mediacontroller_server.cc b/src/mediacontroller/mediacontroller_server.cc index 94515c7..8258dec 100644 --- a/src/mediacontroller/mediacontroller_server.cc +++ b/src/mediacontroller/mediacontroller_server.cc @@ -1410,5 +1410,25 @@ PlatformResult MediaControllerServer::UnsetDisplayRotationChangeRequestListener( return PlatformResult(ErrorCode::NO_ERROR); } +PlatformResult MediaControllerServer::GetAllClientsInfo(picojson::array* clients_info) { + ScopeLogger(); + + auto client_cb = [](const char* name, void* data) -> bool { + auto clients = static_cast(data); + picojson::object client_info = {{"name", picojson::value(name)}}; + clients->push_back(picojson::value(client_info)); + return true; + }; + + int ret = mc_server_foreach_client(handle_, client_cb, clients_info); + if (MEDIA_CONTROLLER_ERROR_NONE != ret) { + return LogAndCreateResult( + ErrorCode::UNKNOWN_ERR, "Iterating over active clients failed", + ("mc_server_foreach_client() error: %d, message: %s", ret, get_error_message(ret))); + } + + return PlatformResult(ErrorCode::NO_ERROR); +} + } // namespace mediacontroller } // namespace extension diff --git a/src/mediacontroller/mediacontroller_server.h b/src/mediacontroller/mediacontroller_server.h index 04c0365..42eae20 100644 --- a/src/mediacontroller/mediacontroller_server.h +++ b/src/mediacontroller/mediacontroller_server.h @@ -73,6 +73,9 @@ class MediaControllerServer { const std::string& support_str); common::PlatformResult SetSimpleAbility(const std::string& ability_type, const std::string& support_str); + + common::PlatformResult GetAllClientsInfo(picojson::array* clientsInfo); + // subtitles common::PlatformResult UpdateSubtitlesEnabled(bool enabled); common::PlatformResult SetSubtitlesChangeRequestListener(const JsonCallback& callback); -- 2.7.4