Swap shows only the new media, no guessed endings, quieter screen

- A swap stops the previous media at once; buffer counts only for the
  media the player holds (client) and the current mediaId (server), so
  the old video can no longer start the new one.
- The automatic frozen-picture reload is gone (false alarms on still
  scenes); Reload video stays.
- The "Next episode" pill shows only from a known ending.
- A web link's thumbnail is its cover, under the video's own name.
- While playing, the unread chip stays off the picture; chat pop-ups
  can be All / Only when paused / Off.
- Server fetch failures say when the server has no cookies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
foxyzandClaude Opus 5.5 committed 2026-10-11 04:31:14 +03:00
1 parent ab133dd82f
commit 27b4ec2c96
25 files changed
+274 -485

No files matched your search

+32 -4
View File
@@ -723,8 +723,8 @@ class _AnimeFlowCardState extends State<AnimeFlowCard> {
}
}
/// What pops up and what makes a sound. No switches: there is nothing to
/// choose yet.
/// What pops up (chat pop-ups: [AppSettings.chatPopups]) and what makes
/// a sound.
class NotificationsInfo extends StatelessWidget {
const NotificationsInfo({super.key});
@@ -746,11 +746,39 @@ class NotificationsInfo extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
line('Joins, leaves, video changes and chat',
line('Joins, leaves and video changes',
'Pop up bottom left for 5 s, with the person\'s picture'),
Padding(
padding: const EdgeInsets.symmetric(vertical: 6),
child: Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text('Chat messages'),
Text('Pop up the same way; always in Chat & activity (Tab)', style: muted),
],
),
),
SignalBuilder(
builder: (context) => DropdownButton<ChatPopups>(
key: const ValueKey('chat-popups'),
value: AppSettings.instance.chatPopups.value,
onChanged: (v) {
if (v != null) AppSettings.instance.setChatPopups(v);
},
items: [
for (final m in ChatPopups.values) DropdownMenuItem(value: m, child: Text(m.label)),
],
),
),
],
),
),
line('Sat out or nudged by someone', 'Only on your end, with their picture'),
line('Ready, seeks and pauses', 'Only in Chat & activity (Tab), never as a pop-up'),
line('App notices', 'Shader changes, a frozen video reloaded, the idle warning'),
line('App notices', 'Shader changes, the idle warning'),
],
),
),