TF-123 Implement refresh all mailbox

This commit is contained in:
dab246
2021-09-28 15:51:10 +07:00
committed by Dat H. Pham
parent 8f5171d581
commit eb29f514dc
52 changed files with 745 additions and 368 deletions
-7
View File
@@ -1,7 +0,0 @@
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;
}
@@ -1,74 +0,0 @@
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,
];
}
@@ -1,62 +0,0 @@
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
@@ -1,21 +0,0 @@
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
@@ -1,21 +0,0 @@
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';
}
}
}
@@ -1,16 +0,0 @@
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,13 @@
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
extension ListMailboxExtension on List<Mailbox> {
Mailbox? findMailbox(MailboxId mailboxId) {
try {
return firstWhere((element) => element.id == mailboxId);
} catch (e) {
return null;
}
}
}
@@ -1,23 +0,0 @@
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
);
}
}
@@ -23,22 +23,6 @@ extension MailboxExtension on Mailbox {
);
}
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,
@@ -1,18 +0,0 @@
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
);
}
}
@@ -1,18 +0,0 @@
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
);
}
}
@@ -1,9 +0,0 @@
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);
}
}
+2 -12
View File
@@ -44,12 +44,8 @@ export 'extensions/list_email_id_extension.dart';
export 'extensions/mailbox_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';
export 'extensions/list_mailbox_extension.dart';
// Download
export 'download/download_task_id.dart';
@@ -61,10 +57,4 @@ export 'contact/device_contact.dart';
// Upload
export 'upload/file_info.dart';
export 'upload/upload_request.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';
export 'upload/upload_response.dart';
-5
View File
@@ -55,9 +55,6 @@ dependencies:
# http_parser
http_parser: 4.0.0
# hive
hive: 2.0.4
dev_dependencies:
flutter_test:
sdk: flutter
@@ -65,8 +62,6 @@ 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