aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Server.Implementations
AgeCommit message (Collapse)Author
12 daysFix FindArtiststheguymadmax
12 daysFix master buildShadowghost
12 daysMerge pull request #17576 from obiwantoby/perf/batch-mediasourcecount-dtoCody Robibero
Bugfix: #17547 | Batching MediaSourceCount into one call
12 daysMerge pull request #17597 from theguymadmax/fix-people-filteringCody Robibero
Fix PersonTypes not applied when filtering by person
12 daysMerge pull request #17588 from TOomaAh/fix/is-airing-filterCody Robibero
fix: correct IsAiring negation to exclude airing items
12 daysMerge pull request #17563 from Shadowghost/cleanup-sql-helpersCody Robibero
Cleanup and simplify query helpers
12 daysFix PersonTypes not applied when filtering by persontheguymadmax
13 daysfix: correct IsAiring negation to exclude airing itemsTOomaAh
2026-08-08Use WhereOneOrMany helper for the alternate version id filterbrandon
Filter the parent ids with the WhereOneOrMany query helper instead of a raw Contains so the id list is wrapped in EF.Parameter and EF Core reuses one compiled query plan across calls, matching how the rest of the item queries build their id filters.
2026-08-08Address review on MediaSourceCount batchingbrandon
Rename GetItemsWithAlternateVersions to GetItemIdsWithAlternateVersions across the interfaces and implementations since it returns ids. Return the hashset straight from the query instead of materializing an array first. Rename the DtoService guard to mayHaveAlternateVersions and invert it so the computed path is the explicit case. Assert the media source count value in the batch skip test and add a test covering an item that is in the returned set still resolving to the correct count.
2026-08-07Batch alternate version detection in DtoService to remove MediaSourceCount N+1brandon
Browsing a page of videos with the MediaSourceCount field ran one alternate version query per item, each opening a fresh DbContext. On a large library that turned a single page into hundreds of sequential round trips and made the Items endpoint take tens of seconds while holding a request thread the whole time. Detect which videos own alternate versions once per page with a single query, mirroring the existing people batch. Videos absent from that set have a single media source, so the per item lookups are skipped for the common case. Behavior is unchanged: a video with no alternates already resolved to a count of one. Adds a regression test asserting the count resolves from the batch and the per item lookups are never called.
2026-08-07Merge pull request #17571 from obiwantoby/perf/batch-people-dtoCody Robibero
Batch people lookups when building item DTOs
2026-08-07Merge pull request #17541 from vdatanet/fix/byname-total-record-countCody Robibero
Fix by-name endpoints reporting TotalRecordCount=0 next to a populated Items array
2026-08-07Batch people lookups when building item DTOsbrandon
GetBaseItemDtos already batch fetches user data, child counts, played counts and artists before its per item loop, but AttachPeople still ran one GetPeople query per item. Rendering a page of items (for example a large playlist) fired one extra query per row. Add GetPeopleByItems to IPeopleRepository, which reads every requested item in a single query over the people mapping table and returns full PersonInfo (role, type and sort order) grouped by item id. GetBaseItemDtos prefetches this once when the People field is requested and passes it into AttachPeople, which reads from the batch instead of querying per item. The single item GetBaseItemDto path keeps its existing per item behaviour when no batch is supplied. Adds a DtoService test asserting people resolve from the batch and the per item GetPeople is never called.
2026-08-06Cleanup and simplify query helpersShadowghost
2026-08-06Move the deletion of old related info to just before the saveMarc Brooks
This makes the deletion of BaseItemProviders, BaseItemImageInfos, and BaseItemMetadataFields happen in batch as a contiguous block so the lock isn't held across items, just before the bulk SaveChanges.
2026-08-05Speed up search for existing item valuesMarc Brooks
Replace the O(n²) array .First scan with a dictionary lookup
2026-08-05Use a HashSet for existing itemsMarc Brooks
Makes the test O(log n)
2026-08-05Project the lowered person credit values once when updating peopleShadowghost
2026-08-05Merge remote-tracking branch 'upstream/master' into fix-byname-queriesShadowghost
# Conflicts: # Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
2026-08-05Fix by-name endpoints reporting TotalRecordCount=0 next to a populated Items ↵vdatanet
array `GetItemValues` -- the shared path behind `/Artists`, `/AlbumArtists`, `/Genres`, `/MusicGenres` and `/Studios` -- disabled the total record count whenever the query carried no `Limit`: if (!filter.Limit.HasValue) { filter.EnableTotalRecordCount = false; } A request without an explicit limit therefore came back with N entries in `Items` and `TotalRecordCount = 0`. Clients that page on the reported total -- the documented contract every other list endpoint honours -- read that as an empty library. `/Items` and `/Persons` do not share this path and report the count correctly, which is what makes the inconsistency visible from the outside. Measured against master with a 62-track music library: GET /Artists?UserId=... -> TotalRecordCount=0 Items=5 GET /Artists?UserId=...&limit=100 -> TotalRecordCount=5 Items=5 Dropping the block costs nothing: `representativeIds` is materialised into a `List<Guid>` a few lines below regardless, so `.Count` was already available and the count is now reported from it. Callers that genuinely want to skip the count still can -- `EnableTotalRecordCount = false` is honoured as before. The block also mutated the caller's own query object, so a query instance reused across calls silently lost its total after the first limitless one. That is covered by a test as well.
2026-08-04Fix /Persons favourites timing out by removing the correlated favourites joinShadowghost
2026-08-03Only treat series and seasons as resumable foldersShadowghost
2026-08-02Merge remote-tracking branch 'upstream/master' into fix-byname-queriesShadowghost
2026-08-02Merge pull request #17456 from Shadowghost/fix-extrasCody Robibero
Fix extras naming and version assignment
2026-08-02Merge pull request #17503 from theguymadmax/fix-sortby-nameCody Robibero
Use CleanName when sorting by name
2026-08-02Merge pull request #17486 from Shadowghost/fix-adjacentCody Robibero
Fix AdjacentTo being ignored on non-recursive item queries
2026-08-02Merge pull request #17482 from Shadowghost/fix-stale-versionsCody Robibero
Fix video version links being read from stale serialised item data instead of the LinkedChildren table
2026-08-02Merge pull request #17147 from Shadowghost/tmdb-missing-episodesCody Robibero
Add Tmdb missing episode provider
2026-08-01Merge remote-tracking branch 'upstream/master' into fix-byname-queriesShadowghost
# Conflicts: # src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/JellyfinDbModelSnapshot.cs
2026-08-01Preserve multiple roles per person type instead of deduping credits by name ↵Shadowghost
and type
2026-08-01Merge remote-tracking branch 'upstream/master' into tmdb-missing-episodesShadowghost
# Conflicts: # Jellyfin.Server.Implementations/Item/BaseItemRepository.QueryBuilding.cs
2026-08-01Merge pull request #17500 from theguymadmax/fix-storage-lookupCody Robibero
Fix storage info lookup for Windows
2026-08-01Merge pull request #17463 from Shadowghost/fix-unplayed-filterCody Robibero
Fix (Un)Played filter correctness and performance
2026-08-01Merge pull request #17460 from Shadowghost/fix-user-itemsCody Robibero
Queue person metadata refresh instead of blocking the item request and fix ItemCounts
2026-08-01Merge pull request #17416 from Shadowghost/enable-duplicate-playlist-childrenCody Robibero
Allow duplicate LinkedChildren for Playlists
2026-07-31Use CleanName when sorting by nametheguymadmax
2026-07-30Fix storage lookup for Windowstheguymadmax
2026-07-30Apply the by-name access exemption in the search candidate queryShadowghost
2026-07-29Fix playlist entries being lost on migration and library scansShadowghost
2026-07-29Fix AdjacentTo being ignored on non-recursive item queriesShadowghost
2026-07-29FixupShadowghost
2026-07-29Fix more filter casesShadowghost
2026-07-29Fix video version links being read from stale serialised item data instead ↵Shadowghost
of the LinkedChildren table
2026-07-28Fix Folder access filteringShadowghost
2026-07-28Restrict people, genres, studios and artists to names backed by an item the ↵Shadowghost
user can access
2026-07-28Make the /Persons de-duplication use an index instead of grouping the tableShadowghost
2026-07-28Fix played/unplayed filter for empty Series and BoxSetsShadowghost
2026-07-27Queue person metadata refresh instead of blocking the item request and fix ↵Shadowghost
ItemCounts
2026-07-27Fix extras naming and version assignmentShadowghost