mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-09 01:50:30 +00:00
refactor: fethcer interface & download flow (#1229)
This commit is contained in:
30 files changed
+2961
-1631
No files matched your search
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user