fix: cleanup temp files when task is cancelled
任务取消时清理临时文件(.audio/.video),避免残留 Co-Authored-By: AI
This commit is contained in:
@@ -21,3 +21,4 @@ backup/
|
|||||||
download/
|
download/
|
||||||
bin/
|
bin/
|
||||||
cmd/bilidown/static
|
cmd/bilidown/static
|
||||||
|
.claude
|
||||||
|
|||||||
+28
-3
@@ -75,6 +75,23 @@ var GlobalTaskMux = &sync.Mutex{}
|
|||||||
var GlobalDownloadSem = util.NewSemaphore(3)
|
var GlobalDownloadSem = util.NewSemaphore(3)
|
||||||
var GlobalMergeSem = 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 取消指定任务
|
// CancelTask 取消指定任务
|
||||||
func CancelTask(taskID int64) bool {
|
func CancelTask(taskID int64) bool {
|
||||||
GlobalTaskMux.Lock()
|
GlobalTaskMux.Lock()
|
||||||
@@ -129,7 +146,9 @@ func (task *Task) Start() {
|
|||||||
|
|
||||||
// 检查是否已取消
|
// 检查是否已取消
|
||||||
if task.Cancelled {
|
if task.Cancelled {
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
task.cleanupTempFiles()
|
||||||
|
task.cleanupTempFiles()
|
||||||
|
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,7 +171,8 @@ func (task *Task) Start() {
|
|||||||
// 再次检查是否已取消
|
// 再次检查是否已取消
|
||||||
if task.Cancelled {
|
if task.Cancelled {
|
||||||
GlobalDownloadSem.Release()
|
GlobalDownloadSem.Release()
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
task.cleanupTempFiles()
|
||||||
|
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,6 +185,7 @@ func (task *Task) Start() {
|
|||||||
if err != nil || task.Cancelled {
|
if err != nil || task.Cancelled {
|
||||||
GlobalDownloadSem.Release()
|
GlobalDownloadSem.Release()
|
||||||
if task.Cancelled {
|
if task.Cancelled {
|
||||||
|
task.cleanupTempFiles()
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
||||||
} else {
|
} else {
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
|
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
|
||||||
@@ -192,6 +213,7 @@ func (task *Task) Start() {
|
|||||||
if err != nil || task.Cancelled {
|
if err != nil || task.Cancelled {
|
||||||
GlobalDownloadSem.Release()
|
GlobalDownloadSem.Release()
|
||||||
if task.Cancelled {
|
if task.Cancelled {
|
||||||
|
task.cleanupTempFiles()
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
||||||
} else {
|
} else {
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
|
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
|
||||||
@@ -219,6 +241,7 @@ func (task *Task) Start() {
|
|||||||
if err != nil || task.Cancelled {
|
if err != nil || task.Cancelled {
|
||||||
GlobalDownloadSem.Release()
|
GlobalDownloadSem.Release()
|
||||||
if task.Cancelled {
|
if task.Cancelled {
|
||||||
|
task.cleanupTempFiles()
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
||||||
} else {
|
} else {
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
|
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
|
||||||
@@ -229,6 +252,7 @@ func (task *Task) Start() {
|
|||||||
if err != nil || task.Cancelled {
|
if err != nil || task.Cancelled {
|
||||||
GlobalDownloadSem.Release()
|
GlobalDownloadSem.Release()
|
||||||
if task.Cancelled {
|
if task.Cancelled {
|
||||||
|
task.cleanupTempFiles()
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
||||||
} else {
|
} else {
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
|
task.UpdateStatus(db, "error", fmt.Errorf("DownloadMedia: %v", err))
|
||||||
@@ -238,7 +262,8 @@ func (task *Task) Start() {
|
|||||||
GlobalDownloadSem.Release()
|
GlobalDownloadSem.Release()
|
||||||
|
|
||||||
if task.Cancelled {
|
if task.Cancelled {
|
||||||
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
task.cleanupTempFiles()
|
||||||
|
task.UpdateStatus(db, "error", fmt.Errorf("任务已取消"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user