diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..bfe592d --- /dev/null +++ b/.clang-format @@ -0,0 +1,11 @@ +BasedOnStyle: google +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortBlocksOnASingleLine: false +AlwaysBreakBeforeMultilineStrings: false +IndentWidth: 4 +PointerBindsToType: false +ColumnLimit: 100 +SpaceBeforeParens: ControlStatements +IndentCaseLabels: false diff --git a/playerctl/playerctl-cli.c b/playerctl/playerctl-cli.c index f6314ef..2932733 100644 --- a/playerctl/playerctl-cli.c +++ b/playerctl/playerctl-cli.c @@ -1,5 +1,4 @@ -/* vim:ts=2:sw=2:expandtab - * +/* * This file is part of playerctl. * * playerctl is free software: you can redistribute it and/or modify it under @@ -18,12 +17,12 @@ * Copyright © 2014 - 2016, Tony Crisci and contributors. */ -#include "playerctl.h" -#include -#include #include #include +#include +#include #include +#include "playerctl.h" #define LENGTH(array) (sizeof array / sizeof array[0]) @@ -40,425 +39,429 @@ static gboolean print_version_and_exit; /* The commands passed on the command line, filled in via G_OPTION_REMAINING. */ static gchar **command = NULL; -static GString *list_player_names_on_bus(GError **err, GBusType busType) -{ - GError *tmp_error = NULL; +static GString *list_player_names_on_bus(GError **err, GBusType busType) { + GError *tmp_error = NULL; - GDBusProxy *proxy = g_dbus_proxy_new_for_bus_sync( - busType, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.freedesktop.DBus", - "/org/freedesktop/DBus", - "org.freedesktop.DBus", - NULL, - &tmp_error); + GDBusProxy *proxy = g_dbus_proxy_new_for_bus_sync( + busType, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.DBus", + "/org/freedesktop/DBus", "org.freedesktop.DBus", NULL, &tmp_error); - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - return NULL; - } - - GVariant *reply = g_dbus_proxy_call_sync(proxy, - "ListNames", - NULL, - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &tmp_error); - - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - g_object_unref(proxy); - return NULL; - } - - GString *names_str = g_string_new(""); - GVariant *reply_child = g_variant_get_child_value(reply, 0); - gsize reply_count; - const gchar **names = g_variant_get_strv(reply_child, &reply_count); - - size_t offset = strlen ("org.mpris.MediaPlayer2."); - for (int i = 0; i < reply_count; i += 1) { - if (g_str_has_prefix(names[i], "org.mpris.MediaPlayer2.")) { - g_string_append_printf(names_str, "%s\n", names[i] + offset); + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + return NULL; } - } - g_object_unref(proxy); - g_variant_unref(reply); - g_variant_unref(reply_child); - g_free(names); + GVariant *reply = g_dbus_proxy_call_sync( + proxy, "ListNames", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &tmp_error); - return names_str; + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + g_object_unref(proxy); + return NULL; + } + + GString *names_str = g_string_new(""); + GVariant *reply_child = g_variant_get_child_value(reply, 0); + gsize reply_count; + const gchar **names = g_variant_get_strv(reply_child, &reply_count); + + size_t offset = strlen("org.mpris.MediaPlayer2."); + for (int i = 0; i < reply_count; i += 1) { + if (g_str_has_prefix(names[i], "org.mpris.MediaPlayer2.")) { + g_string_append_printf(names_str, "%s\n", names[i] + offset); + } + } + + g_object_unref(proxy); + g_variant_unref(reply); + g_variant_unref(reply_child); + g_free(names); + + return names_str; } static gchar *list_player_names(GError **err) { - GString *sessionPlayers = list_player_names_on_bus(err, G_BUS_TYPE_SESSION); - GString *systemPlayers = list_player_names_on_bus(err, G_BUS_TYPE_SYSTEM); + GString *sessionPlayers = list_player_names_on_bus(err, G_BUS_TYPE_SESSION); + GString *systemPlayers = list_player_names_on_bus(err, G_BUS_TYPE_SYSTEM); - if (!sessionPlayers && !systemPlayers) - return NULL; + if (!sessionPlayers && !systemPlayers) + return NULL; - if (!sessionPlayers) - return g_string_free(systemPlayers, FALSE); - if (!systemPlayers) + if (!sessionPlayers) + return g_string_free(systemPlayers, FALSE); + if (!systemPlayers) + return g_string_free(sessionPlayers, FALSE); + + g_string_append(sessionPlayers, systemPlayers->str); + g_string_free(systemPlayers, TRUE); return g_string_free(sessionPlayers, FALSE); - - g_string_append(sessionPlayers, systemPlayers->str); - g_string_free(systemPlayers, TRUE); - return g_string_free(sessionPlayers, FALSE); } +#define PLAYER_COMMAND_FUNC(COMMAND) \ + GError *tmp_error = NULL; \ + \ + playerctl_player_##COMMAND(player, &tmp_error); \ + if (tmp_error) { \ + g_propagate_error(error, tmp_error); \ + return FALSE; \ + } \ + return TRUE; -#define PLAYER_COMMAND_FUNC(COMMAND) \ - GError *tmp_error = NULL; \ - \ - playerctl_player_##COMMAND(player, &tmp_error); \ - if (tmp_error) { \ - g_propagate_error(error, tmp_error); \ - return FALSE; \ - } \ - return TRUE; - -static gboolean play (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - PLAYER_COMMAND_FUNC(play); +static gboolean play(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + PLAYER_COMMAND_FUNC(play); } /* Pause is defined in unistd.h */ -static gboolean paus (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - PLAYER_COMMAND_FUNC(pause); +static gboolean paus(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + PLAYER_COMMAND_FUNC(pause); } -static gboolean play_pause (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - PLAYER_COMMAND_FUNC(play_pause); +static gboolean play_pause(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + PLAYER_COMMAND_FUNC(play_pause); } -static gboolean stop (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - PLAYER_COMMAND_FUNC(stop); +static gboolean stop(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + PLAYER_COMMAND_FUNC(stop); } -static gboolean next (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - PLAYER_COMMAND_FUNC(next); +static gboolean next(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + PLAYER_COMMAND_FUNC(next); } -static gboolean previous (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - PLAYER_COMMAND_FUNC(previous); +static gboolean previous(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + PLAYER_COMMAND_FUNC(previous); } #undef PLAYER_COMMAND_FUNC -static gboolean open (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - const gchar *uri = *arguments; - GError *tmp_error = NULL; - if (uri) { - playerctl_player_open(player, g_file_get_uri(g_file_new_for_commandline_arg(uri)), &tmp_error); - if (tmp_error != NULL) { - g_propagate_error(error, tmp_error); - return FALSE; +static gboolean open(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + const gchar *uri = *arguments; + GError *tmp_error = NULL; + if (uri) { + playerctl_player_open(player, + g_file_get_uri(g_file_new_for_commandline_arg(uri)), + &tmp_error); + if (tmp_error != NULL) { + g_propagate_error(error, tmp_error); + return FALSE; + } } - } - return TRUE; + return TRUE; } -static gboolean position (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - const gchar *position = *arguments; - gint64 offset; - GError *tmp_error = NULL; +static gboolean position(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + const gchar *position = *arguments; + gint64 offset; + GError *tmp_error = NULL; - if (position) { - char *endptr = NULL; - offset = 1000000.0 * strtod(position, &endptr); + if (position) { + char *endptr = NULL; + offset = 1000000.0 * strtod(position, &endptr); - if (position == endptr) { - g_set_error(error, playerctl_cli_error_quark (), 1, "Could not parse position as a number: %s\n", position); - return FALSE; + if (position == endptr) { + g_set_error(error, playerctl_cli_error_quark(), 1, + "Could not parse position as a number: %s\n", position); + return FALSE; + } + + size_t last = strlen(position) - 1; + if (position[last] == '+' || position[last] == '-') { + if (position[last] == '-') { + offset *= -1; + } + + playerctl_player_seek(player, offset, &tmp_error); + if (tmp_error != NULL) { + g_propagate_error(error, tmp_error); + return FALSE; + } + } else { + playerctl_player_set_position(player, offset, &tmp_error); + if (tmp_error != NULL) { + g_propagate_error(error, tmp_error); + return FALSE; + } + } + } else { + g_object_get(player, "position", &offset, NULL); + printf("%f\n", (double)offset / 1000000.0); } - size_t last = strlen(position) - 1; - if (position[last] == '+' || position[last] == '-') { - if (position[last] == '-') { - offset *= -1; - } + return TRUE; +} - playerctl_player_seek(player, offset, &tmp_error); - if (tmp_error != NULL) { +static gboolean set_or_get_volume(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + const gchar *volume = *arguments; + gdouble level; + + if (volume) { + char *endptr = NULL; + size_t last = strlen(volume) - 1; + + if (volume[last] == '+' || volume[last] == '-') { + gdouble adjustment = strtod(volume, &endptr); + + if (volume == endptr) { + g_set_error(error, playerctl_cli_error_quark(), 1, + "Could not parse volume as a number: %s\n", volume); + return FALSE; + } + + if (volume[last] == '-') { + adjustment *= -1; + } + + g_object_get(player, "volume", &level, NULL); + level += adjustment; + } else { + level = strtod(volume, &endptr); + if (volume == endptr) { + g_set_error(error, playerctl_cli_error_quark(), 1, + "Could not parse volume as a number: %s\n", volume); + return FALSE; + } + } + g_object_set(player, "volume", level, NULL); + } else { + g_object_get(player, "volume", &level, NULL); + g_print("%f\n", level); + } + + return TRUE; +} + +static gboolean status(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + gchar *state = NULL; + + g_object_get(player, "status", &state, NULL); + printf("%s\n", state ? state : "Not available"); + g_free(state); + + return TRUE; +} + +static gboolean get_metadata(PlayerctlPlayer *player, gchar **arguments, + GError **error) { + const gchar *type = *arguments; + GError *tmp_error = NULL; + gchar *data; + + if (g_strcmp0(type, "artist") == 0) + data = playerctl_player_get_artist(player, &tmp_error); + else if (g_strcmp0(type, "title") == 0) + data = playerctl_player_get_title(player, &tmp_error); + else if (g_strcmp0(type, "album") == 0) + data = playerctl_player_get_album(player, &tmp_error); + else + data = playerctl_player_print_metadata_prop(player, type, &tmp_error); + + if (tmp_error) { g_propagate_error(error, tmp_error); return FALSE; - } - } else { - playerctl_player_set_position(player, offset, &tmp_error); - if (tmp_error != NULL) { - g_propagate_error(error, tmp_error); - return FALSE; - } } - } else { - g_object_get(player, "position", &offset, NULL); - printf("%f\n", (double)offset / 1000000.0); - } - return TRUE; -} + printf("%s", data); + g_free(data); -static gboolean set_or_get_volume (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - const gchar *volume = *arguments; - gdouble level; - - if (volume) { - char *endptr = NULL; - size_t last = strlen(volume) - 1; - - if(volume[last] == '+' || volume[last] == '-') { - gdouble adjustment = strtod(volume, &endptr); - - if (volume == endptr) { - g_set_error(error, playerctl_cli_error_quark (), 1, "Could not parse volume as a number: %s\n", volume); - return FALSE; - } - - if(volume[last] == '-') { - adjustment *= -1; - } - - g_object_get(player, "volume", &level, NULL); - level += adjustment; - } else { - level = strtod(volume, &endptr); - if (volume == endptr) { - g_set_error(error, playerctl_cli_error_quark (), 1, "Could not parse volume as a number: %s\n", volume); - return FALSE; - } - - } - g_object_set(player, "volume", level, NULL); - } else { - g_object_get(player, "volume", &level, NULL); - g_print("%f\n", level); - } - - return TRUE; -} - -static gboolean status (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - gchar *state = NULL; - - g_object_get(player, "status", &state, NULL); - printf("%s\n", state ? state : "Not available"); - g_free(state); - - return TRUE; -} - -static gboolean get_metadata (PlayerctlPlayer *player, gchar **arguments, GError **error) -{ - const gchar *type = *arguments; - GError *tmp_error = NULL; - gchar *data; - - if (g_strcmp0(type, "artist") == 0) - data = playerctl_player_get_artist(player, &tmp_error); - else if (g_strcmp0(type, "title") == 0) - data = playerctl_player_get_title(player, &tmp_error); - else if (g_strcmp0(type, "album") == 0) - data = playerctl_player_get_album(player, &tmp_error); - else - data = playerctl_player_print_metadata_prop(player, type, &tmp_error); - - if (tmp_error) { - g_propagate_error(error, tmp_error); - return FALSE; - } - - printf("%s", data); - g_free(data); - - return TRUE; + return TRUE; } struct PlayerCommand { - const gchar *name; - gboolean (*func) (PlayerctlPlayer *player, gchar **arguments, GError **error); + const gchar *name; + gboolean (*func)(PlayerctlPlayer *player, gchar **arguments, GError **error); } commands[] = { - { "open", &open }, - { "play", &play }, - { "pause", &paus }, - { "play-pause", &play_pause }, - { "stop", &stop }, - { "next", &next }, - { "previous", &previous }, - { "position", &position }, - { "volume", &set_or_get_volume }, - { "status", &status }, - { "metadata", &get_metadata }, + {"open", &open}, + {"play", &play}, + {"pause", &paus}, + {"play-pause", &play_pause}, + {"stop", &stop}, + {"next", &next}, + {"previous", &previous}, + {"position", &position}, + {"volume", &set_or_get_volume}, + {"status", &status}, + {"metadata", &get_metadata}, }; -static gboolean handle_player_command (PlayerctlPlayer *player, gchar **command, GError **error) -{ - for (int i = 0; i < LENGTH(commands); i++) { - if (g_strcmp0(commands[i].name, command[0]) == 0) { - // Do not pass the command's name to the function that processes it. - return commands[i].func(player, command + 1, error); +static gboolean handle_player_command(PlayerctlPlayer *player, gchar **command, + GError **error) { + for (int i = 0; i < LENGTH(commands); i++) { + if (g_strcmp0(commands[i].name, command[0]) == 0) { + // Do not pass the command's name to the function that processes it. + return commands[i].func(player, command + 1, error); + } } - } - g_set_error(error, playerctl_cli_error_quark (), 1, "Command not recognized: %s", command[0]); - return FALSE; + g_set_error(error, playerctl_cli_error_quark(), 1, + "Command not recognized: %s", command[0]); + return FALSE; } static const GOptionEntry entries[] = { - { "player", 'p', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, &player_name_list, - "A comma separated list of names of players to control (default: the first available player)", "NAME" }, - { "all-players", 'a', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &select_all_players, - "Select all available players to be controlled", NULL }, - { "list-all", 'l', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &list_all_players_and_exit, - "List the names of running players that can be controlled and exit", NULL }, - { "version", 'v', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &print_version_and_exit, - "Print version information and exit", NULL }, - { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &command, NULL, "COMMAND" }, - { NULL } -}; + {"player", 'p', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, &player_name_list, + "A comma separated list of names of players to control (default: the " + "first available player)", + "NAME"}, + {"all-players", 'a', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, + &select_all_players, "Select all available players to be controlled", + NULL}, + {"list-all", 'l', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, + &list_all_players_and_exit, + "List the names of running players that can be controlled and exit", NULL}, + {"version", 'v', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, + &print_version_and_exit, "Print version information and exit", NULL}, + {G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &command, NULL, + "COMMAND"}, + {NULL}}; -static gboolean parse_setup_options (int argc, char *argv[], GError **error) -{ - static const gchar *description = "Available Commands:" - "\n open [URI] Command for the player to open given URI." - "\n URI can be either file path or remote URL with mandatory scheme, like http://..." - "\n play Command the player to play" - "\n pause Command the player to pause" - "\n play-pause Command the player to toggle between play/pause" - "\n stop Command the player to stop" - "\n next Command the player to skip to the next track" - "\n previous Command the player to skip to the previous track" - "\n position [OFFSET][+/-] Command the player to go to the position or seek forward/backward OFFSET in seconds" - "\n volume [LEVEL][+/-] Print or set the volume to LEVEL from 0.0 to 1.0" - "\n status Get the play status of the player" - "\n metadata [KEY] Print metadata information for the current track. If KEY is passed," - "\n print only that value. KEY may be one of artist, title or album"; - static const gchar *summary = " Only for players supporting the MPRIS D-Bus specification"; - GOptionContext *context = NULL; - gboolean success; +static gboolean parse_setup_options(int argc, char *argv[], GError **error) { + static const gchar *description = + "Available Commands:" + "\n open [URI] Command for the player to open given URI." + "\n URI can be either file path or remote URL " + "with mandatory scheme, like http://..." + "\n play Command the player to play" + "\n pause Command the player to pause" + "\n play-pause Command the player to toggle between " + "play/pause" + "\n stop Command the player to stop" + "\n next Command the player to skip to the next track" + "\n previous Command the player to skip to the previous " + "track" + "\n position [OFFSET][+/-] Command the player to go to the position or " + "seek forward/backward OFFSET in seconds" + "\n volume [LEVEL][+/-] Print or set the volume to LEVEL from 0.0 " + "to 1.0" + "\n status Get the play status of the player" + "\n metadata [KEY] Print metadata information for the current " + "track. If KEY is passed," + "\n print only that value. KEY may be one of " + "artist, title or album"; + static const gchar *summary = + " Only for players supporting the MPRIS D-Bus specification"; + GOptionContext *context = NULL; + gboolean success; - context = g_option_context_new("- Controller for MPRIS players"); - g_option_context_add_main_entries(context, entries, NULL); - g_option_context_set_description(context, description); - g_option_context_set_summary(context, summary); + context = g_option_context_new("- Controller for MPRIS players"); + g_option_context_add_main_entries(context, entries, NULL); + g_option_context_set_description(context, description); + g_option_context_set_summary(context, summary); - success = g_option_context_parse(context, &argc, &argv, error); + success = g_option_context_parse(context, &argc, &argv, error); + + if (!success) { + g_option_context_free(context); + return FALSE; + } + + if (command == NULL && !print_version_and_exit && + !list_all_players_and_exit) { + gchar *help = g_option_context_get_help(context, TRUE, NULL); + g_set_error(error, playerctl_cli_error_quark(), 1, + "No command entered\n\n%s", help); + g_option_context_free(context); + g_free(help); + return FALSE; + } - if (!success) { g_option_context_free(context); - return FALSE; - } - - if (command == NULL && !print_version_and_exit && !list_all_players_and_exit) { - gchar *help = g_option_context_get_help(context, TRUE, NULL); - g_set_error (error, playerctl_cli_error_quark(), 1, "No command entered\n\n%s", help); - g_option_context_free(context); - g_free(help); - return FALSE; - } - - g_option_context_free(context); - return TRUE; + return TRUE; } -int main (int argc, char *argv[]) -{ - PlayerctlPlayer *player; - GError *error = NULL; - int exit_status = 0; +int main(int argc, char *argv[]) { + PlayerctlPlayer *player; + GError *error = NULL; + int exit_status = 0; - // seems to be required to print unicode (see #8) - setlocale(LC_CTYPE, ""); + // seems to be required to print unicode (see #8) + setlocale(LC_CTYPE, ""); - if (!parse_setup_options(argc, argv, &error)) { - g_printerr("%s\n", error->message); - exit_status = 0; - goto end; - } - - if (print_version_and_exit) { - g_print("v%s\n", PLAYERCTL_VERSION_S); - exit_status = 0; - goto end; - } - - if (list_all_players_and_exit) { - gchar *player_names = list_player_names(&error); - - if (error) { - g_printerr("%s\n", error->message); - exit_status = 1; - goto end; + if (!parse_setup_options(argc, argv, &error)) { + g_printerr("%s\n", error->message); + exit_status = 0; + goto end; } - if (player_names[0] == '\0') - g_printerr("No players were found"); - else - g_print("%s", player_names); - g_free(player_names); - - exit_status = 0; - goto end; - } - - gchar *player_names = player_name_list; - if (select_all_players) { - player_names = list_player_names(&error); - - if (error) { - g_printerr("%s\n", error->message); - exit_status = 1; - goto end; - } - } - - const gchar *delim = ",\n"; - const gboolean multiple_names = player_names != NULL; - gchar *player_name = multiple_names ? strtok(player_names, delim) : NULL; - - for (;;) { - player = playerctl_player_new(player_name, &error); - - if (error != NULL) { - g_printerr("Connection to player failed: %s\n", error->message); - exit_status = 1; - goto loopend; + if (print_version_and_exit) { + g_print("v%s\n", PLAYERCTL_VERSION_S); + exit_status = 0; + goto end; } - if (!handle_player_command(player, command, &error)) { - g_printerr("Could not execute command: %s\n", error->message); - exit_status = 1; + if (list_all_players_and_exit) { + gchar *player_names = list_player_names(&error); + + if (error) { + g_printerr("%s\n", error->message); + exit_status = 1; + goto end; + } + + if (player_names[0] == '\0') + g_printerr("No players were found"); + else + g_print("%s", player_names); + g_free(player_names); + + exit_status = 0; + goto end; } -loopend: - if (player != NULL) { - g_object_unref(player); + gchar *player_names = player_name_list; + if (select_all_players) { + player_names = list_player_names(&error); + + if (error) { + g_printerr("%s\n", error->message); + exit_status = 1; + goto end; + } } - g_clear_error(&error); - error = NULL; - if (!multiple_names) - return exit_status; + const gchar *delim = ",\n"; + const gboolean multiple_names = player_names != NULL; + gchar *player_name = multiple_names ? strtok(player_names, delim) : NULL; - player_name = strtok(NULL, delim); - if (!player_name) - return exit_status; - } + for (;;) { + player = playerctl_player_new(player_name, &error); + + if (error != NULL) { + g_printerr("Connection to player failed: %s\n", error->message); + exit_status = 1; + goto loopend; + } + + if (!handle_player_command(player, command, &error)) { + g_printerr("Could not execute command: %s\n", error->message); + exit_status = 1; + } + + loopend: + if (player != NULL) { + g_object_unref(player); + } + g_clear_error(&error); + error = NULL; + + if (!multiple_names) + return exit_status; + + player_name = strtok(NULL, delim); + if (!player_name) + return exit_status; + } end: - g_clear_error(&error); + g_clear_error(&error); - return exit_status; + return exit_status; } - diff --git a/playerctl/playerctl-player.c b/playerctl/playerctl-player.c index 777d2ee..db03596 100644 --- a/playerctl/playerctl-player.c +++ b/playerctl/playerctl-player.c @@ -1,5 +1,4 @@ -/* vim:ts=2:sw=2:expandtab - * +/* * This file is part of playerctl. * * playerctl is free software: you can redistribute it and/or modify it under @@ -18,311 +17,298 @@ * Copyright © 2014 - 2016, Tony Crisci and contributors. */ -#include #include #include +#include -#include "playerctl-player.h" #include "playerctl-generated.h" +#include "playerctl-player.h" #include enum { - PROP_0, + PROP_0, - PROP_PLAYER_NAME, - PROP_STATUS, - PROP_VOLUME, - PROP_METADATA, - PROP_POSITION, + PROP_PLAYER_NAME, + PROP_STATUS, + PROP_VOLUME, + PROP_METADATA, + PROP_POSITION, - N_PROPERTIES + N_PROPERTIES }; enum { - //PROPERTIES_CHANGED, - PLAY, - PAUSE, - STOP, - METADATA, - EXIT, - LAST_SIGNAL + // PROPERTIES_CHANGED, + PLAY, + PAUSE, + STOP, + METADATA, + EXIT, + LAST_SIGNAL }; -static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; +static GParamSpec *obj_properties[N_PROPERTIES] = { + NULL, +}; static guint connection_signals[LAST_SIGNAL] = {0}; -struct _PlayerctlPlayerPrivate -{ - OrgMprisMediaPlayer2Player *proxy; - gchar *player_name; - gchar *bus_name; - GError *init_error; - gboolean initted; - GVariant *metadata; +struct _PlayerctlPlayerPrivate { + OrgMprisMediaPlayer2Player *proxy; + gchar *player_name; + gchar *bus_name; + GError *init_error; + gboolean initted; + GVariant *metadata; }; -static void playerctl_player_properties_changed_callback (GDBusProxy *_proxy, GVariant *changed_properties, const gchar *const *invalidated_properties, gpointer user_data) -{ - PlayerctlPlayer *self = user_data; +static void playerctl_player_properties_changed_callback( + GDBusProxy *_proxy, GVariant *changed_properties, + const gchar *const *invalidated_properties, gpointer user_data) { + PlayerctlPlayer *self = user_data; - GVariant *metadata = g_variant_lookup_value(changed_properties, "Metadata", NULL); - GVariant *playback_status = g_variant_lookup_value(changed_properties, "PlaybackStatus", NULL); + GVariant *metadata = + g_variant_lookup_value(changed_properties, "Metadata", NULL); + GVariant *playback_status = + g_variant_lookup_value(changed_properties, "PlaybackStatus", NULL); - if (metadata) { - g_signal_emit(self, connection_signals[METADATA], 0, metadata); - } - - if (playback_status) { - const gchar *status_str = g_variant_get_string(playback_status, NULL); - - if (g_strcmp0(status_str, "Playing") == 0) - g_signal_emit(self, connection_signals[PLAY], 0); - else if (g_strcmp0(status_str, "Paused") == 0) - g_signal_emit(self, connection_signals[PAUSE], 0); - else if (g_strcmp0(status_str, "Stopped") == 0) - g_signal_emit(self, connection_signals[STOP], 0); - } - - for (int i = 0; invalidated_properties[i] != NULL; i += 1) { - if (g_strcmp0(invalidated_properties[i], "PlaybackStatus") == 0) { - g_signal_emit(self, connection_signals[EXIT], 0); - break; + if (metadata) { + g_signal_emit(self, connection_signals[METADATA], 0, metadata); + } + + if (playback_status) { + const gchar *status_str = g_variant_get_string(playback_status, NULL); + + if (g_strcmp0(status_str, "Playing") == 0) + g_signal_emit(self, connection_signals[PLAY], 0); + else if (g_strcmp0(status_str, "Paused") == 0) + g_signal_emit(self, connection_signals[PAUSE], 0); + else if (g_strcmp0(status_str, "Stopped") == 0) + g_signal_emit(self, connection_signals[STOP], 0); + } + + for (int i = 0; invalidated_properties[i] != NULL; i += 1) { + if (g_strcmp0(invalidated_properties[i], "PlaybackStatus") == 0) { + g_signal_emit(self, connection_signals[EXIT], 0); + break; + } } - } } static void playerctl_player_initable_iface_init(GInitableIface *iface); -G_DEFINE_TYPE_WITH_CODE (PlayerctlPlayer, playerctl_player, G_TYPE_OBJECT, - G_ADD_PRIVATE(PlayerctlPlayer) G_IMPLEMENT_INTERFACE(G_TYPE_INITABLE, playerctl_player_initable_iface_init)); +G_DEFINE_TYPE_WITH_CODE(PlayerctlPlayer, playerctl_player, G_TYPE_OBJECT, + G_ADD_PRIVATE(PlayerctlPlayer) G_IMPLEMENT_INTERFACE( + G_TYPE_INITABLE, + playerctl_player_initable_iface_init)); G_DEFINE_QUARK(playerctl-player-error-quark, playerctl_player_error); -static GVariant *playerctl_player_get_metadata(PlayerctlPlayer *self, GError **err) -{ - GVariant *metadata; - GError *tmp_error = NULL; +static GVariant *playerctl_player_get_metadata(PlayerctlPlayer *self, + GError **err) { + GVariant *metadata; + GError *tmp_error = NULL; - g_main_context_iteration(NULL, FALSE); - metadata = org_mpris_media_player2_player_dup_metadata(self->priv->proxy); + g_main_context_iteration(NULL, FALSE); + metadata = org_mpris_media_player2_player_dup_metadata(self->priv->proxy); - if (!metadata) { - // XXX: Ugly spotify workaround. Spotify does not seem to use the property - // cache. We have to get the properties directly. - GVariant *call_reply = g_dbus_proxy_call_sync (G_DBUS_PROXY(self->priv->proxy), - "org.freedesktop.DBus.Properties.Get", - g_variant_new ("(ss)", - "org.mpris.MediaPlayer2.Player", - "Metadata"), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &tmp_error); + if (!metadata) { + // XXX: Ugly spotify workaround. Spotify does not seem to use the property + // cache. We have to get the properties directly. + GVariant *call_reply = g_dbus_proxy_call_sync( + G_DBUS_PROXY(self->priv->proxy), "org.freedesktop.DBus.Properties.Get", + g_variant_new("(ss)", "org.mpris.MediaPlayer2.Player", "Metadata"), + G_DBUS_CALL_FLAGS_NONE, -1, NULL, &tmp_error); - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - return NULL; + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + return NULL; + } + + GVariant *call_reply_properties = g_variant_get_child_value(call_reply, 0); + + metadata = g_variant_get_child_value(call_reply_properties, 0); + + g_variant_unref(call_reply); + g_variant_unref(call_reply_properties); } - GVariant *call_reply_properties = g_variant_get_child_value(call_reply, 0); - - metadata = g_variant_get_child_value(call_reply_properties, 0); - - g_variant_unref(call_reply); - g_variant_unref(call_reply_properties); - } - - return metadata; + return metadata; } -static void playerctl_player_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { - PlayerctlPlayer *self = PLAYERCTL_PLAYER(object); +static void playerctl_player_set_property(GObject *object, guint property_id, + const GValue *value, + GParamSpec *pspec) { + PlayerctlPlayer *self = PLAYERCTL_PLAYER(object); - switch (property_id) - { + switch (property_id) { case PROP_PLAYER_NAME: - g_free(self->priv->player_name); - self->priv->player_name = g_strdup(g_value_get_string(value)); - break; + g_free(self->priv->player_name); + self->priv->player_name = g_strdup(g_value_get_string(value)); + break; case PROP_VOLUME: - org_mpris_media_player2_player_set_volume(self->priv->proxy, g_value_get_double(value)); - break; + org_mpris_media_player2_player_set_volume(self->priv->proxy, + g_value_get_double(value)); + break; default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); - break; - } + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + break; + } } -static void playerctl_player_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { - PlayerctlPlayer *self = PLAYERCTL_PLAYER(object); +static void playerctl_player_get_property(GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) { + PlayerctlPlayer *self = PLAYERCTL_PLAYER(object); - switch (property_id) - { + switch (property_id) { case PROP_PLAYER_NAME: - g_value_set_string(value, self->priv->player_name); - break; + g_value_set_string(value, self->priv->player_name); + break; case PROP_STATUS: - if (self->priv->proxy) { - g_main_context_iteration(NULL, FALSE); - g_value_set_string(value, org_mpris_media_player2_player_get_playback_status(self->priv->proxy)); - } else { - g_value_set_string(value, ""); - } - break; + if (self->priv->proxy) { + g_main_context_iteration(NULL, FALSE); + g_value_set_string(value, + org_mpris_media_player2_player_get_playback_status( + self->priv->proxy)); + } else { + g_value_set_string(value, ""); + } + break; - case PROP_METADATA: - { + case PROP_METADATA: { GVariant *metadata = NULL; if (self->priv->proxy) - metadata = playerctl_player_get_metadata(self, NULL); + metadata = playerctl_player_get_metadata(self, NULL); if (self->priv->metadata != NULL) - g_variant_unref(self->priv->metadata); + g_variant_unref(self->priv->metadata); self->priv->metadata = metadata; g_value_set_variant(value, metadata); break; - } + } case PROP_VOLUME: - if (self->priv->proxy) { - g_main_context_iteration(NULL, FALSE); - g_value_set_double(value, org_mpris_media_player2_player_get_volume(self->priv->proxy)); - } else { - g_value_set_double(value, 0); - } - break; + if (self->priv->proxy) { + g_main_context_iteration(NULL, FALSE); + g_value_set_double(value, org_mpris_media_player2_player_get_volume( + self->priv->proxy)); + } else { + g_value_set_double(value, 0); + } + break; case PROP_POSITION: - if (self->priv->proxy) { - // XXX: the position cache seems to never be updated after the - // connection is made so we have to call the method directly here or it - // won't work. - GError *tmp_error = NULL; - GVariant *call_reply = g_dbus_proxy_call_sync (G_DBUS_PROXY(self->priv->proxy), - "org.freedesktop.DBus.Properties.Get", - g_variant_new ("(ss)", - "org.mpris.MediaPlayer2.Player", - "Position"), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &tmp_error); + if (self->priv->proxy) { + // XXX: the position cache seems to never be updated after the + // connection is made so we have to call the method directly here or it + // won't work. + GError *tmp_error = NULL; + GVariant *call_reply = g_dbus_proxy_call_sync( + G_DBUS_PROXY(self->priv->proxy), + "org.freedesktop.DBus.Properties.Get", + g_variant_new("(ss)", "org.mpris.MediaPlayer2.Player", "Position"), + G_DBUS_CALL_FLAGS_NONE, -1, NULL, &tmp_error); - if (tmp_error) { - g_warning("Get position property failed. Using cache. (%s)", tmp_error->message); - gint64 cached_position = org_mpris_media_player2_player_get_position(self->priv->proxy); - g_value_set_int64(value, cached_position); - break; + if (tmp_error) { + g_warning("Get position property failed. Using cache. (%s)", + tmp_error->message); + gint64 cached_position = + org_mpris_media_player2_player_get_position(self->priv->proxy); + g_value_set_int64(value, cached_position); + break; + } + + GVariant *call_reply_properties = + g_variant_get_child_value(call_reply, 0); + GVariant *call_reply_unboxed = + g_variant_get_variant(call_reply_properties); + + gint64 position = g_variant_get_int64(call_reply_unboxed); + g_value_set_int64(value, position); + + g_variant_unref(call_reply); + g_variant_unref(call_reply_properties); + g_variant_unref(call_reply_unboxed); + } else { + g_value_set_int64(value, 0); } - - GVariant *call_reply_properties = g_variant_get_child_value(call_reply, 0); - GVariant *call_reply_unboxed = g_variant_get_variant(call_reply_properties); - - gint64 position = g_variant_get_int64(call_reply_unboxed); - g_value_set_int64(value, position); - - g_variant_unref(call_reply); - g_variant_unref(call_reply_properties); - g_variant_unref(call_reply_unboxed); - } else { - g_value_set_int64(value, 0); - } - break; + break; default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); - break; - } + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + break; + } } -static void playerctl_player_constructed(GObject *gobject) -{ - PlayerctlPlayer *self = PLAYERCTL_PLAYER(gobject); +static void playerctl_player_constructed(GObject *gobject) { + PlayerctlPlayer *self = PLAYERCTL_PLAYER(gobject); - self->priv->init_error = NULL; + self->priv->init_error = NULL; - g_initable_init((GInitable *)self, NULL, &self->priv->init_error); + g_initable_init((GInitable *)self, NULL, &self->priv->init_error); - G_OBJECT_CLASS(playerctl_player_parent_class)->constructed(gobject); + G_OBJECT_CLASS(playerctl_player_parent_class)->constructed(gobject); } -static void playerctl_player_dispose(GObject *gobject) -{ - PlayerctlPlayer *self = PLAYERCTL_PLAYER(gobject); +static void playerctl_player_dispose(GObject *gobject) { + PlayerctlPlayer *self = PLAYERCTL_PLAYER(gobject); - g_clear_error(&self->priv->init_error); - g_clear_object(&self->priv->proxy); + g_clear_error(&self->priv->init_error); + g_clear_object(&self->priv->proxy); - G_OBJECT_CLASS(playerctl_player_parent_class)->dispose(gobject); + G_OBJECT_CLASS(playerctl_player_parent_class)->dispose(gobject); } -static void playerctl_player_finalize(GObject *gobject) -{ - PlayerctlPlayer *self = PLAYERCTL_PLAYER(gobject); +static void playerctl_player_finalize(GObject *gobject) { + PlayerctlPlayer *self = PLAYERCTL_PLAYER(gobject); - g_free(self->priv->player_name); - g_free(self->priv->bus_name); + g_free(self->priv->player_name); + g_free(self->priv->bus_name); - G_OBJECT_CLASS(playerctl_player_parent_class)->finalize(gobject); + G_OBJECT_CLASS(playerctl_player_parent_class)->finalize(gobject); } -static void playerctl_player_class_init (PlayerctlPlayerClass *klass) { - GObjectClass *gobject_class = G_OBJECT_CLASS(klass); +static void playerctl_player_class_init(PlayerctlPlayerClass *klass) { + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); - gobject_class->set_property = playerctl_player_set_property; - gobject_class->get_property = playerctl_player_get_property; - gobject_class->constructed = playerctl_player_constructed; - gobject_class->dispose = playerctl_player_dispose; - gobject_class->finalize = playerctl_player_finalize; + gobject_class->set_property = playerctl_player_set_property; + gobject_class->get_property = playerctl_player_get_property; + gobject_class->constructed = playerctl_player_constructed; + gobject_class->dispose = playerctl_player_dispose; + gobject_class->finalize = playerctl_player_finalize; - obj_properties[PROP_PLAYER_NAME] = - g_param_spec_string("player-name", - "Player name", - "The name of the player mpris player", + obj_properties[PROP_PLAYER_NAME] = g_param_spec_string( + "player-name", "Player name", "The name of the player mpris player", NULL, /* default */ - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY| G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); - obj_properties[PROP_STATUS] = - g_param_spec_string("status", - "Player status", - "The play status of the player", - NULL, /* default */ - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_STATUS] = + g_param_spec_string("status", "Player status", + "The play status of the player", NULL, /* default */ + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - obj_properties[PROP_VOLUME] = - g_param_spec_double("volume", - "Player volume", - "The volume level of the player", - 0, - 100, - 0, + obj_properties[PROP_VOLUME] = g_param_spec_double( + "volume", "Player volume", "The volume level of the player", 0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - obj_properties[PROP_POSITION] = - g_param_spec_int64("position", - "Player position", - "The position in the current track of the player", - 0, - INT64_MAX, - 0, + obj_properties[PROP_POSITION] = g_param_spec_int64( + "position", "Player position", + "The position in the current track of the player", 0, INT64_MAX, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - obj_properties[PROP_METADATA] = - g_param_spec_variant("metadata", - "Player metadata", - "The metadata of the currently playing track", - G_VARIANT_TYPE_VARIANT, - NULL, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_METADATA] = g_param_spec_variant( + "metadata", "Player metadata", + "The metadata of the currently playing track", G_VARIANT_TYPE_VARIANT, + NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - g_object_class_install_properties(gobject_class, N_PROPERTIES, obj_properties); + g_object_class_install_properties(gobject_class, N_PROPERTIES, + obj_properties); #if 0 /* not implemented yet */ @@ -339,188 +325,178 @@ static void playerctl_player_class_init (PlayerctlPlayerClass *klass) { G_TYPE_VARIANT); #endif - connection_signals[PLAY] = g_signal_new( - "play", /* signal_name */ - PLAYERCTL_TYPE_PLAYER, /* itype */ - G_SIGNAL_RUN_FIRST, /* signal_flags */ - 0, /* class_offset */ - NULL, /* accumulator */ - NULL, /* accu_data */ - g_cclosure_marshal_VOID__VOID, /* c_marshaller */ - G_TYPE_NONE, /* return_type */ - 0); /* n_params */ + connection_signals[PLAY] = + g_signal_new("play", /* signal_name */ + PLAYERCTL_TYPE_PLAYER, /* itype */ + G_SIGNAL_RUN_FIRST, /* signal_flags */ + 0, /* class_offset */ + NULL, /* accumulator */ + NULL, /* accu_data */ + g_cclosure_marshal_VOID__VOID, /* c_marshaller */ + G_TYPE_NONE, /* return_type */ + 0); /* n_params */ - connection_signals[PAUSE] = g_signal_new( - "pause", /* signal_name */ - PLAYERCTL_TYPE_PLAYER, /* itype */ - G_SIGNAL_RUN_FIRST, /* signal_flags */ - 0, /* class_offset */ - NULL, /* accumulator */ - NULL, /* accu_data */ - g_cclosure_marshal_VOID__VOID, /* c_marshaller */ - G_TYPE_NONE, /* return_type */ - 0); /* n_params */ + connection_signals[PAUSE] = + g_signal_new("pause", /* signal_name */ + PLAYERCTL_TYPE_PLAYER, /* itype */ + G_SIGNAL_RUN_FIRST, /* signal_flags */ + 0, /* class_offset */ + NULL, /* accumulator */ + NULL, /* accu_data */ + g_cclosure_marshal_VOID__VOID, /* c_marshaller */ + G_TYPE_NONE, /* return_type */ + 0); /* n_params */ - connection_signals[STOP] = g_signal_new( - "stop", /* signal_name */ - PLAYERCTL_TYPE_PLAYER, /* itype */ - G_SIGNAL_RUN_FIRST, /* signal_flags */ - 0, /* class_offset */ - NULL, /* accumulator */ - NULL, /* accu_data */ - g_cclosure_marshal_VOID__VOID, /* c_marshaller */ - G_TYPE_NONE, /* return_type */ - 0); /* n_params */ + connection_signals[STOP] = + g_signal_new("stop", /* signal_name */ + PLAYERCTL_TYPE_PLAYER, /* itype */ + G_SIGNAL_RUN_FIRST, /* signal_flags */ + 0, /* class_offset */ + NULL, /* accumulator */ + NULL, /* accu_data */ + g_cclosure_marshal_VOID__VOID, /* c_marshaller */ + G_TYPE_NONE, /* return_type */ + 0); /* n_params */ - connection_signals[METADATA] = g_signal_new( - "metadata", /* signal_name */ - PLAYERCTL_TYPE_PLAYER, /* itype */ - G_SIGNAL_RUN_FIRST, /* signal_flags */ - 0, /* class_offset */ - NULL, /* accumulator */ - NULL, /* accu_data */ - g_cclosure_marshal_VOID__VARIANT, /* c_marshaller */ - G_TYPE_NONE, /* return_type */ - 1, /* n_params */ - G_TYPE_VARIANT); + connection_signals[METADATA] = + g_signal_new("metadata", /* signal_name */ + PLAYERCTL_TYPE_PLAYER, /* itype */ + G_SIGNAL_RUN_FIRST, /* signal_flags */ + 0, /* class_offset */ + NULL, /* accumulator */ + NULL, /* accu_data */ + g_cclosure_marshal_VOID__VARIANT, /* c_marshaller */ + G_TYPE_NONE, /* return_type */ + 1, /* n_params */ + G_TYPE_VARIANT); - connection_signals[EXIT] = g_signal_new( - "exit", /* signal_name */ - PLAYERCTL_TYPE_PLAYER, /* itype */ - G_SIGNAL_RUN_FIRST, /* signal_flags */ - 0, /* class_offset */ - NULL, /* accumulator */ - NULL, /* accu_data */ - g_cclosure_marshal_VOID__VOID, /* c_marshaller */ - G_TYPE_NONE, /* return_type */ - 0); /* n_params */ + connection_signals[EXIT] = + g_signal_new("exit", /* signal_name */ + PLAYERCTL_TYPE_PLAYER, /* itype */ + G_SIGNAL_RUN_FIRST, /* signal_flags */ + 0, /* class_offset */ + NULL, /* accumulator */ + NULL, /* accu_data */ + g_cclosure_marshal_VOID__VOID, /* c_marshaller */ + G_TYPE_NONE, /* return_type */ + 0); /* n_params */ } -static void playerctl_player_init (PlayerctlPlayer *self) -{ - self->priv = playerctl_player_get_instance_private(self); +static void playerctl_player_init(PlayerctlPlayer *self) { + self->priv = playerctl_player_get_instance_private(self); } -static gchar *playerctl_player_get_bus_name(PlayerctlPlayer *self, GError **err, GBusType busType) -{ - gchar *bus_name = NULL; - GError *tmp_error = NULL; +static gchar *playerctl_player_get_bus_name(PlayerctlPlayer *self, GError **err, + GBusType busType) { + gchar *bus_name = NULL; + GError *tmp_error = NULL; - g_return_val_if_fail(err == NULL || *err == NULL, FALSE); + g_return_val_if_fail(err == NULL || *err == NULL, FALSE); - if (self->priv->bus_name != NULL) { - return self->priv->bus_name; - } - - if (self->priv->player_name != NULL) { - return g_strjoin(".", "org.mpris.MediaPlayer2", self->priv->player_name, NULL); - } - - GDBusProxy *proxy = g_dbus_proxy_new_for_bus_sync( - busType, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.freedesktop.DBus", - "/org/freedesktop/DBus", - "org.freedesktop.DBus", - NULL, - &tmp_error); - - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - return NULL; - } - - GVariant *reply = g_dbus_proxy_call_sync(proxy, - "ListNames", - NULL, - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &tmp_error); - - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - g_object_unref(proxy); - return NULL; - } - - GVariant *reply_child = g_variant_get_child_value(reply, 0); - gsize reply_count; - const gchar **names = g_variant_get_strv(reply_child, &reply_count); - - for (int i = 0; i < reply_count; i += 1) { - if (g_str_has_prefix(names[i], "org.mpris.MediaPlayer2")) { - bus_name = g_strdup(names[i]); - break; + if (self->priv->bus_name != NULL) { + return self->priv->bus_name; } - } - g_object_unref(proxy); - g_variant_unref(reply); - g_variant_unref(reply_child); - g_free(names); + if (self->priv->player_name != NULL) { + return g_strjoin(".", "org.mpris.MediaPlayer2", self->priv->player_name, + NULL); + } - if (bus_name == NULL) { - tmp_error = g_error_new(playerctl_player_error_quark(), 1, "No players found"); - g_propagate_error(err, tmp_error); - return NULL; - } + GDBusProxy *proxy = g_dbus_proxy_new_for_bus_sync( + busType, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.DBus", + "/org/freedesktop/DBus", "org.freedesktop.DBus", NULL, &tmp_error); - return bus_name; + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + return NULL; + } + + GVariant *reply = g_dbus_proxy_call_sync( + proxy, "ListNames", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &tmp_error); + + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + g_object_unref(proxy); + return NULL; + } + + GVariant *reply_child = g_variant_get_child_value(reply, 0); + gsize reply_count; + const gchar **names = g_variant_get_strv(reply_child, &reply_count); + + for (int i = 0; i < reply_count; i += 1) { + if (g_str_has_prefix(names[i], "org.mpris.MediaPlayer2")) { + bus_name = g_strdup(names[i]); + break; + } + } + + g_object_unref(proxy); + g_variant_unref(reply); + g_variant_unref(reply_child); + g_free(names); + + if (bus_name == NULL) { + tmp_error = + g_error_new(playerctl_player_error_quark(), 1, "No players found"); + g_propagate_error(err, tmp_error); + return NULL; + } + + return bus_name; } -static gboolean playerctl_player_initable_init(GInitable *initable, GCancellable *cancellable, GError **err) -{ - GError *tmp_error = NULL; - PlayerctlPlayer *player = PLAYERCTL_PLAYER(initable); - GBusType busType = G_BUS_TYPE_SESSION; +static gboolean playerctl_player_initable_init(GInitable *initable, + GCancellable *cancellable, + GError **err) { + GError *tmp_error = NULL; + PlayerctlPlayer *player = PLAYERCTL_PLAYER(initable); + GBusType busType = G_BUS_TYPE_SESSION; - if (player->priv->initted) + if (player->priv->initted) + return TRUE; + + g_return_val_if_fail(err == NULL || *err == NULL, FALSE); + + player->priv->bus_name = + playerctl_player_get_bus_name(player, &tmp_error, busType); + if (tmp_error) { + g_clear_error(&tmp_error); + busType = G_BUS_TYPE_SYSTEM; + player->priv->bus_name = + playerctl_player_get_bus_name(player, &tmp_error, busType); + } + + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + return FALSE; + } + + if (player->priv->player_name == NULL) { + /* org.mpris.MediaPlayer2.[NAME] */ + size_t offset = strlen("org.mpris.MediaPlayer2"); + player->priv->player_name = g_strdup(player->priv->bus_name + offset); + } + + player->priv->proxy = org_mpris_media_player2_player_proxy_new_for_bus_sync( + busType, G_DBUS_PROXY_FLAGS_NONE, player->priv->bus_name, + "/org/mpris/MediaPlayer2", NULL, &tmp_error); + + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + return FALSE; + } + + g_signal_connect(player->priv->proxy, "g-properties-changed", + G_CALLBACK(playerctl_player_properties_changed_callback), + player); + + player->priv->initted = TRUE; return TRUE; - - g_return_val_if_fail(err == NULL || *err == NULL, FALSE); - - player->priv->bus_name = playerctl_player_get_bus_name(player, &tmp_error, busType); - if (tmp_error) { - g_clear_error(&tmp_error); - busType = G_BUS_TYPE_SYSTEM; - player->priv->bus_name = playerctl_player_get_bus_name(player, &tmp_error, busType); - } - - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - return FALSE; - } - - if (player->priv->player_name == NULL) { - /* org.mpris.MediaPlayer2.[NAME] */ - size_t offset = strlen ("org.mpris.MediaPlayer2"); - player->priv->player_name = g_strdup(player->priv->bus_name + offset); - } - - player->priv->proxy = org_mpris_media_player2_player_proxy_new_for_bus_sync( - busType, - G_DBUS_PROXY_FLAGS_NONE, - player->priv->bus_name, - "/org/mpris/MediaPlayer2", - NULL, - &tmp_error); - - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - return FALSE; - } - - g_signal_connect(player->priv->proxy, "g-properties-changed", G_CALLBACK(playerctl_player_properties_changed_callback), player); - - player->priv->initted = TRUE; - return TRUE; } -static void playerctl_player_initable_iface_init(GInitableIface *iface) -{ - iface->init = playerctl_player_initable_init; +static void playerctl_player_initable_iface_init(GInitableIface *iface) { + iface->init = playerctl_player_initable_init; } /** @@ -534,18 +510,18 @@ static void playerctl_player_initable_iface_init(GInitableIface *iface) * Returns:(transfer full): A new #PlayerctlPlayer connected to the bus name or * NULL if an error occurred */ -PlayerctlPlayer *playerctl_player_new(const gchar *name, GError **err) -{ - GError *tmp_error = NULL; - PlayerctlPlayer *player; +PlayerctlPlayer *playerctl_player_new(const gchar *name, GError **err) { + GError *tmp_error = NULL; + PlayerctlPlayer *player; - player = g_initable_new(PLAYERCTL_TYPE_PLAYER, NULL, &tmp_error, "player-name", name, NULL); + player = g_initable_new(PLAYERCTL_TYPE_PLAYER, NULL, &tmp_error, + "player-name", name, NULL); - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - } + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + } - return player; + return player; } /** @@ -558,44 +534,45 @@ PlayerctlPlayer *playerctl_player_new(const gchar *name, GError **err) * * Returns: (transfer none): the #PlayerctlPlayer for chaining */ -PlayerctlPlayer *playerctl_player_on(PlayerctlPlayer *self, const gchar *event, GClosure *callback, GError **err) -{ - g_return_val_if_fail(self != NULL, NULL); - g_return_val_if_fail(event != NULL, NULL); - g_return_val_if_fail(callback != NULL, NULL); - g_return_val_if_fail(err == NULL || *err == NULL, NULL); +PlayerctlPlayer *playerctl_player_on(PlayerctlPlayer *self, const gchar *event, + GClosure *callback, GError **err) { + g_return_val_if_fail(self != NULL, NULL); + g_return_val_if_fail(event != NULL, NULL); + g_return_val_if_fail(callback != NULL, NULL); + g_return_val_if_fail(err == NULL || *err == NULL, NULL); + + if (self->priv->init_error != NULL) { + g_propagate_error(err, g_error_copy(self->priv->init_error)); + return self; + } + + g_closure_ref(callback); + g_closure_sink(callback); + + g_signal_connect_closure(self, event, callback, TRUE); - if (self->priv->init_error != NULL) { - g_propagate_error(err, g_error_copy(self->priv->init_error)); return self; - } - - g_closure_ref(callback); - g_closure_sink(callback); - - g_signal_connect_closure(self, event, callback, TRUE); - - return self; } -#define PLAYER_COMMAND_FUNC(COMMAND) \ - GError *tmp_error = NULL; \ - \ - g_return_val_if_fail(self != NULL, NULL); \ - g_return_val_if_fail(err == NULL || *err == NULL, NULL); \ - \ - if (self->priv->init_error != NULL) { \ - g_propagate_error(err, g_error_copy(self->priv->init_error)); \ - return self; \ - } \ - \ - org_mpris_media_player2_player_call_##COMMAND##_sync(self->priv->proxy, NULL, &tmp_error); \ - \ - if (tmp_error != NULL) { \ - g_propagate_error(err, tmp_error); \ - } \ - \ - return self; +#define PLAYER_COMMAND_FUNC(COMMAND) \ + GError *tmp_error = NULL; \ + \ + g_return_val_if_fail(self != NULL, NULL); \ + g_return_val_if_fail(err == NULL || *err == NULL, NULL); \ + \ + if (self->priv->init_error != NULL) { \ + g_propagate_error(err, g_error_copy(self->priv->init_error)); \ + return self; \ + } \ + \ + org_mpris_media_player2_player_call_##COMMAND##_sync(self->priv->proxy, \ + NULL, &tmp_error); \ + \ + if (tmp_error != NULL) { \ + g_propagate_error(err, tmp_error); \ + } \ + \ + return self; /** * playerctl_player_play_pause: @@ -606,9 +583,9 @@ PlayerctlPlayer *playerctl_player_on(PlayerctlPlayer *self, const gchar *event, * * Returns: (transfer none): the #PlayerctlPlayer for chaining */ -PlayerctlPlayer *playerctl_player_play_pause(PlayerctlPlayer *self, GError **err) -{ - PLAYER_COMMAND_FUNC(play_pause); +PlayerctlPlayer *playerctl_player_play_pause(PlayerctlPlayer *self, + GError **err) { + PLAYER_COMMAND_FUNC(play_pause); } /** @@ -620,25 +597,26 @@ PlayerctlPlayer *playerctl_player_play_pause(PlayerctlPlayer *self, GError **err * * Returns: (transfer none): the #PlayerctlPlayer for chaining */ -PlayerctlPlayer *playerctl_player_open(PlayerctlPlayer *self, gchar *uri, GError **err) -{ - GError *tmp_error = NULL; +PlayerctlPlayer *playerctl_player_open(PlayerctlPlayer *self, gchar *uri, + GError **err) { + GError *tmp_error = NULL; - g_return_val_if_fail(self != NULL, NULL); - g_return_val_if_fail(err == NULL || *err == NULL, NULL); + g_return_val_if_fail(self != NULL, NULL); + g_return_val_if_fail(err == NULL || *err == NULL, NULL); + + if (self->priv->init_error != NULL) { + g_propagate_error(err, g_error_copy(self->priv->init_error)); + return self; + } + org_mpris_media_player2_player_call_open_uri_sync(self->priv->proxy, uri, + NULL, &tmp_error); + + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + return self; + } - if (self->priv->init_error != NULL) { - g_propagate_error(err, g_error_copy(self->priv->init_error)); return self; - } - org_mpris_media_player2_player_call_open_uri_sync(self->priv->proxy, uri, NULL, &tmp_error); - - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - return self; - } - - return self; } /** @@ -650,9 +628,8 @@ PlayerctlPlayer *playerctl_player_open(PlayerctlPlayer *self, gchar *uri, GError * * Returns: (transfer none): the #PlayerctlPlayer for chaining */ -PlayerctlPlayer *playerctl_player_play(PlayerctlPlayer *self, GError **err) -{ - PLAYER_COMMAND_FUNC(play); +PlayerctlPlayer *playerctl_player_play(PlayerctlPlayer *self, GError **err) { + PLAYER_COMMAND_FUNC(play); } /** @@ -664,9 +641,8 @@ PlayerctlPlayer *playerctl_player_play(PlayerctlPlayer *self, GError **err) * * Returns: (transfer none): the #PlayerctlPlayer for chaining */ -PlayerctlPlayer *playerctl_player_pause(PlayerctlPlayer *self, GError **err) -{ - PLAYER_COMMAND_FUNC(pause); +PlayerctlPlayer *playerctl_player_pause(PlayerctlPlayer *self, GError **err) { + PLAYER_COMMAND_FUNC(pause); } /** @@ -678,9 +654,8 @@ PlayerctlPlayer *playerctl_player_pause(PlayerctlPlayer *self, GError **err) * * Returns: (transfer none): the #PlayerctlPlayer for chaining */ -PlayerctlPlayer *playerctl_player_stop(PlayerctlPlayer *self, GError **err) -{ - PLAYER_COMMAND_FUNC(stop); +PlayerctlPlayer *playerctl_player_stop(PlayerctlPlayer *self, GError **err) { + PLAYER_COMMAND_FUNC(stop); } /** @@ -692,26 +667,27 @@ PlayerctlPlayer *playerctl_player_stop(PlayerctlPlayer *self, GError **err) * * Returns: (transfer none): the #PlayerctlPlayer for chaining */ -PlayerctlPlayer *playerctl_player_seek(PlayerctlPlayer *self, gint64 offset, GError **err) -{ - GError *tmp_error = NULL; +PlayerctlPlayer *playerctl_player_seek(PlayerctlPlayer *self, gint64 offset, + GError **err) { + GError *tmp_error = NULL; - g_return_val_if_fail(self != NULL, NULL); - g_return_val_if_fail(err == NULL || *err == NULL, NULL); + g_return_val_if_fail(self != NULL, NULL); + g_return_val_if_fail(err == NULL || *err == NULL, NULL); + + if (self->priv->init_error != NULL) { + g_propagate_error(err, g_error_copy(self->priv->init_error)); + return self; + } + + org_mpris_media_player2_player_call_seek_sync(self->priv->proxy, offset, NULL, + &tmp_error); + + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + return self; + } - if (self->priv->init_error != NULL) { - g_propagate_error(err, g_error_copy(self->priv->init_error)); return self; - } - - org_mpris_media_player2_player_call_seek_sync(self->priv->proxy, offset, NULL, &tmp_error); - - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - return self; - } - - return self; } /** @@ -723,9 +699,8 @@ PlayerctlPlayer *playerctl_player_seek(PlayerctlPlayer *self, gint64 offset, GEr * * Returns: (transfer none): the #PlayerctlPlayer for chaining */ -PlayerctlPlayer *playerctl_player_next(PlayerctlPlayer *self, GError **err) -{ - PLAYER_COMMAND_FUNC(next); +PlayerctlPlayer *playerctl_player_next(PlayerctlPlayer *self, GError **err) { + PLAYER_COMMAND_FUNC(next); } /** @@ -737,9 +712,9 @@ PlayerctlPlayer *playerctl_player_next(PlayerctlPlayer *self, GError **err) * * Returns: (transfer none): the #PlayerctlPlayer for chaining */ -PlayerctlPlayer *playerctl_player_previous(PlayerctlPlayer *self, GError **err) -{ - PLAYER_COMMAND_FUNC(previous); +PlayerctlPlayer *playerctl_player_previous(PlayerctlPlayer *self, + GError **err) { + PLAYER_COMMAND_FUNC(previous); } /** @@ -753,64 +728,65 @@ PlayerctlPlayer *playerctl_player_previous(PlayerctlPlayer *self, GError **err) * * Returns: (transfer full): The artist from the metadata of the current track */ -gchar *playerctl_player_print_metadata_prop(PlayerctlPlayer *self, const gchar *property, GError **err) -{ - GError *tmp_error = NULL; +gchar *playerctl_player_print_metadata_prop(PlayerctlPlayer *self, + const gchar *property, + GError **err) { + GError *tmp_error = NULL; - g_return_val_if_fail(self != NULL, NULL); - g_return_val_if_fail(err == NULL || *err == NULL, NULL); + g_return_val_if_fail(self != NULL, NULL); + g_return_val_if_fail(err == NULL || *err == NULL, NULL); - if (self->priv->init_error != NULL) { - g_propagate_error(err, g_error_copy(self->priv->init_error)); - return NULL; - } - - GVariant *metadata = playerctl_player_get_metadata(self, &tmp_error); - - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - return NULL; - } - - if (!metadata) { - return g_strdup(""); - } - - if (!property) { - gchar *res = g_variant_print(metadata, FALSE); - g_variant_unref(metadata); - return res; - } - - GVariant *prop_variant = g_variant_lookup_value(metadata, property, NULL); - g_variant_unref(metadata); - - if (!prop_variant) { - return g_strdup(""); - } - - GString *prop = g_string_new(""); - if (g_variant_is_of_type(prop_variant, G_VARIANT_TYPE_STRING_ARRAY)) { - gsize prop_count; - const gchar **prop_strv = g_variant_get_strv(prop_variant, &prop_count); - - for (int i = 0; i < prop_count; i += 1) { - g_string_append(prop, prop_strv[i]); - - if (i != prop_count - 1) { - g_string_append(prop, ", "); - } + if (self->priv->init_error != NULL) { + g_propagate_error(err, g_error_copy(self->priv->init_error)); + return NULL; } - g_free(prop_strv); - } else if (g_variant_is_of_type(prop_variant, G_VARIANT_TYPE_STRING)) { - g_string_append(prop, g_variant_get_string(prop_variant, NULL)); - } else { - prop = g_variant_print_string(prop_variant, prop, FALSE); - } + GVariant *metadata = playerctl_player_get_metadata(self, &tmp_error); - g_variant_unref(prop_variant); - return g_string_free(prop, FALSE); + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + return NULL; + } + + if (!metadata) { + return g_strdup(""); + } + + if (!property) { + gchar *res = g_variant_print(metadata, FALSE); + g_variant_unref(metadata); + return res; + } + + GVariant *prop_variant = g_variant_lookup_value(metadata, property, NULL); + g_variant_unref(metadata); + + if (!prop_variant) { + return g_strdup(""); + } + + GString *prop = g_string_new(""); + if (g_variant_is_of_type(prop_variant, G_VARIANT_TYPE_STRING_ARRAY)) { + gsize prop_count; + const gchar **prop_strv = g_variant_get_strv(prop_variant, &prop_count); + + for (int i = 0; i < prop_count; i += 1) { + g_string_append(prop, prop_strv[i]); + + if (i != prop_count - 1) { + g_string_append(prop, ", "); + } + } + + g_free(prop_strv); + } else if (g_variant_is_of_type(prop_variant, G_VARIANT_TYPE_STRING)) { + g_string_append(prop, g_variant_get_string(prop_variant, NULL)); + } else { + prop = g_variant_print_string(prop_variant, prop, FALSE); + } + + g_variant_unref(prop_variant); + return g_string_free(prop, FALSE); } /** @@ -818,22 +794,21 @@ gchar *playerctl_player_print_metadata_prop(PlayerctlPlayer *self, const gchar * * @self: a #PlayerctlPlayer * @err: (allow-none): the location of a GError or NULL * - * Gets the artist from the metadata of the current track, or the empty string if - * no track is playing. + * Gets the artist from the metadata of the current track, or the empty string + * if no track is playing. * * Returns: (transfer full): The artist from the metadata of the current track */ -gchar *playerctl_player_get_artist(PlayerctlPlayer *self, GError **err) -{ - g_return_val_if_fail(self != NULL, NULL); - g_return_val_if_fail(err == NULL || *err == NULL, NULL); +gchar *playerctl_player_get_artist(PlayerctlPlayer *self, GError **err) { + g_return_val_if_fail(self != NULL, NULL); + g_return_val_if_fail(err == NULL || *err == NULL, NULL); - if (self->priv->init_error != NULL) { - g_propagate_error(err, g_error_copy(self->priv->init_error)); - return NULL; - } + if (self->priv->init_error != NULL) { + g_propagate_error(err, g_error_copy(self->priv->init_error)); + return NULL; + } - return playerctl_player_print_metadata_prop(self, "xesam:artist", NULL); + return playerctl_player_print_metadata_prop(self, "xesam:artist", NULL); } /** @@ -846,17 +821,16 @@ gchar *playerctl_player_get_artist(PlayerctlPlayer *self, GError **err) * * Returns: (transfer full): The title from the metadata of the current track */ -gchar *playerctl_player_get_title(PlayerctlPlayer *self, GError **err) -{ - g_return_val_if_fail(self != NULL, NULL); - g_return_val_if_fail(err == NULL || *err == NULL, NULL); +gchar *playerctl_player_get_title(PlayerctlPlayer *self, GError **err) { + g_return_val_if_fail(self != NULL, NULL); + g_return_val_if_fail(err == NULL || *err == NULL, NULL); - if (self->priv->init_error != NULL) { - g_propagate_error(err, g_error_copy(self->priv->init_error)); - return NULL; - } + if (self->priv->init_error != NULL) { + g_propagate_error(err, g_error_copy(self->priv->init_error)); + return NULL; + } - return playerctl_player_print_metadata_prop(self, "xesam:title", NULL); + return playerctl_player_print_metadata_prop(self, "xesam:title", NULL); } /** @@ -869,17 +843,16 @@ gchar *playerctl_player_get_title(PlayerctlPlayer *self, GError **err) * * Returns: (transfer full): The album from the metadata of the current track */ -gchar *playerctl_player_get_album(PlayerctlPlayer *self, GError **err) -{ - g_return_val_if_fail(self != NULL, NULL); - g_return_val_if_fail(err == NULL || *err == NULL, NULL); +gchar *playerctl_player_get_album(PlayerctlPlayer *self, GError **err) { + g_return_val_if_fail(self != NULL, NULL); + g_return_val_if_fail(err == NULL || *err == NULL, NULL); - if (self->priv->init_error != NULL) { - g_propagate_error(err, g_error_copy(self->priv->init_error)); - return NULL; - } + if (self->priv->init_error != NULL) { + g_propagate_error(err, g_error_copy(self->priv->init_error)); + return NULL; + } - return playerctl_player_print_metadata_prop(self, "xesam:album", NULL); + return playerctl_player_print_metadata_prop(self, "xesam:album", NULL); } /** @@ -889,46 +862,49 @@ gchar *playerctl_player_get_album(PlayerctlPlayer *self, GError **err) * * Sets the position of the current track to the given position in microseconds. */ -void playerctl_player_set_position(PlayerctlPlayer *self, gint64 position, GError **err) -{ - GError *tmp_error = NULL; +void playerctl_player_set_position(PlayerctlPlayer *self, gint64 position, + GError **err) { + GError *tmp_error = NULL; - g_return_if_fail(self != NULL); - g_return_if_fail(err == NULL || *err == NULL); + g_return_if_fail(self != NULL); + g_return_if_fail(err == NULL || *err == NULL); - if (self->priv->init_error != NULL) { - g_propagate_error(err, g_error_copy(self->priv->init_error)); - } + if (self->priv->init_error != NULL) { + g_propagate_error(err, g_error_copy(self->priv->init_error)); + } - // calling the function requires the track id - GVariant *metadata = playerctl_player_get_metadata(self, &tmp_error); - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - return; - } + // calling the function requires the track id + GVariant *metadata = playerctl_player_get_metadata(self, &tmp_error); + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + return; + } - GVariant *track_id_variant = g_variant_lookup_value(metadata, "mpris:trackid", G_VARIANT_TYPE_OBJECT_PATH); + GVariant *track_id_variant = g_variant_lookup_value( + metadata, "mpris:trackid", G_VARIANT_TYPE_OBJECT_PATH); - if (track_id_variant == NULL) { - // XXX some players set this as a string, which is against the protocol, - // but a lot of them do it and I don't feel like fixing it on all the - // players in the world. - track_id_variant = g_variant_lookup_value(metadata, "mpris:trackid", G_VARIANT_TYPE_STRING); - } + if (track_id_variant == NULL) { + // XXX some players set this as a string, which is against the protocol, + // but a lot of them do it and I don't feel like fixing it on all the + // players in the world. + track_id_variant = g_variant_lookup_value(metadata, "mpris:trackid", + G_VARIANT_TYPE_STRING); + } - g_variant_unref(metadata); - if (track_id_variant == NULL) { - tmp_error = g_error_new(playerctl_player_error_quark(), 1, "Could not get track id to set position"); - g_propagate_error(err, tmp_error); - return; - } + g_variant_unref(metadata); + if (track_id_variant == NULL) { + tmp_error = g_error_new(playerctl_player_error_quark(), 1, + "Could not get track id to set position"); + g_propagate_error(err, tmp_error); + return; + } - const gchar *track_id = g_variant_get_string(track_id_variant, NULL); + const gchar *track_id = g_variant_get_string(track_id_variant, NULL); - org_mpris_media_player2_player_call_set_position_sync(self->priv->proxy, track_id, position, NULL, &tmp_error); - g_variant_unref(track_id_variant); - if (tmp_error != NULL) { - g_propagate_error(err, tmp_error); - } + org_mpris_media_player2_player_call_set_position_sync( + self->priv->proxy, track_id, position, NULL, &tmp_error); + g_variant_unref(track_id_variant); + if (tmp_error != NULL) { + g_propagate_error(err, tmp_error); + } } - diff --git a/playerctl/playerctl-player.h b/playerctl/playerctl-player.h index 0eb8f71..7424c8f 100644 --- a/playerctl/playerctl-player.h +++ b/playerctl/playerctl-player.h @@ -1,5 +1,4 @@ -/* vim:ts=2:sw=2:expandtab - * +/* * This file is part of playerctl. * * playerctl is free software: you can redistribute it and/or modify it under @@ -31,51 +30,60 @@ * SECTION: playerctl-player * @short_description: A class to control an MPRIS player */ -#define PLAYERCTL_TYPE_PLAYER (playerctl_player_get_type ()) -#define PLAYERCTL_PLAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PLAYERCTL_TYPE_PLAYER, PlayerctlPlayer)) -#define PLAYERCTL_IS_PLAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PLAYERCTL_TYPE_PLAYER)) -#define PLAYERCTL_PLAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PLAYERCTL_TYPE_PLAYER, PlayerctlPlayerClass)) -#define PLAYERCTL_IS_PLAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PLAYERCTL_TYPE_PLAYER)) -#define PLAYERCTL_PLAYER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PLAYERCTL_TYPE_PLAYER, PlayerctlPlayerClass)) +#define PLAYERCTL_TYPE_PLAYER (playerctl_player_get_type()) +#define PLAYERCTL_PLAYER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), PLAYERCTL_TYPE_PLAYER, PlayerctlPlayer)) +#define PLAYERCTL_IS_PLAYER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), PLAYERCTL_TYPE_PLAYER)) +#define PLAYERCTL_PLAYER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), PLAYERCTL_TYPE_PLAYER, \ + PlayerctlPlayerClass)) +#define PLAYERCTL_IS_PLAYER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), PLAYERCTL_TYPE_PLAYER)) +#define PLAYERCTL_PLAYER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), PLAYERCTL_TYPE_PLAYER, \ + PlayerctlPlayerClass)) -typedef struct _PlayerctlPlayer PlayerctlPlayer; -typedef struct _PlayerctlPlayerClass PlayerctlPlayerClass; +typedef struct _PlayerctlPlayer PlayerctlPlayer; +typedef struct _PlayerctlPlayerClass PlayerctlPlayerClass; typedef struct _PlayerctlPlayerPrivate PlayerctlPlayerPrivate; -struct _PlayerctlPlayer -{ - /* Parent instance structure */ - GObject parent_instance; +struct _PlayerctlPlayer { + /* Parent instance structure */ + GObject parent_instance; - /* Private members */ - PlayerctlPlayerPrivate *priv; + /* Private members */ + PlayerctlPlayerPrivate *priv; }; -struct _PlayerctlPlayerClass -{ - /* Parent class structure */ - GObjectClass parent_class; +struct _PlayerctlPlayerClass { + /* Parent class structure */ + GObjectClass parent_class; }; -GType playerctl_player_get_type (void); +GType playerctl_player_get_type(void); -PlayerctlPlayer *playerctl_player_new (const gchar *name, GError **err); +PlayerctlPlayer *playerctl_player_new(const gchar *name, GError **err); /* * Method definitions. */ -PlayerctlPlayer *playerctl_player_on(PlayerctlPlayer *self, const gchar *event, GClosure *callback, GError **err); +PlayerctlPlayer *playerctl_player_on(PlayerctlPlayer *self, const gchar *event, + GClosure *callback, GError **err); -PlayerctlPlayer *playerctl_player_open(PlayerctlPlayer *self, gchar *uri, GError **err); +PlayerctlPlayer *playerctl_player_open(PlayerctlPlayer *self, gchar *uri, + GError **err); -PlayerctlPlayer *playerctl_player_play_pause(PlayerctlPlayer *self, GError **err); +PlayerctlPlayer *playerctl_player_play_pause(PlayerctlPlayer *self, + GError **err); PlayerctlPlayer *playerctl_player_play(PlayerctlPlayer *self, GError **err); PlayerctlPlayer *playerctl_player_stop(PlayerctlPlayer *self, GError **err); -PlayerctlPlayer *playerctl_player_seek(PlayerctlPlayer *self, gint64 offset, GError **err); +PlayerctlPlayer *playerctl_player_seek(PlayerctlPlayer *self, gint64 offset, + GError **err); PlayerctlPlayer *playerctl_player_pause(PlayerctlPlayer *self, GError **err); @@ -83,7 +91,9 @@ PlayerctlPlayer *playerctl_player_next(PlayerctlPlayer *self, GError **err); PlayerctlPlayer *playerctl_player_previous(PlayerctlPlayer *self, GError **err); -gchar *playerctl_player_print_metadata_prop(PlayerctlPlayer *self, const gchar *property, GError **err); +gchar *playerctl_player_print_metadata_prop(PlayerctlPlayer *self, + const gchar *property, + GError **err); gchar *playerctl_player_get_artist(PlayerctlPlayer *self, GError **err); @@ -91,6 +101,7 @@ gchar *playerctl_player_get_title(PlayerctlPlayer *self, GError **err); gchar *playerctl_player_get_album(PlayerctlPlayer *self, GError **err); -void playerctl_player_set_position(PlayerctlPlayer *self, gint64 position, GError **err); +void playerctl_player_set_position(PlayerctlPlayer *self, gint64 position, + GError **err); #endif /* __PLAYERCTL_PLAYER_H__ */ diff --git a/playerctl/playerctl-version.h.in b/playerctl/playerctl-version.h.in index 1f2cff2..ed4c3c5 100644 --- a/playerctl/playerctl-version.h.in +++ b/playerctl/playerctl-version.h.in @@ -1,5 +1,4 @@ -/* vim:ts=2:sw=2:expandtab - * +/* * This file is part of playerctl. * * playerctl is free software: you can redistribute it and/or modify it under diff --git a/playerctl/playerctl.h b/playerctl/playerctl.h index 23ebe97..f9b1b83 100644 --- a/playerctl/playerctl.h +++ b/playerctl/playerctl.h @@ -1,5 +1,4 @@ -/* vim:ts=2:sw=2:expandtab - * +/* * This file is part of playerctl. * * playerctl is free software: you can redistribute it and/or modify it under @@ -23,8 +22,8 @@ #define __PLAYERCTL_INSIDE__ -#include #include +#include #undef __PLAYERCTL_INSIDE__