From: Piotr Kosko/Native/Web API (PLT) /SRPOL/Engineer/삼성전자 Date: Tue, 20 Aug 2019 08:09:05 +0000 (+0200) Subject: [Mediacontroller] Fixed issue with invalid name of enum X-Git-Tag: submit/tizen/20190820.115734^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=544d0685dbe8941d0629136060d2e772553dd6aa;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Mediacontroller] Fixed issue with invalid name of enum [Bug] 1. wrong value of enum NONE instead of NO_CATEGORY 2. invalid parsing of empty keyword, which caused crash [Verification] Code compiles without errors. Tested in chrome console with code: var server = tizen.mediacontroller.createServer(); function searchRequestListener(clientName, request) { console.log("search command received"); return new tizen.mediacontroller.RequestReply(new tizen.Bundle({"key": "value"}), 5); } server.setSearchRequestListener(searchRequestListener); server.updatePlaybackState("PLAY"); /* Client-side code */ var client = tizen.mediacontroller.getClient(); var sinfo = client.getLatestServerInfo(); var query = [ new tizen.mediacontroller.SearchFilter("MUSIC") ]; sinfo.sendSearchRequest(query, function(reply) { console.log("reply status: " + reply.code); console.log("reply data: " + reply.data); }); Change-Id: Ie522f07286bf4604fe43428b716d6d808abbea07 --- diff --git a/src/mediacontroller/mediacontroller_api.js b/src/mediacontroller/mediacontroller_api.js index 0f3fe430..aef8c56a 100755 --- a/src/mediacontroller/mediacontroller_api.js +++ b/src/mediacontroller/mediacontroller_api.js @@ -1545,13 +1545,16 @@ MediaControllerServerInfo.prototype.sendSearchRequest = function( listenerId: ReplyCommandListener.listenerName }; - var replyListenerId = ReplyCommandListener.addListener(callback); var result = native_.callSync( 'MediaControllerServerInfo_sendSearchRequest', nativeData, callback ); + if (native_.isFailure(result)) { + throw native_.getErrorObject(result); + } + var replyListenerId = ReplyCommandListener.addListener(callback); ReplyCommandListener.requestIdToListenerId[replyListenerId] = result.requestId; }; diff --git a/src/mediacontroller/mediacontroller_client.cc b/src/mediacontroller/mediacontroller_client.cc index 2346c2a9..cce9ce41 100644 --- a/src/mediacontroller/mediacontroller_client.cc +++ b/src/mediacontroller/mediacontroller_client.cc @@ -599,8 +599,14 @@ PlatformResult MediaControllerClient::SendSearchRequest(const std::string& serve ("JsonToBundle() error message: %s", result.message().c_str())); } - ret = mc_search_set_condition(search_request, content_type_e, search_category_e, - filter.at("keyword").get().c_str(), bundle_data); + // keyword + // null is valid search keyword in case of NO_CATEGORY + char* search_keyword = nullptr; + if (filter.at("keyword").is()) { + search_keyword = (char*)filter.at("keyword").get().c_str(); + } + ret = mc_search_set_condition(search_request, content_type_e, search_category_e, search_keyword, + bundle_data); if (MEDIA_CONTROLLER_ERROR_NONE != ret) { return LogAndCreateResult( diff --git a/src/mediacontroller/mediacontroller_server.cc b/src/mediacontroller/mediacontroller_server.cc index ef3c0fd5..37e6212d 100644 --- a/src/mediacontroller/mediacontroller_server.cc +++ b/src/mediacontroller/mediacontroller_server.cc @@ -342,7 +342,12 @@ void MediaControllerServer::OnSearchRequestReceived(const char* client_name, con } object["category"] = picojson::value(temp); - object["keyword"] = picojson::value(std::string(keyword)); + if (keyword) { + object["keyword"] = picojson::value(std::string(keyword)); + } else { + // null is valid search keyword in case of NO_CATEGORY + object["keyword"] = picojson::value(); + } picojson::value data_json; result = common::BundleToJson(data, &data_json); diff --git a/src/mediacontroller/mediacontroller_utils.cc b/src/mediacontroller/mediacontroller_utils.cc index 2f3aaa55..7df84874 100644 --- a/src/mediacontroller/mediacontroller_utils.cc +++ b/src/mediacontroller/mediacontroller_utils.cc @@ -88,8 +88,12 @@ const common::PlatformEnum MediaControllerContentTypeEnum{ {"UNDECIDED", MC_CONTENT_TYPE_UNDECIDED}}; const common::PlatformEnum MediaControllerSearchCategoryEnum{ - {"NONE", MC_SEARCH_NO_CATEGORY}, {"TITLE", MC_SEARCH_TITLE}, {"ARTIST", MC_SEARCH_ARTIST}, - {"ALBUM", MC_SEARCH_ALBUM}, {"GENRE", MC_SEARCH_GENRE}, {"TPO", MC_SEARCH_TPO}}; + {"NO_CATEGORY", MC_SEARCH_NO_CATEGORY}, + {"TITLE", MC_SEARCH_TITLE}, + {"ARTIST", MC_SEARCH_ARTIST}, + {"ALBUM", MC_SEARCH_ALBUM}, + {"GENRE", MC_SEARCH_GENRE}, + {"TPO", MC_SEARCH_TPO}}; PlatformResult ConvertPlaybackState(mc_playback_h playback_h, std::string* state) { ScopeLogger();