Code

lirc: refactored event handler
authorThomas Jansen <mithi@mithi.net>
Mon, 10 Nov 2008 13:13:46 +0000 (14:13 +0100)
committerMax Kellermann <max@duempel.org>
Mon, 10 Nov 2008 13:13:46 +0000 (14:13 +0100)
 * moved lirc_event to lirc.c and split out the parts that depend on
   variables in main.c into three separate functions
 * changed keyboard_event accordingly to avoid duplicate code
 * merged lirc_event with ncmpc_lirc_get_command

src/lirc.c
src/lirc.h
src/main.c
src/ncmpc.h

index 4e7e423d115055776cc4beb81de8a6d34579b85c..aeb86650ca411f89f957aabbb65e6d0289e80f63 100644 (file)
@@ -1,12 +1,13 @@
 #include <lirc/lirc_client.h>
 #include "lirc.h"
+#include "ncmpc.h"
 
 static struct lirc_config *lc = NULL;
-static int lirc_socket = 0;
 
 int ncmpc_lirc_open()
 {
        char prog[] = "ncmpc";
+       int lirc_socket = 0;
 
        if ((lirc_socket = lirc_init(prog, 0)) == -1)
                return -1;
@@ -26,18 +27,23 @@ void ncmpc_lirc_close()
        lirc_deinit();
 }
 
-command_t ncmpc_lirc_get_command()
+gboolean
+lirc_event(mpd_unused GIOChannel *source,
+          mpd_unused GIOCondition condition, mpd_unused gpointer data)
 {
-       char *code = NULL, *cmd = NULL;
+       char *code, *txt;
+       command_t cmd;
 
-       if (lirc_nextcode(&code) != 0)
-               return CMD_NONE;
+       begin_input_event();
 
-       if (lirc_code2char(lc, code, &cmd) != 0)
-               return CMD_NONE;
-
-       if (!cmd)
-               return CMD_NONE;
+       if (lirc_nextcode(&code) == 0) {
+               while (lirc_code2char(lc, code, &txt) == 0 && txt != NULL) {
+                       cmd = get_key_command_from_name(txt);
+                       if (do_input_event(cmd) != 0)
+                               return FALSE;
+               }
+       }
 
-       return get_key_command_from_name(cmd);
+       end_input_event();
+       return TRUE;
 }
index 9359898ad5a5ed842060e7b8c52a2fab714d123e..a3045a2068c49f36c1517160abb32a7ea00928ed 100644 (file)
@@ -2,9 +2,12 @@
 #define LIRC_H
 
 #include "command.h"
+#include <glib.h>
 
 int ncmpc_lirc_open(void);
 void ncmpc_lirc_close(void);
-command_t ncmpc_lirc_get_command(void);
+
+gboolean
+lirc_event(GIOChannel *source, GIOCondition condition, gpointer data);
 
 #endif
index b9fb3cd0e58642c95dd19d3f2c8f2a8b274ef80d..26ab45896b9f36fc408f0f8a24f44e1c52854c0d 100644 (file)
@@ -282,71 +282,54 @@ timer_idle(mpd_unused gpointer data)
        return TRUE;
 }
 
-static gboolean
-keyboard_event(mpd_unused GIOChannel *source,
-              mpd_unused GIOCondition condition, mpd_unused gpointer data)
+void begin_input_event(void)
 {
-       command_t cmd;
-
        /* remove the idle timeout; add it later with fresh interval */
        g_source_remove(idle_source_id);
+}
 
-       if ((cmd=get_keyboard_command()) != CMD_NONE) {
-               if (cmd == CMD_QUIT) {
-                       g_main_loop_quit(main_loop);
-                       return FALSE;
-               }
+void end_input_event(void)
+{
+       screen_update(mpd);
 
-               screen_cmd(mpd, cmd);
+       idle_source_id = g_timeout_add(idle_interval, timer_idle, NULL);
+}
 
-               if (cmd == CMD_VOLUME_UP || cmd == CMD_VOLUME_DOWN) {
-                       /* make sure we dont update the volume yet */
-                       g_source_remove(update_source_id);
-                       update_source_id = g_timeout_add(update_interval,
-                                                        timer_mpd_update,
-                                                        GINT_TO_POINTER(TRUE));
-               }
+int do_input_event(command_t cmd)
+{
+       if (cmd == CMD_QUIT) {
+               g_main_loop_quit(main_loop);
+               return -1;
        }
 
-       screen_update(mpd);
+       screen_cmd(mpd, cmd);
 
-       idle_source_id = g_timeout_add(idle_interval, timer_idle, NULL);
-       return TRUE;
+       if (cmd == CMD_VOLUME_UP || cmd == CMD_VOLUME_DOWN) {
+               /* make sure we dont update the volume yet */
+               g_source_remove(update_source_id);
+               update_source_id = g_timeout_add(update_interval,
+                                                timer_mpd_update,
+                                                GINT_TO_POINTER(TRUE));
+       }
+
+       return 0;
 }
 
-#ifdef ENABLE_LIRC
 static gboolean
-lirc_event(mpd_unused GIOChannel *source,
-          mpd_unused GIOCondition condition, mpd_unused gpointer data)
+keyboard_event(mpd_unused GIOChannel *source,
+              mpd_unused GIOCondition condition, mpd_unused gpointer data)
 {
        command_t cmd;
 
-       /* remove the idle timeout; add it later with fresh interval */
-       g_source_remove(idle_source_id);
+       begin_input_event();
 
-       if ((cmd = ncmpc_lirc_get_command()) != CMD_NONE) {
-               if (cmd == CMD_QUIT) {
-                       g_main_loop_quit(main_loop);
+       if ((cmd=get_keyboard_command()) != CMD_NONE)
+               if (do_input_event(cmd) != 0)
                        return FALSE;
-               }
 
-               screen_cmd(mpd, cmd);
-
-               if (cmd == CMD_VOLUME_UP || cmd == CMD_VOLUME_DOWN) {
-                       /* make sure we dont update the volume yet */
-                       g_source_remove(update_source_id);
-                       update_source_id = g_timeout_add(update_interval,
-                                                        timer_mpd_update,
-                                                        GINT_TO_POINTER(TRUE));
-               }
-       }
-
-       screen_update(mpd);
-
-       idle_source_id = g_timeout_add(idle_interval, timer_idle, NULL);
+       end_input_event();
        return TRUE;
 }
-#endif
 
 #ifndef NCMPC_MINI
 /**
index 6748c779b822f78fb8000e77637cdbe6a699cdfd..9e4703b573d2519405d96d71dc859e6f795bdf37 100644 (file)
@@ -1,7 +1,13 @@
 #ifndef NCMPC_H
 #define NCMPC_H
 
+#include "command.h"
+
 void
 sigstop(void);
 
+void begin_input_event(void);
+void end_input_event(void);
+int do_input_event(command_t cmd);
+
 #endif /* NCMPC_H */