From 544d0685dbe8941d0629136060d2e772553dd6aa Mon Sep 17 00:00:00 2001 From: =?utf8?q?Piotr=20Kosko/Native/Web=20API=20=28PLT=29=20/SRPOL/Enginee?= =?utf8?q?r/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Tue, 20 Aug 2019 10:09:05 +0200 Subject: [PATCH] [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 --- src/mediacontroller/mediacontroller_api.js | 5 ++++- src/mediacontroller/mediacontroller_client.cc | 10 ++++++++-- src/mediacontroller/mediacontroller_server.cc | 7 ++++++- src/mediacontroller/mediacontroller_utils.cc | 8 ++++++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/mediacontroller/mediacontroller_api.js b/src/mediacontroller/mediacontroller_api.js index 0f3fe43..aef8c56 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 2346c2a..cce9ce4 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 ef3c0fd..37e6212 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 2f3aaa5..7df8487 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(); -- 2.7.4