}
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;
}
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 -------------------------------------------------------------------- */