@ -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 ) ;
}