Skip to content

Commit

Permalink
fix event feed state obj
Browse files Browse the repository at this point in the history
  • Loading branch information
leo-lox committed Nov 4, 2024
1 parent fba7104 commit 9b48841
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 37 deletions.
5 changes: 3 additions & 2 deletions lib/data_layer/repositories/note_repository_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,9 @@ class NoteRepositoryImpl implements NoteRepository {
final response = dartNdkSource.dartNdk.requests.subscription(
filters: [filter],
name: requestId,
cacheRead: true,
cacheWrite: true,
//todo: bug in the NDK when using cacheRead and subscription
// cacheRead: true,
// cacheWrite: true,
);

return response.stream.map(
Expand Down
4 changes: 1 addition & 3 deletions lib/domain_layer/usecases/event_feed.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,9 @@ import 'package:rxdart/rxdart.dart';
import '../entities/nostr_note.dart';
import '../entities/tree_node.dart';
import '../repositories/note_repository.dart';
import 'follow.dart';

class EventFeed {
final NoteRepository _noteRepository;
final Follow _follow;

final String repliesFetchId = "replies-${Helpers().getRandomString(5)}";

Expand All @@ -31,7 +29,7 @@ class EventFeed {
StreamController<NostrNote>();
Stream<NostrNote> get rootNoteStream => _rootNoteController.stream;

EventFeed(this._noteRepository, this._follow);
EventFeed(this._noteRepository);

Future<void> subscribeToReplyNotes({
required String rootNoteId,
Expand Down
66 changes: 34 additions & 32 deletions lib/presentation_layer/providers/event_feed_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,85 +7,87 @@ import '../../data_layer/repositories/note_repository_impl.dart';
import '../../domain_layer/entities/feed_event_view_model.dart';
import '../../domain_layer/repositories/note_repository.dart';
import '../../domain_layer/usecases/event_feed.dart';
import '../../domain_layer/usecases/follow.dart';

import 'event_verifier.dart';
import 'following_provider.dart';
import 'ndk_provider.dart';

final eventFeedProvider = Provider<EventFeed>((ref) {
final ndk = ref.watch(ndkProvider);
//NotifierProvider

final eventVerifier = ref.watch(eventVerifierProvider);
/// [String] is root event id
final eventFeedStateProvider = NotifierProvider.autoDispose
.family<EventFeedState, FeedEventViewModel, String>(
EventFeedState.new,
);

final DartNdkSource dartNdkSource = DartNdkSource(ndk);
class EventFeedState
extends AutoDisposeFamilyNotifier<FeedEventViewModel, String> {
StreamSubscription? _rootNoteSub;
StreamSubscription? _commentNotesSub;

final NoteRepository noteRepository = NoteRepositoryImpl(
dartNdkSource: dartNdkSource,
eventVerifier: eventVerifier,
);
late EventFeed myEventFeed;

final Follow followProvider = ref.watch(followingProvider);
_setupEventFeed() {
final ndk = ref.watch(ndkProvider);

final EventFeed eventFeed = EventFeed(noteRepository, followProvider);
final eventVerifier = ref.watch(eventVerifierProvider);

return eventFeed;
});
final DartNdkSource dartNdkSource = DartNdkSource(ndk);

/// [String] is root event id
final eventFeedStateProvider =
NotifierProvider.family<EventFeedState, FeedEventViewModel, String>(
EventFeedState.new,
);
final NoteRepository noteRepository = NoteRepositoryImpl(
dartNdkSource: dartNdkSource,
eventVerifier: eventVerifier,
);

class EventFeedState extends FamilyNotifier<FeedEventViewModel, String> {
StreamSubscription? _rootNoteSub;
StreamSubscription? _commentNotesSub;
myEventFeed = EventFeed(noteRepository);
}

/// closes everthing and resets the state
Future<void> resetStateDispose() async {
final eventFeed = ref.read(eventFeedProvider);
state = FeedEventViewModel(
comments: [],
rootNote: null,
);

_commentNotesSub?.cancel();
_rootNoteSub?.cancel();
await eventFeed.dispose();
_rootNoteSub = null;
_commentNotesSub = null;
await myEventFeed.dispose();
}

@override
FeedEventViewModel build(String arg) {
_initialFetch(arg);
ref.onDispose(() {
resetStateDispose();
});
_setupEventFeed();
_initSubscriptions();
_initialFetch(arg);

return FeedEventViewModel(
comments: [],
rootNote: null,
);
}

_initialFetch(String rootNoteId) {
final eventFeed = ref.read(eventFeedProvider);
eventFeed.subscribeToRootNote(
myEventFeed.subscribeToRootNote(
noteId: rootNoteId,
);

eventFeed.subscribeToReplyNotes(
myEventFeed.subscribeToReplyNotes(
rootNoteId: rootNoteId,
);
}

void _initSubscriptions() async {
final eventFeed = ref.read(eventFeedProvider);

// Root note subscription
_rootNoteSub = eventFeed.rootNoteStream.listen((event) {
_rootNoteSub = myEventFeed.rootNoteStream.listen((event) {
state = state.copyWith(rootNote: event);
});

// Comment notes subscription
_commentNotesSub = eventFeed.repliesTreeStream.listen((tree) {
_commentNotesSub = myEventFeed.repliesTreeStream.listen((tree) {
state = state.copyWith(comments: tree);
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ class _EventViewPageState extends ConsumerState<EventViewPage> {

@override
void dispose() {
_scrollControllerFeed.dispose();

super.dispose();
}

Expand Down

0 comments on commit 9b48841

Please sign in to comment.