TF-123 Create objects for caching mailbox

This commit is contained in:
dab246
2021-09-28 15:00:00 +07:00
committed by Dat H. Pham
parent 89cbb8fcc2
commit dd0d1bbe87
16 changed files with 368 additions and 2 deletions
+7
View File
@@ -0,0 +1,7 @@
class CachingConstants {
static const int MAILBOX_CACHE_IDENTIFY = 1;
static const int MAILBOX_RIGHTS_CACHE_IDENTIFY = 2;
static const int STATE_DAO_IDENTIFY = 3;
static const int STATE_TYPE_IDENTIFY = 4;
}
@@ -0,0 +1,74 @@
import 'package:equatable/equatable.dart';
import 'package:hive/hive.dart';
import 'package:model/caching/mailbox/mailbox_rights_cache.dart';
import 'package:model/model.dart';
part 'mailbox_cache.g.dart';
@HiveType(typeId: CachingConstants.MAILBOX_CACHE_IDENTIFY)
class MailboxCache extends HiveObject with EquatableMixin {
@HiveField(0)
final String id;
@HiveField(1)
final String? name;
@HiveField(2)
final String? parentId;
@HiveField(3)
final String? role;
@HiveField(4)
final int? sortOrder;
@HiveField(5)
final int? totalEmails;
@HiveField(6)
final int? unreadEmails;
@HiveField(7)
final int? totalThreads;
@HiveField(8)
final int? unreadThreads;
@HiveField(9)
final MailboxRightsCache? myRights;
@HiveField(10)
final bool? isSubscribed;
@HiveField(11)
final DateTime? lastOpened;
MailboxCache(
this.id,
{
this.name,
this.parentId,
this.role,
this.sortOrder,
this.totalEmails,
this.unreadEmails,
this.totalThreads,
this.unreadThreads,
this.myRights,
this.isSubscribed,
this.lastOpened
}
);
@override
List<Object?> get props => [
id,
name,
parentId,
role,
unreadEmails,
lastOpened,
];
}
@@ -0,0 +1,62 @@
import 'package:equatable/equatable.dart';
import 'package:hive/hive.dart';
import 'package:model/model.dart';
part 'mailbox_rights_cache.g.dart';
@HiveType(typeId: CachingConstants.MAILBOX_RIGHTS_CACHE_IDENTIFY)
class MailboxRightsCache extends HiveObject with EquatableMixin {
@HiveField(0)
final bool mayReadItems;
@HiveField(1)
final bool mayAddItems;
@HiveField(2)
final bool mayRemoveItems;
@HiveField(3)
final bool maySetSeen;
@HiveField(4)
final bool maySetKeywords;
@HiveField(5)
final bool mayCreateChild;
@HiveField(6)
final bool mayRename;
@HiveField(7)
final bool mayDelete;
@HiveField(8)
final bool maySubmit;
MailboxRightsCache(
this.mayReadItems,
this.mayAddItems,
this.mayRemoveItems,
this.maySetSeen,
this.maySetKeywords,
this.mayCreateChild,
this.mayRename,
this.mayDelete,
this.maySubmit
);
@override
List<Object?> get props => [
mayReadItems,
mayAddItems,
mayRemoveItems,
maySetSeen,
maySetKeywords,
mayCreateChild,
mayRename,
mayDelete,
maySubmit
];
}
+21
View File
@@ -0,0 +1,21 @@
import 'package:equatable/equatable.dart';
import 'package:hive/hive.dart';
import 'package:model/model.dart';
part 'state_dao.g.dart';
@HiveType(typeId: CachingConstants.STATE_DAO_IDENTIFY)
class StateDao extends HiveObject with EquatableMixin {
@HiveField(0)
final StateType type;
@HiveField(1)
final String state;
StateDao(this.type, this.state);
@override
List<Object?> get props => [type, state];
}
+21
View File
@@ -0,0 +1,21 @@
import 'package:hive/hive.dart';
import 'package:model/model.dart';
part 'state_type.g.dart';
@HiveType(typeId: CachingConstants.STATE_TYPE_IDENTIFY)
enum StateType {
@HiveField(0)
mailbox
}
extension StateTypeExtension on StateType {
String get value {
switch(this) {
case StateType.mailbox:
return 'mailbox';
}
}
}
@@ -0,0 +1,16 @@
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
extension ListMailboxCacheExtension on List<MailboxCache> {
Map<String, MailboxCache> toMap() {
return Map<String, MailboxCache>.fromIterable(
this,
key: (mailboxCache) => mailboxCache.id,
value: (mailboxCache) => mailboxCache);
}
List<Mailbox> toMailboxList() {
return map((mailboxCache) => mailboxCache.toMailbox()).toList();
}
}
@@ -0,0 +1,23 @@
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
extension MailboxCacheExtension on MailboxCache {
Mailbox toMailbox() {
return Mailbox(
MailboxId(Id(id)),
name != null ? MailboxName(name!) : null,
parentId != null ? MailboxId(Id(parentId!)) : null,
role != null ? Role(role!) : null,
sortOrder != null ? SortOrder(sortValue: sortOrder!) : null,
totalEmails != null ? TotalEmails(UnsignedInt(totalEmails!)) : null,
unreadEmails != null ? UnreadEmails(UnsignedInt(unreadEmails!)) : null,
totalThreads != null ? TotalThreads(UnsignedInt(totalThreads!)) : null,
unreadThreads != null ? UnreadThreads(UnsignedInt(unreadThreads!)) : null,
myRights != null ? myRights!.toMailboxRights() : null,
isSubscribed != null ? IsSubscribed(isSubscribed!) : null
);
}
}
@@ -0,0 +1,57 @@
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
extension MailboxExtension on Mailbox {
bool hasRole() => role != null && role!.value.isNotEmpty;
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
);
}
MailboxCache toMailboxCache() {
return MailboxCache(
id.id.value,
name: name?.name,
parentId: parentId?.id.value,
role: role?.value,
sortOrder: sortOrder?.value.value.round(),
totalEmails: totalEmails?.value.value.round(),
unreadEmails: unreadEmails?.value.value.round(),
totalThreads: totalThreads?.value.value.round(),
unreadThreads: unreadThreads?.value.value.round(),
myRights: myRights != null ? myRights!.toMailboxRightsCache() : null,
isSubscribed: isSubscribed?.value
);
}
Mailbox combineMailbox(Mailbox newMailbox, Properties updatedProperties) {
return Mailbox(
newMailbox.id,
updatedProperties.contain(MailboxProperty.name) ? newMailbox.name : name,
updatedProperties.contain(MailboxProperty.parentId) ? newMailbox.parentId : parentId,
updatedProperties.contain(MailboxProperty.role) ? newMailbox.role : role,
updatedProperties.contain(MailboxProperty.sortOrder) ? newMailbox.sortOrder : sortOrder,
updatedProperties.contain(MailboxProperty.totalEmails) ? newMailbox.totalEmails : totalEmails,
updatedProperties.contain(MailboxProperty.unreadEmails) ? newMailbox.unreadEmails : unreadEmails,
updatedProperties.contain(MailboxProperty.totalThreads) ? newMailbox.totalThreads : totalThreads,
updatedProperties.contain(MailboxProperty.unreadThreads) ? newMailbox.unreadThreads : unreadThreads,
updatedProperties.contain(MailboxProperty.myRights) ? newMailbox.myRights : myRights,
updatedProperties.contain(MailboxProperty.isSubscribed) ? newMailbox.isSubscribed : isSubscribed,
);
}
}
@@ -0,0 +1,18 @@
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_rights.dart';
import 'package:model/caching/mailbox/mailbox_rights_cache.dart';
extension MailboxRightsCacheExtension on MailboxRightsCache {
MailboxRights toMailboxRights() {
return MailboxRights(
mayReadItems,
mayAddItems,
mayRemoveItems,
maySetSeen,
maySetKeywords,
mayCreateChild,
mayRename,
mayDelete,
maySubmit
);
}
}
@@ -0,0 +1,18 @@
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_rights.dart';
import 'package:model/caching/mailbox/mailbox_rights_cache.dart';
extension MailboxRightsExtension on MailboxRights {
MailboxRightsCache toMailboxRightsCache() {
return MailboxRightsCache(
mayReadItems,
mayAddItems,
mayRemoveItems,
maySetSeen,
maySetKeywords,
mayCreateChild,
mayRename,
mayDelete,
maySubmit
);
}
}
@@ -0,0 +1,7 @@
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
extension PropertiesExtension on Properties {
bool contain(String key) => value.contains(key);
}
@@ -0,0 +1,9 @@
import 'package:jmap_dart_client/jmap/core/state.dart';
import 'package:model/model.dart';
extension StateExtension on State {
StateDao toStateDao(StateType stateType) {
return StateDao(stateType, value);
}
}
+14
View File
@@ -0,0 +1,14 @@
class MailboxProperty {
static const String id = 'id';
static const String name = 'name';
static const String parentId = 'parentId';
static const String role = 'role';
static const String sortOrder = 'sortOrder';
static const String totalEmails = 'totalEmails';
static const String unreadEmails = 'unreadEmails';
static const String totalThreads = 'totalThreads';
static const String unreadThreads = 'unreadThreads';
static const String myRights = 'myRights';
static const String isSubscribed = 'isSubscribed';
}
+16 -2
View File
@@ -14,6 +14,7 @@ export 'user/user_profile_response.dart';
export 'mailbox/presentation_mailbox.dart';
export 'mailbox/select_mode.dart';
export 'mailbox/expand_mode.dart';
export 'mailbox/mailbox_property.dart';
// Email
export 'email/presentation_email.dart';
@@ -41,7 +42,14 @@ export 'extensions/email_body_part_extension.dart';
export 'extensions/attachment_extension.dart';
export 'extensions/list_email_id_extension.dart';
export 'extensions/mailbox_id_extension.dart';
export 'extensions/list_email_id_extension.dart';
export 'extensions/mailbox_extension.dart';
export 'extensions/mailbox_name_extension.dart';
export 'extensions/list_mailbox_cache_extension.dart';
export 'extensions/state_extension.dart';
export 'extensions/mailbox_rights_extension.dart';
export 'extensions/mailbox_rights_cache_extension.dart';
export 'extensions/mailbox_cache_extension.dart';
export 'extensions/properties_extension.dart';
// Download
export 'download/download_task_id.dart';
@@ -53,4 +61,10 @@ export 'contact/device_contact.dart';
// Upload
export 'upload/file_info.dart';
export 'upload/upload_request.dart';
export 'upload/upload_response.dart';
export 'upload/upload_response.dart';
// Caching
export 'caching/caching_constants.dart';
export 'caching/mailbox/mailbox_cache.dart';
export 'caching/state/state_dao.dart';
export 'caching/state/state_type.dart';
+5
View File
@@ -55,6 +55,9 @@ dependencies:
# http_parser
http_parser: 4.0.0
# hive
hive: 2.0.4
dev_dependencies:
flutter_test:
sdk: flutter
@@ -62,6 +65,8 @@ dev_dependencies:
build_runner: 2.0.5
json_serializable: 4.1.3
hive_generator: 1.1.1
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec