add methods for toggling play modes

This commit is contained in:
zmike 2014-02-06 17:19:29 -05:00
parent a77401ce6f
commit 019357e12c
2 changed files with 94 additions and 2 deletions

View File

@ -54,6 +54,10 @@ typedef enum
EMPD_COMMAND_PLAY_ID,
EMPD_COMMAND_QUEUE_LIST,
EMPD_COMMAND_DELETE_LIST,
EMPD_COMMAND_REPEAT,
EMPD_COMMAND_RANDOM,
EMPD_COMMAND_SINGLE,
EMPD_COMMAND_CONSUME,
} EMPD_Command;
static const char *cmd_txt[] =
@ -74,6 +78,10 @@ static const char *cmd_txt[] =
CMD_TXT(EMPD_COMMAND_PLAY_ID)
CMD_TXT(EMPD_COMMAND_QUEUE_LIST)
CMD_TXT(EMPD_COMMAND_DELETE_LIST)
CMD_TXT(EMPD_COMMAND_REPEAT)
CMD_TXT(EMPD_COMMAND_RANDOM)
CMD_TXT(EMPD_COMMAND_SINGLE)
CMD_TXT(EMPD_COMMAND_CONSUME)
};
typedef enum
@ -474,8 +482,8 @@ static Eldbus_Message * \
_dbus_##name##_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) \
{ \
mpd_async_send_command(empd->async, S(name), NULL); \
fdh_update(); \
cmd_append(EMPD_COMMAND_##CMD); \
pinger_cb(NULL); \
return eldbus_message_method_return_new(msg); \
}
@ -499,7 +507,71 @@ _dbus_pause_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_M
mpd_async_send_command(empd->async, "pause", NULL);
cmd_append(EMPD_COMMAND_TOGGLE_PAUSE);
}
fdh_update();
pinger_cb(NULL);
return eldbus_message_method_return_new(msg);
}
static Eldbus_Message *
_dbus_repeat_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eina_Bool mode;
const char *sig;
sig = eldbus_message_signature_get(msg);
if (sig && (!strcmp(sig, "b")) && eldbus_message_arguments_get(msg, "b", &mode))
{
mpd_async_send_command(empd->async, "repeat", mode ? "1" : "0", NULL);
cmd_append(EMPD_COMMAND_REPEAT);
pinger_cb(NULL);
}
return eldbus_message_method_return_new(msg);
}
static Eldbus_Message *
_dbus_shuffle_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eina_Bool mode;
const char *sig;
sig = eldbus_message_signature_get(msg);
if (sig && (!strcmp(sig, "b")) && eldbus_message_arguments_get(msg, "b", &mode))
{
mpd_async_send_command(empd->async, "random", mode ? "1" : "0", NULL);
cmd_append(EMPD_COMMAND_RANDOM);
pinger_cb(NULL);
}
return eldbus_message_method_return_new(msg);
}
static Eldbus_Message *
_dbus_single_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eina_Bool mode;
const char *sig;
sig = eldbus_message_signature_get(msg);
if (sig && (!strcmp(sig, "b")) && eldbus_message_arguments_get(msg, "b", &mode))
{
mpd_async_send_command(empd->async, "single", mode ? "1" : "0", NULL);
cmd_append(EMPD_COMMAND_SINGLE);
pinger_cb(NULL);
}
return eldbus_message_method_return_new(msg);
}
static Eldbus_Message *
_dbus_consume_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eina_Bool mode;
const char *sig;
sig = eldbus_message_signature_get(msg);
if (sig && (!strcmp(sig, "b")) && eldbus_message_arguments_get(msg, "b", &mode))
{
mpd_async_send_command(empd->async, "consume", mode ? "1" : "0", NULL);
cmd_append(EMPD_COMMAND_CONSUME);
pinger_cb(NULL);
}
return eldbus_message_method_return_new(msg);
}
@ -627,6 +699,10 @@ static const Eldbus_Method empd_methods[] =
{ "QueueListRange", ELDBUS_ARGS({"i", "start"}, {"i", "num"}), NULL, _dbus_queue_list_cb, 0},
{ "QueueListCachedRange", ELDBUS_ARGS({"i", "start"}, {"i", "num"}), NULL, _dbus_queue_list_cached_cb, 0},
{ "DeleteListRange", ELDBUS_ARGS({"i", "start"}, {"i", "num"}), NULL, _dbus_delete_list_cb, 0},
{ "Repeat", ELDBUS_ARGS({"b", "mode"}), NULL, _dbus_repeat_cb, 0},
{ "Shuffle", ELDBUS_ARGS({"b", "mode"}), NULL, _dbus_shuffle_cb, 0},
{ "Single", ELDBUS_ARGS({"b", "mode"}), NULL, _dbus_single_cb, 0},
{ "Consume", ELDBUS_ARGS({"b", "mode"}), NULL, _dbus_consume_cb, 0},
{NULL, NULL, NULL, NULL, 0}
};

View File

@ -79,6 +79,22 @@
<arg type="i" name="num" direction="in" />
<annotation name="org.freedesktop.DBus.Method.NoReply" value="true" />
</method>
<method name="Repeat">
<arg type="b" name="mode" direction="in" />
<annotation name="org.freedesktop.DBus.Method.NoReply" value="true" />
</method>
<method name="Shuffle">
<arg type="b" name="mode" direction="in" />
<annotation name="org.freedesktop.DBus.Method.NoReply" value="true" />
</method>
<method name="Single">
<arg type="b" name="mode" direction="in" />
<annotation name="org.freedesktop.DBus.Method.NoReply" value="true" />
</method>
<method name="Consume">
<arg type="b" name="mode" direction="in" />
<annotation name="org.freedesktop.DBus.Method.NoReply" value="true" />
</method>
<signal name="Status">
<arg type="i" name="volume" direction="out" /><!-- volume % -->
<arg type="b" name="repeat" direction="out" />