From 94f7588f0f4beaa33162e223acb724b275c4a8e9 Mon Sep 17 00:00:00 2001 From: Dawid Juszczak Date: Fri, 4 Oct 2019 12:07:51 +0200 Subject: [PATCH] [mediacontroller] add new methods for playlists [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 --- src/mediacontroller/mediacontroller_api.js | 48 ++++++++++++++++++++++++- src/mediacontroller/mediacontroller_instance.cc | 44 +++++++++++++++++++++++ src/mediacontroller/mediacontroller_instance.h | 4 +++ src/mediacontroller/mediacontroller_utils.cc | 31 ++++++++++++++++ src/mediacontroller/mediacontroller_utils.h | 2 ++ 5 files changed, 128 insertions(+), 1 deletion(-) diff --git a/src/mediacontroller/mediacontroller_api.js b/src/mediacontroller/mediacontroller_api.js index e5d1177..b7d4bab 100755 --- a/src/mediacontroller/mediacontroller_api.js +++ b/src/mediacontroller/mediacontroller_api.js @@ -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(); diff --git a/src/mediacontroller/mediacontroller_instance.cc b/src/mediacontroller/mediacontroller_instance.cc index 6ae35ed..679061a 100644 --- a/src/mediacontroller/mediacontroller_instance.cc +++ b/src/mediacontroller/mediacontroller_instance.cc @@ -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(); + const std::string& playlist_name = args.get(kPlaylistName).get(); + picojson::value playlist_info = picojson::value(picojson::object()); + picojson::object& playlist_obj = playlist_info.get(); + + 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(); + const std::string& app_id = common::CurrentApplication::GetInstance().GetApplicationId(); + picojson::value playlist_info = picojson::value(picojson::object()); + picojson::object& playlist_obj = playlist_info.get(); + + 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) { diff --git a/src/mediacontroller/mediacontroller_instance.h b/src/mediacontroller/mediacontroller_instance.h index 56385e8..62e13be 100644 --- a/src/mediacontroller/mediacontroller_instance.h +++ b/src/mediacontroller/mediacontroller_instance.h @@ -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 client_; std::shared_ptr server_; diff --git a/src/mediacontroller/mediacontroller_utils.cc b/src/mediacontroller/mediacontroller_utils.cc index 6615a75..fbd091d 100644 --- a/src/mediacontroller/mediacontroller_utils.cc +++ b/src/mediacontroller/mediacontroller_utils.cc @@ -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; diff --git a/src/mediacontroller/mediacontroller_utils.h b/src/mediacontroller/mediacontroller_utils.h index f0ca6f5..24d7c4b 100644 --- a/src/mediacontroller/mediacontroller_utils.h +++ b/src/mediacontroller/mediacontroller_utils.h @@ -122,6 +122,8 @@ extern const common::PlatformEnum 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); -- 2.7.4