[mediacontroller] add new methods for playlists 70/215270/9
authorDawid Juszczak <d.juszczak@samsung.com>
Fri, 4 Oct 2019 10:07:51 +0000 (12:07 +0200)
committerDawid Juszczak <d.juszczak@samsung.com>
Wed, 11 Dec 2019 09:55:17 +0000 (10:55 +0100)
[ACR]
http://suprem.sec.samsung.net/jira/browse/TWDAPI-239

[description]
added method getPlaylist for interfaces:
- MediaControllerPlaylists
- MediaControllerPlaylistsInfo

[Verification]
tested manually on chrome console
tct-mediacontroller-tizen-tests fails with 2 TC:
- MediaControllerServer_iconURI_attribute.html <- has to be modified,
  because attribute iconURI is no longer readonly
- MediaControllerServerInfo_iconURI_attribute.html <- has to be modified,
  because attribute iconURI is no longer readonly

Change-Id: Idbe3e7f45144574f2dcc799f9e2fc936904c9fff
Signed-off-by: Dawid Juszczak <d.juszczak@samsung.com>
src/mediacontroller/mediacontroller_api.js
src/mediacontroller/mediacontroller_instance.cc
src/mediacontroller/mediacontroller_instance.h
src/mediacontroller/mediacontroller_utils.cc
src/mediacontroller/mediacontroller_utils.h

index e5d1177..b7d4bab 100755 (executable)
@@ -4292,7 +4292,7 @@ function MediaControllerServerInfoPlaybackInfo(serverName, data) {
         );
     };
 
-    this.addPlaybackInfoChangeListener = function(listener) {
+    this.addPlaybackInfoChangeListener = function() {
         var args = [_serverName].concat(Array.prototype.slice.call(arguments));
         return addPlaybackInfoChangeListener.apply(this, args);
     };
@@ -4371,6 +4371,29 @@ MediaControllerPlaylists.prototype.getAllPlaylists = function() {
     serverGetAllPlaylists.apply(this, arguments);
 };
 
+MediaControllerPlaylists.prototype.getPlaylist = function() {
+    var args = validator_.validateArgs(arguments, [
+        {
+            name: 'playlistName',
+            type: types_.STRING,
+            optional: false,
+            nullable: false
+        }
+    ]);
+
+    var data = {
+        playlistName: args.playlistName
+    };
+
+    var result = native_.callSync('MediaControllerPlaylistsGetPlaylist', data);
+
+    if (native_.isFailure(result)) {
+        throw native_.getErrorObject(result);
+    }
+
+    return new MediaControllerPlaylist(native_.getResultObject(result));
+};
+
 var MediaControllerPlaylistsInfo = function(serverName) {
     var _serverName = serverName;
 
@@ -4435,6 +4458,29 @@ var MediaControllerPlaylistsInfo = function(serverName) {
     this.removePlaylistUpdateListener = function(watchId) {
         removePlaylistUpdateListener(watchId);
     };
+
+    this.getPlaylist = function() {
+        var args = validator_.validateArgs(arguments, [
+            {
+                name: 'playlistName',
+                type: types_.STRING,
+                optional: false,
+                nullable: false
+            }
+        ]);
+
+        var data = {
+            serverName: _serverName,
+            playlistName: args.playlistName
+        };
+
+        var result = native_.callSync('MediaControllerPlaylistsInfoGetPlaylist', data);
+        if (native_.isFailure(result)) {
+            throw native_.getErrorObject(result);
+        }
+
+        return new MediaControllerPlaylist(native_.getResultObject(result));
+    };
 };
 
 exports = new MediaControllerManager();
index 6ae35ed..679061a 100644 (file)
@@ -167,8 +167,12 @@ MediaControllerInstance::MediaControllerInstance() {
   REGISTER_METHOD(MediaControllerDisplayRotationInfoAddChangeListener);
   REGISTER_METHOD(MediaControllerDisplayRotationInfoRemoveChangeListener);
 
+  // playlists
+  REGISTER_METHOD(MediaControllerPlaylistsGetPlaylist);
+
   // playlists_info
   REGISTER_METHOD(MediaControllerPlaylistsInfoSendPlaybackItem);
+  REGISTER_METHOD(MediaControllerPlaylistsInfoGetPlaylist);
 
 #undef REGISTER_METHOD
 }
@@ -1646,6 +1650,27 @@ void MediaControllerInstance::MediaControllerServerInfoGetAllPlaylists(const pic
   ReportSuccess(out);
 }
 
+void MediaControllerInstance::MediaControllerPlaylistsInfoGetPlaylist(const picojson::value& args,
+                                                                      picojson::object& out) {
+  ScopeLogger();
+
+  CHECK_ARGS(args, kServerName, std::string, out);
+  CHECK_ARGS(args, kPlaylistName, std::string, out);
+
+  const std::string& server_name = args.get(kServerName).get<std::string>();
+  const std::string& playlist_name = args.get(kPlaylistName).get<std::string>();
+  picojson::value playlist_info = picojson::value(picojson::object());
+  picojson::object& playlist_obj = playlist_info.get<picojson::object>();
+
+  PlatformResult result = utils::GetPlaylist(server_name, playlist_name, &playlist_obj);
+  if (!result) {
+    LogAndReportError(result, &out, ("Failed: utils::GetPlaylist"));
+    return;
+  }
+
+  ReportSuccess(playlist_info, out);
+}
+
 void MediaControllerInstance::MediaControllerServerInfoGetIconURI(const picojson::value& args,
                                                                   picojson::object& out) {
   ScopeLogger();
@@ -2010,6 +2035,25 @@ void MediaControllerInstance::MediaControllerPlaylistGetItems(const picojson::va
   ReportSuccess(out);
 }
 
+void MediaControllerInstance::MediaControllerPlaylistsGetPlaylist(const picojson::value& args,
+                                                                  picojson::object& out) {
+  ScopeLogger();
+  CHECK_ARGS(args, kPlaylistName, std::string, out);
+
+  const std::string& playlist_name = args.get(kPlaylistName).get<std::string>();
+  const std::string& app_id = common::CurrentApplication::GetInstance().GetApplicationId();
+  picojson::value playlist_info = picojson::value(picojson::object());
+  picojson::object& playlist_obj = playlist_info.get<picojson::object>();
+
+  auto result = utils::GetPlaylist(app_id, playlist_name, &playlist_obj);
+  if (!result) {
+    LogAndReportError(result, &out, ("Failed: utils::GetPlaylist"));
+    return;
+  }
+
+  ReportSuccess(playlist_info, out);
+}
+
 // subtitles
 void MediaControllerInstance::MediaControllerSubtitlesUpdateEnabled(const picojson::value& args,
                                                                     picojson::object& out) {
index 56385e8..62e13be 100644 (file)
@@ -196,9 +196,13 @@ class MediaControllerInstance : public common::ParsedInstance {
   void MediaControllerDisplayRotationInfoRemoveChangeListener(const picojson::value& args,
                                                               picojson::object& out);
 
+  // playlists
+  void MediaControllerPlaylistsGetPlaylist(const picojson::value& args, picojson::object& out);
+
   // playlists_info
   void MediaControllerPlaylistsInfoSendPlaybackItem(const picojson::value& args,
                                                     picojson::object& out);
+  void MediaControllerPlaylistsInfoGetPlaylist(const picojson::value& args, picojson::object& out);
 
   std::shared_ptr<MediaControllerClient> client_;
   std::shared_ptr<MediaControllerServer> server_;
index 6615a75..fbd091d 100644 (file)
@@ -381,6 +381,37 @@ PlatformResult utils::GetAllPlaylists(const std::string& app_id, picojson::array
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
+PlatformResult utils::GetPlaylist(const std::string& app_id, const std::string& playlist_name,
+                                  picojson::object* playlist_obj) {
+  ScopeLogger();
+
+  mc_playlist_h playlist_item = nullptr;
+  SCOPE_EXIT {
+    mc_playlist_destroy(playlist_item);
+  };
+
+  int ret = mc_playlist_get_playlist(app_id.c_str(), playlist_name.c_str(), &playlist_item);
+
+  if (MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER == ret) {
+    return LogAndCreateResult(
+        ErrorCode::NOT_FOUND_ERR,
+        "A playlist named " + playlist_name + " does not exist on the server " + app_id,
+        ("mc_playlist_get_playlist() error: %d, message: %s", ret, get_error_message(ret)));
+  }
+
+  if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
+    return LogAndCreateResult(
+        ErrorCode::UNKNOWN_ERR, "Error while getting a playlist named " + playlist_name,
+        ("mc_playlist_get_playlist() error: %d, message: %s", ret, get_error_message(ret)));
+  }
+
+  if (nullptr != playlist_obj) {
+    (*playlist_obj)[kName] = picojson::value(playlist_name);
+  }
+
+  return PlatformResult(ErrorCode::NO_ERROR);
+}
+
 ErrorCode utils::ConvertMediaControllerError(int e) {
   ScopeLogger();
   ErrorCode error;
index f0ca6f5..24d7c4b 100644 (file)
@@ -122,6 +122,8 @@ extern const common::PlatformEnum<mc_display_rotation_e> MediaControllerDisplayR
 
 namespace utils {
 common::PlatformResult GetAllPlaylists(const std::string& app_id, picojson::array* playlists);
+common::PlatformResult GetPlaylist(const std::string& app_id, const std::string& playlist_name,
+                                   picojson::object* playlist_obj);
 common::ErrorCode ConvertMediaControllerError(int e);
 bool isMetadataAttributeEncodable(const std::string& name);
 common::PlatformResult EncodeMetadata(const picojson::object& to_encode, picojson::object* encoded);