Init mailbox feature add domain layer
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
class MailboxConstants {
|
||||||
|
static const MAILBOX_LEVEL_SEPARATOR = "/";
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import 'package:built_collection/built_collection.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
|
import 'package:model/model.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/domain/extensions/mailbox_extension.dart';
|
||||||
|
|
||||||
|
extension ListMailboxExtensions on List<Mailbox> {
|
||||||
|
Tuple2<List<PresentationMailbox>, List<PresentationMailbox>> splitMailboxList(bool test(Mailbox element)) {
|
||||||
|
final validBuilder = ListBuilder<PresentationMailbox>();
|
||||||
|
final invalidBuilder = ListBuilder<PresentationMailbox>();
|
||||||
|
forEach((element) {
|
||||||
|
if (test(element)) {
|
||||||
|
validBuilder.add(element.toPresentationMailbox());
|
||||||
|
} else {
|
||||||
|
invalidBuilder.add(element.toPresentationMailbox());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return Tuple2(
|
||||||
|
validBuilder.build().toList(),
|
||||||
|
invalidBuilder.build().toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
|
import 'package:model/model.dart';
|
||||||
|
|
||||||
|
extension MailboxExtension on Mailbox {
|
||||||
|
|
||||||
|
PresentationMailbox toPresentationMailbox({SelectMode selectMode = SelectMode.INACTIVE}) {
|
||||||
|
return PresentationMailbox(
|
||||||
|
id,
|
||||||
|
name: name,
|
||||||
|
parentId: parentId,
|
||||||
|
role: role,
|
||||||
|
sortOrder: sortOrder,
|
||||||
|
totalEmails: totalEmails,
|
||||||
|
unreadEmails: unreadEmails,
|
||||||
|
totalThreads: totalThreads,
|
||||||
|
unreadThreads: unreadThreads,
|
||||||
|
myRights: myRights,
|
||||||
|
isSubscribed: isSubscribed,
|
||||||
|
selectMode: selectMode
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasRole() => role != null && role!.value.isNotEmpty;
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
|
|
||||||
|
extension MailboxNameExtension on MailboxName {
|
||||||
|
int compareToSort(MailboxName mailboxName) => name.compareTo(mailboxName.name);
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:model/model.dart';
|
||||||
|
|
||||||
|
extension PresentationMailboxExtension on PresentationMailbox {
|
||||||
|
|
||||||
|
String getMailboxIcon(ImagePaths imagePaths) {
|
||||||
|
if (hasRole()) {
|
||||||
|
switch(role!.value) {
|
||||||
|
case 'inbox':
|
||||||
|
return imagePaths.icMailboxInbox;
|
||||||
|
case 'drafts':
|
||||||
|
return imagePaths.icMailboxDrafts;
|
||||||
|
case 'outbox':
|
||||||
|
return imagePaths.icMailboxInbox;
|
||||||
|
case 'sent':
|
||||||
|
return imagePaths.icMailboxSent;
|
||||||
|
case 'trash':
|
||||||
|
return imagePaths.icMailboxTrash;
|
||||||
|
case 'spam':
|
||||||
|
return imagePaths.icMailboxSpam;
|
||||||
|
case 'templates':
|
||||||
|
return imagePaths.icMailboxTemplate;
|
||||||
|
case 'all_mail':
|
||||||
|
return imagePaths.icMailboxAllMail;
|
||||||
|
default:
|
||||||
|
return imagePaths.icMailboxFolder;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return imagePaths.icMailboxFolder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
|
|
||||||
|
abstract class MailboxRepository {
|
||||||
|
Future<List<Mailbox>> getAllMailbox(AccountId accountId, {Properties? properties});
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
|
|
||||||
|
class GetAllMailboxSuccess extends UIState {
|
||||||
|
final List<PresentationMailbox> defaultMailboxList;
|
||||||
|
final List<PresentationMailbox> folderMailboxList;
|
||||||
|
|
||||||
|
GetAllMailboxSuccess({required this.defaultMailboxList, required this.folderMailboxList});
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [folderMailboxList];
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetAllMailboxFailure extends FeatureFailure {
|
||||||
|
final exception;
|
||||||
|
|
||||||
|
GetAllMailboxFailure(this.exception);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [exception];
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/domain/extensions/list_mailbox_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/domain/extensions/mailbox_extension.dart';
|
||||||
|
|
||||||
|
class GetAllMailboxInteractor {
|
||||||
|
final MailboxRepository mailboxRepository;
|
||||||
|
|
||||||
|
GetAllMailboxInteractor(this.mailboxRepository);
|
||||||
|
|
||||||
|
Stream<Either<Failure, Success>> execute(AccountId accountId, {Properties? properties}) async* {
|
||||||
|
try {
|
||||||
|
yield Right<Failure, Success>(UIState.loading);
|
||||||
|
final mailboxList = await mailboxRepository.getAllMailbox(accountId, properties: properties);
|
||||||
|
final tupleList = mailboxList.splitMailboxList((mailbox) => mailbox.hasRole());
|
||||||
|
yield Right<Failure, Success>(GetAllMailboxSuccess(defaultMailboxList: tupleList.value1, folderMailboxList: tupleList.value2));
|
||||||
|
} catch (e) {
|
||||||
|
yield Left(GetAllMailboxFailure(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user