TF-1812 Abstract method in handle background task
(cherry picked from commit 16b62ed183e32f10ce9b1002f4097144317650f1)
This commit is contained in:
@@ -27,6 +27,7 @@ import 'package:tmail_ui_user/features/email/domain/extensions/detailed_email_hi
|
|||||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_task.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart';
|
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.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/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';
|
||||||
|
|||||||
@@ -1,4 +1,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';
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/config/work_manager_constants.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/one_time_work_request.dart';
|
import 'package:tmail_ui_user/features/offline_mode/scheduler/one_time_work_request.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/periodic_work_request.dart';
|
import 'package:tmail_ui_user/features/offline_mode/scheduler/periodic_work_request.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/work_request.dart';
|
import 'package:tmail_ui_user/features/offline_mode/scheduler/work_request.dart';
|
||||||
@@ -46,15 +47,23 @@ class WorkSchedulerController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> handleBackgroundTask(String taskName, Map<String, dynamic>? inputData) {
|
Future<bool> handleBackgroundTask(String taskName, Map<String, dynamic>? inputData) async {
|
||||||
if (inputData != null && inputData.isNotEmpty) {
|
log('WorkSchedulerController::handleBackgroundTask():taskName: $taskName | inputData: $inputData');
|
||||||
final typeTask = inputData['workerType'];
|
try {
|
||||||
final dataObject = inputData['data'];
|
if (inputData != null && inputData.isNotEmpty) {
|
||||||
log('WorkSchedulerController::handleBackgroundTask():typeTask: $typeTask | dataObject: $dataObject');
|
final workerType = inputData.remove(WorkManagerConstants.workerTypeKey);
|
||||||
final workType = WorkerType.values.firstWhereOrNull((type) => type.name == typeTask);
|
final dataObject = inputData;
|
||||||
log('WorkSchedulerController::handleBackgroundTask():workType: $workType');
|
log('WorkSchedulerController::handleBackgroundTask():workerType: $workerType | dataObject: $dataObject');
|
||||||
}
|
final matchedType = WorkerType.values.firstWhereOrNull((type) => type.name == workerType);
|
||||||
|
|
||||||
|
if (matchedType != null) {
|
||||||
|
await matchedType.usingObserver().bindDI();
|
||||||
|
await matchedType.usingObserver().observe(taskName, dataObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
logError('WorkSchedulerController::handleBackgroundTask():EXCEPTION: $e');
|
||||||
|
}
|
||||||
return Future.value(true);
|
return Future.value(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/worker/hive_task_state.dart';
|
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_task_state.dart';
|
||||||
|
|
||||||
class HiveTask<A> with EquatableMixin {
|
class HiveTask<A> with EquatableMixin {
|
||||||
final String? id;
|
final String? id;
|
||||||
-1
@@ -1,5 +1,4 @@
|
|||||||
|
|
||||||
|
|
||||||
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';
|
||||||
|
|
||||||
+1
-1
@@ -3,7 +3,7 @@ import 'dart:async';
|
|||||||
import 'dart:collection';
|
import 'dart:collection';
|
||||||
|
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/worker/hive_task.dart';
|
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_task.dart';
|
||||||
|
|
||||||
abstract class WorkerQueue<A> {
|
abstract class WorkerQueue<A> {
|
||||||
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
import 'package:tmail_ui_user/features/offline_mode/worker/hive_worker_queue.dart';
|
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_worker_queue.dart';
|
||||||
|
|
||||||
class DetailedEmailCacheWorkerQueue extends WorkerQueue {
|
class DetailedEmailCacheWorkerQueue extends WorkerQueue {
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import 'package:tmail_ui_user/features/offline_mode/worker/hive_worker_queue.dart';
|
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_worker_queue.dart';
|
||||||
|
|
||||||
class OpenedEmailCacheWorkerQueue extends WorkerQueue {
|
class OpenedEmailCacheWorkerQueue extends WorkerQueue {
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
|
|
||||||
import 'package:core/presentation/state/failure.dart';
|
|
||||||
import 'package:core/presentation/state/success.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.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';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/work_status.dart';
|
|
||||||
|
|
||||||
class SendingEmailObserver extends WorkObserver<Email> {
|
class SendingEmailObserver extends WorkObserver {
|
||||||
|
|
||||||
static SendingEmailObserver? _instance;
|
static SendingEmailObserver? _instance;
|
||||||
|
|
||||||
@@ -14,15 +10,10 @@ class SendingEmailObserver extends WorkObserver<Email> {
|
|||||||
factory SendingEmailObserver() => _instance ??= SendingEmailObserver._();
|
factory SendingEmailObserver() => _instance ??= SendingEmailObserver._();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void handleFailureViewState(Failure failure) {
|
Future<void> observe(String taskId, Map<String, dynamic> inputData) async {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void handleSuccessViewState(Success success) {
|
Future<void> bindDI() async {
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
WorkStatus observe(Email value) {
|
|
||||||
return WorkStatus.failure;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,10 +3,11 @@ import 'package:core/presentation/state/failure.dart';
|
|||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/work_status.dart';
|
|
||||||
|
|
||||||
abstract class WorkObserver<T> {
|
abstract class WorkObserver {
|
||||||
WorkStatus observe(T value);
|
Future<void> bindDI();
|
||||||
|
|
||||||
|
Future<void> observe(String taskId, Map<String, dynamic> inputData);
|
||||||
|
|
||||||
void consumeState(Stream<Either<Failure, Success>> newStateStream) {
|
void consumeState(Stream<Either<Failure, Success>> newStateStream) {
|
||||||
newStateStream.listen(
|
newStateStream.listen(
|
||||||
@@ -22,7 +23,7 @@ abstract class WorkObserver<T> {
|
|||||||
newState.fold(handleFailureViewState, handleSuccessViewState);
|
newState.fold(handleFailureViewState, handleSuccessViewState);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleFailureViewState(Failure failure);
|
void handleFailureViewState(Failure failure) {}
|
||||||
|
|
||||||
void handleSuccessViewState(Success success);
|
void handleSuccessViewState(Success success) {}
|
||||||
}
|
}
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
|
|
||||||
enum WorkStatus {
|
|
||||||
success,
|
|
||||||
retry,
|
|
||||||
failure;
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/platform_info.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/config/work_manager_constants.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/worker_type.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
|
/// Equivalent to the task or work that needs to be done in the background
|
||||||
@@ -20,7 +21,7 @@ class Worker with EquatableMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Map<String, dynamic> get inputData {
|
Map<String, dynamic> get inputData {
|
||||||
data['workerType'] = type;
|
data[WorkManagerConstants.workerTypeKey] = type;
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
import 'package:tmail_ui_user/features/offline_mode/worker/hive_worker_queue.dart';
|
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_worker_queue.dart';
|
||||||
|
|
||||||
class MailboxStateWorkerQueue extends WorkerQueue {
|
class MailboxStateWorkerQueue extends WorkerQueue {
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart';
|
|||||||
import 'package:tmail_ui_user/features/caching/clients/state_cache_client.dart';
|
import 'package:tmail_ui_user/features/caching/clients/state_cache_client.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/extensions/state_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/extensions/state_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/model/state_type.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/model/state_type.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/worker/hive_task.dart';
|
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_task.dart';
|
||||||
|
|
||||||
import 'mailbox_state_worker_queue.dart';
|
import 'mailbox_state_worker_queue.dart';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user