The defaults of +20s/-10s seek and +10%/-10% volume are not very
usable.  Adding optional parameters to the LIRC commands allows the
user to set the values to his/her liking and increases the utility of
the plugin massively.

Signed-off-by: Bob Ham <r...@settrans.net>
---
 plugins/lirc/rb-lirc-plugin.c |   74 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 66 insertions(+), 8 deletions(-)

diff --git a/plugins/lirc/rb-lirc-plugin.c b/plugins/lirc/rb-lirc-plugin.c
index fc27c98..cb51787 100644
--- a/plugins/lirc/rb-lirc-plugin.c
+++ b/plugins/lirc/rb-lirc-plugin.c
@@ -94,6 +94,64 @@ rb_lirc_plugin_init (RBLircPlugin *plugin)
 }
 
 static gboolean
+read_parameter (const char *str, gdouble *value)
+{
+       gchar *loc, *check;
+       gdouble detected;
+       
+       loc = strrchr(str, ' ');
+       if (loc == NULL) {
+               return FALSE;
+       }
+       
+       ++loc;
+       detected = g_ascii_strtod(loc, &check);
+       if (errno != 0 || (detected == 0 && check == loc)) {
+               return FALSE;
+       }
+       
+       *value = detected;
+       return TRUE;
+}
+
+static void
+rb_lirc_plugin_seek (RBLircPlugin *plugin,
+                    char *str,
+                    gint32 offset,
+                    gboolean negate)
+{
+       gdouble value;
+       gboolean val_present;
+       
+       val_present = read_parameter(str, &value);
+       if (val_present == TRUE) {
+               offset = value;
+       }
+       
+       if (negate == TRUE) {
+               offset = -offset;
+       }
+       
+       rb_shell_player_seek (plugin->shell_player, offset, NULL);
+}
+
+static void
+rb_lirc_plugin_set_volume_relative (RBLircPlugin *plugin,
+                                   char *str,
+                                   gboolean negate)
+{
+       gdouble offset = 0.1;
+       
+       read_parameter(str, &offset);
+       
+       if (negate == TRUE) {
+               offset = -offset;
+       }
+       
+       rb_shell_player_set_volume_relative (plugin->shell_player, offset, 
NULL);
+}
+
+static gboolean
 rb_lirc_plugin_read_code (GIOChannel *source,
                          GIOCondition condition,
                          RBLircPlugin *plugin)
@@ -151,14 +209,14 @@ rb_lirc_plugin_read_code (GIOChannel *source,
                        rb_shell_player_do_next (plugin->shell_player, NULL);
                } else if (strcmp (str, RB_IR_COMMAND_PREVIOUS) == 0) {
                        rb_shell_player_do_previous (plugin->shell_player, 
NULL);
-               } else if (strcmp (str, RB_IR_COMMAND_SEEK_FORWARD) == 0) {
-                       rb_shell_player_seek (plugin->shell_player, 
FFWD_OFFSET, NULL);
-               } else if (strcmp (str, RB_IR_COMMAND_SEEK_BACKWARD) == 0) {
-                       rb_shell_player_seek (plugin->shell_player, 
-RWD_OFFSET, NULL);
-               } else if (strcmp (str, RB_IR_COMMAND_VOLUME_UP) == 0) {
-                       rb_shell_player_set_volume_relative 
(plugin->shell_player, 0.1, NULL);
-               } else if (strcmp (str, RB_IR_COMMAND_VOLUME_DOWN) == 0) {
-                       rb_shell_player_set_volume_relative 
(plugin->shell_player, -0.1, NULL);
+               } else if (strncmp (str, RB_IR_COMMAND_SEEK_FORWARD, 
strlen(RB_IR_COMMAND_SEEK_FORWARD)) == 0) {
+                       rb_lirc_plugin_seek(plugin, str, FFWD_OFFSET, FALSE);
+               } else if (strncmp (str, RB_IR_COMMAND_SEEK_BACKWARD, 
strlen(RB_IR_COMMAND_SEEK_BACKWARD)) == 0) {
+                       rb_lirc_plugin_seek(plugin, str, RWD_OFFSET, TRUE);
+               } else if (strncmp (str, RB_IR_COMMAND_VOLUME_UP, 
strlen(RB_IR_COMMAND_VOLUME_UP)) == 0) {
+                       rb_lirc_plugin_set_volume_relative(plugin, str, FALSE);
+               } else if (strncmp (str, RB_IR_COMMAND_VOLUME_DOWN, 
strlen(RB_IR_COMMAND_VOLUME_DOWN)) == 0) {
+                       rb_lirc_plugin_set_volume_relative(plugin, str, TRUE);
                } else if (strcmp (str, RB_IR_COMMAND_MUTE) == 0) {
                        gboolean mute;
                        if (rb_shell_player_get_mute (plugin->shell_player, 
&mute, NULL)) {
-- 
1.7.2.5

_______________________________________________
rhythmbox-devel mailing list
rhythmbox-devel@gnome.org
https://mail.gnome.org/mailman/listinfo/rhythmbox-devel

Reply via email to