refactor: fethcer interface & download flow (#1229)

This commit is contained in:
Levi authored and GitHub committed 2026-01-08 21:50:47 +08:00
1 parent abd16d5326
commit a9eee26be7
30 files changed
+2961 -1631

No files matched your search

+3 -2
View File
@@ -16,6 +16,7 @@ import 'model/install_extension.dart';
import 'model/login.dart';
import 'model/request.dart';
import 'model/resolve_result.dart';
import 'model/resolve_task.dart';
import 'model/result.dart';
import 'model/switch_extension.dart';
import 'model/task.dart';
@@ -123,9 +124,9 @@ Future<T> _parse<T>(
}
}
Future<ResolveResult> resolve(Request request) async {
Future<ResolveResult> resolve(ResolveTask resolveTask) async {
return _parse<ResolveResult>(
() => _client.dio.post("api/v1/resolve", data: request),
() => _client.dio.post("api/v1/resolve", data: resolveTask),
(data) => ResolveResult.fromJson(data));
}
+2 -2
View File
@@ -9,12 +9,12 @@ part 'create_task.g.dart';
class CreateTask {
String? rid;
Request? req;
Options? opt;
Options? opts;
CreateTask({
this.rid,
this.req,
this.opt,
this.opts,
});
factory CreateTask.fromJson(
+3 -3
View File
@@ -11,9 +11,9 @@ CreateTask _$CreateTaskFromJson(Map<String, dynamic> json) => CreateTask(
req: json['req'] == null
? null
: Request.fromJson(json['req'] as Map<String, dynamic>),
opt: json['opt'] == null
opts: json['opts'] == null
? null
: Options.fromJson(json['opt'] as Map<String, dynamic>),
: Options.fromJson(json['opts'] as Map<String, dynamic>),
);
Map<String, dynamic> _$CreateTaskToJson(CreateTask instance) {
@@ -27,6 +27,6 @@ Map<String, dynamic> _$CreateTaskToJson(CreateTask instance) {
writeNotNull('rid', instance.rid);
writeNotNull('req', instance.req?.toJson());
writeNotNull('opt', instance.opt?.toJson());
writeNotNull('opts', instance.opts?.toJson());
return val;
}
@@ -8,11 +8,11 @@ part 'create_task_batch.g.dart';
@JsonSerializable(explicitToJson: true)
class CreateTaskBatch {
List<CreateTaskBatchItem>? reqs;
Options? opt;
Options? opts;
CreateTaskBatch({
this.reqs,
this.opt,
this.opts,
});
factory CreateTaskBatch.fromJson(
@@ -11,9 +11,9 @@ CreateTaskBatch _$CreateTaskBatchFromJson(Map<String, dynamic> json) =>
reqs: (json['reqs'] as List<dynamic>?)
?.map((e) => CreateTaskBatchItem.fromJson(e as Map<String, dynamic>))
.toList(),
opt: json['opt'] == null
opts: json['opts'] == null
? null
: Options.fromJson(json['opt'] as Map<String, dynamic>),
: Options.fromJson(json['opts'] as Map<String, dynamic>),
);
Map<String, dynamic> _$CreateTaskBatchToJson(CreateTaskBatch instance) {
@@ -26,7 +26,7 @@ Map<String, dynamic> _$CreateTaskBatchToJson(CreateTaskBatch instance) {
}
writeNotNull('reqs', instance.reqs?.map((e) => e.toJson()).toList());
writeNotNull('opt', instance.opt?.toJson());
writeNotNull('opts', instance.opts?.toJson());
return val;
}
@@ -0,0 +1,21 @@
import 'package:json_annotation/json_annotation.dart';
import 'options.dart';
import 'request.dart';
part 'resolve_task.g.dart';
@JsonSerializable()
class ResolveTask {
Request? req;
Options? opts;
ResolveTask({
this.req,
this.opts,
});
factory ResolveTask.fromJson(Map<String, dynamic> json) =>
_$ResolveTaskFromJson(json);
Map<String, dynamic> toJson() => _$ResolveTaskToJson(this);
}
@@ -0,0 +1,30 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'resolve_task.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
ResolveTask _$ResolveTaskFromJson(Map<String, dynamic> json) => ResolveTask(
req: json['req'] == null
? null
: Request.fromJson(json['req'] as Map<String, dynamic>),
opts: json['opts'] == null
? null
: Options.fromJson(json['opts'] as Map<String, dynamic>),
);
Map<String, dynamic> _$ResolveTaskToJson(ResolveTask instance) {
final val = <String, dynamic>{};
void writeNotNull(String key, dynamic value) {
if (value != null) {
val[key] = value;
}
}
writeNotNull('req', instance.req);
writeNotNull('opts', instance.opts);
return val;
}
@@ -16,6 +16,7 @@ import '../../../../api/model/downloader_config.dart';
import '../../../../api/model/options.dart';
import '../../../../api/model/request.dart';
import '../../../../api/model/resolve_result.dart';
import '../../../../api/model/resolve_task.dart';
import '../../../../api/model/task.dart';
import '../../../../database/database.dart';
import '../../../../util/input_formatter.dart';
@@ -125,13 +126,13 @@ class CreateView extends GetView<CreateController> {
}
// handle options
if (routerParams.opt != null) {
_renameController.text = routerParams.opt!.name;
_pathController.text = routerParams.opt!.path;
if (routerParams.opts != null) {
_renameController.text = routerParams.opts!.name;
_pathController.text = routerParams.opts!.path;
final optionsHandlers = {
Protocol.http: () {
final opt = routerParams.opt!;
final opt = routerParams.opts!;
_renameController.text = opt.name;
_pathController.text = opt.path;
if (opt.extra != null) {
@@ -143,7 +144,7 @@ class CreateView extends GetView<CreateController> {
},
Protocol.bt: null,
};
if (routerParams.opt?.extra != null) {
if (routerParams.opts?.extra != null) {
optionsHandlers[protocol]?.call();
}
}
@@ -814,29 +815,34 @@ class CreateView extends GetView<CreateController> {
*/
final isMultiLine = urls.length > 1;
final isDirect = controller.directDownload.value || isMultiLine;
final opt = Options(
name: isMultiLine ? "" : _renameController.text,
path: _pathController.text,
selectFiles: [],
extra: parseReqOptsExtra(),
);
if (isDirect) {
await Future.wait(urls.map((url) {
return createTask(CreateTask(
req: Request(
url: url,
extra: parseReqExtra(url),
proxy: parseProxy(),
skipVerifyCert: _skipVerifyCertController.value,
),
opt: Options(
name: isMultiLine ? "" : _renameController.text,
path: _pathController.text,
selectFiles: [],
extra: parseReqOptsExtra(),
)));
req: Request(
url: url,
extra: parseReqExtra(url),
proxy: parseProxy(),
skipVerifyCert: _skipVerifyCertController.value,
),
opts: opt,
));
}));
Get.rootDelegate.offNamed(Routes.TASK);
} else {
final rr = await resolve(Request(
url: submitUrl,
extra: parseReqExtra(_urlController.text),
proxy: parseProxy(),
skipVerifyCert: _skipVerifyCertController.value,
final rr = await resolve(ResolveTask(
req: Request(
url: submitUrl,
extra: parseReqExtra(_urlController.text),
proxy: parseProxy(),
skipVerifyCert: _skipVerifyCertController.value,
),
opts: opt,
));
await _showResolveDialog(rr);
}
@@ -983,7 +989,7 @@ class CreateView extends GetView<CreateController> {
} else {
await createTask(CreateTask(
rid: rr.id,
opt: Options(
opts: Options(
name: _renameController.text,
path: _pathController.text,
selectFiles: controller.selectedIndexes,