REPEAT_ALL: "REPEAT_ALL"
};
+var MediaControllerContentAgeRating = {
+ ALL: "ALL",
+ ONE: "1",
+ TWO: "2",
+ THREE: "3",
+ FOUR: "4",
+ FIVE: "5",
+ SIX: "6",
+ SEVEN: "7",
+ EIGHT: "8",
+ NINE: "9",
+ TEN: "10",
+ ELEVEN: "11",
+ TWELVE: "12",
+ THIRTEEN: "13",
+ FOURTEEN: "14",
+ FIFTEEN: "15",
+ SIXTEEN: "16",
+ SEVENTEEN: "17",
+ EIGHTEEN: "18",
+ NINETEEN: "19"
+};
+
function MediaControllerManager() {}
MediaControllerManager.prototype.getClient = function() {
var _shuffleMode = false;
var _repeatMode = false;
var _repeatState = MediaControllerRepeatState.REPEAT_OFF;
+ var _ageRating = MediaControllerContentAgeRating.ALL;
var _metadata = new MediaControllerMetadata();
Object.defineProperties(this, {
state: {
},
enumerable: true
},
+ ageRating: {
+ get: function() {
+ return _ageRating;
+ },
+ set: function(v) {
+ _ageRating = edit_.isAllowed && v ? v : _ageRating;
+ },
+ enumerable: true
+ },
shuffleMode: {
get: function() {
return _shuffleMode;
edit_.disallow();
};
+MediaControllerServer.prototype.updatePlaybackAgeRating = function(rating) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'rating', type: types_.ENUM, values: Object.values(MediaControllerContentAgeRating)}
+ ]);
+
+ var data = {
+ rating: args.rating
+ };
+
+ var result = native_.callSync('MediaControllerServer_updatePlaybackAgeRating', data);
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ }
+
+ edit_.allow();
+ this.playbackInfo.ageRating = args.rating;
+ edit_.disallow();
+};
+
MediaControllerServer.prototype.updateShuffleMode = function(mode) {
var args = validator_.validateArgs(arguments, [
{name: 'mode', type: types_.BOOLEAN}
int ret = mc_client_unset_cmd_reply_received_cb(handle_);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
- LoggerE("Failed to unset cmd reply callback. Error code: %d; Error message: %s",
- ret, get_error_message(ret));
+ LoggerE("Failed to unset cmd reply callback. Error code: %d; Error message: %s", ret,
+ get_error_message(ret));
}
if (nullptr != server_status_listener_ && !UnsetServerStatusChangeListener()) {
ret = mc_client_set_cmd_reply_received_cb(handle_, OnCommandReply, this);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
- return LogAndCreateResult(
- ErrorCode::UNKNOWN_ERR, "Unable to register cmd reply received callback",
- ("mc_client_set_cmd_reply_received_cb() error: %d, message: %s", ret, get_error_message(ret)));
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR,
+ "Unable to register cmd reply received callback",
+ ("mc_client_set_cmd_reply_received_cb() error: %d, message: %s", ret,
+ get_error_message(ret)));
}
return PlatformResult(ErrorCode::NO_ERROR);
return result;
}
+ // content age rating
+ std::string rating;
+ result = Types::ConvertContentAgeRating(playback_h, &rating);
+ if (!result) {
+ LoggerE("ConvertContentAgeRating failed, error: %s", result.message().c_str());
+ return result;
+ }
+
// shuffle mode
mc_shuffle_mode_e shuffle;
ret = mc_client_get_server_shuffle_mode(handle_, server_name.c_str(), &shuffle);
// fill return object
(*playback_info)["state"] = picojson::value(state);
(*playback_info)["position"] = picojson::value(position);
+ (*playback_info)["ageRating"] = picojson::value(rating);
(*playback_info)["shuffleMode"] = picojson::value(shuffle == MC_SHUFFLE_MODE_ON);
(*playback_info)["repeatMode"] = picojson::value(repeat == MC_REPEAT_MODE_ON);
(*playback_info)["metadata"] = metadata;
("bundle_add(data) error: %d, message: %s", ret, get_error_message(ret)));
}
- ret = mc_client_send_custom_cmd(handle_, server_name.c_str(), command.c_str(), bundle, request_id);
+ ret =
+ mc_client_send_custom_cmd(handle_, server_name.c_str(), command.c_str(), bundle, &request_id);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
return LogAndCreateResult(
ErrorCode::UNKNOWN_ERR, "Error sending custom command",
static void OnServerStatusUpdate(const char* server_name, mc_server_state_e state,
void* user_data);
- static void OnCommandReply(const char* server_name, const char* request_id,
- int result_code, bundle* bundle, void* user_data);
+ static void OnCommandReply(const char* server_name, const char* request_id, int result_code,
+ bundle* bundle, void* user_data);
static void OnPlaybackUpdate(const char* server_name, mc_playback_h playback, void* user_data);
static void OnShuffleModeUpdate(const char* server_name, mc_shuffle_mode_e mode, void* user_data);
static void OnRepeatModeUpdate(const char* server_name, mc_repeat_mode_e mode, void* user_data);
MediaControllerServerUpdatePlaybackState);
REGISTER_SYNC("MediaControllerServer_updatePlaybackPosition",
MediaControllerServerUpdatePlaybackPosition);
+ REGISTER_SYNC("MediaControllerServer_updatePlaybackAgeRating",
+ MediaControllerServerUpdatePlaybackAgeRating);
REGISTER_SYNC("MediaControllerServer_updateRepeatMode", MediaControllerServerUpdateRepeatMode);
REGISTER_SYNC("MediaControllerServer_updateRepeatState", MediaControllerServerUpdateRepeatState);
REGISTER_SYNC("MediaControllerServer_updateShuffleMode", MediaControllerServerUpdateShuffleMode);
ReportSuccess(out);
}
+void MediaControllerInstance::MediaControllerServerUpdatePlaybackAgeRating(
+ const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+ if (!server_) {
+ LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Server handle not initialized."),
+ &out, ("Failed: server_"));
+ return;
+ }
+
+ CHECK_EXIST(args, "rating", out)
+
+ const std::string& rating = args.get("rating").get<std::string>();
+ const PlatformResult& result = server_->SetContentAgeRating(rating);
+ if (!result) {
+ LogAndReportError(result, &out, ("Failed: server_->SetContentAgeRating()"));
+ return;
+ }
+
+ ReportSuccess(out);
+}
+
void MediaControllerInstance::MediaControllerServerUpdateShuffleMode(const picojson::value& args,
picojson::object& out) {
ScopeLogger();
void MediaControllerServerUpdatePlaybackState(const picojson::value& args, picojson::object& out);
void MediaControllerServerUpdatePlaybackPosition(const picojson::value& args,
picojson::object& out);
+ void MediaControllerServerUpdatePlaybackAgeRating(const picojson::value& args,
+ picojson::object& out);
void MediaControllerServerUpdateRepeatMode(const picojson::value& args, picojson::object& out);
void MediaControllerServerUpdateRepeatState(const picojson::value& args, picojson::object& out);
void MediaControllerServerUpdateShuffleMode(const picojson::value& args, picojson::object& out);
: handle_(nullptr),
playback_state_(MC_PLAYBACK_STATE_STOPPED),
position_(0ULL),
+ age_rating_(MC_CONTENT_RATING_ALL),
shuffle_mode_(MC_SHUFFLE_MODE_OFF),
repeat_mode_(MC_REPEAT_MODE_OFF),
is_shuffle_mode_set_(false),
return PlatformResult(ErrorCode::NO_ERROR);
}
+PlatformResult MediaControllerServer::SetContentAgeRating(const std::string& rating) {
+ ScopeLogger();
+
+ int rating_int = static_cast<int>(MC_CONTENT_RATING_ALL);
+ PlatformResult result =
+ Types::StringToPlatformEnum(Types::kMediaControllerContentAgeRating, rating, &rating_int);
+
+ if (!result) {
+ return result;
+ }
+
+ int ret =
+ mc_server_set_content_age_rating(handle_, static_cast<mc_content_age_rating_e>(rating_int));
+ if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
+ return LogAndCreateResult(
+ ErrorCode::UNKNOWN_ERR, "Error setting content age rating",
+ ("mc_server_set_content_age_rating() error: %d, message: %s", ret, get_error_message(ret)));
+ }
+
+ age_rating_ = static_cast<mc_content_age_rating_e>(rating_int);
+
+ ret = mc_server_update_playback_info(handle_);
+ if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
+ return LogAndCreateResult(
+ ErrorCode::UNKNOWN_ERR, "Error updating playback info",
+ ("mc_server_update_playback_info() error: %d, message: %s", ret, get_error_message(ret)));
+ }
+
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
PlatformResult MediaControllerServer::SetShuffleMode(bool mode) {
ScopeLogger();
}
void MediaControllerServer::OnCommandReceived(const char* client_name, const char* request_id,
- const char* command, bundle* bundle, void* user_data) {
+ const char* command, bundle* bundle,
+ void* user_data) {
ScopeLogger();
MediaControllerServer* server = static_cast<MediaControllerServer*>(user_data);
int ret = mc_server_set_custom_cmd_received_cb(handle_, OnCommandReceived, this);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unable to set command callback",
- ("mc_server_set_custom_cmd_received_cb() error: %d, message: %s",
- ret, get_error_message(ret)));
+ ("mc_server_set_custom_cmd_received_cb() error: %d, message: %s", ret,
+ get_error_message(ret)));
}
command_listener_ = callback;
common::PlatformResult Init();
common::PlatformResult SetPlaybackState(const std::string& state);
common::PlatformResult SetPlaybackPosition(double position);
+ common::PlatformResult SetContentAgeRating(const std::string& rating);
common::PlatformResult SetShuffleMode(bool mode);
common::PlatformResult SetRepeatMode(bool mode);
common::PlatformResult SetRepeatState(const std::string& state);
JsonCallback change_request_playback_info_listener_;
mc_playback_states_e playback_state_;
unsigned long long position_;
+ mc_content_age_rating_e age_rating_;
mc_shuffle_mode_e shuffle_mode_;
mc_repeat_mode_e repeat_mode_;
bool is_shuffle_mode_set_;
const std::string Types::kMediaControllerPlaybackAction = "MediaControllerPlaybackAction";
const std::string Types::kMediaControllerMetadataAttribute = "MediaControllerMetadataAttribute";
const std::string Types::kMediaControllerRepeatState = "MediaControllerRepeatState";
-
-const PlatformEnumMap Types::platform_enum_map_ = {{kMediaControllerServerState,
- {{"NONE", MC_SERVER_STATE_NONE},
- {"ACTIVE", MC_SERVER_STATE_ACTIVATE},
- {"INACTIVE", MC_SERVER_STATE_DEACTIVATE}}},
- {kMediaControllerPlaybackState,
- {{"PLAY", MC_PLAYBACK_STATE_PLAYING},
- {"PAUSE", MC_PLAYBACK_STATE_PAUSED},
- {"STOP", MC_PLAYBACK_STATE_STOPPED},
- {"NEXT", MC_PLAYBACK_STATE_MOVING_TO_NEXT},
- {"PREV", MC_PLAYBACK_STATE_MOVING_TO_PREVIOUS},
- {"FORWARD", MC_PLAYBACK_STATE_FAST_FORWARDING},
- {"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},
- {"album", MC_META_MEDIA_ALBUM},
- {"author", MC_META_MEDIA_AUTHOR},
- {"genre", MC_META_MEDIA_GENRE},
- {"duration", MC_META_MEDIA_DURATION},
- {"date", MC_META_MEDIA_DATE},
- {"copyright", MC_META_MEDIA_COPYRIGHT},
- {"description", MC_META_MEDIA_DESCRIPTION},
- {"trackNum", MC_META_MEDIA_TRACK_NUM},
- {"picture", MC_META_MEDIA_PICTURE}}},
- {kMediaControllerRepeatState,
- {{"REPEAT_OFF", MC_REPEAT_MODE_OFF},
- {"REPEAT_ONE", MC_REPEAT_MODE_ONE_MEDIA},
- {"REPEAT_ALL", MC_REPEAT_MODE_ON}}}};
+const std::string Types::kMediaControllerContentAgeRating = "MediaControllerContentAgeRationg";
+
+const PlatformEnumMap Types::platform_enum_map_ = {
+ {kMediaControllerServerState,
+ {{"NONE", MC_SERVER_STATE_NONE},
+ {"ACTIVE", MC_SERVER_STATE_ACTIVATE},
+ {"INACTIVE", MC_SERVER_STATE_DEACTIVATE}}},
+ {kMediaControllerPlaybackState,
+ {{"PLAY", MC_PLAYBACK_STATE_PLAYING},
+ {"PAUSE", MC_PLAYBACK_STATE_PAUSED},
+ {"STOP", MC_PLAYBACK_STATE_STOPPED},
+ {"NEXT", MC_PLAYBACK_STATE_MOVING_TO_NEXT},
+ {"PREV", MC_PLAYBACK_STATE_MOVING_TO_PREVIOUS},
+ {"FORWARD", MC_PLAYBACK_STATE_FAST_FORWARDING},
+ {"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},
+ {"album", MC_META_MEDIA_ALBUM},
+ {"author", MC_META_MEDIA_AUTHOR},
+ {"genre", MC_META_MEDIA_GENRE},
+ {"duration", MC_META_MEDIA_DURATION},
+ {"date", MC_META_MEDIA_DATE},
+ {"copyright", MC_META_MEDIA_COPYRIGHT},
+ {"description", MC_META_MEDIA_DESCRIPTION},
+ {"trackNum", MC_META_MEDIA_TRACK_NUM},
+ {"picture", MC_META_MEDIA_PICTURE}}},
+ {kMediaControllerRepeatState,
+ {{"REPEAT_OFF", MC_REPEAT_MODE_OFF},
+ {"REPEAT_ONE", MC_REPEAT_MODE_ONE_MEDIA},
+ {"REPEAT_ALL", MC_REPEAT_MODE_ON}}},
+ {kMediaControllerContentAgeRating,
+ {
+ {"ALL", MC_CONTENT_RATING_ALL}, {"1", MC_CONTENT_RATING_1_PLUS},
+ {"2", MC_CONTENT_RATING_2_PLUS}, {"3", MC_CONTENT_RATING_3_PLUS},
+ {"4", MC_CONTENT_RATING_4_PLUS}, {"5", MC_CONTENT_RATING_5_PLUS},
+ {"6", MC_CONTENT_RATING_6_PLUS}, {"7", MC_CONTENT_RATING_7_PLUS},
+ {"8", MC_CONTENT_RATING_8_PLUS}, {"9", MC_CONTENT_RATING_9_PLUS},
+ {"10", MC_CONTENT_RATING_10_PLUS}, {"11", MC_CONTENT_RATING_11_PLUS},
+ {"12", MC_CONTENT_RATING_12_PLUS}, {"13", MC_CONTENT_RATING_13_PLUS},
+ {"14", MC_CONTENT_RATING_14_PLUS}, {"15", MC_CONTENT_RATING_15_PLUS},
+ {"16", MC_CONTENT_RATING_16_PLUS}, {"17", MC_CONTENT_RATING_17_PLUS},
+ {"18", MC_CONTENT_RATING_18_PLUS}, {"19", MC_CONTENT_RATING_19_PLUS},
+ }}};
PlatformEnumReverseMap Types::platform_enum_reverse_map_ = {};
return PlatformResult(ErrorCode::NO_ERROR);
}
+PlatformResult Types::ConvertContentAgeRating(mc_playback_h playback_h, std::string* rating) {
+ ScopeLogger();
+
+ mc_content_age_rating_e rating_e = MC_CONTENT_RATING_ALL;
+ int ret = mc_client_get_age_rating(playback_h, &rating_e);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ return LogAndCreateResult(
+ ErrorCode::UNKNOWN_ERR, "Error getting content age rating",
+ ("mc_client_get_age_rating() error: %d, message: %s", ret, get_error_message(ret)));
+ }
+
+ PlatformResult result = Types::PlatformEnumToString(Types::kMediaControllerContentAgeRating,
+ static_cast<int>(rating_e), rating);
+
+ if (!result) {
+ LoggerE("PlatformEnumToString failed, error: %s", result.message().c_str());
+ return result;
+ }
+
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
PlatformResult Types::ConvertPlaybackPosition(mc_playback_h playback_h, double* position) {
ScopeLogger();
static const std::string kMediaControllerPlaybackAction;
static const std::string kMediaControllerMetadataAttribute;
static const std::string kMediaControllerRepeatState;
+ static const std::string kMediaControllerContentAgeRating;
- static common::PlatformResult GetPlatformEnumMap(
- const std::string& type, std::map<std::string, int> const** platform_str);
+ static common::PlatformResult GetPlatformEnumMap(const std::string& type,
+ std::map<std::string, int> const** platform_str);
static common::PlatformResult StringToPlatformEnum(const std::string& type,
const std::string& value, int* platform_enum);
std::string* platform_str);
static common::PlatformResult ConvertPlaybackState(mc_playback_h playback_h, std::string* state);
+ static common::PlatformResult ConvertContentAgeRating(mc_playback_h playback_h,
+ std::string* state);
+
static common::PlatformResult ConvertPlaybackPosition(mc_playback_h playback_h, double* position);
static common::PlatformResult ConvertMetadata(mc_metadata_h metadata_h,
picojson::object* metadata);