From 13042f81334df62b845e9d1e19f7248e726a0513 Mon Sep 17 00:00:00 2001 From: Agboola Onasanya Date: Sun, 30 Mar 2025 04:04:00 +0100 Subject: [PATCH] post merge commit --- lib/components/messaging_provider.dart | 79 ++++++++++++++--------- lib/pages/conversations_page.dart | 1 + lib/pages/recent_converstations_page.dart | 34 ++++++++-- lib/pages/search_page.dart | 1 + 4 files changed, 79 insertions(+), 36 deletions(-) diff --git a/lib/components/messaging_provider.dart b/lib/components/messaging_provider.dart index 8508a50..618046a 100644 --- a/lib/components/messaging_provider.dart +++ b/lib/components/messaging_provider.dart @@ -25,17 +25,28 @@ class MessagingProviders extends ChangeNotifier { late final Account account; late final Databases database; late final Storage storage; + late final Realtime realtime; + late final RealtimeSubscription? subscription; // Auth Status AuthStatus? status; late model.User? user; static MessagingProviders instance = MessagingProviders(); - MessagingProviders() { _init(); _loadUser(); + subscribe(); + } + + subscribe() { + subscription = realtime.subscribe( + [ + 'database.${Constants.instance.databaseId}.chats', + 'database.${Constants.instance.databaseId}.conversations' + ], + ); } _init() { @@ -46,6 +57,7 @@ class MessagingProviders extends ChangeNotifier { account = Account(client); database = Databases(client); storage = Storage(client); + realtime = Realtime(client); } _loadUser() async { @@ -215,7 +227,7 @@ class MessagingProviders extends ChangeNotifier { for (var _document in _documentList.documents) { _returnValue.add(User.fromData(_document)); } - _returnValue.sort((a,b) => b.lastSeen.compareTo(a.lastSeen)); + _returnValue.sort((a, b) => b.lastSeen.compareTo(a.lastSeen)); return _returnValue; }, ); @@ -256,39 +268,48 @@ class MessagingProviders extends ChangeNotifier { // } } + Future> getUserConversations(String userId) async { + List _chatId = []; + List _details = []; + List _lastModified = []; + List _returnValue = []; - // Stream> getUserConversations(String userId) async* { - // // - // // while (true) { - // List _chatId = []; - // List _details = []; - // List _lastModified = []; - // List _returnValue = []; + var _document = await database.getDocument( + databaseId: Constants.instance.databaseId, + collectionId: Constants.instance.convCollectionId, + documentId: userId.trim(), + ); - // var _conversationData = await database.getDocument( - // databaseId: Constants.instance.databaseId, - // collectionId: Constants.instance.convCollectionId, - // documentId: userId.trim(), - // ); + _chatId = _document.data['chatId']; + _details = _document.data['details']; + _lastModified = _document.data['lastModified']; - // yield _conversationData.toMap map( - // (_snapshot) { - // _chatId = _snapshot.data['chatId']; - // _details = _snapshot.data['details']; - // _lastModified = _snapshot.data['lastModified']; + for (int i = 0; i < _chatId.length; i++) { + _returnValue.add( + Conversations.fromData(_chatId[i], _details[i], _lastModified[i])); + } + _returnValue.sort((a, b) => b.lastModified!.compareTo(a.lastModified!)); - // for (int i = 0; i < _chatId.length; i++) { - // _returnValue.add(Conversations.fromData( - // _chatId[i], _details[i], _lastModified[i])); - // } - // _returnValue.sort((a, b) => b.lastModified!.compareTo(a.lastModified!)); - // return _returnValue; - // }, - // ); - // // } - // } + return _returnValue; + // .then((document) { + // _chatId = document.data['chatId']; + // _details = document.data['details']; + // _lastModified = document.data['lastModified']; + // for (int i = 0; i < _chatId.length; i++) { + // _returnValue.add( + // Conversations.fromData(_chatId[i], _details[i], _lastModified[i])); + // } + // _returnValue.sort((a, b) => b.lastModified!.compareTo(a.lastModified!)); + // //conversationsController.add(_returnValue); + // }).catchError((error) { + // _returnValue; + // // conversationsController.addError(error); + // }); + + // return Future.delayed(Duration(microseconds: 300)); + } Stream getMessage(String _chatId) async* { // diff --git a/lib/pages/conversations_page.dart b/lib/pages/conversations_page.dart index 03f1156..8b5e8d6 100644 --- a/lib/pages/conversations_page.dart +++ b/lib/pages/conversations_page.dart @@ -11,6 +11,7 @@ import 'package:messaging_app/service/snackbar_service.dart'; import 'package:provider/provider.dart'; import 'package:timeago/timeago.dart' as timeago; +// ignore: must_be_immutable class ConversationsPage extends StatefulWidget { ConversationsPage({ super.key, diff --git a/lib/pages/recent_converstations_page.dart b/lib/pages/recent_converstations_page.dart index be30f59..17c58fb 100644 --- a/lib/pages/recent_converstations_page.dart +++ b/lib/pages/recent_converstations_page.dart @@ -26,16 +26,36 @@ class RecentConverstationsPage extends StatefulWidget { class _RecentConverstationsPageState extends State { late MessagingProviders _auth; + List streamData = []; - final myController = StreamController>.broadcast(); - Stream> get messageStream => myController.stream; - - void messager() { - MessagingProviders.instance.getUserConversation(_auth.user!.$id); +// To listen to the conversations stream + @override + void dispose() { + super.dispose(); + loadStream(); } - void dispose() { - myController.close(); + loadStream() async { + streamData = + await MessagingProviders.instance.getUserConversations(_auth.user!.$id); + } + + subscribe() { + MessagingProviders.instance.subscription!.stream.listen((data) { + final event = data.events.first; + if (event.endsWith('.create')) { + streamData.add(data.payload['']); + } else if (event.endsWith('.update')) {} + }); + } + + @override + void initState() { + super.initState(); + MessagingProviders.instance.subscription!.stream.listen((data) { + final event = data.events.first; + ; + }); } @override diff --git a/lib/pages/search_page.dart b/lib/pages/search_page.dart index 6847ea6..7012ea8 100644 --- a/lib/pages/search_page.dart +++ b/lib/pages/search_page.dart @@ -8,6 +8,7 @@ import 'package:messaging_app/service/navigation_service.dart'; import 'package:provider/provider.dart'; import 'package:timeago/timeago.dart' as timeago; +// ignore: must_be_immutable class SearchPage extends StatefulWidget { SearchPage({ super.key,