Merge "[mediacontroller] Get/set server icon API." into tizen
authorPiotr Kosko <p.kosko@samsung.com>
Thu, 13 Jun 2019 09:05:01 +0000 (09:05 +0000)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Thu, 13 Jun 2019 09:05:01 +0000 (09:05 +0000)
src/mediacontroller/mediacontroller_api.js
src/mediacontroller/mediacontroller_client.cc
src/mediacontroller/mediacontroller_client.h
src/mediacontroller/mediacontroller_instance.cc
src/mediacontroller/mediacontroller_instance.h
src/mediacontroller/mediacontroller_server.cc
src/mediacontroller/mediacontroller_server.h

index 34be2a1..46b1034 100755 (executable)
@@ -474,11 +474,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
     }
   });
 }
@@ -503,6 +514,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}
@@ -904,6 +934,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
     }
   });
 }
index d9d3128..6c2df8e 100644 (file)
@@ -296,6 +296,27 @@ PlatformResult MediaControllerClient::GetMetadata(const std::string& server_name
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
+PlatformResult MediaControllerClient::GetServerIconURI(const std::string& name, common::optional<std::string>* 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();
 
index 7acfbc3..c11c389 100644 (file)
@@ -21,6 +21,7 @@
 #include <string>
 
 #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<std::string>* icon_uri);
 
  private:
   mc_client_h handle_;
index 38c3ccb..8e94bd2 100644 (file)
@@ -79,6 +79,7 @@ MediaControllerInstance::MediaControllerInstance() {
   REGISTER_SYNC("MediaControllerServer_updatePlaybackItem",
                 MediaControllerServerUpdatePlaybackItem);
   REGISTER_ASYNC("MediaControllerServer_getAllPlaylists", MediaControllerServerGetAllPlaylists);
+  REGISTER_SYNC("MediaControllerServer_updateIconURI", MediaControllerServerUpdateIconURI);
 
   // client
   REGISTER_SYNC("MediaControllerManager_getClient", MediaControllerManagerGetClient);
@@ -113,6 +114,8 @@ MediaControllerInstance::MediaControllerInstance() {
                 MediaControllerServerInfoRemovePlaylistUpdateListener);
   REGISTER_ASYNC("MediaControllerServerInfo_getAllPlaylists",
                  MediaControllerServerInfoGetAllPlaylists);
+  REGISTER_SYNC("MediaControllerServerInfo_getIconURI",
+                 MediaControllerServerInfoGetIconURI);
 
   // playlist
   REGISTER_SYNC("MediaControllerPlaylist_addItem", MediaControllerPlaylistAddItem);
@@ -186,6 +189,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<std::string>()) {
+    icon_uri = args.get("iconURI").get<std::string>().c_str();
+  }
+  else if (!args.get("iconURI").is<picojson::null>()) {
+    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();
@@ -1096,6 +1131,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<std::string>();
+
+  common::optional<std::string> 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();
index 8e9cb16..c005c6b 100644 (file)
@@ -57,6 +57,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);
@@ -86,6 +87,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);
index af158d7..89fd7d6 100644 (file)
@@ -489,6 +489,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();
index f08a75b..6ad8be7 100644 (file)
@@ -60,6 +60,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_;