diff --git a/lib/api/task.dart b/lib/api/task.dart index c2f776d..d85264e 100644 --- a/lib/api/task.dart +++ b/lib/api/task.dart @@ -12,7 +12,9 @@ enum TaskType { @JsonValue(2) updateMeiliSearchData, @JsonValue(3) - fixGalleryPage; + fixGalleryPage, + @JsonValue(4) + import; String text(BuildContext context) { final i18n = AppLocalizations.of(context)!; @@ -25,6 +27,8 @@ enum TaskType { return i18n.updateMeiliSearchDataTask; case TaskType.fixGalleryPage: return i18n.fixGalleryPageTask; + case TaskType.import: + return i18n.importTask; } } } @@ -160,6 +164,24 @@ class TaskFixGalleryPageProgress implements TaskProgressBasicType { Map toJson() => _$TaskFixGalleryPageProgressToJson(this); } +@JsonSerializable() +class TaskImportProgress implements TaskProgressBasicType { + const TaskImportProgress({ + required this.importedPage, + required this.failedPage, + required this.totalPage, + }); + @JsonKey(name: 'imported_page') + final int importedPage; + @JsonKey(name: 'failed_page') + final int failedPage; + @JsonKey(name: 'total_page') + final int totalPage; + factory TaskImportProgress.fromJson(Map json) => + _$TaskImportProgressFromJson(json); + Map toJson() => _$TaskImportProgressToJson(this); +} + class TaskProgress { const TaskProgress({ required this.type, @@ -201,6 +223,13 @@ class TaskProgress { detail: TaskFixGalleryPageProgress.fromJson( json['detail'] as Map), ); + case 4: + return TaskProgress( + type: TaskType.import, + taskId: taskId, + detail: TaskImportProgress.fromJson( + json['detail'] as Map), + ); default: throw ArgumentError.value(type, 'type', 'Invalid task type'); } diff --git a/lib/api/task.g.dart b/lib/api/task.g.dart index 77e0ff5..a28694d 100644 --- a/lib/api/task.g.dart +++ b/lib/api/task.g.dart @@ -29,6 +29,7 @@ const _$TaskTypeEnumMap = { TaskType.exportZip: 1, TaskType.updateMeiliSearchData: 2, TaskType.fixGalleryPage: 3, + TaskType.import: 4, }; TaskDownloadSingleProgress _$TaskDownloadSingleProgressFromJson( @@ -131,6 +132,20 @@ Map _$TaskFixGalleryPageProgressToJson( 'checked_gallery': instance.checkedGallery, }; +TaskImportProgress _$TaskImportProgressFromJson(Map json) => + TaskImportProgress( + importedPage: (json['imported_page'] as num).toInt(), + failedPage: (json['failed_page'] as num).toInt(), + totalPage: (json['total_page'] as num).toInt(), + ); + +Map _$TaskImportProgressToJson(TaskImportProgress instance) => + { + 'imported_page': instance.importedPage, + 'failed_page': instance.failedPage, + 'total_page': instance.totalPage, + }; + TaskList _$TaskListFromJson(Map json) => TaskList( tasks: (json['tasks'] as List) .map((e) => Task.fromJson(e as Map)) diff --git a/lib/components/task.dart b/lib/components/task.dart index 1ea2203..b9e7168 100644 --- a/lib/components/task.dart +++ b/lib/components/task.dart @@ -54,6 +54,9 @@ class _TaskView extends State { final progress = widget.task.progress as TaskUpdateMeiliSearchDataProgress; return progress.updatedGallery / progress.totalGallery; + case TaskType.import: + final progress = widget.task.progress as TaskImportProgress; + return progress.importedPage / progress.totalPage; } } diff --git a/lib/dialog/task_page.dart b/lib/dialog/task_page.dart index 98465cd..e0078be 100644 --- a/lib/dialog/task_page.dart +++ b/lib/dialog/task_page.dart @@ -240,6 +240,10 @@ class _TaskPage extends State { final p = task.progress as TaskUpdateMeiliSearchDataProgress; now = p.updatedGallery; total = p.totalGallery; + case TaskType.import: + final p = task.progress as TaskImportProgress; + now = p.importedPage; + total = p.totalPage; default: } if (total == 0) return Container(); @@ -332,7 +336,8 @@ class _TaskPage extends State { bool get haveMetaInfo { if (!tasks.tasksList.contains(widget.id)) return false; final task = tasks.tasks[widget.id]!; - return task.base.type == TaskType.download && + final typ = task.base.type; + return (typ == TaskType.download || typ == TaskType.import) && tasks.meta.containsKey(task.base.gid); } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 25ea6a7..41c18dc 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -243,5 +243,6 @@ "failedLogout": "Failed to log out: ", "createExportZipTask": "Create export as ZIP file task", "outputDir": "Output directory", - "copyOriImgUrl": "Copy original image URL to clipboard" + "copyOriImgUrl": "Copy original image URL to clipboard", + "importTask": "Import task" } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 6fa3fe9..413a5b6 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -243,5 +243,6 @@ "failedLogout": "退出登录失败:", "createExportZipTask": "新建导出为ZIP文件任务", "outputDir": "输出文件夹", - "copyOriImgUrl": "复制原图链接到剪贴板" + "copyOriImgUrl": "复制原图链接到剪贴板", + "importTask": "导入任务" } diff --git a/lib/task.dart b/lib/task.dart index aaf445d..7768b10 100644 --- a/lib/task.dart +++ b/lib/task.dart @@ -89,7 +89,8 @@ class TaskManager { } void addToTasksList(Task task, TaskStatus status) { - if (task.type == TaskType.download && !meta.containsKey(task.gid)) { + if ((task.type == TaskType.download || task.type == TaskType.import) && + !meta.containsKey(task.gid)) { if (peddingGids.contains(task.gid)) { final index = peddingGids.indexOf(task.gid); if (peddingTokens[index]! != task.token) {