Restructure step 0: Connection extracted from the coordinator
ci / core (push) Successful in 27s
ci / server (push) Successful in 1m6s
ci / updater-windows (push) Successful in 6m3s

Connection owns the socket lifecycle, connect/dial with epochs,
reconnect, the clock offset, diagnostics upload and a sealed ConnState
signal; the hello is built by an injectable builder, the resume token
stays private, and the reconnect delay and silence limit are parameters.
The coordinator maps ConnState to the same health texts and keeps the
reconnect restore and drop handling (step 1 replaces them).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
foxyzandClaude Opus 5.5 committed 2026-10-15 19:52:49 +03:00
1 parent a52133b313
commit eac45746ce
13 files changed
+780 -368

No files matched your search

+4 -4
View File
@@ -344,7 +344,7 @@ class UpNextPreview extends StatelessWidget {
const picture = _width - 2 * _pad;
if (item != null) {
final r = queue.coord.serverState.value;
final selfId = queue.coord.sync.memberId;
final selfId = queue.coord.connection.memberId;
final more = queue.items.value.length - 1;
final ready = warm?.id == item.id ? warm!.state : null;
return Column(
@@ -449,7 +449,7 @@ class _KeyCap extends StatelessWidget {
String? performerNote(QueueController queue, QueueItem item, StateBroadcast? r) {
if (r == null) return null;
final id = queuePerformer(item, r.members).id;
if (id == null || id == queue.coord.sync.memberId) return null;
if (id == null || id == queue.coord.connection.memberId) return null;
final name = r.members.where((m) => m.id == id).firstOrNull?.name;
return name == null ? null : '$name puts it up';
}
@@ -841,7 +841,7 @@ class _QueuePanelState extends State<QueuePanel> {
final cont = _q.shownContinuation.value;
final warm = _q.warm.value;
final r = _q.coord.serverState.value;
final selfId = _q.coord.sync.memberId;
final selfId = _q.coord.connection.memberId;
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
@@ -1558,7 +1558,7 @@ class UpNextCard extends StatelessWidget {
final item = c.item;
final left = c.secondsLeft;
final r = queue.coord.serverState.value;
final selfId = queue.coord.sync.memberId;
final selfId = queue.coord.connection.memberId;
final waiting = left == null ? performerNote(queue, item, r) : null;
return AppGlass(
key: const ValueKey('up-next-card'),