feat: allow keep files in offline download (close #4678)

pull/5581/head
Andy Hsu 2023-11-24 15:02:36 +08:00
parent d455a232ef
commit b6134dc515
3 changed files with 30 additions and 8 deletions

View File

@ -16,6 +16,7 @@ const (
DeleteOnUploadSucceed DeletePolicy = "delete_on_upload_succeed" DeleteOnUploadSucceed DeletePolicy = "delete_on_upload_succeed"
DeleteOnUploadFailed DeletePolicy = "delete_on_upload_failed" DeleteOnUploadFailed DeletePolicy = "delete_on_upload_failed"
DeleteNever DeletePolicy = "delete_never" DeleteNever DeletePolicy = "delete_never"
DeleteAlways DeletePolicy = "delete_always"
) )
type AddURLArgs struct { type AddURLArgs struct {

View File

@ -125,10 +125,11 @@ func (t *DownloadTask) Complete() error {
for i, _ := range files { for i, _ := range files {
file := files[i] file := files[i]
TransferTaskManager.Add(&TransferTask{ TransferTaskManager.Add(&TransferTask{
file: file, file: file,
dstDirPath: t.DstDirPath, dstDirPath: t.DstDirPath,
wg: &wg, wg: &wg,
tempDir: t.TempDir, tempDir: t.TempDir,
deletePolicy: t.DeletePolicy,
}) })
} }
return nil return nil

View File

@ -9,16 +9,18 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/xhofe/tache" "github.com/xhofe/tache"
"os"
"path/filepath" "path/filepath"
"sync" "sync"
) )
type TransferTask struct { type TransferTask struct {
tache.Base tache.Base
file File file File
dstDirPath string dstDirPath string
wg *sync.WaitGroup wg *sync.WaitGroup
tempDir string tempDir string
deletePolicy DeletePolicy
} }
func (t *TransferTask) Run() error { func (t *TransferTask) Run() error {
@ -61,6 +63,24 @@ func (t *TransferTask) GetStatus() string {
return "transferring" return "transferring"
} }
func (t *TransferTask) OnSucceeded() {
if t.deletePolicy == DeleteOnUploadSucceed || t.deletePolicy == DeleteAlways {
err := os.Remove(t.file.Path)
if err != nil {
log.Errorf("failed to delete file %s, error: %s", t.file.Path, err.Error())
}
}
}
func (t *TransferTask) OnFailed() {
if t.deletePolicy == DeleteOnUploadFailed || t.deletePolicy == DeleteAlways {
err := os.Remove(t.file.Path)
if err != nil {
log.Errorf("failed to delete file %s, error: %s", t.file.Path, err.Error())
}
}
}
var ( var (
TransferTaskManager *tache.Manager[*TransferTask] TransferTaskManager *tache.Manager[*TransferTask]
) )