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)
#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 */
/** @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
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;
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);
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);
void popup_error(const char *msg);
/* Pop up an error message */
+void all_update(void);
+/* Update everything */
/* Main menu */
--- /dev/null
+/*
+ * 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:
+*/