[player] Don't stop/clear queue on speaker 'prevent-playback' or 'busy'

When 'prevent-playback' or 'busy' is sent by a single playing speaker, we just
want to pause playback and not clear the queue

Closes #1553
This commit is contained in:
ejurgensen 2022-11-20 22:38:33 +01:00
parent d468fd358e
commit 7c0474b743
3 changed files with 5 additions and 5 deletions

View File

@ -3705,7 +3705,7 @@ airplay_device_cb(const char *name, const char *type, const char *domain, const
} }
} }
DPRINTF(E_DBG, L_AIRPLAY, "Event for AirPlay device '%s' (port %d, id %" PRIx64 ")\n", name, port, id); DPRINTF(E_DBG, L_AIRPLAY, "Event for AirPlay device '%s' (port %d, id %" PRIx64 ", Active-Remote %" PRIu32 ")\n", name, port, id, (uint32_t)id);
devcfg = cfg_gettsec(cfg, "airplay", name); devcfg = cfg_gettsec(cfg, "airplay", name);
if (devcfg && cfg_getbool(devcfg, "exclude")) if (devcfg && cfg_getbool(devcfg, "exclude"))

View File

@ -4080,7 +4080,7 @@ raop_device_cb(const char *name, const char *type, const char *domain, const cha
} }
device_name++; device_name++;
DPRINTF(E_DBG, L_RAOP, "Event for AirPlay device '%s' (port %d, id %" PRIx64 ")\n", device_name, port, id); DPRINTF(E_DBG, L_RAOP, "Event for AirPlay device '%s' (port %d, id %" PRIx64 ", Active-Remote %" PRIu32 ")\n", device_name, port, id, (uint32_t)id);
devcfg = cfg_gettsec(cfg, "airplay", device_name); devcfg = cfg_gettsec(cfg, "airplay", device_name);
if (devcfg && cfg_getbool(devcfg, "exclude")) if (devcfg && cfg_getbool(devcfg, "exclude"))

View File

@ -2750,10 +2750,10 @@ speaker_prevent_playback_set_bh(void *arg, int *retval)
{ {
struct speaker_attr_param *param = arg; struct speaker_attr_param *param = arg;
if (outputs_sessions_count() == 0) if (player_state == PLAY_PLAYING && outputs_sessions_count() == 0)
{ {
DPRINTF(E_INFO, L_PLAYER, "Ending playback, speaker (id=%" PRIu64 ") set 'busy' or 'prevent-playback' flag\n", param->spk_id); DPRINTF(E_INFO, L_PLAYER, "Suspending playback, speaker (id=%" PRIu64 ") set 'busy' or 'prevent-playback' flag\n", param->spk_id);
pb_abort(); // TODO Would be better for the user if we paused, but we don't have a handy function for that pb_suspend(); // Don't want to use pb_abort here, since that may clear the queue
} }
else else
status_update(player_state, LISTENER_SPEAKER | LISTENER_VOLUME); status_update(player_state, LISTENER_SPEAKER | LISTENER_VOLUME);