TF-1821 Add Task and WorkerQueue object
(cherry picked from commit 42a90ce7c6bf773416db9a215e0a4c8b348c85ff)
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/worker/hive_task_state.dart';
|
||||
|
||||
class HiveTask<A> with EquatableMixin {
|
||||
final String? id;
|
||||
final A? action;
|
||||
final Future<bool> Function()? conditionInvoked;
|
||||
final Future Function() runnable;
|
||||
|
||||
HiveTask({
|
||||
required this.runnable,
|
||||
this.id,
|
||||
this.action,
|
||||
this.conditionInvoked,
|
||||
});
|
||||
|
||||
Future execute() async {
|
||||
final resultCompleter = Completer();
|
||||
|
||||
try {
|
||||
if (conditionInvoked != null) {
|
||||
final invoked = await conditionInvoked!.call();
|
||||
if (invoked) {
|
||||
final result = await runnable.call();
|
||||
resultCompleter.complete(TaskSuccess(result: result));
|
||||
} else {
|
||||
resultCompleter.completeError(TaskFailure());
|
||||
}
|
||||
} else {
|
||||
final result = await runnable.call();
|
||||
resultCompleter.complete(TaskSuccess(result: result));
|
||||
}
|
||||
} catch (e) {
|
||||
resultCompleter.completeError(TaskFailure(exception: e));
|
||||
}
|
||||
|
||||
return resultCompleter.future;
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [runnable, id, action, conditionInvoked];
|
||||
}
|
||||
Reference in New Issue
Block a user