Files
workavia-mail-front/lib/main/utils/email_receive_manager.dart
T
dab246 1c3ca5485a TF-2532 Only clear old data stream when add object to stream in share file
Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 181e1ec20dafe4f865d0f2ce606311cf216e06fd)
2024-07-02 13:06:10 +02:00

75 lines
2.4 KiB
Dart

import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/email/email_content.dart';
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:rxdart/rxdart.dart';
class EmailReceiveManager {
BehaviorSubject<EmailAddress?> _pendingEmailAddressInfo = BehaviorSubject.seeded(null);
BehaviorSubject<EmailAddress?> get pendingEmailAddressInfo => _pendingEmailAddressInfo;
BehaviorSubject<EmailContent?> _pendingEmailContentInfo = BehaviorSubject.seeded(null);
BehaviorSubject<EmailContent?> get pendingEmailContentInfo => _pendingEmailContentInfo;
BehaviorSubject<List<SharedMediaFile>> _pendingFileInfo = BehaviorSubject.seeded(List.empty(growable: true));
BehaviorSubject<List<SharedMediaFile>> get pendingFileInfo => _pendingFileInfo;
Stream<Uri?> get receivingSharingStream {
return Rx.merge([
Stream.fromFuture(ReceiveSharingIntent.getInitialTextAsUri()),
ReceiveSharingIntent.getTextStreamAsUri()
]);
}
Stream<List<SharedMediaFile>> get receivingFileSharingStream {
return Rx.merge([
Stream.fromFuture(ReceiveSharingIntent.getInitialMedia()),
ReceiveSharingIntent.getMediaStream()
]);
}
void setPendingEmailAddress(EmailAddress emailAddress) async {
_clearPendingEmailAddress();
_pendingEmailAddressInfo.add(emailAddress);
}
void setPendingEmailContent(EmailContent emailContent) async {
_clearPendingEmailContent();
_pendingEmailContentInfo.add(emailContent);
}
void _clearPendingEmailContent() {
if (_pendingEmailContentInfo.isClosed) {
_pendingEmailContentInfo = BehaviorSubject.seeded(null);
} else {
_pendingEmailContentInfo.add(null);
}
}
void _clearPendingEmailAddress() {
if(_pendingEmailAddressInfo.isClosed) {
_pendingEmailAddressInfo = BehaviorSubject.seeded(null);
} else {
_pendingEmailAddressInfo.add(null);
}
}
void closeEmailReceiveManagerStream() {
_pendingEmailAddressInfo.close();
_pendingEmailContentInfo.close();
_pendingFileInfo.close();
}
void setPendingFileInfo(List<SharedMediaFile> list) async {
_clearPendingFileInfo();
_pendingFileInfo.add(list);
}
void _clearPendingFileInfo() {
if(_pendingFileInfo.isClosed) {
_pendingFileInfo = BehaviorSubject.seeded(List.empty(growable: true));
} else {
_pendingFileInfo.add(List.empty(growable: true));
}
}
}