From 340c1cdc57d4af68ce6178a1b0cf8abda7400ff4 Mon Sep 17 00:00:00 2001 From: Simon Ding Date: Mon, 15 Sep 2025 20:17:40 +0800 Subject: [PATCH] feat: add to blacklist if torrent has no video file --- engine/scheduler.go | 5 +++++ pkg/storage/base.go | 16 +++++++++++++++- pkg/storage/base_test.go | 16 ++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 pkg/storage/base_test.go diff --git a/engine/scheduler.go b/engine/scheduler.go index be86991..999da70 100644 --- a/engine/scheduler.go +++ b/engine/scheduler.go @@ -12,6 +12,7 @@ import ( "polaris/log" "polaris/pkg" "polaris/pkg/notifier/message" + "polaris/pkg/storage" "polaris/pkg/utils" "time" @@ -292,6 +293,10 @@ func (c *Engine) moveCompletedTask(id int) (err1 error) { //如果种子是路径,则会把路径展开,只移动文件,类似 move dir/* dir2/, 如果种子是文件,则会直接移动文件,类似 move file dir/ if err := stImpl.Copy(filepath.Join(c.db.GetDownloadDir(), torrentName), r.TargetDir, torrent.WalkFunc()); err != nil { + if errors.Is(err, &storage.NoVideoFileError{}) { + log.Warnf("no video file found in torrent, add torrent to blacklist: %v", torrentName) + c.db.AddTorrent2Blacklist(r.Hash, r.SourceTitle, r.MediaID) + } return errors.Wrap(err, "move file") } torrent.UploadProgresser = stImpl.UploadProgress diff --git a/pkg/storage/base.go b/pkg/storage/base.go index 1ecf79f..46c9df1 100644 --- a/pkg/storage/base.go +++ b/pkg/storage/base.go @@ -80,10 +80,24 @@ func (b *Base) isFileNeeded(name string) bool { } +type NoVideoFileError struct { + Path string +} + +func (e *NoVideoFileError) Error() string { + return "no video file in path: " + e.Path +} + +func (e *NoVideoFileError) Is(target error) bool { + _, ok := target.(*NoVideoFileError) + return ok +} + func (b *Base) Upload(destDir string, tryLink, detectMime, changeMediaHash bool, upload uploadFunc, mkdir func(string) error, walkFn WalkFn) error { if !b.checkVideoFilesExist() { - return errors.Errorf("torrent has no video file(s)") + return &NoVideoFileError{Path: b.src} } + os.MkdirAll(destDir, os.ModePerm) targetBase := filepath.Join(destDir, filepath.Base(b.src)) //文件的场景,要加上文件名, move filename ./dir/ diff --git a/pkg/storage/base_test.go b/pkg/storage/base_test.go new file mode 100644 index 0000000..86c8ab2 --- /dev/null +++ b/pkg/storage/base_test.go @@ -0,0 +1,16 @@ +package storage + +import ( + "testing" + + "github.com/pkg/errors" +) + +func TestError(t *testing.T) { + err := &NoVideoFileError{Path: "/some/path"} + if errors.Is(err, &NoVideoFileError{}) { + t.Log("is NoVideoFileError") + } else { + t.Error("not match") + } +}