ScopeLogger();
int ret;
- mc_metadata_h metadata_h;
+ mc_metadata_h metadata_h = nullptr;
ret = mc_client_get_server_metadata(handle_, server_name.c_str(), &metadata_h);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
return LogAndCreateResult(
}
SCOPE_EXIT {
- mc_client_destroy_metadata(metadata_h);
+ mc_metadata_destroy(metadata_h);
};
PlatformResult result = Types::ConvertMetadata(metadata_h, metadata);
PlatformResult MediaControllerClient::SetServerStatusChangeListener(const JsonCallback& callback) {
ScopeLogger();
- int ret = mc_client_set_server_update_cb(handle_, OnServerStatusUpdate, this);
+ int ret = mc_client_set_server_updated_cb(handle_, OnServerStatusUpdate, this);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
return LogAndCreateResult(
ErrorCode::UNKNOWN_ERR, "Unable to set server status listener",
- ("mc_client_set_server_update_cb() error: %d, message: %s", ret, get_error_message(ret)));
+ ("mc_client_set_server_updated_cb() error: %d, message: %s", ret, get_error_message(ret)));
}
server_status_listener_ = callback;
PlatformResult MediaControllerClient::UnsetServerStatusChangeListener() {
ScopeLogger();
- int ret = mc_client_unset_server_update_cb(handle_);
+ int ret = mc_client_unset_server_updated_cb(handle_);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
- return LogAndCreateResult(
- ErrorCode::UNKNOWN_ERR, "Unable to unset server status listener",
- ("mc_client_unset_server_update_cb() error: %d, message: %s", ret, get_error_message(ret)));
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unable to unset server status listener",
+ ("mc_client_unset_server_updated_cb() error: %d, message: %s", ret,
+ get_error_message(ret)));
}
server_status_listener_ = nullptr;
return PlatformResult(ErrorCode::NO_ERROR);
// The purpose of this lambda is to unset as many setters as we can in case of failure.
int (*unsetters[])(mc_client_h) = {
- mc_client_unset_playback_update_cb, mc_client_unset_shuffle_mode_update_cb,
- mc_client_unset_repeat_mode_update_cb,
- /*mc_client_unset_metadata_update_cb the last unsetter will never be used*/};
+ mc_client_unset_playback_updated_cb, mc_client_unset_shuffle_mode_updated_cb,
+ mc_client_unset_repeat_mode_updated_cb,
+ /*mc_client_unset_metadata_updated_cb the last unsetter will never be used*/};
// This loop is no-op in case of success.
for (int i = 0; i < failed_setter; ++i) {
}
};
- int ret = mc_client_set_playback_update_cb(handle_, OnPlaybackUpdate, this);
+ int ret = mc_client_set_playback_updated_cb(handle_, OnPlaybackUpdate, this);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
- return LogAndCreateResult(
- ErrorCode::UNKNOWN_ERR, "Unable to register playback listener",
- ("mc_client_set_playback_update_cb() error: %d, message: %s", ret, get_error_message(ret)));
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unable to register playback listener",
+ ("mc_client_set_playback_updated_cb() error: %d, message: %s", ret,
+ get_error_message(ret)));
}
- ret = mc_client_set_shuffle_mode_update_cb(handle_, OnShuffleModeUpdate, this);
+ ret = mc_client_set_shuffle_mode_updated_cb(handle_, OnShuffleModeUpdate, this);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
failed_setter = 1;
return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unable to register shuffle mode listener",
- ("mc_client_set_shuffle_mode_update_cb() error: %d, message: %s", ret,
- get_error_message(ret)));
+ ("mc_client_set_shuffle_mode_updated_cb() error: %d, message: %s",
+ ret, get_error_message(ret)));
}
- ret = mc_client_set_repeat_mode_update_cb(handle_, OnRepeatModeUpdate, this);
+ ret = mc_client_set_repeat_mode_updated_cb(handle_, OnRepeatModeUpdate, this);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
failed_setter = 2;
return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unable to register repeat mode listener",
- ("mc_client_set_repeat_mode_update_cb() error: %d, message: %s", ret,
+ ("mc_client_set_repeat_mode_updated_cb() error: %d, message: %s", ret,
get_error_message(ret)));
}
- ret = mc_client_set_metadata_update_cb(handle_, OnMetadataUpdate, this);
+ ret = mc_client_set_metadata_updated_cb(handle_, OnMetadataUpdate, this);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
failed_setter = 3;
- return LogAndCreateResult(
- ErrorCode::UNKNOWN_ERR, "Unable to register metadata listener",
- ("mc_client_set_metadata_update_cb() error: %d, message: %s", ret, get_error_message(ret)));
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unable to register metadata listener",
+ ("mc_client_set_metadata_updated_cb() error: %d, message: %s", ret,
+ get_error_message(ret)));
}
playback_info_listener_ = callback;
// In the Javascript layer, the removePlaybackInfoChangeListener() method always succeeds, so we
// do not need to catch the returned value.
- mc_client_unset_playback_update_cb(handle_);
- mc_client_unset_shuffle_mode_update_cb(handle_);
- mc_client_unset_repeat_mode_update_cb(handle_);
- mc_client_unset_metadata_update_cb(handle_);
+ mc_client_unset_playback_updated_cb(handle_);
+ mc_client_unset_shuffle_mode_updated_cb(handle_);
+ mc_client_unset_repeat_mode_updated_cb(handle_);
+ mc_client_unset_metadata_updated_cb(handle_);
playback_info_listener_ = nullptr;
const std::string& state) {
ScopeLogger();
int state_e;
+ // In Native API, since Tizen 5.0 an action instead of a state is sent to change the state of a
+ // server. In Web API the names were not refactored.
PlatformResult result =
- Types::StringToPlatformEnum(Types::kMediaControllerPlaybackState, state, &state_e);
+ Types::StringToPlatformEnum(Types::kMediaControllerPlaybackAction, state, &state_e);
if (!result) {
return result;
}
+ /* TODO: Prepare an ACR and propose use case for request_id.
+ char* request_id = nullptr;
+ SCOPE_EXIT {
+ free(request_id);
+ };*/
int ret;
- ret = mc_client_send_playback_state_command(handle_, server_name.c_str(),
- static_cast<mc_playback_states_e>(state_e));
+ ret = mc_client_send_playback_action_cmd(handle_, server_name.c_str(),
+ static_cast<mc_playback_action_e>(state_e),
+ /*&request_id*/ nullptr);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Error sending playback state",
- ("mc_client_send_playback_state_command() error: %d, message: %s",
- ret, get_error_message(ret)));
+ ("mc_client_send_playback_action_cmd() error: %d, message: %s", ret,
+ get_error_message(ret)));
}
return PlatformResult(ErrorCode::NO_ERROR);
// The purpose of this lambda is to unset as many setters as we can in case of failure.
int (*unsetters[])(mc_server_h) = {
- mc_server_unset_playback_state_command_received_cb,
+ mc_server_unset_playback_action_cmd_received_cb,
mc_server_unset_playback_position_cmd_received_cb,
mc_server_unset_shuffle_mode_cmd_received_cb,
/*mc_server_unset_repeat_mode_cmd_received_cb the last unsetter will never be used*/};
}
};
- int ret = mc_server_set_playback_state_command_received_cb(handle_, OnPlaybackStateCommand, this);
+ // In Native API, since Tizen 5.0 an action instead of a state is sent to change the state of a
+ // server. In Web API the names were not refactored.
+ int ret = mc_server_set_playback_action_cmd_received_cb(handle_, OnPlaybackActionCommand, this);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
return LogAndCreateResult(
ErrorCode::UNKNOWN_ERR, "Unable to set playback state command listener",
- ("mc_server_set_playback_state_command_received_cb() error: %d, message: %s", ret,
+ ("mc_server_set_playback_action_cmd_received_cb() error: %d, message: %s", ret,
get_error_message(ret)));
}
PlatformResult MediaControllerServer::UnsetChangeRequestPlaybackInfoListener() {
ScopeLogger();
- int ret = mc_server_unset_playback_state_command_received_cb(handle_);
+ int ret = mc_server_unset_playback_action_cmd_received_cb(handle_);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
return LogAndCreateResult(
ErrorCode::UNKNOWN_ERR, "Unable to unset playback state command listener",
- ("mc_server_unset_playback_state_command_received_cb() error: %d, message: %s", ret,
+ ("mc_server_unset_playback_action_cmd_received_cb() error: %d, message: %s", ret,
get_error_message(ret)));
}
return PlatformResult(ErrorCode::NO_ERROR);
}
-void MediaControllerServer::OnPlaybackStateCommand(const char* client_name,
- mc_playback_states_e state_e, void* user_data) {
+void MediaControllerServer::OnPlaybackActionCommand(const char* client_name, const char* request_id,
+ mc_playback_action_e action, void* user_data) {
ScopeLogger();
MediaControllerServer* server = static_cast<MediaControllerServer*>(user_data);
- if (server->playback_state_ == state_e) {
- LoggerD("The media playback state did not change, skipping");
+ // Here, we need to convert mc_playback_action_e enum to mc_playback_states_e enum.
+ std::string state;
+ PlatformResult result = Types::PlatformEnumToString(Types::kMediaControllerPlaybackAction,
+ static_cast<int>(action), &state);
+ if (!result) {
+ LoggerW("PlatformEnumToString failed, error: %s", result.message().c_str());
return;
}
-
- std::string state;
- PlatformResult result = Types::PlatformEnumToString(Types::kMediaControllerPlaybackState,
- static_cast<int>(state_e), &state);
+ int state_e = 0;
+ result = Types::StringToPlatformEnum(Types::kMediaControllerPlaybackState, state, &state_e);
if (!result) {
LoggerE("PlatformEnumToString failed, error: %s", result.message().c_str());
return;
}
+ if (server->playback_state_ == state_e) {
+ LoggerD("The media playback state did not change, skipping");
+ return;
+ }
+
picojson::value data = picojson::value(picojson::object());
picojson::object& data_o = data.get<picojson::object>();
JsonCallback command_listener_;
- static void OnPlaybackStateCommand(const char* client_name, mc_playback_states_e state_e,
- void* user_data);
+ static void OnPlaybackActionCommand(const char* client_name, const char* request_id,
+ mc_playback_action_e action, void* user_data);
static void OnPlaybackPositionCommand(const char* client_name, const char* request_id,
unsigned long long position, void* user_data);
static void OnShuffleModeCommand(const char* client_name, const char* request_id,
const std::string Types::kMediaControllerServerState = "MediaControllerServerState";
const std::string Types::kMediaControllerPlaybackState = "MediaControllerPlaybackState";
+const std::string Types::kMediaControllerPlaybackAction = "MediaControllerPlaybackAction";
const std::string Types::kMediaControllerMetadataAttribute = "MediaControllerMetadataAttribute";
const PlatformEnumMap Types::platform_enum_map_ = {{kMediaControllerServerState,
{{"PLAY", MC_PLAYBACK_STATE_PLAYING},
{"PAUSE", MC_PLAYBACK_STATE_PAUSED},
{"STOP", MC_PLAYBACK_STATE_STOPPED},
+ // Deprecated values of MC_PLAYBACK_STATE enum
+ // still have to be supported, because native
+ // applications/API might still use them.
{"NEXT", MC_PLAYBACK_STATE_NEXT_FILE},
+ {"NEXT", MC_PLAYBACK_STATE_MOVING_TO_NEXT},
{"PREV", MC_PLAYBACK_STATE_PREV_FILE},
+ {"PREV", MC_PLAYBACK_STATE_MOVING_TO_PREVIOUS},
{"FORWARD", MC_PLAYBACK_STATE_FAST_FORWARD},
- {"REWIND", MC_PLAYBACK_STATE_REWIND}}},
+ {"FORWARD", MC_PLAYBACK_STATE_FAST_FORWARDING},
+ {"REWIND", MC_PLAYBACK_STATE_REWIND},
+ {"REWIND", MC_PLAYBACK_STATE_REWINDING}}},
+ {kMediaControllerPlaybackAction,
+ {{"PLAY", MC_PLAYBACK_ACTION_PLAY},
+ {"PAUSE", MC_PLAYBACK_ACTION_PAUSE},
+ {"STOP", MC_PLAYBACK_ACTION_STOP},
+ {"NEXT", MC_PLAYBACK_ACTION_NEXT},
+ {"PREV", MC_PLAYBACK_ACTION_PREV},
+ {"FORWARD", MC_PLAYBACK_ACTION_FAST_FORWARD},
+ {"REWIND", MC_PLAYBACK_ACTION_REWIND}}},
{kMediaControllerMetadataAttribute,
{{"title", MC_META_MEDIA_TITLE},
{"artist", MC_META_MEDIA_ARTIST},
PlatformEnumReverseMap Types::platform_enum_reverse_map_ = {};
PlatformResult Types::GetPlatformEnumMap(const std::string& type,
- std::map<std::string, int>* enum_map) {
+ std::multimap<std::string, int> const** enum_map) {
ScopeLogger();
auto iter = platform_enum_map_.find(type);
std::string("Undefined platform enum type ") + type);
}
- *enum_map = platform_enum_map_.at(type);
+ *enum_map = &iter->second;
return PlatformResult(ErrorCode::NO_ERROR);
}
int* platform_enum) {
ScopeLogger();
- std::map<std::string, int> def;
+ std::multimap<std::string, int> const* def = nullptr;
PlatformResult result = GetPlatformEnumMap(type, &def);
if (!result) {
return result;
}
- auto def_iter = def.find(value);
- if (def_iter != def.end()) {
+ auto def_iter = def->find(value);
+ if (def_iter != def->end()) {
*platform_enum = def_iter->second;
return PlatformResult(ErrorCode::NO_ERROR);
}
PlatformResult Types::ConvertMetadata(mc_metadata_h metadata_h, picojson::object* metadata) {
ScopeLogger();
- std::map<std::string, int> metadata_fields;
+ std::multimap<std::string, int> const* metadata_fields = nullptr;
PlatformResult result =
GetPlatformEnumMap(Types::kMediaControllerMetadataAttribute, &metadata_fields);
if (!result) {
free(value);
};
- for (auto& field : metadata_fields) {
- int ret = mc_client_get_metadata(metadata_h, static_cast<mc_meta_e>(field.second), &value);
+ for (auto& field : *metadata_fields) {
+ int ret = mc_metadata_get(metadata_h, static_cast<mc_meta_e>(field.second), &value);
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Error getting metadata",
- ("mc_client_get_metadata(%s) error: %d, message: %s",
- field.first.c_str(), ret, get_error_message(ret)));
+ ("mc_metadata_get(%s) error: %d, message: %s", field.first.c_str(),
+ ret, get_error_message(ret)));
}
(*metadata)[field.first] = picojson::value(std::string(value ? value : ""));
namespace extension {
namespace mediacontroller {
-typedef std::map<std::string, std::map<std::string, int>> PlatformEnumMap;
+typedef std::map<std::string, std::multimap<std::string, int>> PlatformEnumMap;
typedef std::map<std::string, std::map<int, std::string>> PlatformEnumReverseMap;
typedef std::function<void(picojson::value*)> JsonCallback;
public:
static const std::string kMediaControllerServerState;
static const std::string kMediaControllerPlaybackState;
+ static const std::string kMediaControllerPlaybackAction;
static const std::string kMediaControllerMetadataAttribute;
- static common::PlatformResult GetPlatformEnumMap(const std::string& type,
- std::map<std::string, int>* platform_str);
+ static common::PlatformResult GetPlatformEnumMap(
+ const std::string& type, std::multimap<std::string, int> const** platform_str);
static common::PlatformResult StringToPlatformEnum(const std::string& type,
const std::string& value, int* platform_enum);