From: Richard Kettlewell Date: Sun, 30 Sep 2007 17:38:24 +0000 (+0100) Subject: disobedience state monitoring -> separate source file X-Git-Tag: debian-1_5_99dev8~192 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/commitdiff_plain/10e226b3dc53a157ef57f3f9dbc606c70465bdc8?hp=8f763f1bcd527d7f2bb27a3bf3677571c8ffd2d9;ds=sidebyside disobedience state monitoring -> separate source file --- diff --git a/disobedience/Makefile.am b/disobedience/Makefile.am index 11298d8..9897426 100644 --- a/disobedience/Makefile.am +++ b/disobedience/Makefile.am @@ -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) diff --git a/disobedience/disobedience.c b/disobedience/disobedience.c index 0e7805b..f4221f8 100644 --- a/disobedience/disobedience.c +++ b/disobedience/disobedience.c @@ -29,21 +29,6 @@ #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); diff --git a/disobedience/disobedience.h b/disobedience/disobedience.h index 21d589d..6a68b9a 100644 --- a/disobedience/disobedience.h +++ b/disobedience/disobedience.h @@ -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 index 0000000..b2e3e68 --- /dev/null +++ b/disobedience/log.c @@ -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: +*/