summaryrefslogtreecommitdiff
path: root/src/audtool
diff options
context:
space:
mode:
Diffstat (limited to 'src/audtool')
-rw-r--r--src/audtool/audtool.h4
-rw-r--r--src/audtool/handlers_general.c38
-rw-r--r--src/audtool/handlers_playback.c13
-rw-r--r--src/audtool/main.c32
-rw-r--r--src/audtool/wrappers.c23
5 files changed, 92 insertions, 18 deletions
diff --git a/src/audtool/audtool.h b/src/audtool/audtool.h
index cb62488..c0bb88d 100644
--- a/src/audtool/audtool.h
+++ b/src/audtool/audtool.h
@@ -114,6 +114,8 @@ void playback_stopped (int, char * *);
void playback_status (int, char * *);
void playback_seek (int, char * *);
void playback_seek_relative (int, char * *);
+void playback_record (int, char * *);
+void playback_recording (int, char * *);
void mainwin_show (int, char * *);
void show_preferences_window (int, char * *);
@@ -123,6 +125,8 @@ void shutdown_audacious_server (int, char * *);
void show_about_window (int, char * *);
void get_version (int argc, char * * argv);
+void plugin_is_enabled (int argc, char * * argv);
+void plugin_enable (int argc, char * * argv);
void equalizer_get_eq (int argc, char * * argv);
void equalizer_get_eq_preamp (int argc, char * * argv);
diff --git a/src/audtool/handlers_general.c b/src/audtool/handlers_general.c
index 67e00f3..68c9da5 100644
--- a/src/audtool/handlers_general.c
+++ b/src/audtool/handlers_general.c
@@ -88,6 +88,10 @@ void shutdown_audacious_server (int argc, char * * argv)
void get_handlers_list (int argc, char * * argv)
{
+ audtool_report ("Usage: audtool [-#] COMMAND ...");
+ audtool_report (" where # (1-9) selects the instance of Audacious to control");
+ audtool_report ("");
+
for (int i = 0; handlers[i].name; i ++)
{
if (! g_ascii_strcasecmp ("<sep>", handlers[i].name))
@@ -98,6 +102,7 @@ void get_handlers_list (int argc, char * * argv)
audtool_report ("");
audtool_report ("Commands may be prefixed with '--' (GNU-style long options) or not, your choice.");
+ audtool_report ("Show/hide and enable/disable commands take an optional 'on' or 'off' argument.");
audtool_report ("Report bugs to http://redmine.audacious-media-player.org/projects/audacious");
}
@@ -112,3 +117,36 @@ void get_version (int argc, char * * argv)
audtool_report ("Audacious %s", version);
g_free (version);
}
+
+void plugin_is_enabled (int argc, char * * argv)
+{
+ if (argc != 2)
+ {
+ audtool_whine_args (argv[0], "<plugin>");
+ exit (1);
+ }
+
+ gboolean enabled = FALSE;
+ obj_audacious_call_plugin_is_enabled_sync (dbus_proxy, argv[1], & enabled, NULL, NULL);
+
+ exit (! enabled);
+}
+
+void plugin_enable (int argc, char * * argv)
+{
+ gboolean enable = TRUE;
+
+ if (argc == 2)
+ enable = TRUE;
+ else if (argc == 3 && ! g_ascii_strcasecmp (argv[2], "on"))
+ enable = TRUE;
+ else if (argc == 3 && ! g_ascii_strcasecmp (argv[2], "off"))
+ enable = FALSE;
+ else
+ {
+ audtool_whine_args (argv[0], "<plugin> <on/off>");
+ exit (1);
+ }
+
+ obj_audacious_call_plugin_enable_sync (dbus_proxy, argv[1], enable, NULL, NULL);
+}
diff --git a/src/audtool/handlers_playback.c b/src/audtool/handlers_playback.c
index 1b3a90a..8a812b7 100644
--- a/src/audtool/handlers_playback.c
+++ b/src/audtool/handlers_playback.c
@@ -101,3 +101,16 @@ void playback_seek_relative (int argc, char * * argv)
obj_audacious_call_time_sync (dbus_proxy, & oldtime, NULL, NULL);
obj_audacious_call_seek_sync (dbus_proxy, MAX (0, oldtime + atof (argv[1]) * 1000), NULL, NULL);
}
+
+void playback_record (int argc, char * * argv)
+{
+ obj_audacious_call_record_sync (dbus_proxy, NULL, NULL);
+}
+
+void playback_recording (int argc, char * * argv)
+{
+ gboolean recording = FALSE;
+ obj_audacious_call_recording_sync (dbus_proxy, & recording, NULL, NULL);
+
+ exit (! recording);
+}
diff --git a/src/audtool/main.c b/src/audtool/main.c
index 2ed0fa9..c49d62e 100644
--- a/src/audtool/main.c
+++ b/src/audtool/main.c
@@ -20,6 +20,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <locale.h>
#include "audtool.h"
@@ -54,6 +55,8 @@ const struct commandhandler handlers[] =
{"playback-status", playback_status, "print status (playing/paused/stopped)", 0},
{"playback-seek", playback_seek, "seek to given time", 1},
{"playback-seek-relative", playback_seek_relative, "seek to relative time offset", 1},
+ {"playback-record", playback_record, "toggle stream recording", 0},
+ {"playback-recording", playback_recording, "exit code = 0 if recording", 0},
{"<sep>", NULL, "Playlist commands", 0},
{"playlist-advance", playlist_advance, "skip to next song", 0},
@@ -121,6 +124,8 @@ const struct commandhandler handlers[] =
{"about-show", show_about_window, "show/hide About window", 1},
{"version", get_version, "print Audacious version", 0},
+ {"plugin-is-enabled", plugin_is_enabled, "exit code = 0 if plugin is enabled", 1},
+ {"plugin-enable", plugin_enable, "enable/disable plugin", 2},
{"shutdown", shutdown_audacious_server, "shut down Audacious", 0},
{"help", get_handlers_list, "print this help", 0},
@@ -140,7 +145,7 @@ static void audtool_disconnect (void)
connection = NULL;
}
-static void audtool_connect (void)
+static void audtool_connect (int instance)
{
GError * error = NULL;
@@ -153,8 +158,14 @@ static void audtool_connect (void)
exit (EXIT_FAILURE);
}
- dbus_proxy = obj_audacious_proxy_new_sync (connection, 0,
- "org.atheme.audacious", "/org/atheme/audacious", NULL, & error);
+ char name[32];
+ if (instance == 1)
+ strcpy (name, "org.atheme.audacious");
+ else
+ sprintf (name, "org.atheme.audacious-%d", instance);
+
+ dbus_proxy = obj_audacious_proxy_new_sync (connection, 0, name,
+ "/org/atheme/audacious", NULL, & error);
if (! dbus_proxy)
{
@@ -169,7 +180,8 @@ static void audtool_connect (void)
int main (int argc, char * * argv)
{
- int i, j = 0, k = 0;
+ int instance = 1;
+ int i, j, k = 0;
setlocale (LC_CTYPE, "");
@@ -177,7 +189,15 @@ int main (int argc, char * * argv)
g_type_init();
#endif
- audtool_connect ();
+ // parse instance number (must come first)
+ if (argc >= 2 && argv[1][0] == '-' && argv[1][1] >= '1' && argv[1][1] <= '9' && ! argv[1][2])
+ {
+ instance = argv[1][1] - '0';
+ argc --;
+ argv ++;
+ }
+
+ audtool_connect (instance);
if (argc < 2)
{
@@ -193,7 +213,7 @@ int main (int argc, char * * argv)
! g_ascii_strcasecmp (g_strconcat ("--", handlers[i].name, NULL),
argv[j])) && g_ascii_strcasecmp ("<sep>", handlers[i].name))
{
- int numargs = handlers[i].args + 1 < argc - j ? handlers[i].args + 1 : argc - j;
+ int numargs = MIN (handlers[i].args + 1, argc - j);
handlers[i].handler (numargs, & argv[j]);
j += handlers[i].args;
k ++;
diff --git a/src/audtool/wrappers.c b/src/audtool/wrappers.c
index c255954..35afa35 100644
--- a/src/audtool/wrappers.c
+++ b/src/audtool/wrappers.c
@@ -24,19 +24,18 @@
void generic_on_off (int argc, char * * argv, OnOffFunc func)
{
- gboolean show = TRUE;
-
- if (argc >= 2)
+ gboolean show;
+
+ if (argc == 1)
+ show = TRUE;
+ else if (argc == 2 && ! g_ascii_strcasecmp (argv[1], "on"))
+ show = TRUE;
+ else if (argc == 2 && ! g_ascii_strcasecmp (argv[1], "off"))
+ show = FALSE;
+ else
{
- if (! g_ascii_strcasecmp (argv[1], "on"))
- show = TRUE;
- else if (! g_ascii_strcasecmp (argv[1], "off"))
- show = FALSE;
- else
- {
- audtool_whine_args (argv[0], "<on/off>");
- exit (1);
- }
+ audtool_whine_args (argv[0], "<on/off>");
+ exit (1);
}
func (dbus_proxy, show, NULL, NULL);