Commit Graph
90 Commits
Author SHA1 Message Date
Silo Server Migration 8a8ed6998d fix(requests): bound external id hydration 2026-05-24 23:04:04 -04:00
Silo Server Migration e470760ab4 fix(requests): hydrate external ids before availability 2026-05-24 22:57:44 -04:00
Silo Server Migration 703797e0bb fix(requests): ignore nil presence repositories 2026-05-24 22:52:56 -04:00
Silo Server Migration 8b76dc0bf2 fix(requests): ignore nil presence backfill repo 2026-05-24 22:50:06 -04:00
Silo Server Migration 1339b9b5c9 feat(requests): match catalog presence by external ids 2026-05-24 22:45:50 -04:00
Silo Server Migration 71aaecc8e8 fix(catalog): reject conflicting tmdb backfills 2026-05-24 22:38:44 -04:00
Silo Server Migration b52c4a3d4e fix(catalog): guard tmdb provider id backfill 2026-05-24 22:33:41 -04:00
Silo Server Migration 84b3318ca1 feat(catalog): lookup media presence by external ids 2026-05-24 22:27:18 -04:00
Silo Server Migration 2cb7ca3918 fix(metadata): merge compatible provider ids 2026-05-24 22:20:20 -04:00
Silo Server Migration 98bebd4e5e fix(requests): harden integration submission and queue handling
- Batch integration upserts in a single transaction
- Treat radarr/sonarr lookup results as arrays and require exact matches
- Prefer queue failures over downloading state when evaluating arr queues
- Allow retrying queued/downloading requests and block declines once fulfillment started
- Fall back to pending when auto-approval integration check fails
- Rename requests query hooks file and fix discover card request affordance
2026-05-24 21:40:34 -04:00
Silo Server Migration f023c4a6f9 feat(requests): support combined movie and series search
- Add `media_type=all` to request search, backed by TMDB `/search/multi` filtered to movies and series
- Default the Requests page filter to All and refresh search results grid styling
- Refine RequestPosterCard with status accent bar, richer fallback poster, and fluid grid layout
2026-05-24 21:30:02 -04:00
Silo Server MigrationandCursor 509a6c84ba feat(requests): add discover studios, networks, and genres
Wire curated TMDB-backed studios/networks/genres discovery into the requests service and UI, replacing on-demand logo fetches with fixed duotone logos and adding browse routes plus tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-24 19:53:21 -04:00
Silo Server Migration 4321cb797c feat(api): wire discover studios/networks/genres routes 2026-05-24 18:42:02 -04:00
Silo Server Migration 8789249f44 feat(api): add discover brand and browse handlers 2026-05-24 18:41:31 -04:00
Silo Server Migration 216fbbabbe feat(requests): add BrowseStudio/BrowseNetwork/BrowseGenre service methods 2026-05-24 18:39:16 -04:00
Silo Server Migration 562f97575e feat(requests): add ListStudios/ListNetworks/ListGenres with logo cache 2026-05-24 18:37:46 -04:00
Silo Server Migration 7f246aae1a feat(requests): add singleflight logo cache for TMDB company/network logos 2026-05-24 18:35:43 -04:00
Silo Server Migration d99c253ff9 feat(requests): add bundled studio/network/genre registry 2026-05-24 18:34:43 -04:00
Silo Server Migration 736340583e feat(tmdb): add GetCompany and GetNetwork for logo path resolution 2026-05-24 18:33:20 -04:00
Silo Server Migration 8a6a8438d0 feat(tmdb): add DiscoverPage returning full MediaPage with pagination 2026-05-24 18:32:31 -04:00
Silo Server Migration 7397fa8141 feat(tmdb): add with_companies and with_networks to discover params 2026-05-24 18:31:33 -04:00
Silo Server Migration 5b8aa9f34c feat(requests): add media detail page with TMDB metadata
- Add GetMediaDetail TMDB client returning normalized detail with cast, crew, recommendations, and certifications
- Add /api/requests/detail/{media_type}/{tmdb_id} endpoint overlaying availability and request state
- Add RequestDetail page and link poster cards to it
- Treat empty/truncated Radarr/Sonarr POST responses as accepted; drop pre-submit existence lookups
2026-05-24 17:03:29 -04:00
Silo Server Migration 246c9da6ab feat(requests): add media request system with Radarr/Sonarr fulfillment
- Add request domain, repository, service, and reconcile task
- Add Radarr/Sonarr fulfillment adapters and TMDB discovery
- Expose user and admin request APIs with quota and approval rules
- Add web UI for browsing, requesting, and admin queue management
- Migration 139 introduces media_requests and related tables
2026-05-24 13:58:12 -04:00
rxwatcherandClaude Opus 4.7 e4485c9eb6 fix(api): allow HEAD on /api/v1/direct-download
Firefox (and some download managers) issue a HEAD request before
starting a download. The route only registered GET, so HEAD returned
405 Method Not Allowed and the browser aborted the download.

Mirrors the pattern already used by /stream/{session_id}, which
registers both GET and HEAD on the same handler. ServeDirect is built
on http.ServeContent / ServeFile, which natively handle HEAD by
writing headers without a body, so no handler changes are needed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 08:57:42 +02:00
Silo Server Migration eeb1caee81 feat(catalog): normalize number words in title search
- Map number words and ordinals (e.g. "Two"/"2nd") to digit tokens in both SQL normalize_search_text and the Go mirror so "Dune: Part Two" and "Dune Part 2" match
- Rebuild title_normalized generated column and title FTS GIN indexes (migration 138)
2026-05-24 01:14:39 -04:00
QuickandGitHub f8dcdd0554 Merge pull request #3 from Silo-Server/t3code/ef35ed7f
Rename webhook sync actors to profile mappings
2026-05-24 00:55:41 -04:00
Silo Server Migration d41ffd4d5e Add live introdb key reload and recap playback markers
- reload introdb API key on setting updates
- support recap/preview markers in playback and next-episode flow
- add profile defaults for recap and preview auto-play settings
2026-05-24 00:14:17 -04:00
Silo Server Migration 5f5e404d93 Rename webhook sync actors to profile mappings
- Rename actor-oriented API, storage, and webhook fields to user/profile terminology
- Switch dev compose helpers to use docker-compose.yml
- Update frontend types and webhook sync settings for the new endpoints
2026-05-24 00:04:25 -04:00
Silo Server Migration 04a7e8c82d Add online marker support for recap and preview segments
- Wire introdb marker fetching into playback and Jellyfin compat
- Persist and expose recap/preview markers alongside intro and credits
- Add new playback/profile settings for recap and preview behavior
2026-05-23 23:48:25 -04:00
Silo Server Migration cfb11fb71e Preserve collection apply progress until completion
- Keep the last reported template bundle apply progress on success and failure
- Poll admin collection apply jobs every 5 seconds in the UI
2026-05-23 21:36:41 -04:00
Silo Server Migration 4c2fcdfff0 Handle bundled collection poster failures gracefully
- Log poster store/update failures instead of aborting collection sync
- Preallocate matched collection replacements using the active limit
2026-05-23 21:32:22 -04:00
Silo Server Migration 0d1f40f8c4 Queue template bundle applies in background
- Add admin job support for collection defaults applies
- Keep preview synchronous while real applies run via the job queue
- Show collection apply job status in the admin UI
2026-05-23 21:19:33 -04:00
Silo Server Migration 9c3848d205 Port collection templates to bundled poster storage
- Store bundled template posters in public S3 when available
- Presign imported user collection posters in API responses
- Thread frontend assets into router and collection handlers
2026-05-23 20:26:05 -04:00
Silo Server Migration 73849214ad fix(collections): address template sync review comments 2026-05-23 17:43:35 -04:00
Silo Server Migration dce8978cdf Track template poster origin in collection sync
- add poster_from_template to collection records and update flows
- preserve template-applied posters while keeping admin uploads sticky
- improve template bundle sync/status reporting and MDBList limit handling
2026-05-23 14:19:04 -04:00
Silo Server Migration e37d753a0c Port collection templates with poster support and async syncs
- Add poster URLs through collection import and template apply flows
- Queue large template bundle syncs and preserve existing collection posters
- Update template bundle assets, docs, and limit handling
2026-05-23 12:31:08 -04:00
4a88c5ac44 fix(collections): propagate template DefaultSortOrder to created collection
Agent F's code review surfaced a critical gap: every Phase 1-3 template
ships a non-zero `DefaultSortOrder` in the documented PMM-style bands
(1000s charts, 2000s best-of-year, 3000s awards, 4000s streaming,
5000s popular by genre, 6000s top rated by genre, 7000s franchises,
8000s seasonal, 9000s misc/kids) and the test suite pins those values,
but none of the four `createCollectionFromTemplate` dispatch paths
forwarded the rank into `catalog.CreateLibraryCollectionInput.SortOrder`.
Applying any template — bundled or one-off — landed the new collection at
SortOrder 0, defeating the band scheme entirely.

Fix: add `SortOrder int` to each request struct
(`importMDBListRequest`, `importTMDBRequest`, `importTMDBFranchiseRequest`,
`importTMDBDiscoverRequest`) and forward `tmpl.DefaultSortOrder` →
`req.SortOrder` → `CreateLibraryCollectionInput.SortOrder` end-to-end.

The pre-existing `SourceTrakt` path is unchanged — no Trakt template
currently sets a non-zero `DefaultSortOrder` so the gap is dormant
there; revisit if/when a Trakt template needs ordering.

No new unit test: the fix is a per-struct field forward whose
end-to-end exercise requires the live repository. Adding a fake repo
to test the propagation would be a refactor beyond this fix's scope.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 23:53:43 -04:00
QuickandSilo Server Migration 6ee6ba7226 feat(collections): add tmdb_collection franchise templates
Phase-3 of the collection-templates expansion. Adds ten curated movie
franchises plus a generic placeholder template, all backed by Agent B's
tmdb_collection source. Templates land in the 7000s sort-order band.

Verified TMDB collection IDs (via api.themoviedb.org/3/collection/{id}):
  - 10        Star Wars Collection (9 films)
  - 645       James Bond Collection (25 films)
  - 1241      Harry Potter Collection (8 films) — used for "Wizarding World"
  - 9485      The Fast and the Furious Collection (12 films)
  - 119       The Lord of the Rings Collection (3 films)
  - 121938    The Hobbit Collection (3 films)
  - 328       Jurassic Park Collection (7 films)
  - 295       Pirates of the Caribbean Collection (5 films)
  - 87359     Mission: Impossible Collection (8 films)
  - 535313    Godzilla Collection (3 films) — used for "MonsterVerse"

Plan corrections / skips:
  - MCU (plan ID 86311) resolves to "The Avengers Collection" (6 films),
    not the full Marvel Cinematic Universe. TMDB has no umbrella MCU
    collection. Skipped per the no-invent-IDs rule. Sort slot 7001 left
    open.
  - DC Extended Universe (plan ID 573436) resolves to "Spider-Man:
    Spider-Verse Collection" — unrelated. No DCEU umbrella exists on
    TMDB. Skipped. Sort slot 7005 left open.
  - Wizarding World (plan ID 1241) is TMDB's Harry Potter octalogy;
    Fantastic Beasts lives in a separate collection (435259). Used as-is
    with description noting the scope.
  - MonsterVerse (plan ID 535313) is labelled "Godzilla Collection" but
    contains the three Legendary MonsterVerse Godzilla films, which is
    the closest TMDB representation. Used as-is.

The placeholder template ships with CollectionID=0 and an empty sync
schedule so it can be applied without a valid franchise ID; admins edit
the resulting collection's source_config before the first sync.
2026-05-22 23:53:43 -04:00
df5e427232 feat(collections): add tmdb_discover genre templates
Append the Phase-2 catalog from the collection-templates expansion plan:

- 18 Popular by Genre (sort_order 5001..5018, daily 0 4 * * *,
  popularity.desc with vote_count_gte=300)
- 18 Top Rated by Genre (sort_order 6001..6018, weekly 0 5 * * 0,
  vote_average.desc with vote_count_gte=1000)
- 1 Kids Movies (sort_order 9050, weekly, Family genre with
  certification_lte=PG)

Adds TestPhase2DiscoverTemplatesUseExpectedBands to pin the band ranges
and the TMDB query parameters that define each section.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 23:53:43 -04:00
Silo Server Migration c085b12fd1 Initial Silo migration 2026-05-22 23:26:56 -04:00