TF-123 Create objects for caching mailbox
This commit is contained in:
@@ -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
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -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];
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
@@ -14,6 +14,7 @@ export 'user/user_profile_response.dart';
|
|||||||
export 'mailbox/presentation_mailbox.dart';
|
export 'mailbox/presentation_mailbox.dart';
|
||||||
export 'mailbox/select_mode.dart';
|
export 'mailbox/select_mode.dart';
|
||||||
export 'mailbox/expand_mode.dart';
|
export 'mailbox/expand_mode.dart';
|
||||||
|
export 'mailbox/mailbox_property.dart';
|
||||||
|
|
||||||
// Email
|
// Email
|
||||||
export 'email/presentation_email.dart';
|
export 'email/presentation_email.dart';
|
||||||
@@ -41,7 +42,14 @@ export 'extensions/email_body_part_extension.dart';
|
|||||||
export 'extensions/attachment_extension.dart';
|
export 'extensions/attachment_extension.dart';
|
||||||
export 'extensions/list_email_id_extension.dart';
|
export 'extensions/list_email_id_extension.dart';
|
||||||
export 'extensions/mailbox_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
|
// Download
|
||||||
export 'download/download_task_id.dart';
|
export 'download/download_task_id.dart';
|
||||||
@@ -53,4 +61,10 @@ export 'contact/device_contact.dart';
|
|||||||
// Upload
|
// Upload
|
||||||
export 'upload/file_info.dart';
|
export 'upload/file_info.dart';
|
||||||
export 'upload/upload_request.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';
|
||||||
@@ -55,6 +55,9 @@ dependencies:
|
|||||||
# http_parser
|
# http_parser
|
||||||
http_parser: 4.0.0
|
http_parser: 4.0.0
|
||||||
|
|
||||||
|
# hive
|
||||||
|
hive: 2.0.4
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
@@ -62,6 +65,8 @@ dev_dependencies:
|
|||||||
build_runner: 2.0.5
|
build_runner: 2.0.5
|
||||||
|
|
||||||
json_serializable: 4.1.3
|
json_serializable: 4.1.3
|
||||||
|
|
||||||
|
hive_generator: 1.1.1
|
||||||
# For information on the generic Dart part of this file, see the
|
# For information on the generic Dart part of this file, see the
|
||||||
# following page: https://dart.dev/tools/pub/pubspec
|
# following page: https://dart.dev/tools/pub/pubspec
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user