mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-10 15:26:38 +08:00
fix media workflows and download organization
This commit is contained in:
@@ -3,7 +3,6 @@ package service
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"go.uber.org/zap"
|
||||
@@ -87,16 +86,17 @@ func subscriptionShouldArchive(sub *model.Subscription, availability LocalAvaila
|
||||
if sub == nil || sub.WashEnabled || sub.ArchivedAt != nil {
|
||||
return false
|
||||
}
|
||||
mediaType := strings.ToLower(strings.TrimSpace(sub.MediaType))
|
||||
if !isSubscriptionSeriesType(mediaType) {
|
||||
mediaType := normalizeMediaType(sub.MediaType, sub.Name+" "+sub.Filter, "")
|
||||
seriesLike := isSubscriptionSeriesType(mediaType) || len(availability.ExistingEpisodeKeys) > 0 || len(availability.MissingEpisodeKeys) > 0
|
||||
if !seriesLike {
|
||||
return availability.InLibrary || availability.LocalMediaCount > 0 || availability.DownloadedEpisodes > 0
|
||||
}
|
||||
total := trustedSeriesArchiveTotal(sub, availability)
|
||||
if availability.HasSeriesPack {
|
||||
return true
|
||||
}
|
||||
total := sub.TotalEpisodes
|
||||
if total <= 0 {
|
||||
total = availability.TotalEpisodes
|
||||
if len(availability.ExistingEpisodeKeys) == 0 {
|
||||
return true
|
||||
}
|
||||
return total > 0 && availability.DownloadedEpisodes >= total && len(availability.MissingEpisodes) == 0
|
||||
}
|
||||
if total > 0 {
|
||||
return availability.DownloadedEpisodes >= total && len(availability.MissingEpisodes) == 0
|
||||
@@ -104,6 +104,31 @@ func subscriptionShouldArchive(sub *model.Subscription, availability LocalAvaila
|
||||
return subscriptionLooksSingleEpisode(sub) && availability.DownloadedEpisodes > 0
|
||||
}
|
||||
|
||||
func trustedSeriesArchiveTotal(sub *model.Subscription, availability LocalAvailability) int {
|
||||
total := 0
|
||||
if sub != nil {
|
||||
total = sub.TotalEpisodes
|
||||
}
|
||||
if total <= 0 {
|
||||
total = availability.TotalEpisodes
|
||||
}
|
||||
if maxEpisode := maxAvailabilityEpisode(availability.ExistingEpisodeKeys); total > 0 && maxEpisode > total {
|
||||
return 0
|
||||
}
|
||||
return total
|
||||
}
|
||||
|
||||
func maxAvailabilityEpisode(keys map[string]struct{}) int {
|
||||
maxEpisode := 0
|
||||
for key := range keys {
|
||||
var season, episode int
|
||||
if _, err := fmt.Sscanf(key, "%02dE%03d", &season, &episode); err == nil && episode > maxEpisode {
|
||||
maxEpisode = episode
|
||||
}
|
||||
}
|
||||
return maxEpisode
|
||||
}
|
||||
|
||||
func subscriptionArchiveReason(sub *model.Subscription, availability LocalAvailability) string {
|
||||
if sub != nil && sub.WashEnabled {
|
||||
return ""
|
||||
|
||||
Reference in New Issue
Block a user