open composer view when selected share file
This commit is contained in:
@@ -25,6 +25,7 @@ import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
@@ -317,6 +318,7 @@ class ComposerController extends BaseController {
|
||||
if (arguments.emailActionType == EmailActionType.edit) {
|
||||
_getEmailContentAction(arguments);
|
||||
}
|
||||
|
||||
_initEmailAddress(arguments);
|
||||
_initSubjectEmail(arguments);
|
||||
_initAttachments(arguments);
|
||||
@@ -902,7 +904,40 @@ class ComposerController extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
List<InlineImage> covertListSharedMediaFileToFile(List<SharedMediaFile> value) {
|
||||
List<File> newFiles = List.empty(growable: true);
|
||||
if (value.isNotEmpty) {
|
||||
for (var element in value) {
|
||||
newFiles.add(File(
|
||||
Platform.isIOS
|
||||
? element.type == SharedMediaType.FILE
|
||||
? element.path.toString().replaceAll('file:/', '')
|
||||
: element.path
|
||||
: element.path,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
final List<InlineImage> listInlineImage = newFiles.map(
|
||||
(e) => InlineImage(
|
||||
ImageSource.local,
|
||||
fileInfo: FileInfo(
|
||||
e.path.split('/').last,
|
||||
e.path,
|
||||
e.existsSync() ? e.lengthSync() : 0,
|
||||
)
|
||||
)
|
||||
).toList();
|
||||
return listInlineImage;
|
||||
}
|
||||
|
||||
void _getEmailContentAction(ComposerArguments arguments) async {
|
||||
if(arguments.listSharedMediaFile != null && arguments.listSharedMediaFile!.isNotEmpty){
|
||||
final listInlineImage = covertListSharedMediaFileToFile(arguments.listSharedMediaFile!);
|
||||
for (var e in listInlineImage) {
|
||||
_uploadInlineAttachmentsAction(e.fileInfo!);
|
||||
}
|
||||
}
|
||||
if(arguments.emailContents != null && arguments.emailContents!.isNotEmpty){
|
||||
_emailContents = arguments.emailContents;
|
||||
emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!,[],[]));
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
||||
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
||||
|
||||
class ComposerArguments extends RouterArguments {
|
||||
final EmailActionType emailActionType;
|
||||
final PresentationEmail? presentationEmail;
|
||||
final List<EmailContent>? emailContents;
|
||||
final List<SharedMediaFile>? listSharedMediaFile;
|
||||
final EmailAddress? emailAddress;
|
||||
final List<Attachment>? attachments;
|
||||
final Role? mailboxRole;
|
||||
@@ -18,6 +20,7 @@ class ComposerArguments extends RouterArguments {
|
||||
this.attachments,
|
||||
this.mailboxRole,
|
||||
this.emailAddress,
|
||||
this.listSharedMediaFile,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -28,5 +31,6 @@ class ComposerArguments extends RouterArguments {
|
||||
attachments,
|
||||
mailboxRole,
|
||||
emailAddress,
|
||||
listSharedMediaFile,
|
||||
];
|
||||
}
|
||||
@@ -3,9 +3,7 @@ import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_downloader/flutter_downloader.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:model/account/account.dart';
|
||||
import 'package:model/oidc/request/oidc_request.dart';
|
||||
import 'package:model/oidc/token_oidc.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
||||
import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart';
|
||||
@@ -100,6 +98,11 @@ class HomeController extends BaseController {
|
||||
_emailReceiveManager.setPendingEmailAddress(EmailAddress(null, uri.path));
|
||||
}
|
||||
});
|
||||
|
||||
_emailReceiveManager.receivingFileSharingStream.listen((listFile) {
|
||||
log('HomeController::onInit(): SharedMediaFile: ${listFile.toString()}');
|
||||
_emailReceiveManager.setPendingFileInfo(listFile);
|
||||
});
|
||||
}
|
||||
|
||||
void _goToLogin({LoginArguments? arguments}) {
|
||||
|
||||
+19
@@ -89,6 +89,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
RouterArguments? routerArguments;
|
||||
late StreamSubscription _connectivityStreamSubscription;
|
||||
late StreamSubscription _emailReceiveManagerStreamSubscription;
|
||||
late StreamSubscription _fileReceiveManagerStreamSubscription;
|
||||
|
||||
final StreamController<Either<Failure, Success>> _progressStateController =
|
||||
StreamController<Either<Failure, Success>>.broadcast();
|
||||
@@ -110,6 +111,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
void onInit() {
|
||||
_registerNetworkConnectivityState();
|
||||
_registerPendingEmailAddress();
|
||||
_registerPendingFileInfo();
|
||||
_initializeIsolateExecutor();
|
||||
super.onInit();
|
||||
}
|
||||
@@ -239,6 +241,22 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
});
|
||||
}
|
||||
|
||||
void _registerPendingFileInfo() {
|
||||
_fileReceiveManagerStreamSubscription =
|
||||
_emailReceiveManager.pendingFileInfo.stream.listen((listFile) {
|
||||
log('MailboxDashBoardController::_registerPendingFileInfo(): ${listFile.length}');
|
||||
if (listFile.isNotEmpty) {
|
||||
_emailReceiveManager.clearPendingFileInfo();
|
||||
final arguments = ComposerArguments(
|
||||
emailActionType: EmailActionType.edit,
|
||||
mailboxRole: selectedMailbox.value?.role,
|
||||
listSharedMediaFile: listFile,
|
||||
);
|
||||
goToComposer(arguments);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void _initializeIsolateExecutor() async {
|
||||
await _isolateExecutor.warmUp(log: BuildUtils.isDebugMode);
|
||||
|
||||
@@ -556,6 +574,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
void onClose() {
|
||||
_emailReceiveManager.closeEmailReceiveManagerStream();
|
||||
_emailReceiveManagerStreamSubscription.cancel();
|
||||
_fileReceiveManagerStreamSubscription.cancel();
|
||||
_connectivityStreamSubscription.cancel();
|
||||
_progressStateController.close();
|
||||
_isolateExecutor.dispose();
|
||||
|
||||
Reference in New Issue
Block a user