+ Executed ./code_format script on mediacontroller source code.
+ Fixed invalid tests for MediaControllerClientInfo::sendEvent() method.
+ Fixed minor issues from earlier reviews.
+ initialized all JsonCallbacks to nullptr in constructors of MediaControllerClient/Server
[Verification] tests from test_custom_event.js 100% pass.
Signed-off-by: Michal Michalski <m.michalski2@partner.samsung.com>
Change-Id: I9514897908e8221ed6f1c8eb1c1ed0083bad0996
});
describe('MediaControllerClient::setCustomEventListener', function() {
+ after(function() {
+ client.unsetCustomEventListener();
+ });
+
it('should throw TypeMismatchError if argument is not a function', function(done) {
try {
client.setCustomEventListener('not-a-function');
function secondListener(serverName, event, data) {
done();
}
- function callback(r) {
+ function callback(data, code) {
/* ignore */
}
client.setCustomEventListener(firstListener);
client.setCustomEventListener(secondListener);
server.getAllClientsInfo()[0].sendEvent('test', {}, callback);
- client.unsetCustomEventListener();
});
});
client.unsetCustomEventListener();
done();
});
-
- it('should disable event listener', function(done) {
- var eventCounter = 0;
- function listener(server, event, data) {
- if (eventCounter++ > 0) {
- done('Too many events received.');
- }
- }
- function callback(reply) {
- /* ignore */
- }
-
- var cinfo = server.getAllClientsInfo()[0];
- client.setCustomEventListener(listener);
- cinfo.sendEvent('Event1', null, callback);
- client.unsetCustomEventListener();
- cinfo.sendEvent('Event2', null, callback);
-
- setTimeout(function() {
- done();
- }, 5000);
- });
});
describe('MediaControllerClientInfo::sendEvent', function() {
chai.expect(error.name).to.equal('TypeMismatchError');
}
try {
- cinfo.sendEvent('TestEvent', 'not-an-object-or-null', function(reply) {});
+ cinfo.sendEvent('TestEvent', 'not-an-object-or-null', function(data, code) {});
done(new Error('Expected TypeMismatchError'));
} catch (error) {
chai.expect(error.name).to.equal('TypeMismatchError');
it('should trigger client listener', function(done) {
function listener(serverName, event, data) {
- var currentAppId = tizen.application.getCurrentApplication().appInfo.appId;
+ var currentAppId = tizen.application.getCurrentApplication().appInfo.id;
chai.expect(serverName).to.equal(currentAppId);
chai.expect(event).to.equal('TestEvent');
- chai.expect(data).to.equal(null);
+ chai.expect(data).to.be.null;
done();
}
- function callback(reply) {
+ function callback(data, code) {
/* ignore */
}
client.setCustomEventListener(listener);
return new tizen.mediacontroller.RequestReply(null, 123);
}
- function callback(reply) {
- chai.expect(reply.code).to.equal(123);
- chai.expect(reply.data).to.equal(null);
+ function callback(data, code) {
+ chai.expect(code).to.equal(123);
+ chai.expect(data).to.equal(null);
done();
}
it('should pass data bundle', function(done) {
function listener(server, event, data) {
chai.expect(event).to.equal('TestEvent');
- chai.expect(data.get('test')).to.equal('data');
+ chai.expect(data.test).to.equal('data');
return new tizen.mediacontroller.RequestReply(
{ TestReply: 'ReplyData' },
123
);
}
- function callback(reply) {
- chai.expect(reply.data.get('TestReply')).to.equal('ReplyData');
+ function callback(data, code) {
+ chai.expect(data.TestReply).to.equal('ReplyData');
done();
}
var results = native_.getResultObject(nativeResult);
if (!type_.isArray(results)) {
- throw new WebAPIException(WebAPIException.UNKNOWN_ERR);
+ throw new WebAPIException(WebAPIException.UNKNOWN_ERR, "Invalid return type.");
}
var clientsInfo = [];
return;
}
delete EventReplyListenerManager.listenerIdToRequestId[watchId];
- args.callback(result.resultCode, result.data);
+ args.callback(result.data, result.code);
};
var nativeData = {
var nativeData = {
result: result.data,
resultCode: result.code,
- serverName: msg.serverName ,
+ serverName: msg.serverName,
requestId: msg.requestId
};
]);
var result = native_.callSync('MediaControllerClient_setCustomEventListener', {
- listenerId: 'MediaControllerClientEventsListener'
+ listenerId: '_MediaControllerClientEventsListener'
});
if (native_.isFailure(result)) {
throw native_.getErrorObject(result);
- } else {
- native_.addListener('MediaControllerClientEventsListener', function(msg) {
- EventReceivedCallback(msg, listener);
- });
}
+
+ native_.addListener('_MediaControllerClientEventsListener', function(msg) {
+ EventReceivedCallback(msg, args.listener);
+ });
};
MediaControllerClient.prototype.unsetCustomEventListener = function() {
var result = native_.callSync('MediaControllerClient_unsetCustomEventListener', {
- listenerId: 'MediaControllerClientEventsListener'
+ listenerId: '_MediaControllerClientEventsListener'
});
if (native_.isFailure(result)) {
throw native_.getErrorObject(result);
} else {
- native_.removeListener('MediaControllerClientEventsListener');
+ native_.removeListener('_MediaControllerClientEventsListener');
}
};
using common::BundleJsonIterator;
MediaControllerClient::MediaControllerClient()
- : handle_(nullptr), custom_event_listener_(nullptr), subscribed_servers{} {
+ : handle_(nullptr),
+ playback_info_listener_(nullptr),
+ server_status_listener_(nullptr),
+ command_reply_callback_(nullptr),
+ playlist_update_listener_(nullptr),
+ ability_listener_(nullptr),
+ subtitles_update_listener_(nullptr),
+ mode360_update_listener_(nullptr),
+ display_mode_update_listener_(nullptr),
+ display_rotation_update_listener_(nullptr),
+ custom_event_listener_(nullptr),
+ subscribed_servers{} {
ScopeLogger();
}
LoggerE("Failed to unset display mode listener");
}
- if (nullptr != display_rotation_update_listener && !UnsetDisplayRotationInfoChangeListener()) {
+ if (nullptr != display_rotation_update_listener_ && !UnsetDisplayRotationInfoChangeListener()) {
LoggerE("Failed to unset display rotation listener");
}
PlatformResult MediaControllerClient::SetCustomEventListener(const JsonCallback& callback) {
ScopeLogger();
- if (custom_event_listener_ == nullptr) {
- int ret = mc_client_set_custom_event_received_cb(handle_, OnEventReceived, this);
- if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
- return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Failed to set custom event listener",
- ("mc_client_set_custom_event_received_cb() error: %d, message: %s",
- ret, get_error_message(ret)));
- }
+ if (nullptr == custom_event_listener_) {
+ int ret = mc_client_set_custom_event_received_cb(handle_, OnEventReceived, this);
+ if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Failed to set custom event listener",
+ ("mc_client_set_custom_event_received_cb() error: %d, message: %s",
+ ret, get_error_message(ret)));
+ }
}
custom_event_listener_ = callback;
return PlatformResult(ErrorCode::NO_ERROR);
("bundle_create() returned a nullptr"));
}
SCOPE_EXIT {
- free(data_bundle);
+ bundle_free(data_bundle);
};
PlatformResult result = common::JsonToBundle(data, &data_bundle);
const JsonCallback& callback) {
ScopeLogger();
- if (nullptr != display_rotation_update_listener) {
+ if (nullptr != display_rotation_update_listener_) {
LoggerD("Native callback already set");
return PlatformResult(ErrorCode::NO_ERROR);
}
ret, get_error_message(ret)));
}
- display_rotation_update_listener = callback;
+ display_rotation_update_listener_ = callback;
return PlatformResult(ErrorCode::NO_ERROR);
}
("mc_client_unset_display_rotation_updated_cb() error: %d, message: %s", ret,
get_error_message(ret)));
}
- display_rotation_update_listener = nullptr;
+ display_rotation_update_listener_ = nullptr;
return PlatformResult(ErrorCode::NO_ERROR);
}
data_o[kDisplayRotation] = picojson::value(display_rotation);
data_o[kName] = picojson::value(server_name);
- client->display_rotation_update_listener(&data);
+ client->display_rotation_update_listener_(&data);
}
void MediaControllerClient::OnEventReceived(const char* server_name, const char* request_id,
ScopeLogger();
auto* client = static_cast<MediaControllerClient*>(user_data);
+ if (!client->custom_event_listener_) {
+ LoggerW("custom_event_listener_ is not set");
+ return;
+ }
+
auto args = picojson::value(picojson::object());
auto& args_obj = args.get<picojson::object>();
args_obj[kEventData] = data_json;
args_obj[kRequestId] = picojson::value(std::string(request_id));
- if (nullptr != client->custom_event_listener_) {
- client->custom_event_listener_(&args);
- } else {
- LoggerW("custom_event_listener_ is not set");
- }
+ client->custom_event_listener_(&args);
}
} // namespace mediacontroller
JsonCallback subtitles_update_listener_;
JsonCallback mode360_update_listener_;
JsonCallback display_mode_update_listener_;
- JsonCallback display_rotation_update_listener;
+ JsonCallback display_rotation_update_listener_;
JsonCallback custom_event_listener_;
std::list<std::string> subscribed_servers;
picojson::object& out) {
ScopeLogger();
if (!server_) {
- LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out,
+ LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occurred."), &out,
("Failed: server_"));
return;
}
picojson::object& out) {
ScopeLogger();
if (!server_) {
- LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out,
+ LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occurred."), &out,
("Failed: server_"));
return;
}
free(request_id);
};
- auto& args_obj = args.get<picojson::object>();
- PlatformResult result = server_->SendEvent(args_obj.at(kEventName).get<std::string>().c_str(),
- args_obj.at(kEventData),
- args_obj.at(kClientName).get<std::string>().c_str(),
- reply_cb, &request_id);
+ PlatformResult result = server_->SendEvent(
+ args.get(kEventName).get<std::string>().c_str(), args.get(kEventData),
+ args.get(kClientName).get<std::string>().c_str(), reply_cb, &request_id);
if (result) {
out[kRequestId] = picojson::value(std::string(request_id));
picojson::object& out) {
ScopeLogger();
if (!client_) {
- LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out,
+ LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occurred."), &out,
("Failed: client_"));
return;
}
const picojson::value& args, picojson::object& out) {
ScopeLogger();
if (!client_) {
- LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out,
+ LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occurred."), &out,
("Failed: client_"));
return;
}
const picojson::value& args, picojson::object& out) {
ScopeLogger();
if (!client_) {
- LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out,
+ LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occurred."), &out,
("Failed: client_"));
return;
}
MediaControllerServer::MediaControllerServer()
: handle_(nullptr),
+ change_request_playback_info_listener_(nullptr),
+ event_reply_callback_(nullptr),
+ command_listener_(nullptr),
+ search_request_listener_(nullptr),
+ subtitles_change_request_listener_(nullptr),
+ mode360_change_request_listener_(nullptr),
+ display_mode_change_request_listener_(nullptr),
+ display_rotation_change_request_listener_(nullptr),
playback_state_(MC_PLAYBACK_STATE_STOPPED),
position_(0ULL),
age_rating_(MC_CONTENT_RATING_ALL),
picojson::value json_data = picojson::value(picojson::object());
auto& json_data_obj = json_data.get<picojson::object>();
- json_data_obj[kResultCode] = picojson::value(static_cast<double>(result_code));
+ json_data_obj[kCode] = picojson::value(static_cast<double>(result_code));
json_data_obj[kClientName] = picojson::value(std::string(client_name));
json_data_obj[kRequestId] = picojson::value(std::string(request_id));
ScopeLogger();
bundle* event_data_bundle = bundle_create();
+ if (!event_data_bundle) {
+ LoggerE("failed to create bundle object");
+ return PlatformResult(ErrorCode::UNKNOWN_ERR, "failed to create bundle object");
+ }
+
SCOPE_EXIT {
- free(event_data_bundle);
+ bundle_free(event_data_bundle);
};
PlatformResult result = common::JsonToBundle(event_data, &event_data_bundle);
JsonCallback change_request_playback_info_listener_;
JsonCallback event_reply_callback_;
+ JsonCallback command_listener_;
+ JsonCallback search_request_listener_;
+ JsonCallback subtitles_change_request_listener_;
+ JsonCallback mode360_change_request_listener_;
+ JsonCallback display_mode_change_request_listener_;
+ JsonCallback display_rotation_change_request_listener_;
mc_playback_states_e playback_state_;
unsigned long long position_;
bool is_repeat_mode_set_;
std::map<std::string, mc_ability_support_e> abilities_;
- JsonCallback command_listener_;
std::map<std::string, mc_playlist_h> playlist_handle_map_;
- JsonCallback search_request_listener_;
static void OnPlaybackActionCommand(const char* client_name, const char* request_id,
mc_playback_action_e action, void* user_data);
const char* playlist_name, const char* index,
mc_playback_action_e action, unsigned long long position,
void* user_data);
- static void OnEventReply(const char* client_name, const char* request_id,
- int result_code, bundle* data, void* user_data);
+ static void OnEventReply(const char* client_name, const char* request_id, int result_code,
+ bundle* data, void* user_data);
static void OnSearchRequestReceived(const char* client_name, const char* request_id,
mc_search_h request, void* user_data);
static void OnCommandReceived(const char* client_name, const char* request_id,
const char* command, bundle* data, void* user_data);
- // subtitles
- JsonCallback subtitles_change_request_listener_;
static void OnSubtitlesChangeCommand(const char* client_name, const char* request_id,
bool enabled, void* user_data);
- // mode360
- JsonCallback mode360_change_request_listener_;
static void OnMode360ChangeCommand(const char* client_name, const char* request_id, bool enabled,
void* user_data);
- // displayMode
- JsonCallback display_mode_change_request_listener_;
static void OnDisplayModeChangeCommand(const char* client_name, const char* request_id,
mc_display_mode_e type, void* user_data);
- // displayRotation
- JsonCallback display_rotation_change_request_listener_;
static void OnDisplayRotationChangeCommand(const char* client_name, const char* request_id,
mc_display_rotation_e type, void* user_data);
};