chiark / gitweb /
disobedience state monitoring -> separate source file
authorRichard Kettlewell <rjk@greenend.org.uk>
Sun, 30 Sep 2007 17:38:24 +0000 (18:38 +0100)
committerRichard Kettlewell <rjk@greenend.org.uk>
Sun, 30 Sep 2007 17:38:24 +0000 (18:38 +0100)
disobedience/Makefile.am
disobedience/disobedience.c
disobedience/disobedience.h
disobedience/log.c [new file with mode: 0644]

index 11298d89d0825129549d14aaa9e085712d708858..98974269f3a072494c8e7ad254e026e472f5bcc5 100644 (file)
@@ -25,7 +25,8 @@ AM_CFLAGS=$(GLIB_CFLAGS) $(GTK_CFLAGS)
 
 disobedience_SOURCES=disobedience.h disobedience.c client.c queue.c    \
                  choose.c misc.c style.h control.c properties.c menu.c \
-       ../lib/memgc.c
+                 log.c \
+                 ../lib/memgc.c
 disobedience_LDADD=../lib/libdisorder.a $(LIBPCRE) $(LIBGC) $(LIBGCRYPT)
 disobedience_LDFLAGS=$(GTK_LIBS)
 
index 0e7805b7730506adbc4c28101b28a30b8593ac42..f4221f865d7e321d36c14eda745c83e3df564e5f 100644 (file)
 
 #include "style.h"                      /* generated style */
 
-/* Functions --------------------------------------------------------------- */
-
-static void log_connected(void *v);
-static void log_completed(void *v, const char *track);
-static void log_failed(void *v, const char *track, const char *status);
-static void log_moved(void *v, const char *user);
-static void log_playing(void *v, const char *track, const char *user);
-static void log_queue(void *v, struct queue_entry *q);
-static void log_recent_added(void *v, struct queue_entry *q);
-static void log_recent_removed(void *v, const char *id);
-static void log_removed(void *v, const char *id, const char *user);
-static void log_scratched(void *v, const char *track, const char *user);
-static void log_state(void *v, unsigned long state);
-static void log_volume(void *v, int l, int r);
-
 /* Variables --------------------------------------------------------------- */
 
 GMainLoop *mainloop;                    /* event loop */
@@ -62,21 +47,6 @@ int choosealpha;                        /* break up choose by letter */
 /** @brief True if a NOP is in flight */
 static int nop_in_flight;
 
-static const disorder_eclient_log_callbacks gdisorder_log_callbacks = {
-  log_connected,
-  log_completed,
-  log_failed,
-  log_moved,
-  log_playing,
-  log_queue,
-  log_recent_added,
-  log_recent_removed,
-  log_removed,
-  log_scratched,
-  log_state,
-  log_volume
-};
-
 /* Window creation --------------------------------------------------------- */
 
 /* Note that all the client operations kicked off from here will only complete
@@ -154,106 +124,6 @@ static void make_toplevel_window(void) {
   gtk_widget_set_name(toplevel, "disobedience");
 }
 
-/* State monitoring -------------------------------------------------------- */
-
-static void all_update(void) {
-  playing_update();
-  queue_update();
-  recent_update();
-  control_update();
-}
-
-static void log_connected(void attribute((unused)) *v) {
-  struct callbackdata *cbd;
-
-  /* Don't know what we might have missed while disconnected so update
-   * everything.  We get this at startup too and this is how we do the initial
-   * state fetch. */
-  all_update();
-  /* Re-get the volume */
-  cbd = xmalloc(sizeof *cbd);
-  cbd->onerror = 0;
-  disorder_eclient_volume(client, log_volume, -1, -1, cbd);
-}
-
-static void log_completed(void attribute((unused)) *v,
-                          const char attribute((unused)) *track) {
-  playing = 0;
-  playing_update();
-  control_update();
-}
-
-static void log_failed(void attribute((unused)) *v,
-                       const char attribute((unused)) *track,
-                       const char attribute((unused)) *status) {
-  playing = 0;
-  playing_update();
-  control_update();
-}
-
-static void log_moved(void attribute((unused)) *v,
-                      const char attribute((unused)) *user) {
-   queue_update();
-}
-
-static void log_playing(void attribute((unused)) *v,
-                        const char attribute((unused)) *track,
-                        const char attribute((unused)) *user) {
-  playing = 1;
-  playing_update();
-  control_update();
-  /* we get a log_removed() anyway so we don't need to update_queue() from
-   * here */
-}
-
-static void log_queue(void attribute((unused)) *v,
-                      struct queue_entry attribute((unused)) *q) {
-  queue_update();
-}
-
-static void log_recent_added(void attribute((unused)) *v,
-                             struct queue_entry attribute((unused)) *q) {
-  recent_update();
-}
-
-static void log_recent_removed(void attribute((unused)) *v,
-                               const char attribute((unused)) *id) {
-  /* nothing - log_recent_added() will trigger the relevant update */
-}
-
-static void log_removed(void attribute((unused)) *v,
-                        const char attribute((unused)) *id,
-                        const char attribute((unused)) *user) {
-  queue_update();
-}
-
-static void log_scratched(void attribute((unused)) *v,
-                          const char attribute((unused)) *track,
-                          const char attribute((unused)) *user) {
-  playing = 0;
-  playing_update();
-  control_update();
-}
-
-static void log_state(void attribute((unused)) *v,
-                      unsigned long state) {
-  last_state = state;
-  control_update();
-  /* If the track is paused or resume then the currently playing track is
-   * refetched so that we can continue to correctly calculate the played so-far
-   * field */
-  playing_update();
-}
-
-static void log_volume(void attribute((unused)) *v,
-                       int l, int r) {
-  if(volume_l != l || volume_r != r) {
-    volume_l = l;
-    volume_r = r;
-    control_update();
-  }
-}
-
 #if MDEBUG
 static int widget_count, container_count;
 
@@ -467,7 +337,7 @@ int main(int argc, char **argv) {
   if(!(client = gtkclient())
      || !(logclient = gtkclient()))
     return 1;                           /* already reported an error */
-  disorder_eclient_log(logclient, &gdisorder_log_callbacks, 0);
+  disorder_eclient_log(logclient, &log_callbacks, 0);
   /* periodic operations (e.g. expiring the cache) */
 #if MDEBUG || MTRACK
   g_timeout_add(5000/*milliseconds*/, periodic, 0);
index 21d589dac74d1a4b5878e30a55e5198c969277f3..6a68b9ae9eda137bf8c49ac5e9b26216e70a5950 100644 (file)
@@ -89,6 +89,8 @@ extern int volume_l, volume_r;          /* current volume */
 extern double goesupto;                 /* volume upper bound */
 extern int choosealpha;                 /* break up choose by letter */
 
+extern const disorder_eclient_log_callbacks log_callbacks;
+
 /* Functions --------------------------------------------------------------- */
 
 disorder_eclient *gtkclient(void);
@@ -111,6 +113,8 @@ GdkPixbuf *find_image(const char *name);
 void popup_error(const char *msg);
 /* Pop up an error message */
 
+void all_update(void);
+/* Update everything */
 
 /* Main menu */
 
diff --git a/disobedience/log.c b/disobedience/log.c
new file mode 100644 (file)
index 0000000..b2e3e68
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ * This file is part of DisOrder.
+ * Copyright (C) 2006, 2007 Richard Kettlewell
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#include "disobedience.h"
+
+/* Functions --------------------------------------------------------------- */
+
+static void log_connected(void *v);
+static void log_completed(void *v, const char *track);
+static void log_failed(void *v, const char *track, const char *status);
+static void log_moved(void *v, const char *user);
+static void log_playing(void *v, const char *track, const char *user);
+static void log_queue(void *v, struct queue_entry *q);
+static void log_recent_added(void *v, struct queue_entry *q);
+static void log_recent_removed(void *v, const char *id);
+static void log_removed(void *v, const char *id, const char *user);
+static void log_scratched(void *v, const char *track, const char *user);
+static void log_state(void *v, unsigned long state);
+static void log_volume(void *v, int l, int r);
+
+/** @brief Callbacks for server state monitoring */
+const disorder_eclient_log_callbacks log_callbacks = {
+  log_connected,
+  log_completed,
+  log_failed,
+  log_moved,
+  log_playing,
+  log_queue,
+  log_recent_added,
+  log_recent_removed,
+  log_removed,
+  log_scratched,
+  log_state,
+  log_volume
+};
+
+/* State monitoring -------------------------------------------------------- */
+
+void all_update(void) {
+  playing_update();
+  queue_update();
+  recent_update();
+  control_update();
+}
+
+static void log_connected(void attribute((unused)) *v) {
+  struct callbackdata *cbd;
+
+  /* Don't know what we might have missed while disconnected so update
+   * everything.  We get this at startup too and this is how we do the initial
+   * state fetch. */
+  all_update();
+  /* Re-get the volume */
+  cbd = xmalloc(sizeof *cbd);
+  cbd->onerror = 0;
+  disorder_eclient_volume(client, log_volume, -1, -1, cbd);
+}
+
+static void log_completed(void attribute((unused)) *v,
+                          const char attribute((unused)) *track) {
+  playing = 0;
+  playing_update();
+  control_update();
+}
+
+static void log_failed(void attribute((unused)) *v,
+                       const char attribute((unused)) *track,
+                       const char attribute((unused)) *status) {
+  playing = 0;
+  playing_update();
+  control_update();
+}
+
+static void log_moved(void attribute((unused)) *v,
+                      const char attribute((unused)) *user) {
+   queue_update();
+}
+
+static void log_playing(void attribute((unused)) *v,
+                        const char attribute((unused)) *track,
+                        const char attribute((unused)) *user) {
+  playing = 1;
+  playing_update();
+  control_update();
+  /* we get a log_removed() anyway so we don't need to update_queue() from
+   * here */
+}
+
+static void log_queue(void attribute((unused)) *v,
+                      struct queue_entry attribute((unused)) *q) {
+  queue_update();
+}
+
+static void log_recent_added(void attribute((unused)) *v,
+                             struct queue_entry attribute((unused)) *q) {
+  recent_update();
+}
+
+static void log_recent_removed(void attribute((unused)) *v,
+                               const char attribute((unused)) *id) {
+  /* nothing - log_recent_added() will trigger the relevant update */
+}
+
+static void log_removed(void attribute((unused)) *v,
+                        const char attribute((unused)) *id,
+                        const char attribute((unused)) *user) {
+  queue_update();
+}
+
+static void log_scratched(void attribute((unused)) *v,
+                          const char attribute((unused)) *track,
+                          const char attribute((unused)) *user) {
+  playing = 0;
+  playing_update();
+  control_update();
+}
+
+static void log_state(void attribute((unused)) *v,
+                      unsigned long state) {
+  last_state = state;
+  control_update();
+  /* If the track is paused or resume then the currently playing track is
+   * refetched so that we can continue to correctly calculate the played so-far
+   * field */
+  playing_update();
+}
+
+static void log_volume(void attribute((unused)) *v,
+                       int l, int r) {
+  if(volume_l != l || volume_r != r) {
+    volume_l = l;
+    volume_r = r;
+    control_update();
+  }
+}
+
+/*
+Local Variables:
+c-basic-offset:2
+comment-column:40
+fill-column:79
+indent-tabs-mode:nil
+End:
+*/