fix subscription dedup progress tracking

This commit is contained in:
ShukeBta
2026-06-26 20:31:11 +08:00
parent bd35e5adf7
commit 45ede69d7e
6 changed files with 571 additions and 425 deletions
+41
View File
@@ -51,6 +51,7 @@ func (d *DownloadService) AddDownloadWithMeta(ctx context.Context, userID, urlSt
return nil, ErrMediaAlreadyInLibrary
}
if existing, ok := d.findExistingDownloadTask(ctx, req); ok {
d.linkExistingDownloadTaskToSubscription(ctx, existing, req)
return existing, ErrDownloadAlreadyExists
}
_ = d.ReloadConfig(ctx)
@@ -410,6 +411,46 @@ func torrentInDownloadRequestScope(torrent QBitTorrent, req downloadAddRequest)
return sameOrChildPath(torrentSavePath, requestSavePath) || sameOrChildPath(requestSavePath, torrentSavePath)
}
func (d *DownloadService) linkExistingDownloadTaskToSubscription(ctx context.Context, task *model.DownloadTask, req downloadAddRequest) {
subscriptionID := strings.TrimSpace(req.meta.SubscriptionID)
if d == nil || d.repo == nil || d.repo.DB == nil || task == nil || subscriptionID == "" || strings.TrimSpace(task.ID) == "" {
return
}
updates := map[string]any{}
if strings.TrimSpace(task.SubscriptionID) == "" {
updates["subscription_id"] = subscriptionID
task.SubscriptionID = subscriptionID
}
if strings.TrimSpace(task.MediaType) == "" && strings.TrimSpace(req.meta.MediaType) != "" {
updates["media_type"] = req.meta.MediaType
task.MediaType = req.meta.MediaType
}
if strings.TrimSpace(task.MediaCategory) == "" && strings.TrimSpace(req.meta.MediaCategory) != "" {
updates["media_category"] = req.meta.MediaCategory
task.MediaCategory = req.meta.MediaCategory
}
if strings.TrimSpace(task.PosterURL) == "" && strings.TrimSpace(req.meta.PosterURL) != "" {
updates["poster_url"] = req.meta.PosterURL
task.PosterURL = req.meta.PosterURL
}
if strings.TrimSpace(task.BackdropURL) == "" && strings.TrimSpace(req.meta.BackdropURL) != "" {
updates["backdrop_url"] = req.meta.BackdropURL
task.BackdropURL = req.meta.BackdropURL
}
if strings.TrimSpace(task.Overview) == "" && strings.TrimSpace(req.meta.Overview) != "" {
updates["overview"] = req.meta.Overview
task.Overview = req.meta.Overview
}
if !task.AllowExistingLibrary && req.meta.AllowExistingLibrary {
updates["allow_existing_library"] = true
task.AllowExistingLibrary = true
}
if len(updates) == 0 {
return
}
_ = d.repo.DB.WithContext(ctx).Model(&model.DownloadTask{}).Where("id = ?", task.ID).Updates(updates).Error
}
func (d *DownloadService) createTask(ctx context.Context, userID, urlStr, savePath string, meta DownloadTaskMeta) (*model.DownloadTask, error) {
title := strings.TrimSpace(meta.Title)
if title == "" {