Skip to content

feat: collection section overhaul, multi-episode import fixes, and QOL improvements - #434

Merged
keonramses merged 6 commits into
MoldyTaint:devfrom
keonramses:dev
Jul 25, 2026
Merged

feat: collection section overhaul, multi-episode import fixes, and QOL improvements#434
keonramses merged 6 commits into
MoldyTaint:devfrom
keonramses:dev

Conversation

@keonramses

Copy link
Copy Markdown
Owner

Summary

  • Overhauled the movie collection section: reactive SSE refresh, contextual search/subtitle buttons, "Part of [Collection Name]" header, and exclude the currently-viewed movie from its own collection box
  • Fixed multi-episode files during manual import; files like S01E02-E03 now name and link all covered episodes correctly, with a range display (E1-E2) in the import UI and an override escape hatch
  • Added "Search in Discover" button on empty library search results for both movies and TV
  • Added "Clear all logs" button to the monitoring logs page
  • Fixed an infinite GET /api/discover request loop triggered by the debug mode effect
  • Added path separator hint below folder format fields in naming settings

Related Issues

N/A

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring (no functional changes)
  • Documentation
  • Dependency update
  • Other:

Changes Made

  • Replaced CSS group-hover with JS hover state on collection cards; added invalidateAll() on file:added/file:removed SSE events to refresh collection without reload
  • Added hasSubtitles to CollectionPart and a selectDistinct subtitle membership query in the movie page server load
  • Contextual search and subtitle buttons on collection header hidden when no tracked movies are missing files/subtitles; current movie filtered out of collection display
  • resolveTvEpisodeMapping now returns full episodeNumbers[]; buildEpisodeNamingInfo accepts the array so multi-episode files are named with the correct range
  • Added parsedEpisodes?: number[] to ManualImportDetectionData and DetectionGroup; GroupEditorPanel shows E1-E2 (auto) badge with Override/Auto toggle; Step3SingleImport summary renders the full range
  • Empty library search state for movies and TV now includes a "Search in Discover" button linking to /discover?type=...&q=...
  • Added clearAllFiles() to logHistoryService, a DELETE handler to /api/settings/logs/history, and a "Clear all" button backed by ConfirmationModal on the logs page
  • Added debugResultsLoaded flag to guard the debug mode $effect from re-firing when filteredOutResults is empty after a fetch
  • Added path separator info/warning hints below folder format fields in naming settings

Areas Affected

  • UI/Frontend
  • API/Backend
  • Indexers
  • Download Clients
  • Library Management
  • Database/Schema
  • Subtitles
  • Documentation

Testing

  • Tested locally
  • Added/updated tests
  • All tests pass (npm run test)
  • Type checking passes (npm run check)

Checklist

  • Code follows project conventions
  • Ran npm run format
  • Commit messages follow conventional commits (feat:, fix:, etc.)
  • Svelte 5 runes used correctly ($state, $derived, $effect, $props)
  • No new warnings in console or build output
  • Documentation updated (if applicable)

Screenshots

- show all TMDB collection parts (not just library siblings), with missing entries dimmed and grayed out
- add Add Collection CTA that bulk-adds missing parts, inheriting rootFolderId and scoringProfileId from the current movie
- add per-movie hover overlay with + (add) (add individually) and i (info)  (Discover page) buttons
- add POST /api/library/collections/[tmdbId]/track endpoint that fetches collection from TMDB, skips existing library entries, and bulk-inserts missing movies using the standard add pipeline
- add contextual header buttons: search (missing-file tracked movies) and subtitle auto-download, each hidden when there is nothing to act on
…rch state

- show a primary "Search in Discover" button when no movies/tv match a library search, which links to ` /discover?type=movie` or `/discover?type=tv` depending on where the search is intiated
  - Both links carry the current search query via ?q= so Discover loads results without the user having to retype search query
- replace filteredOutResults.length === 0 guard in debug $effect with a debugResultsLoaded flag
- set debugResultsLoaded = true in the finally block after each load
- add clearAllFiles() to logHistoryService
- add DELETE handler to /api/settings/logs/history
…ng manual import

- resolveTvEpisodeMapping now returns episodeNumbers[] instead of a single episodeNumber
- buildEpisodeNamingInfo receives the full episode array so NamingService generates the correct multi-episode filename (e.g. S01E02-E03 instead of S01E02)
- add parsedEpisodes?: number[] to ManualImportDetectionData and DetectionGroup
- populate from resolveTvEpisodeIdentifier when episodeNumbers.length > 1
- replace editable episode input with a read-only E1-E2 (auto) display for multi-episode files
@keonramses
keonramses requested a review from MoldyTaint as a code owner July 25, 2026 04:51
@keonramses
keonramses merged commit be82de5 into MoldyTaint:dev Jul 25, 2026
5 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant