[mediacontroller] Get/set playback content type. 19/204019/8
authorMichal Michalski <m.michalski2@partner.samsung.com>
Thu, 18 Apr 2019 11:43:29 +0000 (13:43 +0200)
committerMichal Michalski <m.michalski2@partner.samsung.com>
Thu, 16 May 2019 11:50:07 +0000 (13:50 +0200)
http://suprem.sec.samsung.net/jira/browse/TWDAPI-219

+ enum MediaControllerContentType
+ MediaControllerPlaybackInfo::contentType
+ MediaControllerServer::updateContentType()

[Verification] Manual tests in js console.

Signed-off-by: Michal Michalski <m.michalski2@partner.samsung.com>
Change-Id: Idb5bec64fac631fa92825920a745abfe02861edf

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

index 6350a90aff3ffc4abfeb3f180779ea0a907e1469..34be2a1e9b9de7d2ed82644e86fcaa382d446d87 100755 (executable)
@@ -364,6 +364,7 @@ var MediaControllerPlaybackInfo = function(data) {
   var _position = 0;
   var _shuffleMode = false;
   var _repeatMode = false;
+  var _contentType = MediaControllerContentType.UNDECIDED;
   var _repeatState = MediaControllerRepeatState.REPEAT_OFF;
   var _ageRating = MediaControllerContentAgeRating.ALL;
   var _metadata = new MediaControllerMetadata();
@@ -425,6 +426,15 @@ var MediaControllerPlaybackInfo = function(data) {
       },
       enumerable: true
     },
+    contentType: {
+      get: function() {
+        return _contentType;
+      },
+      set: function(v) {
+        _contentType = edit_.isAllowed && v ? v : _contentType;
+      },
+      enumerable: true
+    },
     metadata: {
       get: function() {
         return _metadata;
@@ -532,6 +542,25 @@ MediaControllerServer.prototype.updatePlaybackAgeRating = function(rating) {
     edit_.disallow();
 };
 
+MediaControllerServer.prototype.updatePlaybackContentType = function(contentType) {
+  var args = validator_.validateArgs(arguments, [
+    {name: 'contentType', type: types_.ENUM, values: Object.values(MediaControllerContentType)}
+  ]);
+
+  var data = {
+    contentType: args.contentType
+  };
+
+  var result = native_.callSync('MediaControllerServer_updatePlaybackContentType', data);
+  if (native_.isFailure(result)) {
+    throw native_.getErrorObject(result);
+  }
+
+  edit_.allow();
+  this.playbackInfo.contentType = args.contentType;
+  edit_.disallow();
+}
+
 MediaControllerServer.prototype.updateShuffleMode = function(mode) {
   var args = validator_.validateArgs(arguments, [
     {name: 'mode', type: types_.BOOLEAN}
index 2db0e8dfef4d41a131d0141ca8f4e968582e5fd3..d9d3128512ad779744eacca34f50c36f60d05762 100644 (file)
@@ -216,6 +216,14 @@ PlatformResult MediaControllerClient::GetPlaybackInfo(const std::string& server_
     return result;
   }
 
+  // content type
+  std::string contentType;
+  result = types::ConvertContentType(playback_h, &contentType);
+  if (!result) {
+    LoggerE("ConvertContentType failed, error: %s", result.message().c_str());
+    return result;
+  }
+
   // shuffle mode
   mc_shuffle_mode_e shuffle;
   ret = mc_client_get_server_shuffle_mode(handle_, server_name.c_str(), &shuffle);
@@ -252,6 +260,7 @@ PlatformResult MediaControllerClient::GetPlaybackInfo(const std::string& server_
   (*playback_info)["state"] = picojson::value(state);
   (*playback_info)["position"] = picojson::value(position);
   (*playback_info)["ageRating"] = picojson::value(rating);
+  (*playback_info)["contentType"] = picojson::value(contentType);
   (*playback_info)["shuffleMode"] = picojson::value(shuffle == MC_SHUFFLE_MODE_ON);
   (*playback_info)["repeatMode"] = picojson::value(repeat == MC_REPEAT_MODE_ON);
   (*playback_info)["metadata"] = metadata;
index cb03b720a7f361ea6e79abf02c17578cea8d27d2..38c3ccb4ae9f367ade978db28074e462f32e73d9 100644 (file)
@@ -62,6 +62,7 @@ MediaControllerInstance::MediaControllerInstance() {
   REGISTER_SYNC("MediaControllerServer_updateRepeatMode", MediaControllerServerUpdateRepeatMode);
   REGISTER_SYNC("MediaControllerServer_updateRepeatState", MediaControllerServerUpdateRepeatState);
   REGISTER_SYNC("MediaControllerServer_updateShuffleMode", MediaControllerServerUpdateShuffleMode);
+  REGISTER_SYNC("MediaControllerServer_updatePlaybackContentType", MediaControllerServerUpdatePlaybackContentType);
   REGISTER_SYNC("MediaControllerServer_updateMetadata", MediaControllerServerUpdateMetadata);
   REGISTER_SYNC("MediaControllerServer_addChangeRequestPlaybackInfoListener",
                 MediaControllerServerAddChangeRequestPlaybackInfoListener);
@@ -249,6 +250,27 @@ void MediaControllerInstance::MediaControllerServerUpdateShuffleMode(const picoj
   ReportSuccess(out);
 }
 
+void MediaControllerInstance::MediaControllerServerUpdatePlaybackContentType(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, "contentType", std::string, out);
+  std::string content_type = args.get("contentType").get<std::string>();
+
+  PlatformResult result = server_->SetContentType(content_type);
+  if (!result) {
+    LogAndReportError(result, &out, ("Failed: server_>SetContentType()"));
+    return;
+  }
+
+  ReportSuccess(out);
+}
+
 void MediaControllerInstance::MediaControllerServerUpdateRepeatMode(const picojson::value& args,
                                                                     picojson::object& out) {
   ScopeLogger();
index a614174b9b32d739ac6ab22c70e6ca890d1ece2c..8e9cb16776166ce9d15361702f7d2b99669d494a 100644 (file)
@@ -42,6 +42,7 @@ class MediaControllerInstance : public common::ParsedInstance {
   void MediaControllerServerUpdateRepeatMode(const picojson::value& args, picojson::object& out);
   void MediaControllerServerUpdateRepeatState(const picojson::value& args, picojson::object& out);
   void MediaControllerServerUpdateShuffleMode(const picojson::value& args, picojson::object& out);
+  void MediaControllerServerUpdatePlaybackContentType(const picojson::value& args, picojson::object& out);
   void MediaControllerServerUpdateMetadata(const picojson::value& args, picojson::object& out);
   void MediaControllerServerAddChangeRequestPlaybackInfoListener(const picojson::value& args,
                                                                  picojson::object& out);
index 6eafb3929fbe28996a8cbd6d573e2b89ac5fe8be..af158d793681044e42b4d2a6bb2105e041e7f356 100644 (file)
@@ -34,6 +34,7 @@ MediaControllerServer::MediaControllerServer()
       playback_state_(MC_PLAYBACK_STATE_STOPPED),
       position_(0ULL),
       age_rating_(MC_CONTENT_RATING_ALL),
+      content_type_(MC_CONTENT_TYPE_UNDECIDED),
       shuffle_mode_(MC_SHUFFLE_MODE_OFF),
       repeat_mode_(MC_REPEAT_MODE_OFF),
       is_shuffle_mode_set_(false),
@@ -165,6 +166,35 @@ PlatformResult MediaControllerServer::SetContentAgeRating(const std::string& rat
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
+PlatformResult MediaControllerServer::SetContentType(const std::string& content_type) {
+  ScopeLogger();
+
+  mc_content_type_e content_type_e;
+  PlatformResult result = types::MediaControllerContentTypeEnum.getValue(content_type, &content_type_e);
+  if (!result) {
+    return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Converting string to platform enum failed",
+      ("MediaControllerContentTypeEnum.getValue() error message: %s", result.message().c_str()));
+  }
+
+  int ret = mc_server_set_playback_content_type(handle_, content_type_e);
+  if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
+     return LogAndCreateResult(
+        ErrorCode::UNKNOWN_ERR, "Error updating playback content type",
+        ("mc_server_set_playback_content_type() error: %d, message: %s", ret, get_error_message(ret)));
+  }
+
+  content_type_ = content_type_e;
+
+  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::SetShuffleMode(bool mode) {
   ScopeLogger();
 
index 7b990feff20c2b421e0a3d5e637ea4db8f938592..f08a75bbe2e443bbe7c58fadc8621bf61eb26e93 100644 (file)
@@ -35,6 +35,7 @@ class MediaControllerServer {
   common::PlatformResult SetPlaybackState(const std::string& state);
   common::PlatformResult SetPlaybackPosition(double position);
   common::PlatformResult SetContentAgeRating(const std::string& rating);
+  common::PlatformResult SetContentType(const std::string& content_type);
   common::PlatformResult SetShuffleMode(bool mode);
   common::PlatformResult SetRepeatMode(bool mode);
   common::PlatformResult SetRepeatState(const std::string& state);
@@ -67,6 +68,7 @@ class MediaControllerServer {
   mc_playback_states_e playback_state_;
   unsigned long long position_;
   mc_content_age_rating_e age_rating_;
+  mc_content_type_e content_type_;
   mc_shuffle_mode_e shuffle_mode_;
   mc_repeat_mode_e repeat_mode_;
   bool is_shuffle_mode_set_;