Stabilisation quick fixes: orderly close, visible version and update band, chat pop-ups on, Windows shaders and hwdec, render logs
ci / core (push) Successful in 27s
ci / server (push) Successful in 1m4s
ci / updater-windows (push) Successful in 5m50s

- Close: hide the window, dispose every player, thumbnail job and the
  sound engine, leave, then close normally; Linux runner _exit (the
  NVIDIA EGL exit handler crashed 10/10 closes, 0/41 now); Windows tears
  down inside the message loop, then TerminateProcess; watchdogs.
- Version under the Settings tab; an update band instead of a dot,
  never over a video; checks at start and every 4 hours.
- Chat pop-ups default to All again.
- Shader read-back compared as a list (old mpv joins with ','), so
  Windows stops turning shaders off; Windows hwdec auto-copy.
- Render diagnostics (`mpv: render` lines); RAM-only demuxer cache pin
  silences the file-cache warning; a volume readout test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
foxyzandClaude Opus 5.5 committed 2026-10-15 18:01:44 +03:00
1 parent e537f9d5f8
commit ea607c1a52
29 files changed
+873 -168

No files matched your search

+32 -2
View File
@@ -68,14 +68,14 @@ void main() {
coord.toasts.value = [];
});
Future<void> pumpShell(WidgetTester tester, Size size) async {
Future<void> pumpShell(WidgetTester tester, Size size, {UpdateController? updates}) async {
tester.view.physicalSize = size;
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.reset);
await tester.pumpWidget(MaterialApp(
theme: ThemeData.dark(),
home: AppShell(
updates: UpdateController(currentVersion: '0.0.0-dev'),
updates: updates ?? UpdateController(currentVersion: '0.0.0-dev'),
autoUpdateCheck: false,
windowControls: false,
videoBuilder: (context, controls) => const FakeVideo(),
@@ -93,6 +93,36 @@ void main() {
member('f', 'Finn'),
];
group('version and update bar', () {
testWidgets('the version under Settings; the bar on the tabs, off the full player until the video ends',
(tester) async {
final updates = UpdateController(currentVersion: '0.0.0-dev');
await pumpShell(tester, const Size(1280, 800), updates: updates);
expect(find.text('dev run'), findsOneWidget);
expect(find.byKey(const ValueKey('update-bar')), findsNothing);
updates.status.value = const UpdateStatus(UpdatePhase.available,
manifest: UpdateManifest(version: '9.9.9', protocol: 1, url: 'http://x/a.tgz', notes: ''),
canInstall: true);
await tester.pumpAndSettle();
expect(find.byKey(const ValueKey('update-bar')), findsOneWidget);
online(party);
await tester.pumpAndSettle();
expect(find.byKey(const ValueKey('update-bar')), findsNothing);
final r = coord.serverState.value!;
coord.serverState.value = StateBroadcast(
eventId: 2,
transport: 'finished',
position: 0,
serverTime: r.serverTime,
mediaId: r.mediaId,
media: r.media,
members: r.members,
);
await tester.pumpAndSettle();
expect(find.byKey(const ValueKey('update-bar')), findsOneWidget);
});
});
group('party strip', () {
testWidgets('offline: Join and Host, no party', (tester) async {
await pumpShell(tester, const Size(1280, 800));