[mediacontroller] Add MediaControllerClientInfo interface. 64/215464/5
authorMichal Michalski <m.michalski2@partner.samsung.com>
Tue, 8 Oct 2019 11:19:00 +0000 (13:19 +0200)
committerPiotr Kosko <p.kosko@samsung.com>
Tue, 8 Oct 2019 14:44:54 +0000 (14:44 +0000)
[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 <m.michalski2@partner.samsung.com>
Change-Id: I321865c99059a21b02f6bdf9f48f9f001fbf2642

src/mediacontroller/mediacontroller_api.js
src/mediacontroller/mediacontroller_instance.cc
src/mediacontroller/mediacontroller_instance.h
src/mediacontroller/mediacontroller_server.cc
src/mediacontroller/mediacontroller_server.h

index 823abf0..3bd97ab 100755 (executable)
@@ -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) {
index f31ed1f..766828c 100644 (file)
@@ -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();
index 3681ad5..8110eb6 100644 (file)
@@ -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);
index 94515c7..8258dec 100644 (file)
@@ -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<picojson::array*>(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
index 04c0365..42eae20 100644 (file)
@@ -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);