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

@@ -271,6 +271,19 @@ class EHApi extends __EHApi {
return newUri.toString();
}
Uri getTaskUrl() {
final uri = Uri.parse(_combineBaseUrls(_dio.options.baseUrl, baseUrl));
final nuri = uri.resolve("task");
return Uri(
scheme: uri.scheme == "https" ? "wss" : "ws",
userInfo: nuri.userInfo,
host: nuri.host,
port: nuri.port,
path: nuri.path,
query: nuri.query,
);
}
String getThumbnailUrl(int id,
{int? max,
int? width,

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);
}

View File

@@ -120,3 +120,27 @@ Map<String, dynamic> _$TaskFixGalleryPageProgressToJson(
'total_gallery': instance.totalGallery,
'checked_gallery': instance.checkedGallery,
};
TaskList _$TaskListFromJson(Map<String, dynamic> json) => TaskList(
tasks: (json['tasks'] as List<dynamic>)
.map((e) => Task.fromJson(e as Map<String, dynamic>))
.toList(),
running: (json['running'] as List<dynamic>).map((e) => e as int).toList(),
);
Map<String, dynamic> _$TaskListToJson(TaskList instance) => <String, dynamic>{
'tasks': instance.tasks,
'running': instance.running,
};
TaskError _$TaskErrorFromJson(Map<String, dynamic> json) => TaskError(
task: Task.fromJson(json['task'] as Map<String, dynamic>),
error: json['error'] as String,
fatal: json['fatal'] as bool,
);
Map<String, dynamic> _$TaskErrorToJson(TaskError instance) => <String, dynamic>{
'task': instance.task,
'error': instance.error,
'fatal': instance.fatal,
};