X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/5aff007d8fcfb4c6cc3c3627ae15f45562db7a0d..3849817f8cbfc366a5e9979c190b2f1d604f4021:/disobedience/disobedience.c diff --git a/disobedience/disobedience.c b/disobedience/disobedience.c index 2cab9aa..6ee4803 100644 --- a/disobedience/disobedience.c +++ b/disobedience/disobedience.c @@ -312,19 +312,22 @@ static gboolean periodic_fast(gpointer attribute((unused)) data) { } last = now; #endif - if(rtp_supported) { + if(rtp_supported && mixer_supported(DEFAULT_BACKEND)) { int nl, nr; - if(!mixer_control(&nl, &nr, 0) && (nl != volume_l || nr != volume_r)) { + if(!mixer_control(DEFAULT_BACKEND, &nl, &nr, 0) + && (nl != volume_l || nr != volume_r)) { volume_l = nl; volume_r = nr; - volume_update(); + event_raise("volume-changed", 0); } } return TRUE; } /** @brief Called when a NOP completes */ -static void nop_completed(void attribute((unused)) *v) { +static void nop_completed(void attribute((unused)) *v, + const char attribute((unused)) *error) { + /* TODO report the error somewhere */ nop_in_flight = 0; } @@ -339,45 +342,42 @@ 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 */ } /** @brief Called when a rtp-address command succeeds */ static void got_rtp_address(void attribute((unused)) *v, + const char *error, int attribute((unused)) nvec, char attribute((unused)) **vec) { - ++suppress_actions; - rtp_address_in_flight = 0; - rtp_supported = 1; - rtp_is_running = rtp_running(); - control_monitor(0); - --suppress_actions; -} + const int rtp_was_supported = rtp_supported; + const int rtp_was_running = rtp_is_running; -/** @brief Called when a rtp-address command fails */ -static void no_rtp_address(struct callbackdata attribute((unused)) *cbd, - int attribute((unused)) code, - const char attribute((unused)) *msg) { ++suppress_actions; rtp_address_in_flight = 0; - rtp_supported = 0; - rtp_is_running = 0; - control_monitor(0); + if(error) { + /* An error just means that we're not using network play */ + rtp_supported = 0; + rtp_is_running = 0; + } else { + rtp_supported = 1; + rtp_is_running = rtp_running(); + } + if(rtp_supported != rtp_was_supported + || rtp_is_running != rtp_was_running) + event_raise("rtp-changed", 0); --suppress_actions; } /** @brief Called to check whether RTP play is available */ static void check_rtp_address(void) { - if(!rtp_address_in_flight) { - struct callbackdata *const cbd = xmalloc(sizeof *cbd); - cbd->onerror = no_rtp_address; - disorder_eclient_rtp_address(client, got_rtp_address, cbd); - } + if(!rtp_address_in_flight) + disorder_eclient_rtp_address(client, got_rtp_address, NULL); } /* main -------------------------------------------------------------------- */