TF-1861 Config and abstraction work manager
(cherry picked from commit ee2dca9b34a907c8356ceccf0b23efba2893a01c)
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
|
||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/work_request.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/worker.dart';
|
||||
import 'package:workmanager/workmanager.dart';
|
||||
|
||||
/// A WorkRequest for non-repeating work.
|
||||
class OneTimeWorkRequest extends WorkRequest {
|
||||
OneTimeWorkRequest(
|
||||
Worker worker, {
|
||||
Duration initialDelay = Duration.zero,
|
||||
Duration backoffPolicyDelay = Duration.zero,
|
||||
ExistingWorkPolicy? existingWorkPolicy,
|
||||
BackoffPolicy? backoffPolicy,
|
||||
OutOfQuotaPolicy? outOfQuotaPolicy,
|
||||
Constraints? constraints
|
||||
}) : super(
|
||||
worker,
|
||||
initialDelay: initialDelay,
|
||||
backoffPolicyDelay: backoffPolicyDelay,
|
||||
existingWorkPolicy: existingWorkPolicy,
|
||||
backoffPolicy: backoffPolicy,
|
||||
outOfQuotaPolicy: outOfQuotaPolicy,
|
||||
constraints: constraints
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/work_request.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/worker.dart';
|
||||
import 'package:workmanager/workmanager.dart';
|
||||
|
||||
/// A WorkRequest for repeating work.
|
||||
class PeriodicWorkRequest extends WorkRequest {
|
||||
final Duration? frequency;
|
||||
|
||||
PeriodicWorkRequest(
|
||||
Worker worker, {
|
||||
Duration initialDelay = Duration.zero,
|
||||
Duration backoffPolicyDelay = Duration.zero,
|
||||
ExistingWorkPolicy? existingWorkPolicy,
|
||||
BackoffPolicy? backoffPolicy,
|
||||
OutOfQuotaPolicy? outOfQuotaPolicy,
|
||||
Constraints? constraints,
|
||||
this.frequency
|
||||
}) : super(
|
||||
worker,
|
||||
initialDelay: initialDelay,
|
||||
backoffPolicyDelay: backoffPolicyDelay,
|
||||
existingWorkPolicy: existingWorkPolicy,
|
||||
backoffPolicy: backoffPolicy,
|
||||
outOfQuotaPolicy: outOfQuotaPolicy,
|
||||
constraints: constraints
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [super.props, frequency];
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/worker.dart';
|
||||
import 'package:workmanager/workmanager.dart';
|
||||
|
||||
/// Represents the scheduling of requests
|
||||
abstract class WorkRequest with EquatableMixin {
|
||||
final Worker worker;
|
||||
final Duration initialDelay;
|
||||
final Duration backoffPolicyDelay;
|
||||
final ExistingWorkPolicy? existingWorkPolicy;
|
||||
final BackoffPolicy? backoffPolicy;
|
||||
final OutOfQuotaPolicy? outOfQuotaPolicy;
|
||||
final Constraints? constraints;
|
||||
|
||||
WorkRequest(
|
||||
this.worker,
|
||||
{
|
||||
this.initialDelay = Duration.zero,
|
||||
this.backoffPolicyDelay = Duration.zero,
|
||||
this.existingWorkPolicy,
|
||||
this.backoffPolicy,
|
||||
this.outOfQuotaPolicy,
|
||||
this.constraints
|
||||
}
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
worker,
|
||||
initialDelay,
|
||||
backoffPolicyDelay,
|
||||
existingWorkPolicy,
|
||||
backoffPolicy,
|
||||
outOfQuotaPolicy,
|
||||
constraints
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
enum WorkStatus {
|
||||
success,
|
||||
retry,
|
||||
failure;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/worker_type.dart';
|
||||
|
||||
/// Equivalent to the task or work that needs to be done in the background
|
||||
class Worker with EquatableMixin {
|
||||
|
||||
final String id;
|
||||
final WorkerType type;
|
||||
final Map<String, dynamic> data;
|
||||
|
||||
Worker(this.id, this.type, this.data);
|
||||
|
||||
String get uniqueId {
|
||||
if (PlatformInfo.isIOS) {
|
||||
return type.iOSUniqueId;
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
Map<String, dynamic> get inputData {
|
||||
data['workerType'] = type;
|
||||
return data;
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [id, type, data];
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
|
||||
import 'package:tmail_ui_user/features/offline_mode/config/work_manager_constants.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/observer/sending_email_observer.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/observer/work_observer.dart';
|
||||
|
||||
enum WorkerType {
|
||||
sendingEmail;
|
||||
|
||||
WorkObserver usingObserver() {
|
||||
switch(this) {
|
||||
case WorkerType.sendingEmail:
|
||||
return SendingEmailObserver();
|
||||
}
|
||||
}
|
||||
|
||||
String get iOSUniqueId {
|
||||
switch(this) {
|
||||
case WorkerType.sendingEmail:
|
||||
return WorkManagerConstants.sendingEmailUniqueId;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user