chiark / gitweb /
Switch Disobedience reset (i.e. fresh login) notification over to
[disorder] / disobedience / disobedience.c
index 76ea604a87766140dd46278362a32da81b74d8e9..5e32d2e1172b52b4cd99971bde9540cb25d14364 100644 (file)
@@ -90,12 +90,6 @@ int rtp_supported;
 /** @brief True if RTP play is enabled */
 int rtp_is_running;
 
-/** @brief Linked list of functions to call when we reset login parameters */
-static struct reset_callback_node {
-  struct reset_callback_node *next;
-  reset_callback *callback;
-} *resets;
-
 /* Window creation --------------------------------------------------------- */
 
 /* Note that all the client operations kicked off from here will only complete
@@ -342,10 +336,10 @@ static gboolean maybe_send_nop(gpointer attribute((unused)) data) {
     disorder_eclient_nop(client, nop_completed, 0);
   }
   if(rtp_supported) {
-    const int old_state = rtp_is_running;
+    const int rtp_was_running = rtp_is_running;
     rtp_is_running = rtp_running();
-    if(old_state != rtp_is_running)
-      control_monitor(0);
+    if(rtp_was_running != rtp_is_running)
+      event_raise("rtp-changed", 0);
   }
   return TRUE;                          /* keep call me please */
 }
@@ -355,6 +349,9 @@ static void got_rtp_address(void attribute((unused)) *v,
                             const char *error,
                             int attribute((unused)) nvec,
                             char attribute((unused)) **vec) {
+  const int rtp_was_supported = rtp_supported;
+  const int rtp_was_running = rtp_is_running;
+
   ++suppress_actions;
   rtp_address_in_flight = 0;
   if(error) {
@@ -364,9 +361,10 @@ static void got_rtp_address(void attribute((unused)) *v,
   } else {
     rtp_supported = 1;
     rtp_is_running = rtp_running();
-    control_monitor(0);
   }
-  control_monitor(0);
+  if(rtp_supported != rtp_was_supported
+     || rtp_is_running != rtp_was_running)
+    event_raise("rtp-changed", 0);
   --suppress_actions;
 }
 
@@ -404,29 +402,16 @@ static void help(void) {
   exit(0);
 }
 
-/* reset state */
-void reset(void) {
-  struct reset_callback_node *r;
-
+void logged_in(void) {
   /* reset the clients */
   disorder_eclient_close(client);
   disorder_eclient_close(logclient);
   rtp_supported = 0;
-  for(r = resets; r; r = r->next)
-    r->callback();
+  event_raise("logged-in", 0);
   /* Might be a new server so re-check */
   check_rtp_address();
 }
 
-/** @brief Register a reset callback */
-void register_reset(reset_callback *callback) {
-  struct reset_callback_node *const r = xmalloc(sizeof *r);
-
-  r->next = resets;
-  r->callback = callback;
-  resets = r;
-}
-
 int main(int argc, char **argv) {
   int n;
   gboolean gtkok;
@@ -479,7 +464,6 @@ int main(int argc, char **argv) {
                      maybe_send_nop,
                      0/*data*/,
                      0/*notify*/);
-  register_reset(properties_reset);
   /* Start monitoring the log */
   disorder_eclient_log(logclient, &log_callbacks, 0);
   /* See if RTP play supported */