Buzzer: add playForced(); fix per-channel force-on notification ignoring global mute

buzzer.play() was returning early when _is_quiet=true, so channels with
explicit notification=ON were silent even though the logic correctly set
play=true. playForced() bypasses the quiet check for these overrides.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-05-11 21:17:31 +02:00
parent 1281ec5c35
commit 9d92fb62df
3 changed files with 18 additions and 12 deletions

View File

@@ -2391,19 +2391,24 @@ switch(t){
buzzer.play("MsgRcv3:d=4,o=6,b=200:32e,32g,32b,16c7");
break;
case UIEventType::channelMessage: {
bool play = true;
bool play = false;
bool force = false;
if (_last_notif_ch_idx >= 0 && _node_prefs) {
uint64_t mask = 1ULL << _last_notif_ch_idx;
if (_node_prefs->ch_notif_override & mask) {
play = !(_node_prefs->ch_notif_muted & mask); // explicit override
if (!(_node_prefs->ch_notif_muted & mask)) { play = true; force = true; } // state 2: force-on
// state 1: muted — play stays false
} else {
play = !buzzer.isQuiet(); // follow global
play = !buzzer.isQuiet(); // state 0: follow global
}
} else {
play = !buzzer.isQuiet();
}
_last_notif_ch_idx = -1;
if (play) buzzer.play("kerplop:d=16,o=6,b=120:32g#,32c#");
if (play) {
if (force) buzzer.playForced("kerplop:d=16,o=6,b=120:32g#,32c#");
else buzzer.play("kerplop:d=16,o=6,b=120:32g#,32c#");
}
break;
}
case UIEventType::ack: