Mercurial > audlegacy
changeset 2695:4c4c8b294287 trunk
[svn] Fixed formatting. Tabs + tw=2 ==> spaces + tw=4.
author | magma |
---|---|
date | Sat, 05 May 2007 16:04:39 -0700 |
parents | c2b82432c1b6 |
children | c00850315ce1 |
files | ChangeLog src/audacious/build_stamp.c src/audacious/dbus.c src/audacious/dbus.h src/audacious/main.c src/audacious/objects.xml |
diffstat | 6 files changed, 314 insertions(+), 300 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Sat May 05 15:37:54 2007 -0700 +++ b/ChangeLog Sat May 05 16:04:39 2007 -0700 @@ -1,3 +1,17 @@ +2007-05-05 22:37:54 +0000 Ben Tucker <bnt@interchange.ubc.ca> + revision [4414] + Added basic DBus support, disabled by default with a configuration option to enable it. The general and playback information/manipulation methods are currently the only ones implemented. That is version, play, pause, stop, playing, paused, stopped, status, and seek. There are stubs for many unimplemented methods. + + trunk/configure.ac | 36 ++++++ + trunk/mk/rules.mk.in | 5 + trunk/src/audacious/Makefile | 7 + + trunk/src/audacious/dbus.c | 229 ++++++++++++++++++++++++++++++++++++++++ + trunk/src/audacious/dbus.h | 88 +++++++++++++++ + trunk/src/audacious/main.c | 8 + + trunk/src/audacious/objects.xml | 223 ++++++++++++++++++++++++++++++++++++++ + 7 files changed, 596 insertions(+) + + 2007-05-02 17:34:59 +0000 Michael Farber <01mf02@gmail.com> revision [4412] - Made the Space key pause/unpause playback (like e.g. mplayer)
--- a/src/audacious/build_stamp.c Sat May 05 15:37:54 2007 -0700 +++ b/src/audacious/build_stamp.c Sat May 05 16:04:39 2007 -0700 @@ -1,2 +1,2 @@ #include <glib.h> -const gchar *svn_stamp = "20070502-4412"; +const gchar *svn_stamp = "20070505-4414";
--- a/src/audacious/dbus.c Sat May 05 15:37:54 2007 -0700 +++ b/src/audacious/dbus.c Sat May 05 16:04:39 2007 -0700 @@ -19,7 +19,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +# include "config.h" #endif #include <glib.h> @@ -45,185 +45,185 @@ void audacious_remote_class_init(RemoteObjectClass *class) {} void audacious_remote_init(RemoteObject *object) { - GError *error = NULL; - DBusGProxy *driver_proxy; - unsigned int request_ret; + GError *error = NULL; + DBusGProxy *driver_proxy; + unsigned int request_ret; - // Initialize the DBus connection - object->connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); - if (object->connection == NULL) { - g_warning("Unable to connect to dbus: %s", error->message); - g_error_free(error); - return; - } - - dbus_g_object_type_install_info(audacious_remote_get_type(), - &dbus_glib_audacious_remote_object_info); - - // Register DBUS path - dbus_g_connection_register_g_object(object->connection, DBUS_OBJECT_PATH, - G_OBJECT(object)); + // Initialize the DBus connection + object->connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); + if (object->connection == NULL) { + g_warning("Unable to connect to dbus: %s", error->message); + g_error_free(error); + return; + } + + dbus_g_object_type_install_info(audacious_remote_get_type(), + &dbus_glib_audacious_remote_object_info); + + // Register DBUS path + dbus_g_connection_register_g_object(object->connection, DBUS_OBJECT_PATH, + G_OBJECT(object)); - // Register the service name, the constants here are defined in - // dbus-glib-bindings.h - driver_proxy = dbus_g_proxy_new_for_name(object->connection, - DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS); + // Register the service name, the constants here are defined in + // dbus-glib-bindings.h + driver_proxy = dbus_g_proxy_new_for_name(object->connection, + DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, + DBUS_INTERFACE_DBUS); - if (!org_freedesktop_DBus_request_name(driver_proxy, DBUS_SERVICE, 0, - &request_ret, &error)) { - g_warning("Unable to register service: %s", error->message); - g_error_free(error); - } - - g_object_unref(driver_proxy); + if (!org_freedesktop_DBus_request_name(driver_proxy, DBUS_SERVICE, 0, + &request_ret, &error)) { + g_warning("Unable to register service: %s", error->message); + g_error_free(error); + } + + g_object_unref(driver_proxy); } RemoteObject *init_dbus() { - RemoteObject *object; - g_type_init(); - object = g_object_new(audacious_remote_get_type(), NULL); - return object; + RemoteObject *object; + g_type_init(); + object = g_object_new(audacious_remote_get_type(), NULL); + return object; } // Audacious General Information gboolean audacious_remote_version(RemoteObject *obj, gchar **version, - GError **error) { - *version = g_strdup(VERSION); - return TRUE; + GError **error) { + *version = g_strdup(VERSION); + return TRUE; } // Playback Information/Manipulation gboolean audacious_remote_play(RemoteObject *obj, GError **error) { - if (playback_get_paused()) - playback_pause(); - else if (playlist_get_length(playlist_get_active())) - playback_initiate(); - else - mainwin_eject_pushed(); - return TRUE; + if (playback_get_paused()) + playback_pause(); + else if (playlist_get_length(playlist_get_active())) + playback_initiate(); + else + mainwin_eject_pushed(); + return TRUE; } gboolean audacious_remote_pause(RemoteObject *obj, GError **error) { - playback_pause(); - return TRUE; + playback_pause(); + return TRUE; } gboolean audacious_remote_stop(RemoteObject *obj, GError **error) { - ip_data.stop = TRUE; - playback_stop(); - ip_data.stop = FALSE; - mainwin_clear_song_info(); - return TRUE; + ip_data.stop = TRUE; + playback_stop(); + ip_data.stop = FALSE; + mainwin_clear_song_info(); + return TRUE; } gboolean audacious_remote_playing(RemoteObject *obj, gboolean *is_playing, - GError **error) { - *is_playing = playback_get_playing(); - return TRUE; + GError **error) { + *is_playing = playback_get_playing(); + return TRUE; } gboolean audacious_remote_paused(RemoteObject *obj, gboolean *is_paused, - GError **error) { - *is_paused = playback_get_paused(); - return TRUE; + GError **error) { + *is_paused = playback_get_paused(); + return TRUE; } gboolean audacious_remote_stopped(RemoteObject *obj, gboolean *is_stopped, - GError **error) { - *is_stopped = !playback_get_playing(); - return TRUE; + GError **error) { + *is_stopped = !playback_get_playing(); + return TRUE; } gboolean audacious_remote_status(RemoteObject *obj, gchar **status, - GError **error) { - if (playback_get_paused()) - *status = g_strdup("paused"); - else if (playback_get_playing()) - *status = g_strdup("playing"); - else - *status = g_strdup("stopped"); - return TRUE; + GError **error) { + if (playback_get_paused()) + *status = g_strdup("paused"); + else if (playback_get_playing()) + *status = g_strdup("playing"); + else + *status = g_strdup("stopped"); + return TRUE; } gboolean audacious_remote_seek(RemoteObject *obj, guint pos, GError **error) { - if (playlist_get_current_length(playlist_get_active()) > 0 && - pos < (guint)playlist_get_current_length(playlist_get_active())) - playback_seek(pos / 1000); + if (playlist_get_current_length(playlist_get_active()) > 0 && + pos < (guint)playlist_get_current_length(playlist_get_active())) + playback_seek(pos / 1000); - return TRUE; + return TRUE; } // Playlist Information/Manipulation gboolean audacious_remote_position(RemoteObject *obj, int *pos, GError **error) { - return TRUE; + return TRUE; } gboolean audacious_remote_advance(RemoteObject *obj, GError **error) { - return TRUE; + return TRUE; } gboolean audacious_remote_reverse(RemoteObject *obj, GError **error) { - return TRUE; + return TRUE; } gboolean audacious_remote_length(RemoteObject *obj, int *length, - GError **error) { - return TRUE; + GError **error) { + return TRUE; } gboolean audacious_remote_song_title(RemoteObject *obj, int pos, - gchar **title, GError **error) { - return TRUE; + gchar **title, GError **error) { + return TRUE; } gboolean audacious_remote_song_filename(RemoteObject *obj, int pos, - gchar **filename, GError **error) { - return TRUE; + gchar **filename, GError **error) { + return TRUE; } gboolean audacious_remote_song_length(RemoteObject *obj, int pos, int *length, - GError **error) { - return TRUE; + GError **error) { + return TRUE; } gboolean audacious_remote_song_frames(RemoteObject *obj, int pos, int *length, - GError **error) { - return TRUE; + GError **error) { + return TRUE; } gboolean audacious_remote_jump(RemoteObject *obj, int pos, GError **error) { - return TRUE; + return TRUE; } gboolean audacious_remote_add_url(RemoteObject *obj, gchar *url, - GError **error) { - return TRUE; + GError **error) { + return TRUE; } gboolean audacious_remote_delete(RemoteObject *obj, int pos, GError **error) { - return TRUE; + return TRUE; } gboolean audacious_remote_clear(RemoteObject *obj, GError **error) { - return TRUE; + return TRUE; } gboolean audacious_remote_repeating(RemoteObject *obj, gboolean *is_repeating, - GError **error) { - return TRUE; + GError **error) { + return TRUE; } gboolean audacious_remote_repeat(RemoteObject *obj, GError **error) { - return TRUE; + return TRUE; } gboolean audacious_remote_shuffling(RemoteObject *obj, gboolean *is_shuffling, - GError **error) { - return TRUE; + GError **error) { + return TRUE; } gboolean audacious_remote_shuffle(RemoteObject *obj, GError **error) { - return TRUE; + return TRUE; }
--- a/src/audacious/dbus.h Sat May 05 15:37:54 2007 -0700 +++ b/src/audacious/dbus.h Sat May 05 16:04:39 2007 -0700 @@ -30,12 +30,12 @@ #define DBUS_OBJECT_PATH "/org/audacious" typedef struct { - GObject parent; - DBusGConnection *connection; + GObject parent; + DBusGConnection *connection; } RemoteObject; typedef struct { - GObjectClass parent_class; + GObjectClass parent_class; } RemoteObjectClass; RemoteObject *init_dbus(); @@ -44,20 +44,20 @@ // Audacious General Information gboolean audacious_remote_version(RemoteObject *obj, gchar **version, - GError **error); + GError **error); // Playback Information/Manipulation gboolean audacious_remote_play(RemoteObject *obj, GError **error); gboolean audacious_remote_pause(RemoteObject *obj, GError **error); gboolean audacious_remote_stop(RemoteObject *obj, GError **error); gboolean audacious_remote_playing(RemoteObject *obj, gboolean *is_playing, - GError **error); + GError **error); gboolean audacious_remote_paused(RemoteObject *obj, gboolean *is_paused, - GError **error); + GError **error); gboolean audacious_remote_stopped(RemoteObject *obj, gboolean *is_stopped, - GError **error); + GError **error); gboolean audacious_remote_status(RemoteObject *obj, gchar **status, - GError **error); + GError **error); gboolean audacious_remote_seek(RemoteObject *obj, guint pos, GError **error); // Playlist Information/Manipulation @@ -65,24 +65,24 @@ gboolean audacious_remote_advance(RemoteObject *obj, GError **error); gboolean audacious_remote_reverse(RemoteObject *obj, GError **error); gboolean audacious_remote_length(RemoteObject *obj, int *length, - GError **error); + GError **error); gboolean audacious_remote_song_title(RemoteObject *obj, int pos, - gchar **title, GError **error); + gchar **title, GError **error); gboolean audacious_remote_song_filename(RemoteObject *obj, int pos, - gchar **filename, GError **error); + gchar **filename, GError **error); gboolean audacious_remote_song_length(RemoteObject *obj, int pos, int *length, - GError **error); + GError **error); gboolean audacious_remote_song_frames(RemoteObject *obj, int pos, int *length, - GError **error); + GError **error); gboolean audacious_remote_jump(RemoteObject *obj, int pos, GError **error); gboolean audacious_remote_add_url(RemoteObject *obj, gchar *url, - GError **error); + GError **error); gboolean audacious_remote_delete(RemoteObject *obj, int pos, GError **error); gboolean audacious_remote_clear(RemoteObject *obj, GError **error); gboolean audacious_remote_repeating(RemoteObject *obj, gboolean *is_repeating, - GError **error); + GError **error); gboolean audacious_remote_repeat(RemoteObject *obj, GError **error); gboolean audacious_remote_shuffling(RemoteObject *obj, gboolean *is_shuffling, - GError **error); + GError **error); gboolean audacious_remote_shuffle(RemoteObject *obj, GError **error); #endif // !_AUDDBUS_H
--- a/src/audacious/main.c Sat May 05 15:37:54 2007 -0700 +++ b/src/audacious/main.c Sat May 05 16:04:39 2007 -0700 @@ -1189,7 +1189,7 @@ GDK_THREADS_LEAVE(); #ifdef USE_DBUS - RemoteObject *object = init_dbus(); + RemoteObject *object = init_dbus(); #endif ctrlsocket_start();
--- a/src/audacious/objects.xml Sat May 05 15:37:54 2007 -0700 +++ b/src/audacious/objects.xml Sat May 05 16:04:39 2007 -0700 @@ -1,223 +1,223 @@ <?xml version="1.0" encoding="UTF-8" ?> <!-- - Defined: - CMD_GET_VERSION - CMD_PLAY - CMD_PAUSE - CMD_STOP - CMD_IS_PLAYING - CMD_GET_PLAYLIST_POS - CMD_SET_PLAYLIST_POS - CMD_GET_PLAYLIST_LENGTH - CMD_PLAYLIST_CLEAR - CMD_GET_OUTPUT_TIME - CMD_JUMP_TO_TIME - CMD_GET_PLAYLIST_FILE - CMD_GET_PLAYLIST_TITLE - CMD_GET_PLAYLIST_TIME - CMD_PLAYLIST_PREV - CMD_PLAYLIST_NEXT - CMD_TOGGLE_REPEAT - CMD_TOGGLE_SHUFFLE - CMD_PLAYLIST_ADD_URL_STRING - CMD_PLAYLIST_DELETE - CMD_IS_REPEAT - CMD_IS_SHUFFLE + Defined: + CMD_GET_VERSION + CMD_PLAY + CMD_PAUSE + CMD_STOP + CMD_IS_PLAYING + CMD_GET_PLAYLIST_POS + CMD_SET_PLAYLIST_POS + CMD_GET_PLAYLIST_LENGTH + CMD_PLAYLIST_CLEAR + CMD_GET_OUTPUT_TIME + CMD_JUMP_TO_TIME + CMD_GET_PLAYLIST_FILE + CMD_GET_PLAYLIST_TITLE + CMD_GET_PLAYLIST_TIME + CMD_PLAYLIST_PREV + CMD_PLAYLIST_NEXT + CMD_TOGGLE_REPEAT + CMD_TOGGLE_SHUFFLE + CMD_PLAYLIST_ADD_URL_STRING + CMD_PLAYLIST_DELETE + CMD_IS_REPEAT + CMD_IS_SHUFFLE + - - Remaining: - CMD_PLAYLIST_ADD - CMD_GET_VOLUME - CMD_SET_VOLUME - CMD_GET_SKIN - CMD_SET_SKIN - CMD_GET_INFO - CMD_GET_EQ_DATA - CMD_SET_EQ_DATA - CMD_PL_WIN_TOGGLE - CMD_EQ_WIN_TOGGLE - CMD_SHOW_PREFS_BOX - CMD_TOGGLE_AOT - CMD_SHOW_ABOUT_BOX - CMD_EJECT - CMD_PING? - CMD_GET_BALANCE - CMD_MAIN_WIN_TOGGLE - CMD_IS_EQ_WIN - CMD_IS_PL_WIN - CMD_IS_MAIN_WIN - CMD_GET_EQ - CMD_GET_EQ_PREAMP - CMD_GET_EQ_BAND - CMD_SET_EQ - CMD_SET_EQ_PREAMP - CMD_SET_EQ_BAND - CMD_QUIT - CMD_PLAYLIST_INS_URL_STRING - CMD_PLAYLIST_INS - CMD_PLAY_PAUSE - CMD_PLAYQUEUE_ADD - CMD_GET_PLAYQUEUE_LENGTH - CMD_PLAYQUEUE_REMOVE - CMD_TOGGLE_ADVANCE - CMD_IS_ADVANCE - CMD_ACTIVATE - CMD_SHOW_JTF_BOX - CMD_PLAYQUEUE_CLEAR - CMD_PLAYQUEUE_IS_QUEUED - CMD_PLAYQUEUE_GET_POS - CMD_PLAYQUEUE_GET_QPOS - CMD_PLAYLIST_ENQUEUE_TO_TEMP - CMD_PLAYLIST_GET_TUPLE_DATA + Remaining: + CMD_PLAYLIST_ADD + CMD_GET_VOLUME + CMD_SET_VOLUME + CMD_GET_SKIN + CMD_SET_SKIN + CMD_GET_INFO + CMD_GET_EQ_DATA + CMD_SET_EQ_DATA + CMD_PL_WIN_TOGGLE + CMD_EQ_WIN_TOGGLE + CMD_SHOW_PREFS_BOX + CMD_TOGGLE_AOT + CMD_SHOW_ABOUT_BOX + CMD_EJECT + CMD_PING? + CMD_GET_BALANCE + CMD_MAIN_WIN_TOGGLE + CMD_IS_EQ_WIN + CMD_IS_PL_WIN + CMD_IS_MAIN_WIN + CMD_GET_EQ + CMD_GET_EQ_PREAMP + CMD_GET_EQ_BAND + CMD_SET_EQ + CMD_SET_EQ_PREAMP + CMD_SET_EQ_BAND + CMD_QUIT + CMD_PLAYLIST_INS_URL_STRING + CMD_PLAYLIST_INS + CMD_PLAY_PAUSE + CMD_PLAYQUEUE_ADD + CMD_GET_PLAYQUEUE_LENGTH + CMD_PLAYQUEUE_REMOVE + CMD_TOGGLE_ADVANCE + CMD_IS_ADVANCE + CMD_ACTIVATE + CMD_SHOW_JTF_BOX + CMD_PLAYQUEUE_CLEAR + CMD_PLAYQUEUE_IS_QUEUED + CMD_PLAYQUEUE_GET_POS + CMD_PLAYQUEUE_GET_QPOS + CMD_PLAYLIST_ENQUEUE_TO_TEMP + CMD_PLAYLIST_GET_TUPLE_DATA --> <node name="/org/audacious"> - <!-- Audacious General Information --> - <interface name="org.audacious.general"> - <!-- Audacious version --> - <method name="Version"> - <arg type="s" direction="out" name="version"/> - </method> - </interface> + <!-- Audacious General Information --> + <interface name="org.audacious.general"> + <!-- Audacious version --> + <method name="Version"> + <arg type="s" direction="out" name="version"/> + </method> + </interface> - <!-- Playback Information/Manipulation --> - <interface name="org.audacious.playback"> - <!-- Begin or resume playback --> - <method name="Play"/> + <!-- Playback Information/Manipulation --> + <interface name="org.audacious.playback"> + <!-- Begin or resume playback --> + <method name="Play"/> - <!-- Pause playback --> - <method name="Pause"/> + <!-- Pause playback --> + <method name="Pause"/> - <!-- Stop playback --> - <method name="Stop"/> + <!-- Stop playback --> + <method name="Stop"/> - <!-- Is playback playing? --> - <method name="Playing"> - <!-- Return true if playing, false otherwise --> - <arg type="b" direction="out" name="is_playing"/> - </method> + <!-- Is playback playing? --> + <method name="Playing"> + <!-- Return true if playing, false otherwise --> + <arg type="b" direction="out" name="is_playing"/> + </method> - <!-- Is playback paused? --> - <method name="Paused"> - <!-- Return true if paused, false otherwise --> - <arg type="b" direction="out" name="is_paused"/> - </method> + <!-- Is playback paused? --> + <method name="Paused"> + <!-- Return true if paused, false otherwise --> + <arg type="b" direction="out" name="is_paused"/> + </method> - <!-- Is playback stopped? --> - <method name="Stopped"> - <!-- Return true if stopped, false otherwise --> - <arg type="b" direction="out" name="is_stopped"/> - </method> + <!-- Is playback stopped? --> + <method name="Stopped"> + <!-- Return true if stopped, false otherwise --> + <arg type="b" direction="out" name="is_stopped"/> + </method> - <!-- What is the playback status? --> - <method name="Status"> - <!-- Return the status as a string: --> - <!-- one of {"playing" "paused" "stopped"} --> - <arg type="s" direction="out" name="status"/> - </method> + <!-- What is the playback status? --> + <method name="Status"> + <!-- Return the status as a string: --> + <!-- one of {"playing" "paused" "stopped"} --> + <arg type="s" direction="out" name="status"/> + </method> - <!-- Seek to some absolute position in the current song --> - <method name="Seek"> - <!-- Position of song, in ms, to seek to --> - <arg type="i" name="pos"/> + <!-- Seek to some absolute position in the current song --> + <method name="Seek"> + <!-- Position of song, in ms, to seek to --> + <arg type="i" name="pos"/> - <!-- Return true on success, or false if position out of range? --> - <!-- <arg type="b" direction="out"/> --> - </method> - </interface> + <!-- Return true on success, or false if position out of range? --> + <!-- <arg type="b" direction="out"/> --> + </method> + </interface> - <!-- Playlist Information/Manipulation --> - <interface name="org.audacious.playlist"> - <!-- Playlist position --> - <method name="Position"> - <!-- Return position of current song in current playlist --> - <arg type="i" direction="out" name="pos"/> - </method> + <!-- Playlist Information/Manipulation --> + <interface name="org.audacious.playlist"> + <!-- Playlist position --> + <method name="Position"> + <!-- Return position of current song in current playlist --> + <arg type="i" direction="out" name="pos"/> + </method> - <!-- Skip ahead one song in the current playlist --> - <method name="Advance"/> + <!-- Skip ahead one song in the current playlist --> + <method name="Advance"/> - <!-- Skip backwards one song in the current playlist --> - <method name="Reverse"/> + <!-- Skip backwards one song in the current playlist --> + <method name="Reverse"/> - <!-- Playlist length --> - <method name="Length"> - <!-- Return length of current playlist --> - <arg type="i" direction="out" name="length"/> - </method> + <!-- Playlist length --> + <method name="Length"> + <!-- Return length of current playlist --> + <arg type="i" direction="out" name="length"/> + </method> - <!-- Get a song's title --> - <method name="SongTitle"> - <!-- Song position in the playlist --> - <arg type="i" name="pos"/> + <!-- Get a song's title --> + <method name="SongTitle"> + <!-- Song position in the playlist --> + <arg type="i" name="pos"/> - <!-- Return title of desired song --> - <arg type="s" direction="out" name="title"/> - </method> + <!-- Return title of desired song --> + <arg type="s" direction="out" name="title"/> + </method> - <!-- Get a song's filename --> - <method name="SongFilename"> - <!-- Song position in the playlist --> - <arg type="i" name="pos"/> + <!-- Get a song's filename --> + <method name="SongFilename"> + <!-- Song position in the playlist --> + <arg type="i" name="pos"/> - <!-- Return filename of desired song --> - <arg type="s" direction="out" name="filename"/> - </method> + <!-- Return filename of desired song --> + <arg type="s" direction="out" name="filename"/> + </method> - <!-- Get the length of some song, in seconds --> - <method name="SongLength"> - <!-- Song position in the playlist --> - <arg type="i" name="pos"/> + <!-- Get the length of some song, in seconds --> + <method name="SongLength"> + <!-- Song position in the playlist --> + <arg type="i" name="pos"/> - <!-- Return length, in seconds, of desired song --> - <arg type="i" direction="out" name="length"/> - </method> + <!-- Return length, in seconds, of desired song --> + <arg type="i" direction="out" name="length"/> + </method> - <!-- Get the length of some song, in frames --> - <method name="SongFrames"> - <!-- Song position in the playlist --> - <arg type="i" name="pos"/> + <!-- Get the length of some song, in frames --> + <method name="SongFrames"> + <!-- Song position in the playlist --> + <arg type="i" name="pos"/> - <!-- Return length, in frames, of desired song --> - <arg type="i" direction="out" name="length"/> - </method> + <!-- Return length, in frames, of desired song --> + <arg type="i" direction="out" name="length"/> + </method> - <!-- Jump to some position in the playlist --> - <method name="Jump"> - <!-- Song position to jump to --> - <arg type="i" name="pos"/> - </method> + <!-- Jump to some position in the playlist --> + <method name="Jump"> + <!-- Song position to jump to --> + <arg type="i" name="pos"/> + </method> - <!-- Add some URL to the current playlist --> - <method name="AddUrl"> - <!-- URL to add --> - <arg type="s" name="url"/> - </method> + <!-- Add some URL to the current playlist --> + <method name="AddUrl"> + <!-- URL to add --> + <arg type="s" name="url"/> + </method> - <!-- Delete some song from the playlist --> - <method name="Delete"> - <!-- Position of song to delete --> - <arg type="i" name="pos"/> - </method> + <!-- Delete some song from the playlist --> + <method name="Delete"> + <!-- Position of song to delete --> + <arg type="i" name="pos"/> + </method> - <!-- Clear the playlist --> - <method name="Clear"/> + <!-- Clear the playlist --> + <method name="Clear"/> - <!-- Query repeat status --> - <method name="Repeating"> - <arg type="b" direction="out" name="is_repeating"/> - </method> + <!-- Query repeat status --> + <method name="Repeating"> + <arg type="b" direction="out" name="is_repeating"/> + </method> - <!-- Toggle repeat --> - <method name="Repeat"/> + <!-- Toggle repeat --> + <method name="Repeat"/> - <!-- Query shuffle status --> - <method name="Shuffling"> - <arg type="b" direction="out" name="is_shuffling"/> - </method> + <!-- Query shuffle status --> + <method name="Shuffling"> + <arg type="b" direction="out" name="is_shuffling"/> + </method> - <!-- Toggle shuffle --> - <method name="Shuffle"/> - </interface> + <!-- Toggle shuffle --> + <method name="Shuffle"/> + </interface> </node>