feat: data lifecycle rewrite, download clients, wanted list, and central catalog index
Ships the fresh-start schema cleanup: rebuilt explore catalog index pipeline (dump import, artifact fetch/build, incremental listen-count refresh), a new download subsystem (Lidarr/Prowlarr/qBittorrent/SABnzbd/ slskd/yt-dlp providers, staging, reconciliation, wanted list), and the supporting schema/query/store changes across backend and frontend. Also includes two smaller follow-ups: bump the central index's rebuild-after cadence from 90 to 180 days, and remove the Explore "library only" online/offline toggle entirely (frontend-only, no backend counterpart) rather than carry unused UI/state. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y2Agd9af5hE7qzti2ackiS
This commit is contained in:
@@ -48,6 +48,32 @@ var thumbnailTiers = []thumbnailTier{
|
||||
// multi-tier system. Kept for migration purposes only.
|
||||
const legacyThumbSuffix = "_thumb"
|
||||
|
||||
// CoverArtFileSet returns every file on disk belonging to one cover art
|
||||
// entry: the original plus each generated size variant, plus the legacy
|
||||
// _thumb file for databases that predate the multi-tier thumbnails.
|
||||
//
|
||||
// Only the original is recorded in cover_art.file_path — the variants
|
||||
// are derived filenames — so any code deleting cover art has to expand
|
||||
// the set or the thumbnails are orphaned.
|
||||
func CoverArtFileSet(originalPath string) []string {
|
||||
dir := filepath.Dir(originalPath)
|
||||
base := filepath.Base(originalPath)
|
||||
|
||||
paths := make([]string, 0, len(thumbnailTiers)+2) //nolint:mnd
|
||||
|
||||
paths = append(paths, originalPath)
|
||||
|
||||
for _, tier := range thumbnailTiers {
|
||||
paths = append(paths, filepath.Join(
|
||||
dir, coverart.SizedFilename(base, tier.Suffix),
|
||||
))
|
||||
}
|
||||
|
||||
return append(paths, filepath.Join(
|
||||
dir, coverart.SizedFilename(base, legacyThumbSuffix),
|
||||
))
|
||||
}
|
||||
|
||||
// isSizedVariant reports whether a filename contains any known size suffix
|
||||
// (current tiers or legacy).
|
||||
func isSizedVariant(name string) bool {
|
||||
|
||||
Reference in New Issue
Block a user