fix: cleanup temp files when task is cancelled

任务取消时清理临时文件(.audio/.video),避免残留

Co-Authored-By: AI
This commit is contained in:
2026-04-09 11:20:14 +08:00
parent 36d089705a
commit 60b8a98a74
2 changed files with 29 additions and 3 deletions
+1
View File
@@ -21,3 +21,4 @@ backup/
download/
bin/
cmd/bilidown/static
.claude
+25
View File
@@ -75,6 +75,23 @@ var GlobalTaskMux = &sync.Mutex{}
var GlobalDownloadSem = util.NewSemaphore(3)
var GlobalMergeSem = util.NewSemaphore(3)
// cleanupTempFiles 清理任务的临时文件
func (task *Task) cleanupTempFiles() {
if task.Folder == "" || task.ID == 0 {
return
}
tempFiles := []string{
filepath.Join(task.Folder, strconv.FormatInt(task.ID, 10)+".audio"),
filepath.Join(task.Folder, strconv.FormatInt(task.ID, 10)+".video"),
}
for _, f := range tempFiles {
if _, err := os.Stat(f); err == nil {
os.Remove(f)
logger.Debugf("清理临时文件: %s", f)
}
}
}
// CancelTask 取消指定任务
func CancelTask(taskID int64) bool {
GlobalTaskMux.Lock()
@@ -129,6 +146,8 @@ func (task *Task) Start() {
// 检查是否已取消
if task.Cancelled {
task.cleanupTempFiles()
task.cleanupTempFiles()
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
return
}
@@ -152,6 +171,7 @@ func (task *Task) Start() {
// 再次检查是否已取消
if task.Cancelled {
GlobalDownloadSem.Release()
task.cleanupTempFiles()
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
return
}
@@ -165,6 +185,7 @@ func (task *Task) Start() {
if err != nil || task.Cancelled {
GlobalDownloadSem.Release()
if task.Cancelled {
task.cleanupTempFiles()
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
} else {
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
@@ -192,6 +213,7 @@ func (task *Task) Start() {
if err != nil || task.Cancelled {
GlobalDownloadSem.Release()
if task.Cancelled {
task.cleanupTempFiles()
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
} else {
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
@@ -219,6 +241,7 @@ func (task *Task) Start() {
if err != nil || task.Cancelled {
GlobalDownloadSem.Release()
if task.Cancelled {
task.cleanupTempFiles()
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
} else {
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
@@ -229,6 +252,7 @@ func (task *Task) Start() {
if err != nil || task.Cancelled {
GlobalDownloadSem.Release()
if task.Cancelled {
task.cleanupTempFiles()
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
} else {
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
@@ -238,6 +262,7 @@ func (task *Task) Start() {
GlobalDownloadSem.Release()
if task.Cancelled {
task.cleanupTempFiles()
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
return
}