Skip to content

Commit

Permalink
[player] Don't stop/clear queue on speaker 'prevent-playback' or 'busy'
Browse files Browse the repository at this point in the history
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
  • Loading branch information
ejurgensen committed Nov 20, 2022
1 parent d468fd3 commit 7c0474b
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/outputs/airplay.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
if (devcfg && cfg_getbool(devcfg, "exclude"))
Expand Down
2 changes: 1 addition & 1 deletion src/outputs/raop.c
Original file line number Diff line number Diff line change
Expand Up @@ -4080,7 +4080,7 @@ raop_device_cb(const char *name, const char *type, const char *domain, const cha
}
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);
if (devcfg && cfg_getbool(devcfg, "exclude"))
Expand Down
6 changes: 3 additions & 3 deletions src/player.c
Original file line number Diff line number Diff line change
Expand Up @@ -2750,10 +2750,10 @@ speaker_prevent_playback_set_bh(void *arg, int *retval)
{
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);
pb_abort(); // TODO Would be better for the user if we paused, but we don't have a handy function for that
DPRINTF(E_INFO, L_PLAYER, "Suspending playback, speaker (id=%" PRIu64 ") set 'busy' or 'prevent-playback' flag\n", param->spk_id);
pb_suspend(); // Don't want to use pb_abort here, since that may clear the queue
}
else
status_update(player_state, LISTENER_SPEAKER | LISTENER_VOLUME);
Expand Down

0 comments on commit 7c0474b

Please sign in to comment.