/**
* @internal
* @file media_controller_internal.h
+ * @brief This file contains the media controller internal API and functions related with handling media control. \n
*/
/*To Support C#*/
+typedef void (*mc_server_playback_state_command_received_cb)(const char* client_name, mc_playback_states_e state, void *user_data);
+
int mc_playlist_create(const char *playlist_name, mc_playlist_h *playlist);
int mc_playlist_update_item(mc_playlist_h playlist, const char *index, mc_meta_e attribute, const char *value);
int mc_server_get_playlist(mc_server_h server, const char *playlist_name, mc_playlist_h *playlist);
+int mc_client_send_playback_state_command(mc_client_h client, const char *server_name, mc_playback_states_e state);
+int mc_server_set_playback_state_command_received_cb(mc_server_h server, mc_server_playback_state_command_received_cb callback, void *user_data);
+int mc_server_unset_playback_state_command_received_cb(mc_server_h server);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
#define MC_DBUS_SIGNAL_NAME_METADATA "metadata"
#define MC_DBUS_SIGNAL_NAME_PLAYBACK_SHUFFLE "shuffle"
#define MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT "repeat"
+#define MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD "pb_state_cmd"
#define MC_DBUS_SIGNAL_NAME_PLAYBACK_ACTION "pb_action_cmd"
#define MC_DBUS_SIGNAL_NAME_PLAYBACK_POS_CMD "pb_position_cmd"
#define MC_DBUS_SIGNAL_NAME_SHUFFLE_CMD "shuffle_cmd"
MC_SERVER_EVENT_CLIENT_CUSTOM, //received event from client
MC_SERVER_EVENT_REPLY_CUSTOM, //received event reply from client
MC_SERVER_EVENT_SEARCH,
+ MC_SERVER_EVENT_PLAYBACK_STATE, //deprecated. use action instead of it.
MC_SERVER_EVENT_MAX,
} mc_server_receive_event_e;
return ret;
}
+int mc_client_send_playback_state_command(mc_client_h client, const char *server_name, mc_playback_states_e state)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *message = NULL;
+ media_controller_client_s *mc_client = (media_controller_client_s *)client;
+
+ mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ mc_retvm_if(!MC_STRING_VALID(server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+ mc_retvm_if(((state < MC_PLAYBACK_STATE_PLAYING) || (state > MC_PLAYBACK_STATE_REWINDING)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "state is invalid");
+
+ message = g_strdup_printf("%s%s%d", mc_client->client_name, MC_STRING_DELIMITER, state);
+ mc_retvm_if(message == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail making message [%d]", ret);
+
+ ret = __mc_client_send_command(client, server_name, MC_COMMAND_PLAYBACKSTATE, NULL, MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD, message, NULL);
+
+ MC_SAFE_G_FREE(message);
+
+ return ret;
+}
+
int mc_client_send_playback_action_cmd(mc_client_h client, const char *server_name, mc_playback_action_e action, char **request_id)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
#define MAX_PLAYLIST_LEN 100
#define MAX_INPUT_STR_LEN 4096
+static void __server_playback_state_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
static void __server_playback_action_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
static void __server_playback_position_cmd_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
static void __server_shuffle_mode_cmd_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
{MC_DBUS_SIGNAL_NAME_CUSTOM_CMD, __server_custom_cmd_cb},
{MC_DBUS_SIGNAL_NAME_EVENT_REPLY, __server_event_reply_received_cb},
{MC_DBUS_SIGNAL_NAME_SEARCH_CMD, __server_search_cmd_cb},
+ {MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD, __server_playback_state_command_cb},
};
static int __mc_server_create(media_controller_server_s **mc_server)
return ret;
}
+static void __server_playback_state_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ gchar **params = NULL;
+ media_controller_receiver_s *receiver = (media_controller_receiver_s *)user_data;
+ int value = 0;
+
+ mc_retm_if(receiver == NULL, "reciever is NULL");
+ mc_retm_if(message == NULL, "message is NULL");
+
+ mc_server_playback_state_command_received_cb callback = receiver->callback;
+ mc_retm_if(receiver->callback == NULL, "playback_state_command_received_cb is NULL");
+
+ mc_debug("__server_playback_state_command_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+ params = g_strsplit(message, MC_STRING_DELIMITER, 0);
+ mc_retm_if(params == NULL, "invalid playback state command");
+
+ if (mc_util_get_command_available(MC_PRIV_TYPE_SERVER, params[0], MC_COMMAND_PLAYBACKSTATE, NULL) != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Error permission denied");
+ g_strfreev(params);
+ return;
+ }
+
+ if (mc_safe_strtoi(params[1], &value) != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Error get recieved value");
+ g_strfreev(params);
+ return;
+ }
+
+ callback(params[0], (mc_playback_states_e)value, receiver->user_data);
+
+ g_strfreev(params);
+}
+
static void __server_playback_action_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
{
gchar **params = NULL;
return ret;
}
+int mc_server_set_playback_state_command_received_cb(mc_server_h server, mc_server_playback_state_command_received_cb callback, void *user_data)
+{
+ return __mc_server_set_updated_cb(server, MC_SERVER_EVENT_PLAYBACK_STATE, callback, user_data);
+}
+
+int mc_server_unset_playback_state_command_received_cb(mc_server_h server)
+{
+ return __mc_server_unset_updated_cb(server, MC_SERVER_EVENT_PLAYBACK_STATE);
+}
+
int mc_server_set_playback_action_cmd_received_cb(mc_server_h server, mc_server_playback_action_cmd_received_cb callback, void *user_data)
{
return __mc_server_set_updated_cb(server, MC_SERVER_EVENT_PLAYBACK_ACTION, callback, user_data);