diff --git a/lib/features/base/action/update_mailbox_properties_action/update_mailbox_name_action.dart b/lib/features/base/action/update_mailbox_properties_action/update_mailbox_name_action.dart new file mode 100644 index 000000000..5327133a2 --- /dev/null +++ b/lib/features/base/action/update_mailbox_properties_action/update_mailbox_name_action.dart @@ -0,0 +1,18 @@ +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_properties_action.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart'; + +class UpdateMailboxNameAction extends UpdateMailboxPropertiesAction { + const UpdateMailboxNameAction({ + required super.mailboxTrees, + required super.mailboxId, + required this.mailboxName, + }); + + final MailboxName mailboxName; + + @override + bool updateProperty(MailboxTree mailboxTree) { + return mailboxTree.updateMailboxNameById(mailboxId, mailboxName); + } +} \ No newline at end of file diff --git a/lib/features/base/action/update_mailbox_properties_action/update_mailbox_properties_action.dart b/lib/features/base/action/update_mailbox_properties_action/update_mailbox_properties_action.dart new file mode 100644 index 000000000..ed37f10c2 --- /dev/null +++ b/lib/features/base/action/update_mailbox_properties_action/update_mailbox_properties_action.dart @@ -0,0 +1,24 @@ +import 'package:get/get_rx/get_rx.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart'; + +abstract class UpdateMailboxPropertiesAction { + const UpdateMailboxPropertiesAction({ + required this.mailboxTrees, + required this.mailboxId, + }); + + final List> mailboxTrees; + final MailboxId mailboxId; + + bool updateProperty(MailboxTree mailboxTree); + + void execute() { + for (var mailboxTree in mailboxTrees) { + if (updateProperty(mailboxTree.value)) { + mailboxTree.refresh(); + break; + } + } + } +} \ No newline at end of file diff --git a/lib/features/base/action/update_mailbox_properties_action/update_mailbox_total_emails_count_action.dart b/lib/features/base/action/update_mailbox_properties_action/update_mailbox_total_emails_count_action.dart new file mode 100644 index 000000000..35c3e69c0 --- /dev/null +++ b/lib/features/base/action/update_mailbox_properties_action/update_mailbox_total_emails_count_action.dart @@ -0,0 +1,20 @@ +import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_properties_action.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart'; + +class UpdateMailboxTotalEmailsCountAction extends UpdateMailboxPropertiesAction { + const UpdateMailboxTotalEmailsCountAction({ + required super.mailboxTrees, + required super.mailboxId, + required this.totalEmailsCountChanged, + }); + + final int totalEmailsCountChanged; + + @override + bool updateProperty(MailboxTree mailboxTree) { + return mailboxTree.updateMailboxTotalEmailsCountById( + mailboxId, + totalEmailsCountChanged, + ); + } +} \ No newline at end of file diff --git a/lib/features/base/action/update_mailbox_properties_action/update_mailbox_unread_count_action.dart b/lib/features/base/action/update_mailbox_properties_action/update_mailbox_unread_count_action.dart new file mode 100644 index 000000000..5651d24b4 --- /dev/null +++ b/lib/features/base/action/update_mailbox_properties_action/update_mailbox_unread_count_action.dart @@ -0,0 +1,17 @@ +import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_properties_action.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart'; + +class UpdateMailboxUnreadCountAction extends UpdateMailboxPropertiesAction { + const UpdateMailboxUnreadCountAction({ + required super.mailboxTrees, + required super.mailboxId, + required this.unreadChanges, + }); + + final int unreadChanges; + + @override + bool updateProperty(MailboxTree mailboxTree) { + return mailboxTree.updateMailboxUnreadCountById(mailboxId, unreadChanges); + } +} \ No newline at end of file diff --git a/lib/features/base/base_mailbox_controller.dart b/lib/features/base/base_mailbox_controller.dart index 73e619415..ee92dc783 100644 --- a/lib/features/base/base_mailbox_controller.dart +++ b/lib/features/base/base_mailbox_controller.dart @@ -20,6 +20,9 @@ import 'package:model/mailbox/expand_mode.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/select_mode.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; +import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_name_action.dart'; +import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_total_emails_count_action.dart'; +import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_unread_count_action.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_action_state.dart'; @@ -555,36 +558,22 @@ abstract class BaseMailboxController extends BaseController { } void updateMailboxNameById(MailboxId mailboxId, MailboxName mailboxName) { - final mailboxTrees = [ - defaultMailboxTree, - personalMailboxTree, - teamMailboxesTree, - ]; - - for (var mailboxTree in mailboxTrees) { - if (mailboxTree.value.updateMailboxNameById(mailboxId, mailboxName)) { - mailboxTree.refresh(); - break; - } - } + UpdateMailboxNameAction( + mailboxTrees: [defaultMailboxTree, personalMailboxTree, teamMailboxesTree], + mailboxId: mailboxId, + mailboxName: mailboxName, + ).execute(); } void updateUnreadCountOfMailboxById( MailboxId mailboxId, { required int unreadChanges, }) { - final mailboxTrees = [ - defaultMailboxTree, - personalMailboxTree, - teamMailboxesTree, - ]; - - for (var mailboxTree in mailboxTrees) { - if (mailboxTree.value.updateMailboxUnreadCountById(mailboxId, unreadChanges)) { - mailboxTree.refresh(); - break; - } - } + UpdateMailboxUnreadCountAction( + mailboxTrees: [defaultMailboxTree, personalMailboxTree, teamMailboxesTree], + mailboxId: mailboxId, + unreadChanges: unreadChanges, + ).execute(); } void clearUnreadCount(MailboxId mailboxId) { @@ -598,26 +587,19 @@ abstract class BaseMailboxController extends BaseController { final selectedNode = mailboxTree.value.findNode((node) => node.item.id == mailboxId); if (selectedNode == null) continue; final currentUnreadCount = selectedNode.item.unreadEmails?.value.value.toInt(); - teamMailboxesTree.value.updateMailboxUnreadCountById( + mailboxTree.value.updateMailboxUnreadCountById( mailboxId, -(currentUnreadCount ?? 0)); - teamMailboxesTree.refresh(); + mailboxTree.refresh(); break; } } void updateMailboxTotalEmailsCountById(MailboxId mailboxId, int totalEmails) { - final mailboxTrees = [ - defaultMailboxTree, - personalMailboxTree, - teamMailboxesTree, - ]; - - for (var mailboxTree in mailboxTrees) { - if (mailboxTree.value.updateMailboxTotalEmailsCountById(mailboxId, totalEmails)) { - mailboxTree.refresh(); - break; - } - } + UpdateMailboxTotalEmailsCountAction( + mailboxTrees: [defaultMailboxTree, personalMailboxTree, teamMailboxesTree], + mailboxId: mailboxId, + totalEmailsCountChanged: totalEmails, + ).execute(); } } \ No newline at end of file