11import 'dart:async' ;
22
33import 'package:freezed_annotation/freezed_annotation.dart' ;
4+ import 'package:rxdart/rxdart.dart' ;
45import 'package:state_notifier/state_notifier.dart' ;
56import 'package:stream_core/stream_core.dart' ;
67
8+ import '../../stream_feeds.dart' ;
79import '../generated/api/api.dart' as api;
810import '../models/activity_data.dart' ;
911import '../models/bookmark_data.dart' ;
@@ -48,6 +50,7 @@ class Feed with Disposable {
4850 required this .feedsRepository,
4951 required this .pollsRepository,
5052 required this .eventsEmitter,
53+ required Stream <void > onReconnectEmitter,
5154 }) {
5255 final fid = query.fid;
5356
@@ -65,7 +68,12 @@ class Feed with Disposable {
6568
6669 // Attach event handlers for the feed events
6770 final handler = FeedEventHandler (fid: fid, state: _stateNotifier);
68- _eventsSubscription = eventsEmitter.listen (handler.handleEvent);
71+ _feedSubscriptions.add (eventsEmitter.listen (handler.handleEvent));
72+
73+ // Automatically refetch data on reconnection
74+ if (query.watch) {
75+ _subscribeToReconnectionUpdates (onReconnectEmitter: onReconnectEmitter);
76+ }
6977 }
7078
7179 FeedId get fid => query.fid;
@@ -86,11 +94,11 @@ class Feed with Disposable {
8694 late final FeedStateNotifier _stateNotifier;
8795
8896 final SharedEmitter <WsEvent > eventsEmitter;
89- StreamSubscription < WsEvent > ? _eventsSubscription ;
97+ final CompositeSubscription _feedSubscriptions = CompositeSubscription () ;
9098
9199 @override
92100 void dispose () {
93- _eventsSubscription ? .cancel ();
101+ _feedSubscriptions .cancel ();
94102 _stateNotifier.dispose ();
95103 _memberList.dispose ();
96104 super .dispose ();
@@ -628,4 +636,14 @@ class Feed with Disposable {
628636 }
629637
630638 // endregion
639+
640+ void _subscribeToReconnectionUpdates ({
641+ required Stream <void > onReconnectEmitter,
642+ }) {
643+ _feedSubscriptions.add (
644+ onReconnectEmitter.listen ((_) {
645+ getOrCreate ();
646+ }),
647+ );
648+ }
631649}
0 commit comments