IF(ON_DEMAND_SOCKET_ACTIVATION)
ADD_DEFINITIONS("-D_ON_DEMAND_SOCKET_ACTIVATION")
ENDIF(ON_DEMAND_SOCKET_ACTIVATION)
+IF(TIZEN_FEATURE_COMPATIBILITY)
+ADD_DEFINITIONS("-DTIZEN_FEATURE_COMPATIBILITY")
+ENDIF(TIZEN_FEATURE_COMPATIBILITY)
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIB_INSTALL_DIR}")
#define MC_DBUS_SIGNAL_NAME_SHUFFLE_ABILITY "shuffle_ability"
#define MC_DBUS_SIGNAL_NAME_REPEAT_ABILITY "repeat_ability"
#define MC_DBUS_SIGNAL_NAME_SEARCH_CMD "search_cmd"
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+#define MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD "pb_state_cmd"
+#define MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND "custom_command"
+#define MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND_REPLY "custom_command_reply"
+#endif
-
-#define MC_COMMAND_PLAYBACKSTATE "_pb_state_cmd_"
#define MC_COMMAND_PLAYBACKACTION "_pb_action_cmd_"
#define MC_COMMAND_PLAYBACKPOSITION "_pb_position_cmd_"
#define MC_COMMAND_SHUFFLE "_shuffle_cmd_"
#define MC_COMMAND_REPEAT "_repeat_cmd_"
-#define MC_COMMAND_CUSTOM "_custom_cmd_"
#define MC_COMMAND_PLAY_PLAYLIST "_playlist_cmd_"
#define MC_COMMAND_CUSTOMACTION "_custom_action_"
#define MC_COMMAND_CMDREPLY "_cmd_reply_"
#define MC_COMMAND_SEARCH "_search_cmd_"
-
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+#define MC_COMMAND_PLAYBACKSTATE "_pb_state_cmd_"
+#define MC_COMMAND_CUSTOM "_custom_cmd_"
+#endif
#define MC_EVENT_CUSTOM "_custom_event_"
#define MC_EVENT_REPLY "_event_reply_"
MC_CLIENT_EVENT_REPEAT_ABILITY = MC_SUBSCRIPTION_TYPE_REPEAT_ABILITY,
MC_CLIENT_EVENT_CMD_REPLY,
MC_CLIENT_EVENT_SERVER_CUSTOM, //receive event from server to client
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+ MC_CLIENT_EVENT_CLIENT_CUSTOM, //from client to server. deprecated
+#endif
MC_CLIENT_EVENT_MAX,
} mc_client_receive_event_e;
MC_SERVER_EVENT_CLIENT_CUSTOM, //received event from client
MC_SERVER_EVENT_REPLY_CUSTOM, //received event reply from client
MC_SERVER_EVENT_SEARCH,
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+ MC_SERVER_EVENT_PLAYBACK_STATE, //deprecated. use action instead of it.
+ MC_SERVER_EVENT_CLIENT_CUSTOM_OLD, //received event from client, deprecated
+#endif
MC_SERVER_EVENT_MAX,
} mc_server_receive_event_e;
MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
%cmake . -DFULLVER=%{version} -DMAJORVER=${MAJORVER} \
%if %{on_demand}
- -DON_DEMAND_SOCKET_ACTIVATION=YES
+ -DON_DEMAND_SOCKET_ACTIVATION=YES \
%else
- -DON_DEMAND_SOCKET_ACTIVATION=NO
+ -DON_DEMAND_SOCKET_ACTIVATION=NO \
%endif
+ -DTIZEN_FEATURE_COMPATIBILITY=YES
%__make %{?jobs:-j%jobs}
static void __client_repeat_ability_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
static void __client_shuffle_ability_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+static void __client_reply_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+#endif
+
static mc_cb_event_s cb_event[MC_CLIENT_EVENT_MAX] = {
{MC_DBUS_SIGNAL_NAME_SERVER_STATE, __client_server_cb},
{MC_DBUS_SIGNAL_NAME_REPEAT_ABILITY, __client_repeat_ability_cb},
{MC_DBUS_SIGNAL_NAME_CMD_REPLY, __client_cmd_reply_received_cb},
{MC_DBUS_SIGNAL_NAME_CUSTOM_EVENT, __client_custom_event_received_cb},
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+ {MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND_REPLY, __client_reply_cb},
+#endif
};
static void __client_server_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(callback == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "callback is NULL");
mc_retvm_if(((event < MC_CLIENT_EVENT_SERVER_STATE) || (event >= MC_CLIENT_EVENT_MAX)) , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid event [%d]", event);
+
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+ if ((event == MC_CLIENT_EVENT_CLIENT_CUSTOM) && (mc_client->updated_cb[event].callback != NULL)) { //deprecated
+ mc_client->updated_cb[event].callback = callback;
+ mc_client->updated_cb[event].user_data = user_data;
+
+ return ret;
+ }
+#endif
mc_retvm_if(mc_client->updated_cb[event].callback != NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "callback is already set [%d]", event);
mc_client->updated_cb[event].callback = callback;
mc_client->updated_cb[event].user_data = user_data;
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+ if ((event == MC_CLIENT_EVENT_CMD_REPLY) || (event == MC_CLIENT_EVENT_SERVER_CUSTOM) || (event == MC_CLIENT_EVENT_CLIENT_CUSTOM)) {
+#else
if ((event == MC_CLIENT_EVENT_CMD_REPLY) || (event == MC_CLIENT_EVENT_SERVER_CUSTOM)) {
+#endif
interface_name = mc_util_get_interface_name(MC_CLIENT, mc_client->client_name);
ret = mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, interface_name, cb_event[event].signal_name,
cb_event[event].cb_func, (void *)&(mc_client->updated_cb[event]));
return ret;
}
+
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+typedef void (*mc_command_reply_received_cb)(const char *server_name, int result_code, bundle *data, void *user_data);
+
+static void __client_reply_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ gchar **params = NULL;
+ int enc_size = 0;
+ bundle *bundle_data = NULL;
+
+ media_controller_receiver_s *reciever = (media_controller_receiver_s *)user_data;
+ mc_retm_if(reciever == NULL, "reciever is NULL");
+
+ mc_command_reply_received_cb callback = (mc_command_reply_received_cb)reciever->callback;
+ mc_retm_if(callback == NULL, "reply_cb is NULL");
+ mc_retm_if(message == NULL, "message is NULL");
+
+ mc_debug("__client_reply_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 custom data");
+
+ enc_size = atoi(params[2]);
+ if (enc_size > 0)
+ bundle_data = bundle_decode((bundle_raw *)params[3], enc_size);
+
+ callback(params[0], atoi(params[1]), bundle_data, reciever->user_data);
+
+ g_strfreev(params);
+}
+
+int mc_client_destroy_metadata(mc_metadata_h metadata)
+{
+ mc_warning("DEPRECATION WARNING: mc_client_destroy_metadata() is removed from 5.5. Use mc_metadata_destroy() instead.");
+
+ return mc_metadata_destroy(metadata);
+}
+
+int mc_client_get_metadata(mc_metadata_h metadata, mc_meta_e attribute, char **value)
+{
+ mc_warning("DEPRECATION WARNING: mc_client_get_metadata() is removed from 5.5. Use mc_metadata_get() instead.");
+
+ return mc_metadata_get(metadata, attribute, value);
+}
+
+int mc_client_send_custom_command(mc_client_h client, const char *server_name, const char *command, bundle *data, mc_command_reply_received_cb callback, void *user_data)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *message = NULL;
+ char *bundle_str = NULL;
+ media_controller_client_s *mc_client = (media_controller_client_s *)client;
+
+ mc_warning("DEPRECATION WARNING: mc_client_send_custom_command() is removed from 5.5. Use mc_client_send_custom_cmd() instead.");
+
+ 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");
+
+ if (callback) {
+ ret = __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_CLIENT_CUSTOM, callback, user_data);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Error when __mc_client_set_updated_cb [%d]", ret);
+ }
+
+ ret = mc_util_bundle_to_string(data, &bundle_str);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Error when make string from bundle");
+
+ message = g_strdup_printf("%s%s%s%s%s", mc_client->client_name, MC_STRING_DELIMITER, command, MC_STRING_DELIMITER, bundle_str);
+ MC_SAFE_G_FREE(bundle_str);
+ mc_retvm_if(message == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "Error when making message");
+
+ ret = __mc_client_send_command(client, server_name, MC_COMMAND_CUSTOM, command, MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND, message, NULL);
+
+ MC_SAFE_G_FREE(message);
+
+ 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_warning("DEPRECATION WARNING: mc_client_send_playback_state_command() is removed from 5.5. Use mc_client_send_playback_action_cmd() instead.");
+
+ 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_REWIND)), 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_set_metadata_update_cb(mc_client_h client, mc_metadata_updated_cb callback, void *user_data)
+{
+ mc_warning("DEPRECATION WARNING: mc_client_set_metadata_update_cb() is removed from 5.5. Use mc_client_set_metadata_updated_cb() instead.");
+
+ return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_METADATA, callback, user_data);
+}
+
+int mc_client_unset_metadata_update_cb(mc_client_h client)
+{
+ mc_warning("DEPRECATION WARNING: mc_client_unset_metadata_update_cb() is removed from 5.5. Use mc_client_unset_metadata_updated_cb() instead.");
+
+ return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_METADATA);
+}
+
+int mc_client_set_playback_update_cb(mc_client_h client, mc_playback_updated_cb callback, void *user_data)
+{
+ mc_warning("DEPRECATION WARNING: mc_client_set_playback_update_cb() is removed from 5.5. Use mc_client_set_playback_updated_cb() instead.");
+
+ return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_PLAYBACK_INFO, callback, user_data);
+}
+
+int mc_client_unset_playback_update_cb(mc_client_h client)
+{
+ mc_warning("DEPRECATION WARNING: mc_client_unset_playback_update_cb() is removed from 5.5. Use mc_client_unset_playback_updated_cb() instead.");
+
+ return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_PLAYBACK_INFO);
+}
+
+int mc_client_set_server_update_cb(mc_client_h client, mc_server_state_updated_cb callback, void *user_data)
+{
+ mc_warning("DEPRECATION WARNING: mc_client_set_server_update_cb() is removed from 5.5. Use mc_client_set_server_updated_cb() instead.");
+
+ return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_SERVER_STATE, callback, user_data);
+}
+
+int mc_client_unset_server_update_cb(mc_client_h client)
+{
+ mc_warning("DEPRECATION WARNING: mc_client_unset_server_update_cb() is removed from 5.5. Use mc_client_unset_server_updated_cb() instead.");
+
+ return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_SERVER_STATE);
+}
+#endif
static void __server_search_cmd_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
static int __mc_server_update_ability(mc_server_h server, int support_item, mc_ability_support_e support, gboolean immediate_update);
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+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_custom_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+#endif
static mc_cb_event_s cb_event[MC_SERVER_EVENT_MAX] = {
{MC_DBUS_SIGNAL_NAME_PLAYBACK_ACTION, __server_playback_action_cb},
{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},
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+ {MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD, __server_playback_state_command_cb},
+ {MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND, __server_custom_command_cb}, //deprecated one
+#endif
};
static int __mc_server_create(media_controller_server_s **mc_server)
return ret;
}
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+typedef void (*mc_server_custom_command_received_cb)(const char* client_name, const char *command, bundle *data, void *user_data);
+typedef void (*mc_server_playback_state_command_received_cb)(const char* client_name, mc_playback_states_e state, void *user_data);
+
+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_custom_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ gchar **params = NULL;
+ int enc_size = 0;
+ char *sender = NULL;
+ char *command = NULL;
+ bundle *bundle_data = NULL;
+ media_controller_receiver_s *receiver = (media_controller_receiver_s *)user_data;
+
+ mc_retm_if(receiver == NULL, "reciever is NULL");
+ mc_retm_if(message == NULL, "message is NULL");
+
+ mc_server_custom_command_received_cb callback = receiver->callback;
+ mc_retm_if(receiver->callback == NULL, "custom_command_received_cb is NULL");
+
+ mc_debug("__server_custom_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 custom data");
+
+ if (params[0])
+ sender = strdup(params[0]);
+
+ if (mc_util_get_command_available(MC_PRIV_TYPE_SERVER, sender, MC_COMMAND_CUSTOM, params[1]) != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Error permission denied");
+ MC_SAFE_FREE(sender);
+ g_strfreev(params);
+ return;
+ }
+
+ command = strdup(params[1]);
+ enc_size = atoi(params[2]);
+ if (enc_size > 0)
+ bundle_data = bundle_decode((bundle_raw *)params[3], enc_size);
+
+ callback(sender, command, bundle_data, receiver->user_data);
+
+ MC_SAFE_FREE(sender);
+ MC_SAFE_FREE(command);
+
+ g_strfreev(params);
+}
+
+int mc_server_send_command_reply(mc_server_h server, const char *client_name, int result_code, bundle *data)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *message = NULL;
+ char *bundle_str = NULL;
+ media_controller_server_s *mc_server = (media_controller_server_s *)server;
+
+ mc_warning("DEPRECATION WARNING: mc_server_send_command_reply() is removed from 5.5. Use mc_server_send_cmd_reply() instead.");
+
+ mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ mc_retvm_if(!MC_STRING_VALID(client_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "client_name is NULL");
+
+ ret = mc_util_bundle_to_string(data, &bundle_str);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Error when make string from bundle");
+
+ message = g_strdup_printf("%s%s%d%s%s", mc_server->server_name, MC_STRING_DELIMITER, result_code, MC_STRING_DELIMITER, bundle_str);
+ MC_SAFE_G_FREE(bundle_str);
+ mc_retvm_if(message == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "Error when making message");
+
+ char *interface_name = mc_util_get_interface_name(MC_CLIENT, client_name);
+ ret = mc_ipc_send_message(mc_server->dconn, NULL, interface_name, MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND_REPLY, message, NULL);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("Error mc_ipc_send_message [%d]", ret);
+
+ MC_SAFE_G_FREE(message);
+ MC_SAFE_G_FREE(interface_name);
+
+ return ret;
+}
+
+int mc_server_set_custom_command_received_cb(mc_server_h server, mc_server_custom_command_received_cb callback, void *user_data)
+{
+ mc_warning("DEPRECATION WARNING: mc_server_set_custom_command_received_cb() is removed from 5.5. Use mc_server_set_custom_cmd_received_cb() instead.");
+
+ return __mc_server_set_updated_cb(server, MC_SERVER_EVENT_CLIENT_CUSTOM_OLD, callback, user_data);
+}
+
+int mc_server_unset_custom_command_received_cb(mc_server_h server)
+{
+ mc_warning("DEPRECATION WARNING: mc_server_unset_custom_command_received_cb() is removed from 5.5. Use mc_server_unset_custom_cmd_received_cb() instead.");
+
+ return __mc_server_unset_updated_cb(server, MC_SERVER_EVENT_CLIENT_CUSTOM_OLD);
+}
+
+int mc_server_set_playback_state_command_received_cb(mc_server_h server, mc_server_playback_state_command_received_cb callback, void *user_data)
+{
+ mc_warning("DEPRECATION WARNING: mc_server_set_playback_state_command_received_cb() is removed from 5.5. Use mc_server_set_playback_action_cmd_received_cb() instead.");
+
+ 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)
+{
+ mc_warning("DEPRECATION WARNING: mc_server_unset_playback_state_command_received_cb() is removed from 5.5. Use mc_server_unset_playback_action_cmd_received_cb() instead.");
+
+ return __mc_server_unset_updated_cb(server, MC_SERVER_EVENT_PLAYBACK_STATE);
+}
+
+#endif