gui/ocarina: Add basic command line options
These options are mostly used to communicate with a running Ocarina instance to control playback. Implements #37: Ocarina Command Line Commands Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>keep-around/5a41eef8a249c48f55a58d985309f7692714504d
parent
419d31d4c3
commit
5a41eef8a2
1
TODO
1
TODO
|
@ -38,4 +38,3 @@ Future work:
|
|||
- OSX
|
||||
- Windows
|
||||
- Android
|
||||
- Command line tools for web interface development?
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
* Copyright 2014 (c) Anna Schumaker.
|
||||
*/
|
||||
#include <core/core.h>
|
||||
#include <core/audio.h>
|
||||
#include <gui/audio.h>
|
||||
#include <gui/builder.h>
|
||||
#include <gui/collection.h>
|
||||
|
@ -13,7 +14,17 @@
|
|||
#include <gui/view.h>
|
||||
#include <gui/window.h>
|
||||
|
||||
#define OCARINA_FLAGS (G_APPLICATION_FLAGS_NONE)
|
||||
#define OCARINA_FLAGS (G_APPLICATION_HANDLES_COMMAND_LINE)
|
||||
|
||||
static const GOptionEntry ocarina_options[] = {
|
||||
{ "next", 'n', 0, G_OPTION_ARG_NONE, NULL, "Play next track", NULL },
|
||||
{ "pause", 'P', 0, G_OPTION_ARG_NONE, NULL, "Pause playback", NULL },
|
||||
{ "play", 'p', 0, G_OPTION_ARG_NONE, NULL, "Start playback", NULL },
|
||||
{ "previous", 'N', 0, G_OPTION_ARG_NONE, NULL, "Play previous track", NULL },
|
||||
{ "toggle", 't', 0, G_OPTION_ARG_NONE, NULL, "Toggle playback state", NULL },
|
||||
{ "version", 'v', 0, G_OPTION_ARG_NONE, NULL, "Print version and exit", NULL },
|
||||
{ NULL },
|
||||
};
|
||||
|
||||
#ifndef CONFIG_DEBUG
|
||||
const static gchar *OCARINA_APP = "org.gtk.ocarina";
|
||||
|
@ -46,6 +57,44 @@ static void __ocarina_activate(GApplication *application, gpointer data)
|
|||
GTK_WINDOW(gui_builder_widget("o_window")));
|
||||
}
|
||||
|
||||
static int __ocarina_local_options(GApplication *application,
|
||||
GVariantDict *options, gpointer data)
|
||||
{
|
||||
if (!g_variant_dict_contains(options, "version"))
|
||||
return -1;
|
||||
g_printf("Ocarina %s\n", get_version());
|
||||
g_printf("GTK+ %u.%u.%u\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
|
||||
g_printf("%s\n", gst_version_string());
|
||||
g_printf("%s, %s\n", __DATE__, __TIME__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __ocarina_command_line(GApplication *application,
|
||||
GApplicationCommandLine *command,
|
||||
gpointer data)
|
||||
{
|
||||
GVariantDict *options;
|
||||
|
||||
g_application_activate(application);
|
||||
|
||||
options = g_application_command_line_get_options_dict(command);
|
||||
if (g_variant_dict_contains(options, "next"))
|
||||
audio_next();
|
||||
else if (g_variant_dict_contains(options, "pause"))
|
||||
audio_pause();
|
||||
else if (g_variant_dict_contains(options, "play"))
|
||||
audio_play();
|
||||
else if (g_variant_dict_contains(options, "previous"))
|
||||
audio_prev();
|
||||
else if (g_variant_dict_contains(options, "toggle")) {
|
||||
if (audio_cur_state() == GST_STATE_PLAYING)
|
||||
audio_pause();
|
||||
else
|
||||
audio_play();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __ocarina_startup(GApplication *application, gpointer data)
|
||||
{
|
||||
gchar *ui = find_file_path("ocarina.ui");
|
||||
|
@ -81,12 +130,17 @@ static void __ocarina_shutdown(GApplication *application, gpointer data)
|
|||
int main(int argc, char **argv)
|
||||
{
|
||||
GtkApplication *ocarina = gtk_application_new(OCARINA_APP, OCARINA_FLAGS);
|
||||
|
||||
startup_argc = argc;
|
||||
startup_argv = argv;
|
||||
|
||||
g_signal_connect(G_APPLICATION(ocarina), "activate", (GCallback)__ocarina_activate, NULL);
|
||||
g_signal_connect(G_APPLICATION(ocarina), "startup", (GCallback)__ocarina_startup, NULL);
|
||||
g_signal_connect(G_APPLICATION(ocarina), "shutdown", (GCallback)__ocarina_shutdown, NULL);
|
||||
g_application_add_main_option_entries(G_APPLICATION(ocarina), ocarina_options);
|
||||
g_application_add_option_group(G_APPLICATION(ocarina), gst_init_get_option_group());
|
||||
|
||||
g_signal_connect(G_APPLICATION(ocarina), "activate", (GCallback)__ocarina_activate, NULL);
|
||||
g_signal_connect(G_APPLICATION(ocarina), "handle-local-options",
|
||||
(GCallback)__ocarina_local_options, NULL);
|
||||
g_signal_connect(G_APPLICATION(ocarina), "command-line", (GCallback)__ocarina_command_line, NULL);
|
||||
g_signal_connect(G_APPLICATION(ocarina), "startup", (GCallback)__ocarina_startup, NULL);
|
||||
g_signal_connect(G_APPLICATION(ocarina), "shutdown", (GCallback)__ocarina_shutdown, NULL);
|
||||
return g_application_run(G_APPLICATION(ocarina), argc, argv);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue