add task manager

This commit is contained in:
2024-02-17 15:22:26 +08:00
parent 02b211ab99
commit 7cec3fd320
17 changed files with 430 additions and 21 deletions

View File

@@ -138,11 +138,11 @@ class TaskProgress {
const TaskProgress({
required this.type,
required this.taskId,
required this.progress,
required this.detail,
});
final TaskType type;
final int taskId;
final TaskProgressBasicType progress;
final TaskProgressBasicType detail;
factory TaskProgress.fromJson(Map<String, dynamic> json) {
final type = json['type'] as int;
final taskId = json['task_id'] as int;
@@ -151,29 +151,29 @@ class TaskProgress {
return TaskProgress(
type: TaskType.download,
taskId: taskId,
progress: TaskDownloadProgess.fromJson(
json['progress'] as Map<String, dynamic>),
detail: TaskDownloadProgess.fromJson(
json['detail'] as Map<String, dynamic>),
);
case 1:
return TaskProgress(
type: TaskType.exportZip,
taskId: taskId,
progress: TaskExportZipProgress.fromJson(
json['progress'] as Map<String, dynamic>),
detail: TaskExportZipProgress.fromJson(
json['detail'] as Map<String, dynamic>),
);
case 2:
return TaskProgress(
type: TaskType.updateMeiliSearchData,
taskId: taskId,
progress: TaskUpdateMeiliSearchDataProgress.fromJson(
json['progress'] as Map<String, dynamic>),
detail: TaskUpdateMeiliSearchDataProgress.fromJson(
json['detail'] as Map<String, dynamic>),
);
case 3:
return TaskProgress(
type: TaskType.fixGalleryPage,
taskId: taskId,
progress: TaskFixGalleryPageProgress.fromJson(
json['progress'] as Map<String, dynamic>),
detail: TaskFixGalleryPageProgress.fromJson(
json['detail'] as Map<String, dynamic>),
);
default:
throw ArgumentError.value(type, 'type', 'Invalid task type');
@@ -200,9 +200,37 @@ class TaskDetail {
this.error,
this.fataled,
});
final Task base;
Task base;
TaskProgressBasicType? progress;
TaskStatus status;
String? error;
bool? fataled;
}
@JsonSerializable()
class TaskList {
const TaskList({
required this.tasks,
required this.running,
});
final List<Task> tasks;
final List<int> running;
factory TaskList.fromJson(Map<String, dynamic> json) =>
_$TaskListFromJson(json);
Map<String, dynamic> toJson() => _$TaskListToJson(this);
}
@JsonSerializable()
class TaskError {
const TaskError({
required this.task,
required this.error,
required this.fatal,
});
final Task task;
final String error;
final bool fatal;
factory TaskError.fromJson(Map<String, dynamic> json) =>
_$TaskErrorFromJson(json);
Map<String, dynamic> toJson() => _$TaskErrorToJson(this);
}