Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor library.db into jellyfin.db and EFCore #12798

Open
wants to merge 148 commits into
base: master
Choose a base branch
from

Conversation

JPVenson
Copy link
Member

@JPVenson JPVenson commented Oct 9, 2024

Migrated all data from old library.db into new tables inside jellyfin.db.

Note:
All EFCore repositories make libraral use of the null-forgiving operator ! for navigation properties. This needs to be done as those are expressions that are never actually run client side but only interpreted for SQL query generation. But as the dotnet compiler cannot know that and we have strict nullables enabled it will complain otherwise. I am strictly against putting a note like this on each query therefor this is your warning.

Changes

  • Migrated all data into new schema
  • Refactored IItemRepository and extracted IPeopleRepository, IMediaStreamRepository, IUserDataRepository, IChapterRepository
  • Created new Table BaseItemProvider to expand the aggregate column of ItemProvider in TypedBaseItem
  • Added forginKeys where applicable
  • Removed the Score values from Search

ToDo's

  • Fix that one UnitTest failing
  • Refactor other aggregate keys in BaseItemEntity into their own tables
  • Add enums for BaseItemEntity instead of plain string values
  • Testing 🗿
  • Apply NonTrackedQuery hint where applicable
  • Merge Migrations

Issues
All of them

@JPVenson JPVenson added backend Related to the server backend feature Adding a new feature, or substantial improvements on existing functionality breaking change: web api Includes a breaking change for the HTTP web API breaking change: plugin api Includes a breaking change for the plugin API area:database Issues relating to the server databases and/or database access release-highlight A major new feature for the next release labels Oct 9, 2024
Copy link
Member

@crobibero crobibero left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-path initial review

Emby.Server.Implementations/Data/ItemTypeLookup.cs Outdated Show resolved Hide resolved
MediaBrowser.Controller/Persistence/IItemTypeLookup.cs Outdated Show resolved Hide resolved
Emby.Server.Implementations/Data/ItemTypeLookup.cs Outdated Show resolved Hide resolved
MediaBrowser.Controller/Persistence/IItemTypeLookup.cs Outdated Show resolved Hide resolved
MediaBrowser.Controller/Persistence/IPeopleRepository.cs Outdated Show resolved Hide resolved
MediaBrowser.Controller/Persistence/IPeopleRepository.cs Outdated Show resolved Hide resolved
Jellyfin.Data/Entities/UserData.cs Outdated Show resolved Hide resolved
Jellyfin.Data/Entities/Chapter.cs Outdated Show resolved Hide resolved
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
Copy link

github-actions bot commented Oct 9, 2024

Changes in OpenAPI specification found. Expand to see details.

What's Changed


GET /Artists
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited.

GET /Artists/AlbumArtists
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited.

GET /Channels/{channelId}/Items
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.

GET /Genres
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited.

GET /Items
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.

GET /Items/{itemId}/ThemeSongs
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.

GET /Items/{itemId}/ThemeVideos
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.

GET /LiveTv/Channels
Parameters:

Changed: sortBy in query

Optional. Key to sort by.

GET /LiveTv/Programs
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited. Options: Name, StartDate.

POST /LiveTv/Programs
Request:

Changed content type : application/json

Updated GetProgramsDto :

  • Changed property SortBy (array)

    Gets or sets specify one or more sort orders, comma delimited. Options: Name, StartDate.

    Changed items (string):
    > These represent sort orders.

    Removed enum values:

    • SimilarityScore
    • SearchScore
      Changed content type : text/json

Updated GetProgramsDto :

  • Changed property SortBy (array)

    Gets or sets specify one or more sort orders, comma delimited. Options: Name, StartDate.

    Changed items (string):
    > These represent sort orders.

    Removed enum values:

    • SimilarityScore
    • SearchScore
      Changed content type : application/*+json

Updated GetProgramsDto :

  • Changed property SortBy (array)

    Gets or sets specify one or more sort orders, comma delimited. Options: Name, StartDate.

    Changed items (string):
    > These represent sort orders.

    Removed enum values:

    • SimilarityScore
    • SearchScore
GET /MusicGenres
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited.

GET /Trailers
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.

GET /Shows/{seriesId}/Episodes
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.

GET /Years
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.

GET /Items/{itemId}/ThemeMedia
Parameters:

Changed: sortBy in query

Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.

DELETE /Library/VirtualFolders
Return Type:

New response : 404 Not Found

Folder not found.

@jellyfin-bot
Copy link
Contributor

jellyfin-bot commented Oct 9, 2024

ABI Difference

Jellyfin.Data.dll
API compatibility errors between './abi-base/Jellyfin.Data.dll' (left) and './abi-head/Jellyfin.Data.dll' (right):
CP0002: Member 'Jellyfin.Data.Enums.ItemSortBy Jellyfin.Data.Enums.ItemSortBy.SimilarityScore' exists on ./abi-base/Jellyfin.Data.dll but not on ./abi-head/Jellyfin.Data.dll
CP0002: Member 'Jellyfin.Data.Enums.ItemSortBy Jellyfin.Data.Enums.ItemSortBy.SearchScore' exists on ./abi-base/Jellyfin.Data.dll but not on ./abi-head/Jellyfin.Data.dll
API breaking changes found. If those are intentional, the APICompat suppression file can be updated by specifying the '--generate-suppression-file' parameter.

MediaBrowser.Controller.dll
API compatibility errors between './abi-base/MediaBrowser.Controller.dll' (left) and './abi-head/MediaBrowser.Controller.dll' (right):
CP0001: Type 'MediaBrowser.Controller.Chapters.IChapterManager' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'string? MediaBrowser.Controller.Drawing.IImageProcessor.GetImageCacheTag(string, System.DateTime)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'string? MediaBrowser.Controller.Drawing.IImageProcessor.GetImageCacheTag(MediaBrowser.Model.Dto.BaseItemDto, MediaBrowser.Model.Entities.ChapterInfo)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'string MediaBrowser.Controller.Drawing.IImageProcessor.GetImageCacheTag(MediaBrowser.Model.Dto.BaseItemDto, MediaBrowser.Controller.Entities.ItemImageInfo)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Entities.MediaStream> MediaBrowser.Controller.Entities.BaseItem.GetMediaStreams()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Dto.MediaSourceInfo> MediaBrowser.Controller.Entities.BaseItem.GetMediaSources(bool)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'bool MediaBrowser.Controller.Entities.BaseItem.UpdateRatingToItems(System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem>)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Folder.LoadChildren()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Folder.GetCachedChildren()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Folder.GetChildren(Jellyfin.Data.Entities.User, bool)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Folder.GetChildren(Jellyfin.Data.Entities.User, bool, MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IEnumerable<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Folder.GetRecursiveChildren(Jellyfin.Data.Entities.User, MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Folder.GetRecursiveChildren()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Folder.GetRecursiveChildren(bool)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Folder.GetRecursiveChildren(System.Func<MediaBrowser.Controller.Entities.BaseItem, bool>)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Folder.GetRecursiveChildren(System.Func<MediaBrowser.Controller.Entities.BaseItem, bool>, bool)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IEnumerable<System.Tuple<MediaBrowser.Controller.Entities.LinkedChild, MediaBrowser.Controller.Entities.BaseItem>> MediaBrowser.Controller.Entities.Folder.GetLinkedChildrenInfos()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Genre.GetTaggedItems(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Dto.MediaSourceInfo> MediaBrowser.Controller.Entities.IHasMediaSources.GetMediaSources(bool)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Entities.MediaStream> MediaBrowser.Controller.Entities.IHasMediaSources.GetMediaStreams()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Dto.MediaSourceInfo> MediaBrowser.Controller.Entities.IHasMediaSources.GetMediaSources(bool)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Entities.MediaStream> MediaBrowser.Controller.Entities.IHasMediaSources.GetMediaStreams()' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.IItemByName.GetTaggedItems(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.IItemByName.GetTaggedItems(MediaBrowser.Controller.Entities.InternalItemsQuery)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0002: Member 'MediaBrowser.Controller.Entities.BaseItem? MediaBrowser.Controller.Entities.InternalItemsQuery.SimilarTo.get' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'void MediaBrowser.Controller.Entities.InternalItemsQuery.SimilarTo.set' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'int MediaBrowser.Controller.Entities.InternalItemsQuery.MinSimilarityScore.get' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'void MediaBrowser.Controller.Entities.InternalItemsQuery.MinSimilarityScore.set' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'void MediaBrowser.Controller.Entities.PeopleHelper.AddPerson(System.Collections.Generic.List<MediaBrowser.Controller.Entities.PersonInfo>, MediaBrowser.Controller.Entities.PersonInfo)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Person.GetTaggedItems(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Studio.GetTaggedItems(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Year.GetTaggedItems(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'void MediaBrowser.Controller.Library.ILibraryManager.CreateItems(System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.BaseItem>, MediaBrowser.Controller.Entities.BaseItem?, System.Threading.CancellationToken)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.PersonInfo> MediaBrowser.Controller.Library.ILibraryManager.GetPeople(MediaBrowser.Controller.Entities.BaseItem)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.PersonInfo> MediaBrowser.Controller.Library.ILibraryManager.GetPeople(MediaBrowser.Controller.Entities.InternalPeopleQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.Person> MediaBrowser.Controller.Library.ILibraryManager.GetPeopleItems(MediaBrowser.Controller.Entities.InternalPeopleQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Threading.Tasks.Task MediaBrowser.Controller.Library.ILibraryManager.UpdatePeopleAsync(MediaBrowser.Controller.Entities.BaseItem, System.Collections.Generic.List<MediaBrowser.Controller.Entities.PersonInfo>, System.Threading.CancellationToken)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<System.Guid> MediaBrowser.Controller.Library.ILibraryManager.GetItemIds(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<string> MediaBrowser.Controller.Library.ILibraryManager.GetPeopleNames(MediaBrowser.Controller.Entities.InternalPeopleQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.ILibraryManager.GetItemList(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.ILibraryManager.GetItemList(MediaBrowser.Controller.Entities.InternalItemsQuery, bool)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.ILibraryManager.GetItemList(MediaBrowser.Controller.Entities.InternalItemsQuery, System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem>)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'void MediaBrowser.Controller.Library.ILibraryManager.CreateOrUpdateItems(System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.BaseItem>, MediaBrowser.Controller.Entities.BaseItem?, System.Threading.CancellationToken)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.PersonInfo> MediaBrowser.Controller.Library.ILibraryManager.GetPeople(MediaBrowser.Controller.Entities.BaseItem)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.PersonInfo> MediaBrowser.Controller.Library.ILibraryManager.GetPeople(MediaBrowser.Controller.Entities.InternalPeopleQuery)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.Person> MediaBrowser.Controller.Library.ILibraryManager.GetPeopleItems(MediaBrowser.Controller.Entities.InternalPeopleQuery)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Threading.Tasks.Task MediaBrowser.Controller.Library.ILibraryManager.UpdatePeopleAsync(MediaBrowser.Controller.Entities.BaseItem, System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.PersonInfo>, System.Threading.CancellationToken)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<System.Guid> MediaBrowser.Controller.Library.ILibraryManager.GetItemIds(MediaBrowser.Controller.Entities.InternalItemsQuery)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<string> MediaBrowser.Controller.Library.ILibraryManager.GetPeopleNames(MediaBrowser.Controller.Entities.InternalPeopleQuery)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.ILibraryManager.GetItemList(MediaBrowser.Controller.Entities.InternalItemsQuery)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.ILibraryManager.GetItemList(MediaBrowser.Controller.Entities.InternalItemsQuery, bool)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.ILibraryManager.GetItemList(MediaBrowser.Controller.Entities.InternalItemsQuery, System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem>)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Entities.MediaStream> MediaBrowser.Controller.Library.IMediaSourceManager.GetMediaStreams(System.Guid)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Entities.MediaStream> MediaBrowser.Controller.Library.IMediaSourceManager.GetMediaStreams(MediaBrowser.Controller.Persistence.MediaStreamQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Entities.MediaAttachment> MediaBrowser.Controller.Library.IMediaSourceManager.GetMediaAttachments(System.Guid)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Entities.MediaAttachment> MediaBrowser.Controller.Library.IMediaSourceManager.GetMediaAttachments(MediaBrowser.Controller.Persistence.MediaAttachmentQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Threading.Tasks.Task<System.Collections.Generic.List<MediaBrowser.Model.Dto.MediaSourceInfo>> MediaBrowser.Controller.Library.IMediaSourceManager.GetPlaybackMediaSources(MediaBrowser.Controller.Entities.BaseItem, Jellyfin.Data.Entities.User, bool, bool, System.Threading.CancellationToken)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Dto.MediaSourceInfo> MediaBrowser.Controller.Library.IMediaSourceManager.GetStaticMediaSources(MediaBrowser.Controller.Entities.BaseItem, bool, Jellyfin.Data.Entities.User)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Threading.Tasks.Task<System.Collections.Generic.List<MediaBrowser.Model.Dto.MediaSourceInfo>> MediaBrowser.Controller.Library.IMediaSourceManager.GetRecordingStreamMediaSources(MediaBrowser.Controller.LiveTv.ActiveRecordingInfo, System.Threading.CancellationToken)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Entities.MediaStream> MediaBrowser.Controller.Library.IMediaSourceManager.GetMediaStreams(System.Guid)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Entities.MediaStream> MediaBrowser.Controller.Library.IMediaSourceManager.GetMediaStreams(MediaBrowser.Controller.Persistence.MediaStreamQuery)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Entities.MediaAttachment> MediaBrowser.Controller.Library.IMediaSourceManager.GetMediaAttachments(System.Guid)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Entities.MediaAttachment> MediaBrowser.Controller.Library.IMediaSourceManager.GetMediaAttachments(MediaBrowser.Controller.Persistence.MediaAttachmentQuery)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Threading.Tasks.Task<System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Dto.MediaSourceInfo>> MediaBrowser.Controller.Library.IMediaSourceManager.GetPlaybackMediaSources(MediaBrowser.Controller.Entities.BaseItem, Jellyfin.Data.Entities.User, bool, bool, System.Threading.CancellationToken)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Dto.MediaSourceInfo> MediaBrowser.Controller.Library.IMediaSourceManager.GetStaticMediaSources(MediaBrowser.Controller.Entities.BaseItem, bool, Jellyfin.Data.Entities.User)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Threading.Tasks.Task<System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Dto.MediaSourceInfo>> MediaBrowser.Controller.Library.IMediaSourceManager.GetRecordingStreamMediaSources(MediaBrowser.Controller.LiveTv.ActiveRecordingInfo, System.Threading.CancellationToken)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.IMusicManager.GetInstantMixFromItem(MediaBrowser.Controller.Entities.BaseItem, Jellyfin.Data.Entities.User?, MediaBrowser.Controller.Dto.DtoOptions)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.IMusicManager.GetInstantMixFromArtist(MediaBrowser.Controller.Entities.Audio.MusicArtist, Jellyfin.Data.Entities.User?, MediaBrowser.Controller.Dto.DtoOptions)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.IMusicManager.GetInstantMixFromGenres(System.Collections.Generic.IEnumerable<string>, Jellyfin.Data.Entities.User?, MediaBrowser.Controller.Dto.DtoOptions)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.IMusicManager.GetInstantMixFromItem(MediaBrowser.Controller.Entities.BaseItem, Jellyfin.Data.Entities.User?, MediaBrowser.Controller.Dto.DtoOptions)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.IMusicManager.GetInstantMixFromArtist(MediaBrowser.Controller.Entities.Audio.MusicArtist, Jellyfin.Data.Entities.User?, MediaBrowser.Controller.Dto.DtoOptions)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Library.IMusicManager.GetInstantMixFromGenres(System.Collections.Generic.IEnumerable<string>, Jellyfin.Data.Entities.User?, MediaBrowser.Controller.Dto.DtoOptions)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Entities.ChapterInfo> MediaBrowser.Controller.Persistence.IItemRepository.GetChapters(MediaBrowser.Controller.Entities.BaseItem)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'MediaBrowser.Model.Entities.ChapterInfo MediaBrowser.Controller.Persistence.IItemRepository.GetChapter(MediaBrowser.Controller.Entities.BaseItem, int)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'void MediaBrowser.Controller.Persistence.IItemRepository.SaveChapters(System.Guid, System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Entities.ChapterInfo>)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Entities.MediaStream> MediaBrowser.Controller.Persistence.IItemRepository.GetMediaStreams(MediaBrowser.Controller.Persistence.MediaStreamQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'void MediaBrowser.Controller.Persistence.IItemRepository.SaveMediaStreams(System.Guid, System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Entities.MediaStream>, System.Threading.CancellationToken)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Model.Entities.MediaAttachment> MediaBrowser.Controller.Persistence.IItemRepository.GetMediaAttachments(MediaBrowser.Controller.Persistence.MediaAttachmentQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'void MediaBrowser.Controller.Persistence.IItemRepository.SaveMediaAttachments(System.Guid, System.Collections.Generic.IReadOnlyList<MediaBrowser.Model.Entities.MediaAttachment>, System.Threading.CancellationToken)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<System.Guid> MediaBrowser.Controller.Persistence.IItemRepository.GetItemIdsList(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.PersonInfo> MediaBrowser.Controller.Persistence.IItemRepository.GetPeople(MediaBrowser.Controller.Entities.InternalPeopleQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'void MediaBrowser.Controller.Persistence.IItemRepository.UpdatePeople(System.Guid, System.Collections.Generic.List<MediaBrowser.Controller.Entities.PersonInfo>)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<string> MediaBrowser.Controller.Persistence.IItemRepository.GetPeopleNames(MediaBrowser.Controller.Entities.InternalPeopleQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Persistence.IItemRepository.GetItemList(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<string> MediaBrowser.Controller.Persistence.IItemRepository.GetMusicGenreNames()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<string> MediaBrowser.Controller.Persistence.IItemRepository.GetStudioNames()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<string> MediaBrowser.Controller.Persistence.IItemRepository.GetGenreNames()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<string> MediaBrowser.Controller.Persistence.IItemRepository.GetAllArtistNames()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<System.Guid> MediaBrowser.Controller.Persistence.IItemRepository.GetItemIdsList(MediaBrowser.Controller.Entities.InternalItemsQuery)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Persistence.IItemRepository.GetItemList(MediaBrowser.Controller.Entities.InternalItemsQuery)' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<string> MediaBrowser.Controller.Persistence.IItemRepository.GetMusicGenreNames()' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<string> MediaBrowser.Controller.Persistence.IItemRepository.GetStudioNames()' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<string> MediaBrowser.Controller.Persistence.IItemRepository.GetGenreNames()' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0006: Cannot add interface member 'System.Collections.Generic.IReadOnlyList<string> MediaBrowser.Controller.Persistence.IItemRepository.GetAllArtistNames()' to ./abi-head/MediaBrowser.Controller.dll because it does not exist on ./abi-base/MediaBrowser.Controller.dll
CP0001: Type 'MediaBrowser.Controller.Persistence.IUserDataRepository' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IEnumerable<System.Tuple<MediaBrowser.Controller.Entities.LinkedChild, MediaBrowser.Controller.Entities.BaseItem>> MediaBrowser.Controller.Playlists.Playlist.GetManageableItems()' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.PersonInfo> MediaBrowser.Controller.Providers.MetadataResult<T>.People.get' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Audio.MusicArtist.GetTaggedItems(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.IList<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.Audio.MusicGenre.GetTaggedItems(MediaBrowser.Controller.Entities.InternalItemsQuery)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
CP0002: Member 'System.Collections.Generic.List<MediaBrowser.Controller.Entities.BaseItem> MediaBrowser.Controller.Entities.TV.Series.GetSeasons(Jellyfin.Data.Entities.User, MediaBrowser.Controller.Dto.DtoOptions)' exists on ./abi-base/MediaBrowser.Controller.dll but not on ./abi-head/MediaBrowser.Controller.dll
API breaking changes found. If those are intentional, the APICompat suppression file can be updated by specifying the '--generate-suppression-file' parameter.

MediaBrowser.Model.dll
API compatibility errors between './abi-base/MediaBrowser.Model.dll' (left) and './abi-head/MediaBrowser.Model.dll' (right):
CP0002: Member 'bool MediaBrowser.Model.Entities.MediaStream.IsHearingImpaired.get' exists on ./abi-base/MediaBrowser.Model.dll but not on ./abi-head/MediaBrowser.Model.dll
API breaking changes found. If those are intentional, the APICompat suppression file can be updated by specifying the '--generate-suppression-file' parameter.

@jellyfin-bot jellyfin-bot removed the merge conflict Merge conflicts should be resolved before a merge label Nov 17, 2024
@jellyfin-bot jellyfin-bot added the merge conflict Merge conflicts should be resolved before a merge label Nov 19, 2024
@jellyfin-bot
Copy link
Contributor

This pull request has merge conflicts. Please resolve the conflicts so the PR can be successfully reviewed and merged.

@jellyfin-bot jellyfin-bot removed the merge conflict Merge conflicts should be resolved before a merge label Nov 19, 2024
MediaBrowser.Controller/Persistence/IItemTypeLookup.cs Outdated Show resolved Hide resolved
Comment on lines +271 to +274
if (path is null)
{
return null;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should probably throw if it is null instead

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Path can be null for some items, this ensures its not throwing on that case.

Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
Copy link
Member

@joshuaboniface joshuaboniface left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From a purely functional perspective, this gets my LGTM. I've tested it with an import of my existing large library several times and it seems to cover all the bases and nothing major looks broken at this point. I have not reviewed the code itself however; I leave that to @jellyfin/server.

In terms of outstanding bugs, #13047 contains the one major one I've observed so far, but that can be fixed in a subsequent PR as it does not (I believe) affect the actual data migrations, as can any optimizations.

Copy link
Member

@Bond-009 Bond-009 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First half of a review

Jellyfin.Data/Entities/BaseItemEntity.cs Outdated Show resolved Hide resolved
.editorconfig Show resolved Hide resolved
Jellyfin.Api/Controllers/PlaystateController.cs Outdated Show resolved Hide resolved
Jellyfin.Data/Entities/People.cs Outdated Show resolved Hide resolved
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs Outdated Show resolved Hide resolved
@nodadyoushutup

This comment was marked as off-topic.

@jellyfin-bot jellyfin-bot added the merge conflict Merge conflicts should be resolved before a merge label Dec 14, 2024
@jellyfin-bot
Copy link
Contributor

This pull request has merge conflicts. Please resolve the conflicts so the PR can be successfully reviewed and merged.

@jellyfin-bot jellyfin-bot removed the merge conflict Merge conflicts should be resolved before a merge label Dec 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:database Issues relating to the server databases and/or database access backend Related to the server backend breaking change: plugin api Includes a breaking change for the plugin API breaking change: web api Includes a breaking change for the HTTP web API feature Adding a new feature, or substantial improvements on existing functionality release-highlight A major new feature for the next release
Projects
None yet
Development

Successfully merging this pull request may close these issues.