TF-1812 Handle add sending email to queue in work manager

(cherry picked from commit c5d89665f525550949bf4e694133ce5ea2777846)
This commit is contained in:
dab246
2023-05-26 08:51:16 +07:00
committed by Dat Vu
parent c98be4cfc5
commit fc94e0aa04
14 changed files with 122 additions and 34 deletions
@@ -2,4 +2,5 @@
class WorkManagerConstants {
static const String sendingEmailUniqueId = 'com.linagora.ios.teammail.sendingQueue';
static const String workerTypeKey = 'worker_type';
static const int initialDelayTime = 2000;
}
@@ -17,32 +17,38 @@ class WorkSchedulerController {
factory WorkSchedulerController() => _instance ??= WorkSchedulerController._();
Future<void> enqueue(WorkRequest workRequest) {
if (workRequest is OneTimeWorkRequest) {
return Workmanager().registerOneOffTask(
workRequest.worker.uniqueId,
workRequest.worker.id,
tag: workRequest.worker.type.name,
initialDelay: workRequest.initialDelay,
constraints: workRequest.constraints,
backoffPolicy: workRequest.backoffPolicy,
backoffPolicyDelay: workRequest.backoffPolicyDelay,
outOfQuotaPolicy: workRequest.outOfQuotaPolicy,
inputData: workRequest.worker.inputData
);
} if (workRequest is PeriodicWorkRequest) {
return Workmanager().registerPeriodicTask(
workRequest.worker.uniqueId,
workRequest.worker.id,
frequency: workRequest.frequency,
tag: workRequest.worker.type.name,
initialDelay: workRequest.initialDelay,
constraints: workRequest.constraints,
backoffPolicy: workRequest.backoffPolicy,
backoffPolicyDelay: workRequest.backoffPolicyDelay,
outOfQuotaPolicy: workRequest.outOfQuotaPolicy,
inputData: workRequest.worker.inputData
);
} else {
try {
log('WorkSchedulerController::enqueue():workRequest: $workRequest');
if (workRequest is OneTimeWorkRequest) {
return Workmanager().registerOneOffTask(
workRequest.worker.uniqueId,
workRequest.worker.id,
tag: workRequest.worker.type.name,
initialDelay: workRequest.initialDelay,
constraints: workRequest.constraints,
backoffPolicy: workRequest.backoffPolicy,
backoffPolicyDelay: workRequest.backoffPolicyDelay,
outOfQuotaPolicy: workRequest.outOfQuotaPolicy,
inputData: workRequest.worker.inputData
);
} if (workRequest is PeriodicWorkRequest) {
return Workmanager().registerPeriodicTask(
workRequest.worker.uniqueId,
workRequest.worker.id,
frequency: workRequest.frequency,
tag: workRequest.worker.type.name,
initialDelay: workRequest.initialDelay,
constraints: workRequest.constraints,
backoffPolicy: workRequest.backoffPolicy,
backoffPolicyDelay: workRequest.backoffPolicyDelay,
outOfQuotaPolicy: workRequest.outOfQuotaPolicy,
inputData: workRequest.worker.inputData
);
} else {
return Future.value();
}
} catch (e) {
logError('WorkSchedulerController::enqueue(): EXCEPTION: $e');
return Future.value();
}
}
@@ -12,7 +12,7 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin {
final String sendingId;
@HiveField(1)
final Map<String, dynamic> emailData;
final Map<String, dynamic> email;
@HiveField(2)
final String emailActionType;
@@ -37,7 +37,7 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin {
SendingEmailHiveCache(
this.sendingId,
this.emailData,
this.email,
this.emailActionType,
this.sentMailboxId,
this.emailIdDestroyed,
@@ -50,7 +50,7 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin {
@override
List<Object?> get props => [
sendingId,
emailData,
email,
emailActionType,
sentMailboxId,
emailIdDestroyed,
@@ -1,4 +1,5 @@
import 'package:core/utils/app_logger.dart';
import 'package:tmail_ui_user/features/offline_mode/observer/work_observer.dart';
class SendingEmailObserver extends WorkObserver {
@@ -11,9 +12,13 @@ class SendingEmailObserver extends WorkObserver {
@override
Future<void> observe(String taskId, Map<String, dynamic> inputData) async {
log('SendingEmailObserver::observe():taskId: $taskId | inputData: $inputData');
return Future.value();
}
@override
Future<void> bindDI() async {
log('SendingEmailObserver::bindDI(): ');
return Future.value();
}
}
@@ -21,7 +21,7 @@ class Worker with EquatableMixin {
}
Map<String, dynamic> get inputData {
data[WorkManagerConstants.workerTypeKey] = type;
data[WorkManagerConstants.workerTypeKey] = type.name;
return data;
}