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>