TF-1812 Handle add sending email to queue in work manager
(cherry picked from commit c5d89665f525550949bf4e694133ce5ea2777846)
This commit is contained in:
@@ -172,6 +172,8 @@ PODS:
|
|||||||
- SwiftyGif (5.4.4)
|
- SwiftyGif (5.4.4)
|
||||||
- url_launcher_ios (0.0.1):
|
- url_launcher_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- workmanager (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- better_open_file (from `.symlinks/plugins/better_open_file/ios`)
|
- better_open_file (from `.symlinks/plugins/better_open_file/ios`)
|
||||||
@@ -198,6 +200,7 @@ DEPENDENCIES:
|
|||||||
- share_plus (from `.symlinks/plugins/share_plus/ios`)
|
- share_plus (from `.symlinks/plugins/share_plus/ios`)
|
||||||
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`)
|
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`)
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
|
- workmanager (from `.symlinks/plugins/workmanager/ios`)
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
trunk:
|
trunk:
|
||||||
@@ -270,6 +273,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/shared_preferences_foundation/ios"
|
:path: ".symlinks/plugins/shared_preferences_foundation/ios"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||||
|
workmanager:
|
||||||
|
:path: ".symlinks/plugins/workmanager/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add
|
AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add
|
||||||
@@ -315,6 +320,7 @@ SPEC CHECKSUMS:
|
|||||||
shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472
|
shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472
|
||||||
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
|
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
|
||||||
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
||||||
|
workmanager: 0afdcf5628bbde6924c21af7836fed07b42e30e6
|
||||||
|
|
||||||
PODFILE CHECKSUM: e209bf81fb4facf3f68c43dbffa0b2d05ff63db0
|
PODFILE CHECKSUM: e209bf81fb4facf3f68c43dbffa0b2d05ff63db0
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import workmanager
|
|||||||
/// Register the app's plugins in the context of a normal run
|
/// Register the app's plugins in the context of a normal run
|
||||||
AppDelegate.registerPlugins(with: self)
|
AppDelegate.registerPlugins(with: self)
|
||||||
|
|
||||||
|
UNUserNotificationCenter.current().delegate = self
|
||||||
|
|
||||||
if #available(iOS 10.0, *) {
|
if #available(iOS 10.0, *) {
|
||||||
UNUserNotificationCenter.current().delegate = self as UNUserNotificationCenterDelegate
|
UNUserNotificationCenter.current().delegate = self as UNUserNotificationCenterDelegate
|
||||||
}
|
}
|
||||||
@@ -91,4 +93,9 @@ import workmanager
|
|||||||
return URL(string: "ShareMedia-\(appDomain)://dataUrl=\(sharedKey)#text")
|
return URL(string: "ShareMedia-\(appDomain)://dataUrl=\(sharedKey)#text")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func userNotificationCenter(_ center: UNUserNotificationCenter,
|
||||||
|
willPresent notification: UNNotification,
|
||||||
|
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
|
||||||
|
completionHandler(.alert) // shows banner even if app is in foreground
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
|
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:jmap_dart_client/http/converter/email_id_nullable_converter.dart';
|
||||||
|
import 'package:jmap_dart_client/http/converter/id_nullable_converter.dart';
|
||||||
|
import 'package:jmap_dart_client/http/converter/identities/identity_id_nullable_converter.dart';
|
||||||
|
import 'package:jmap_dart_client/http/converter/mailbox_id_nullable_converter.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:model/email/email_action_type.dart';
|
import 'package:model/email/email_action_type.dart';
|
||||||
|
import 'package:model/extensions/email_extension.dart';
|
||||||
|
|
||||||
class SendingEmail with EquatableMixin {
|
class SendingEmail with EquatableMixin {
|
||||||
final String sendingId;
|
final String sendingId;
|
||||||
@@ -28,6 +34,28 @@ class SendingEmail with EquatableMixin {
|
|||||||
this.creationIdRequest
|
this.creationIdRequest
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final val = <String, dynamic>{};
|
||||||
|
|
||||||
|
void writeNotNull(String key, dynamic value) {
|
||||||
|
if (value != null) {
|
||||||
|
val[key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
writeNotNull('sendingId', sendingId);
|
||||||
|
writeNotNull('email', email.asString());
|
||||||
|
writeNotNull('emailActionType', emailActionType.name);
|
||||||
|
writeNotNull('sentMailboxId', const MailboxIdNullableConverter().toJson(sentMailboxId));
|
||||||
|
writeNotNull('emailIdDestroyed', const EmailIdNullableConverter().toJson(emailIdDestroyed));
|
||||||
|
writeNotNull('emailIdAnsweredOrForwarded', const EmailIdNullableConverter().toJson(emailIdAnsweredOrForwarded));
|
||||||
|
writeNotNull('identityId', const IdentityIdNullableConverter().toJson(identityId));
|
||||||
|
writeNotNull('mailboxNameRequest', mailboxNameRequest?.name);
|
||||||
|
writeNotNull('creationIdRequest', const IdNullableConverter().toJson(creationIdRequest));
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
sendingId,
|
sendingId,
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache
|
|||||||
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
|
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
|
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
|
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/worker/hive_task.dart';
|
|
||||||
import 'package:tmail_ui_user/features/thread/data/extensions/email_cache_extension.dart';
|
import 'package:tmail_ui_user/features/thread/data/extensions/email_cache_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
|
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/extensions/email_extension.dart';
|
import 'package:tmail_ui_user/features/thread/data/extensions/email_extension.dart';
|
||||||
|
|||||||
@@ -1,10 +1,19 @@
|
|||||||
|
|
||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
||||||
|
|
||||||
class StoreSendingEmailLoading extends UIState {}
|
class StoreSendingEmailLoading extends UIState {}
|
||||||
|
|
||||||
class StoreSendingEmailSuccess extends UIState {}
|
class StoreSendingEmailSuccess extends UIState {
|
||||||
|
|
||||||
|
final SendingEmail sendingEmail;
|
||||||
|
|
||||||
|
StoreSendingEmailSuccess(this.sendingEmail);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [sendingEmail];
|
||||||
|
}
|
||||||
|
|
||||||
class StoreSendingEmailFailure extends FeatureFailure {
|
class StoreSendingEmailFailure extends FeatureFailure {
|
||||||
StoreSendingEmailFailure(dynamic exception) : super(exception: exception);
|
StoreSendingEmailFailure(dynamic exception) : super(exception: exception);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class StoreSendingEmailInteractor {
|
|||||||
try {
|
try {
|
||||||
yield Right<Failure, Success>(StoreSendingEmailLoading());
|
yield Right<Failure, Success>(StoreSendingEmailLoading());
|
||||||
await _emailRepository.storeSendingEmail(accountId, userName, sendingEmail);
|
await _emailRepository.storeSendingEmail(accountId, userName, sendingEmail);
|
||||||
yield Right<Failure, Success>(StoreSendingEmailSuccess());
|
yield Right<Failure, Success>(StoreSendingEmailSuccess(sendingEmail));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
yield Left<Failure, Success>(StoreSendingEmailFailure(e));
|
yield Left<Failure, Success>(StoreSendingEmailFailure(e));
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-1
@@ -25,7 +25,7 @@ import 'package:rxdart/transformers.dart';
|
|||||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_email_method_exception.dart';
|
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_email_method_exception.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/extensions/email_requestl_extension.dart';
|
import 'package:tmail_ui_user/features/composer/domain/extensions/email_request_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
||||||
@@ -86,6 +86,10 @@ import 'package:tmail_ui_user/features/manage_account/presentation/extensions/va
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
|
import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/config/work_manager_constants.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/controller/work_scheduler_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/scheduler/one_time_work_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/scheduler/worker_type.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/state/get_email_state_to_refresh_state.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/state/get_email_state_to_refresh_state.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/state/get_mailbox_state_to_refresh_state.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/state/get_mailbox_state_to_refresh_state.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/delete_email_state_to_refresh_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/delete_email_state_to_refresh_interactor.dart';
|
||||||
@@ -117,6 +121,8 @@ import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
|||||||
import 'package:tmail_ui_user/main/utils/email_receive_manager.dart';
|
import 'package:tmail_ui_user/main/utils/email_receive_manager.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/scheduler/worker.dart' as worker_scheduler;
|
||||||
|
import 'package:workmanager/workmanager.dart' as work_manager;
|
||||||
|
|
||||||
class MailboxDashBoardController extends ReloadableController {
|
class MailboxDashBoardController extends ReloadableController {
|
||||||
|
|
||||||
@@ -1751,6 +1757,23 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
leadingSVGIconColor: Colors.white,
|
leadingSVGIconColor: Colors.white,
|
||||||
leadingSVGIcon: _imagePaths.icEmail);
|
leadingSVGIcon: _imagePaths.icEmail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_addSendingEmailToSendingQueue(success.sendingEmail);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _addSendingEmailToSendingQueue(SendingEmail sendingEmail) async {
|
||||||
|
log('MailboxDashBoardController::_addSendingEmailToSendingQueue():sendingEmail: $sendingEmail');
|
||||||
|
final worker = worker_scheduler.Worker(
|
||||||
|
sendingEmail.sendingId,
|
||||||
|
WorkerType.sendingEmail,
|
||||||
|
sendingEmail.toJson()
|
||||||
|
);
|
||||||
|
final workRequest = OneTimeWorkRequest(
|
||||||
|
worker,
|
||||||
|
initialDelay: const Duration(milliseconds: WorkManagerConstants.initialDelayTime),
|
||||||
|
constraints: work_manager.Constraints(networkType: work_manager.NetworkType.connected)
|
||||||
|
);
|
||||||
|
await WorkSchedulerController().enqueue(workRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -2,4 +2,5 @@
|
|||||||
class WorkManagerConstants {
|
class WorkManagerConstants {
|
||||||
static const String sendingEmailUniqueId = 'com.linagora.ios.teammail.sendingQueue';
|
static const String sendingEmailUniqueId = 'com.linagora.ios.teammail.sendingQueue';
|
||||||
static const String workerTypeKey = 'worker_type';
|
static const String workerTypeKey = 'worker_type';
|
||||||
|
static const int initialDelayTime = 2000;
|
||||||
}
|
}
|
||||||
@@ -17,32 +17,38 @@ class WorkSchedulerController {
|
|||||||
factory WorkSchedulerController() => _instance ??= WorkSchedulerController._();
|
factory WorkSchedulerController() => _instance ??= WorkSchedulerController._();
|
||||||
|
|
||||||
Future<void> enqueue(WorkRequest workRequest) {
|
Future<void> enqueue(WorkRequest workRequest) {
|
||||||
if (workRequest is OneTimeWorkRequest) {
|
try {
|
||||||
return Workmanager().registerOneOffTask(
|
log('WorkSchedulerController::enqueue():workRequest: $workRequest');
|
||||||
workRequest.worker.uniqueId,
|
if (workRequest is OneTimeWorkRequest) {
|
||||||
workRequest.worker.id,
|
return Workmanager().registerOneOffTask(
|
||||||
tag: workRequest.worker.type.name,
|
workRequest.worker.uniqueId,
|
||||||
initialDelay: workRequest.initialDelay,
|
workRequest.worker.id,
|
||||||
constraints: workRequest.constraints,
|
tag: workRequest.worker.type.name,
|
||||||
backoffPolicy: workRequest.backoffPolicy,
|
initialDelay: workRequest.initialDelay,
|
||||||
backoffPolicyDelay: workRequest.backoffPolicyDelay,
|
constraints: workRequest.constraints,
|
||||||
outOfQuotaPolicy: workRequest.outOfQuotaPolicy,
|
backoffPolicy: workRequest.backoffPolicy,
|
||||||
inputData: workRequest.worker.inputData
|
backoffPolicyDelay: workRequest.backoffPolicyDelay,
|
||||||
);
|
outOfQuotaPolicy: workRequest.outOfQuotaPolicy,
|
||||||
} if (workRequest is PeriodicWorkRequest) {
|
inputData: workRequest.worker.inputData
|
||||||
return Workmanager().registerPeriodicTask(
|
);
|
||||||
workRequest.worker.uniqueId,
|
} if (workRequest is PeriodicWorkRequest) {
|
||||||
workRequest.worker.id,
|
return Workmanager().registerPeriodicTask(
|
||||||
frequency: workRequest.frequency,
|
workRequest.worker.uniqueId,
|
||||||
tag: workRequest.worker.type.name,
|
workRequest.worker.id,
|
||||||
initialDelay: workRequest.initialDelay,
|
frequency: workRequest.frequency,
|
||||||
constraints: workRequest.constraints,
|
tag: workRequest.worker.type.name,
|
||||||
backoffPolicy: workRequest.backoffPolicy,
|
initialDelay: workRequest.initialDelay,
|
||||||
backoffPolicyDelay: workRequest.backoffPolicyDelay,
|
constraints: workRequest.constraints,
|
||||||
outOfQuotaPolicy: workRequest.outOfQuotaPolicy,
|
backoffPolicy: workRequest.backoffPolicy,
|
||||||
inputData: workRequest.worker.inputData
|
backoffPolicyDelay: workRequest.backoffPolicyDelay,
|
||||||
);
|
outOfQuotaPolicy: workRequest.outOfQuotaPolicy,
|
||||||
} else {
|
inputData: workRequest.worker.inputData
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return Future.value();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
logError('WorkSchedulerController::enqueue(): EXCEPTION: $e');
|
||||||
return Future.value();
|
return Future.value();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin {
|
|||||||
final String sendingId;
|
final String sendingId;
|
||||||
|
|
||||||
@HiveField(1)
|
@HiveField(1)
|
||||||
final Map<String, dynamic> emailData;
|
final Map<String, dynamic> email;
|
||||||
|
|
||||||
@HiveField(2)
|
@HiveField(2)
|
||||||
final String emailActionType;
|
final String emailActionType;
|
||||||
@@ -37,7 +37,7 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin {
|
|||||||
|
|
||||||
SendingEmailHiveCache(
|
SendingEmailHiveCache(
|
||||||
this.sendingId,
|
this.sendingId,
|
||||||
this.emailData,
|
this.email,
|
||||||
this.emailActionType,
|
this.emailActionType,
|
||||||
this.sentMailboxId,
|
this.sentMailboxId,
|
||||||
this.emailIdDestroyed,
|
this.emailIdDestroyed,
|
||||||
@@ -50,7 +50,7 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin {
|
|||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
sendingId,
|
sendingId,
|
||||||
emailData,
|
email,
|
||||||
emailActionType,
|
emailActionType,
|
||||||
sentMailboxId,
|
sentMailboxId,
|
||||||
emailIdDestroyed,
|
emailIdDestroyed,
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/observer/work_observer.dart';
|
import 'package:tmail_ui_user/features/offline_mode/observer/work_observer.dart';
|
||||||
|
|
||||||
class SendingEmailObserver extends WorkObserver {
|
class SendingEmailObserver extends WorkObserver {
|
||||||
@@ -11,9 +12,13 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> observe(String taskId, Map<String, dynamic> inputData) async {
|
Future<void> observe(String taskId, Map<String, dynamic> inputData) async {
|
||||||
|
log('SendingEmailObserver::observe():taskId: $taskId | inputData: $inputData');
|
||||||
|
return Future.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> bindDI() async {
|
Future<void> bindDI() async {
|
||||||
|
log('SendingEmailObserver::bindDI(): ');
|
||||||
|
return Future.value();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ class Worker with EquatableMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Map<String, dynamic> get inputData {
|
Map<String, dynamic> get inputData {
|
||||||
data[WorkManagerConstants.workerTypeKey] = type;
|
data[WorkManagerConstants.workerTypeKey] = type.name;
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart';
|
||||||
@@ -8,6 +10,8 @@ import 'package:model/model.dart';
|
|||||||
|
|
||||||
extension EmailExtension on Email {
|
extension EmailExtension on Email {
|
||||||
|
|
||||||
|
String asString() => jsonEncode(toJson());
|
||||||
|
|
||||||
bool get hasRead => keywords?.containsKey(KeyWordIdentifier.emailSeen) == true;
|
bool get hasRead => keywords?.containsKey(KeyWordIdentifier.emailSeen) == true;
|
||||||
|
|
||||||
bool get hasStarred => keywords?.containsKey(KeyWordIdentifier.emailFlagged) == true;
|
bool get hasStarred => keywords?.containsKey(KeyWordIdentifier.emailFlagged) == true;
|
||||||
|
|||||||
Reference in New Issue
Block a user