changeset 1238:5d9fb703a7cc

aosd: added triggers for pause and unpause event
author Giacomo Lozito <james@develia.org>
date Thu, 12 Jul 2007 01:04:05 +0200
parents 0d5b0f861bf0
children cbd7a81ac8ea
files src/aosd/aosd_trigger.c
diffstat 1 files changed, 85 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/aosd/aosd_trigger.c	Thu Jul 12 04:36:03 2007 +0900
+++ b/src/aosd/aosd_trigger.c	Thu Jul 12 01:04:05 2007 +0200
@@ -26,6 +26,7 @@
 #include <audacious/playlist.h>
 #include <audacious/strings.h>
 #include <audacious/hook.h>
+#include <audacious/auddrct.h>
 
 
 extern aosd_cfg_t * global_config;
@@ -36,18 +37,22 @@
 {
   AOSD_TRIGGER_PB_START = 0,
   AOSD_TRIGGER_PB_TITLECHANGE = 1,
-  AOSD_TRIGGER_VOL_CHANGE = 2
+  AOSD_TRIGGER_VOL_CHANGE = 2,
+  AOSD_TRIGGER_PB_PAUSEON = 3,
+  AOSD_TRIGGER_PB_PAUSEOFF = 4
 };
 
 /* trigger codes array size */
-#define AOSD_TRIGGER_CODES_ARRAY_SIZE 3
+#define AOSD_TRIGGER_CODES_ARRAY_SIZE 5
 
 /* trigger codes array */
 gint aosd_trigger_codes[] =
 {
   AOSD_TRIGGER_PB_START,
   AOSD_TRIGGER_PB_TITLECHANGE,
-  AOSD_TRIGGER_VOL_CHANGE
+  AOSD_TRIGGER_VOL_CHANGE,
+  AOSD_TRIGGER_PB_PAUSEON,
+  AOSD_TRIGGER_PB_PAUSEOFF
 };
 
 /* prototypes of trigger functions */
@@ -57,6 +62,10 @@
 static void aosd_trigger_func_pb_titlechange_cb ( gpointer , gpointer );
 static void aosd_trigger_func_vol_change_onoff ( gboolean );
 static void aosd_trigger_func_vol_change_cb ( gpointer , gpointer );
+static void aosd_trigger_func_pb_pauseon_onoff ( gboolean );
+static void aosd_trigger_func_pb_pauseon_cb ( gpointer , gpointer );
+static void aosd_trigger_func_pb_pauseoff_onoff ( gboolean );
+static void aosd_trigger_func_pb_pauseoff_cb ( gpointer , gpointer );
 
 /* map trigger codes to trigger objects */
 aosd_trigger_t aosd_triggers[] =
@@ -76,7 +85,17 @@
   [AOSD_TRIGGER_VOL_CHANGE] = { N_("Volume Change") ,
                                 N_("Triggers OSD when volume is changed.") ,
                                 aosd_trigger_func_vol_change_onoff ,
-                                aosd_trigger_func_vol_change_cb }
+                                aosd_trigger_func_vol_change_cb },
+
+  [AOSD_TRIGGER_PB_PAUSEON] = { N_("Pause On") ,
+                                N_("Triggers OSD when playback is paused.") ,
+                                aosd_trigger_func_pb_pauseon_onoff ,
+                                aosd_trigger_func_pb_pauseon_cb },
+
+  [AOSD_TRIGGER_PB_PAUSEOFF] = { N_("Pause Off") ,
+                                 N_("Triggers OSD when playback is unpaused.") ,
+                                 aosd_trigger_func_pb_pauseoff_onoff ,
+                                 aosd_trigger_func_pb_pauseoff_cb }
 };
 
 
@@ -162,7 +181,7 @@
   PlaylistEntry *pl_entry = plentry_gp;
   if ( plentry_gp != NULL )
   {
-    gchar *title;
+    gchar *title, *utf8_title;
     if ( pl_entry->title != NULL )
     {
       /* if there is a proper title, use it */
@@ -175,7 +194,7 @@
       gint pos = playlist_get_position(active);
       title = playlist_get_songtitle(active, pos);
     }
-    gchar *utf8_title = aosd_trigger_utf8convert( title );
+    utf8_title = aosd_trigger_utf8convert( title );
     if ( g_utf8_validate( utf8_title , -1 , NULL ) == TRUE )
     {
       gchar *utf8_title_markup = g_markup_printf_escaped(
@@ -333,3 +352,63 @@
   }
   return;
 }
+
+
+static void
+aosd_trigger_func_pb_pauseon_onoff ( gboolean turn_on )
+{
+  if ( turn_on == TRUE )
+    hook_associate( "playback pause" , aosd_trigger_func_pb_pauseon_cb , NULL );
+  else
+    hook_dissociate( "playback pause" , aosd_trigger_func_pb_pauseon_cb );
+  return;
+}
+
+static void
+aosd_trigger_func_pb_pauseon_cb ( gpointer unused1 , gpointer unused2 )
+{
+  gchar *utf8_title_markup = g_markup_printf_escaped(
+    "<span font_desc='%s'>Paused</span>" , global_config->osd->text.fonts_name[0] );
+  aosd_osd_display( utf8_title_markup , global_config->osd , FALSE );
+  g_free( utf8_title_markup );
+  return;
+}
+
+
+static void
+aosd_trigger_func_pb_pauseoff_onoff ( gboolean turn_on )
+{
+  if ( turn_on == TRUE )
+    hook_associate( "playback unpause" , aosd_trigger_func_pb_pauseoff_cb , NULL );
+  else
+    hook_dissociate( "playback unpause" , aosd_trigger_func_pb_pauseoff_cb );
+  return;
+}
+
+static void
+aosd_trigger_func_pb_pauseoff_cb ( gpointer unused1 , gpointer unused2 )
+{
+  Playlist *active = playlist_get_active();
+  gint pos = playlist_get_position(active);
+  gchar *title, *utf8_title, *utf8_title_markup;
+  gint time_cur, time_tot;
+  gint time_cur_m, time_cur_s, time_tot_m, time_tot_s;
+
+  time_tot = playlist_get_songtime(active, pos) / 1000;
+  time_cur = audacious_drct_get_time() / 1000;
+  time_cur_s = time_cur % 60;
+  time_cur_m = (time_cur - time_cur_s) / 60;
+  time_tot_s = time_tot % 60;
+  time_tot_m = (time_tot - time_tot_s) / 60;
+
+  title = playlist_get_songtitle(active, pos);
+  utf8_title = aosd_trigger_utf8convert( title );
+  utf8_title_markup = g_markup_printf_escaped(
+    "<span font_desc='%s'>%s (%i:%02i/%i:%02i)</span>" ,
+    global_config->osd->text.fonts_name[0] , utf8_title , time_cur_m , time_cur_s , time_tot_m , time_tot_s );
+  aosd_osd_display( utf8_title_markup , global_config->osd , FALSE );
+  g_free( utf8_title_markup );
+  g_free( utf8_title );
+  g_free( title );
+  return;
+}