mirror of
https://gitlab.com/veilid/veilidchat.git
synced 2025-08-01 18:56:03 -04:00
incremental chat state work
This commit is contained in:
parent
83880d79ba
commit
47287ba8d4
7 changed files with 70 additions and 30 deletions
|
@ -55,7 +55,7 @@ class SingleContactMessagesCubit extends Cubit<SingleContactMessagesState> {
|
|||
required TypedKey localConversationRecordKey,
|
||||
required TypedKey localMessagesRecordKey,
|
||||
required TypedKey remoteConversationRecordKey,
|
||||
required TypedKey remoteMessagesRecordKey,
|
||||
required TypedKey? remoteMessagesRecordKey,
|
||||
}) : _accountInfo = accountInfo,
|
||||
_remoteIdentityPublicKey = remoteIdentityPublicKey,
|
||||
_localConversationRecordKey = localConversationRecordKey,
|
||||
|
@ -147,8 +147,14 @@ class SingleContactMessagesCubit extends Cubit<SingleContactMessagesState> {
|
|||
|
||||
// Open remote messages key
|
||||
Future<void> _initRcvdMessagesCubit() async {
|
||||
// Don't bother if we don't have a remote messages record key yet
|
||||
if (_remoteMessagesRecordKey == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Open new cubit if one is desired
|
||||
_rcvdMessagesCubit = DHTLogCubit(
|
||||
open: () async => DHTLog.openRead(_remoteMessagesRecordKey,
|
||||
open: () async => DHTLog.openRead(_remoteMessagesRecordKey!,
|
||||
debugName: 'SingleContactMessagesCubit::_initRcvdMessagesCubit::'
|
||||
'RcvdMessages',
|
||||
parent: _remoteConversationRecordKey,
|
||||
|
@ -159,6 +165,31 @@ class SingleContactMessagesCubit extends Cubit<SingleContactMessagesState> {
|
|||
_updateRcvdMessagesState(_rcvdMessagesCubit!.state);
|
||||
}
|
||||
|
||||
Future<void> updateRemoteMessagesRecordKey(
|
||||
TypedKey? remoteMessagesRecordKey) async {
|
||||
await _initWait();
|
||||
|
||||
_sspRemoteConversationRecordKey.updateState(remoteMessagesRecordKey,
|
||||
(remoteMessagesRecordKey) async {
|
||||
// Don't bother if nothing is changing
|
||||
if (_remoteMessagesRecordKey == remoteMessagesRecordKey) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Close existing cubit if we have one
|
||||
final rcvdMessagesCubit = _rcvdMessagesCubit;
|
||||
_rcvdMessagesCubit = null;
|
||||
_remoteMessagesRecordKey = null;
|
||||
await _rcvdSubscription?.cancel();
|
||||
_rcvdSubscription = null;
|
||||
await rcvdMessagesCubit?.close();
|
||||
|
||||
// Init the new cubit if we should
|
||||
_remoteMessagesRecordKey = remoteMessagesRecordKey;
|
||||
await _initRcvdMessagesCubit();
|
||||
});
|
||||
}
|
||||
|
||||
Future<VeilidCrypto> _makeLocalMessagesCrypto() async =>
|
||||
VeilidCryptoPrivate.fromTypedKey(
|
||||
_accountInfo.userLogin!.identitySecret, 'tabledb');
|
||||
|
@ -452,7 +483,7 @@ class SingleContactMessagesCubit extends Cubit<SingleContactMessagesState> {
|
|||
final TypedKey _localConversationRecordKey;
|
||||
final TypedKey _localMessagesRecordKey;
|
||||
final TypedKey _remoteConversationRecordKey;
|
||||
final TypedKey _remoteMessagesRecordKey;
|
||||
TypedKey? _remoteMessagesRecordKey;
|
||||
|
||||
late final VeilidCrypto _conversationCrypto;
|
||||
late final MessageIntegrity _senderMessageIntegrity;
|
||||
|
@ -471,4 +502,6 @@ class SingleContactMessagesCubit extends Cubit<SingleContactMessagesState> {
|
|||
_reconciledSubscription;
|
||||
final StreamController<Future<void> Function()> _commandController;
|
||||
late final Future<void> _commandRunnerFut;
|
||||
|
||||
final _sspRemoteConversationRecordKey = SingleStateProcessor<TypedKey?>();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue