fix(offline): honor settled profile visibility

This commit is contained in:
edde746
2026-05-24 03:12:33 +02:00
parent e74df0d245
commit a189ee5774
5 changed files with 51 additions and 7 deletions
@@ -95,14 +95,18 @@ void main() {
var notified = 0;
p.addListener(() => notified++);
expect(p.hasExplicitVisibleServerFilter, isFalse);
// Empty set is a real value (different from null) — switching from
// null → {} should notify so consumers know the active profile has
// no servers, not "all servers".
p.setVisibleServerIds(<String>{});
expect(notified, 1);
expect(p.hasExplicitVisibleServerFilter, isTrue);
p.setVisibleServerIds({'a', 'b'});
expect(notified, 2);
expect(p.hasExplicitVisibleServerFilter, isTrue);
// Idempotent: same membership is a no-op.
p.setVisibleServerIds({'b', 'a'});
@@ -111,6 +115,7 @@ void main() {
// Clearing back to null after a real filter is a state change.
p.setVisibleServerIds(null);
expect(notified, 3);
expect(p.hasExplicitVisibleServerFilter, isFalse);
p.dispose();
});
@@ -166,6 +166,33 @@ void main() {
manager.dispose();
});
test('expected but unreachable profile servers enter offline once visibility settles', () async {
final manager = MultiServerManager();
final multi = MultiServerProvider(manager, DataAggregationService(manager));
final p = OfflineModeProvider(manager, multiServerProvider: multi);
expect(p.isOffline, isFalse);
var notifications = 0;
p.addListener(() => notifications++);
multi.setExpectedVisibleServerIds({'jf-machine'});
await Future<void>.delayed(Duration.zero);
expect(p.isOffline, isFalse);
expect(notifications, 0);
multi.setVisibleServerIds(<String>{});
await Future<void>.delayed(Duration.zero);
expect(p.isOffline, isTrue);
expect(notifications, 1);
p.dispose();
multi.dispose();
manager.dispose();
});
test('Plex auth errors without live clients stay out of generic offline', () async {
final manager = MultiServerManager();
final multi = MultiServerProvider(manager, DataAggregationService(manager));