playerctld: add activation command

This commit is contained in:
Tony Crisci
2020-11-07 17:15:04 -05:00
parent bfed117652
commit 12660632a3
2 changed files with 30 additions and 2 deletions

View File

@@ -38,7 +38,11 @@ Here is a list of available commands:
Without specifying any players to control, Playerctl will act on the first player it can find.
Playerctl comes with a service called `playerctld` that monitors the activity of media players in the background. If `playerctld` is running, Playerctl will act on players in order of their last activity.
Playerctl comes with a service called `playerctld` that monitors the activity of media players in the background. If `playerctld` is running, Playerctl will act on players in order of their last activity. To start `playerctld`, add the following command to your system startup script:
```
playerctld daemon
```
You can list the names of players that are available to control that are running on the system with `playerctl --list-all`.

View File

@@ -827,6 +827,7 @@ static const GOptionEntry entries[] = {
static gboolean parse_setup_options(int argc, char **argv, GError **error) {
static const gchar *description = "Available Commands:"
"\n daemon Activate playerctld and exit"
"\n shift Shift to next player";
GOptionContext *context;
@@ -838,7 +839,8 @@ static gboolean parse_setup_options(int argc, char **argv, GError **error) {
success = g_option_context_parse(context, &argc, &argv, error);
if (success && command_arg && g_strcmp0(command_arg[0], "shift") != 0) {
if (success && command_arg &&
(g_strcmp0(command_arg[0], "shift") != 0 && g_strcmp0(command_arg[0], "daemon") != 0)) {
gchar *help = g_option_context_get_help(context, TRUE, NULL);
printf("%s\n", help);
g_option_context_free(context);
@@ -864,6 +866,24 @@ int playercmd_shift(GDBusConnection *connection) {
return 0;
}
int playercmd_daemon(GDBusConnection *connection) {
GError *error = NULL;
GVariant *result = g_dbus_connection_call_sync(
connection, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus",
"StartServiceByName", g_variant_new("(su)", "org.mpris.MediaPlayer2.playerctld", 0), NULL,
G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, NULL, &error);
g_object_unref(connection);
g_variant_unref(result);
if (error != NULL) {
g_printerr("Could not start playerctld: %s\n", error->message);
return 1;
}
return 0;
}
int main(int argc, char *argv[]) {
struct PlayerctldContext ctx = {0};
GError *error = NULL;
@@ -882,6 +902,10 @@ int main(int argc, char *argv[]) {
g_debug("connected to dbus: %s", g_dbus_connection_get_unique_name(ctx.connection));
if (command_arg && g_strcmp0(command_arg[0], "daemon") == 0) {
return playercmd_daemon(ctx.connection);
}
if (command_arg && g_strcmp0(command_arg[0], "shift") == 0) {
return playercmd_shift(ctx.connection);
}