Skip to content

Commit

Permalink
feat: auto create torrent task for http download (GopeedLab#334)
Browse files Browse the repository at this point in the history
monkeyWie authored Jan 18, 2024
1 parent e548d7e commit 74beea6
Showing 5 changed files with 42 additions and 11 deletions.
21 changes: 21 additions & 0 deletions pkg/download/downloader.go
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ import (
"github.com/GopeedLab/gopeed/internal/fetcher"
"github.com/GopeedLab/gopeed/internal/logger"
"github.com/GopeedLab/gopeed/pkg/base"
"github.com/GopeedLab/gopeed/pkg/protocol/http"
"github.com/GopeedLab/gopeed/pkg/util"
gonanoid "github.com/matoous/go-nanoid/v2"
"github.com/rs/zerolog"
@@ -594,6 +595,26 @@ func (d *Downloader) watch(task *Task) {
d.emit(EventKeyDone, task)
d.emit(EventKeyFinally, task, err)
d.notifyRunning()

if e, ok := task.Meta.Opts.Extra.(*http.OptsExtra); ok {
downloadFilePath := task.Meta.SingleFilepath()
if e.AutoTorrent && strings.HasSuffix(downloadFilePath, ".torrent") {
go func() {
_, err2 := d.CreateDirect(
&base.Request{
URL: downloadFilePath,
},
&base.Options{
Path: task.Meta.Opts.Path,
SelectFiles: make([]int, 0),
})
if err2 != nil {
d.Logger.Error().Err(err2).Msgf("auto create torrent task failed, task id: %s", task.ID)
}

}()
}
}
}

func (d *Downloader) doOnError(task *Task, err error) {
2 changes: 2 additions & 0 deletions pkg/protocol/http/model.go
Original file line number Diff line number Diff line change
@@ -8,6 +8,8 @@ type ReqExtra struct {

type OptsExtra struct {
Connections int `json:"connections"`
// AutoTorrent when task download complete, and it is a .torrent file, it will be auto create a new task for the torrent file
AutoTorrent bool `json:"autoTorrent"`
}

// Stats for download
1 change: 1 addition & 0 deletions ui/flutter/lib/api/model/options.dart
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@ class Options {
@JsonSerializable()
class OptsExtraHttp {
int connections = 0;
bool autoTorrent = false;

OptsExtraHttp();

5 changes: 4 additions & 1 deletion ui/flutter/lib/api/model/options.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 14 additions & 10 deletions ui/flutter/lib/app/modules/create/views/create_view.dart
Original file line number Diff line number Diff line change
@@ -409,15 +409,20 @@ class CreateView extends GetView<CreateController> {
try {
_confirmController.start();
if (_confirmFormKey.currentState!.validate()) {
final submitUrl = Util.isWeb() && controller.fileDataUri.isNotEmpty
final isWebFileChosen =
Util.isWeb() && controller.fileDataUri.isNotEmpty;
final submitUrl = isWebFileChosen
? controller.fileDataUri.value
: _urlController.text;

final urls = Util.textToLines(submitUrl);
// Add url to the history
for (final url in urls) {
_historyController.addHistory(url);
if (!isWebFileChosen) {
for (final url in urls) {
_historyController.addHistory(url);
}
}

/*
Check if is direct download, there has two ways to direct download
1. Direct download option is checked
@@ -433,7 +438,7 @@ class CreateView extends GetView<CreateController> {
name: isMultiLine ? "" : _renameController.text,
path: _pathController.text,
selectFiles: [],
extra: parseReqOpts())));
extra: parseReqOptsExtra())));
}));
Get.rootDelegate.offNamed(Routes.TASK);
} else {
@@ -471,11 +476,10 @@ class CreateView extends GetView<CreateController> {
return reqExtra;
}

Object? parseReqOpts() {
return _connectionsController.text.isEmpty
? null
: (OptsExtraHttp()
..connections = int.parse(_connectionsController.text));
Object? parseReqOptsExtra() {
return OptsExtraHttp()
..connections = int.tryParse(_connectionsController.text) ?? 0
..autoTorrent = true;
}

String _hitText() {
@@ -541,7 +545,7 @@ class CreateView extends GetView<CreateController> {
showMessage('tip'.tr, 'noFileSelected'.tr);
return;
}
final optExtra = parseReqOpts();
final optExtra = parseReqOptsExtra();
if (createFormKey.currentState!.validate()) {
if (rr.id.isEmpty) {
// from extension resolve result

0 comments on commit 74beea6

Please sign in to comment.