- Status: computed from connection, presence, hold, relay, player facts; no setters (health writes and HealthStatus gone); pill, strip and source line read it; transitions go to the Notifier. - Notifier: noticeFor(event, context) with self presence, alone, window activity, playing and prefs; toasts for joins/leaves/returns/swaps/ Up next adds (with picture)/problems/chat, the rest logged; while sitting out only chat, nudges, starting, Up next (+ joins if chosen); alone no social notices; replayed lines logged; owns its toast timer. - System notifications (flutter_local_notifications: D-Bus on Linux, WinRT on Windows) when the window isn't focused; a click focuses it. - Toasts sit above the control bar and move with it. - Versions: each member's in the members card and avatar tooltip, the server's in the card header; the strip no longer shows it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
30 lines
973 B
Dart
30 lines
973 B
Dart
// The user's notification choices (Settings → Notifications & sounds), as
|
|
// the Notifier's policy reads them. Pure Dart; [AppSettings] stores them.
|
|
|
|
/// When chat messages pop up as toasts (they always reach the chat).
|
|
enum ChatPopups {
|
|
all('All'),
|
|
paused('Only when paused'),
|
|
off('Off');
|
|
|
|
final String label;
|
|
const ChatPopups(this.label);
|
|
|
|
/// Whether a chat message pops up now ([playing]: the video plays).
|
|
bool shows({required bool playing}) => switch (this) {
|
|
ChatPopups.all => true,
|
|
ChatPopups.paused => !playing,
|
|
ChatPopups.off => false,
|
|
};
|
|
}
|
|
|
|
/// What the user picked: chat pop-ups, and whether joins and leaves also
|
|
/// reach them while they sit out or the window is in the background
|
|
/// ([people]; off by default: then only chat, nudges, "starting now" and
|
|
/// Up next do).
|
|
class NotifyPrefs {
|
|
final ChatPopups chat;
|
|
final bool people;
|
|
const NotifyPrefs({this.chat = ChatPopups.all, this.people = false});
|
|
}
|