aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Database
diff options
context:
space:
mode:
authorJPVenson <github@jpb.software>2025-02-20 09:55:02 +0000
committerJPVenson <github@jpb.software>2025-02-20 09:55:02 +0000
commit44dfe554a894561d3878c8f204d989e4d5a72d72 (patch)
tree50e68688e42e62933b0f956ec780984792a74857 /Jellyfin.Database
parentf07e1f4aaee9b61b07d1389107973ead146c639b (diff)
Moved Database projects under /src
removed old pgsql references
Diffstat (limited to 'Jellyfin.Database')
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/DbConfiguration/DatabaseConfigurationOptions.cs19
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/DbConfiguration/PostgreSqlOptions.cs39
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AccessSchedule.cs62
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ActivityLog.cs123
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AncestorId.cs29
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AttachmentStreamInfo.cs49
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemEntity.cs186
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemExtraType.cs18
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemImageInfo.cs59
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemMetadataField.cs24
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemProvider.cs32
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemTrailerType.cs24
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Chapter.cs44
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/CustomItemDisplayPreferences.cs80
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/DisplayPreferences.cs150
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Group.cs68
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/HomeSection.cs44
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ImageInfo.cs54
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ImageInfoImageType.cs76
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemDisplayPreferences.cs113
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValue.cs37
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValueMap.cs30
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValueType.cs38
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Artwork.cs64
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Book.cs29
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/BookMetadata.cs34
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Chapter.cs80
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Collection.cs57
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CollectionItem.cs64
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Company.cs54
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CompanyMetadata.cs59
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CustomItem.cs29
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CustomItemMetadata.cs17
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Episode.cs34
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/EpisodeMetadata.cs49
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Genre.cs50
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/ItemMetadata.cs141
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Library.cs60
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/LibraryItem.cs55
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MediaFile.cs72
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MediaFileStream.cs50
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MetadataProvider.cs53
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MetadataProviderId.cs63
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Movie.cs29
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MovieMetadata.cs70
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MusicAlbum.cs30
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MusicAlbumMetadata.cs56
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Person.cs89
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/PersonRole.cs80
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Photo.cs29
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/PhotoMetadata.cs17
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Rating.cs59
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/RatingSource.cs73
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Release.cs67
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Season.cs35
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/SeasonMetadata.cs29
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Series.cs46
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/SeriesMetadata.cs70
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Track.cs34
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/TrackMetadata.cs17
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaSegment.cs42
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaStreamInfo.cs103
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaStreamTypeEntity.cs37
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/People.cs32
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/PeopleBaseItemMap.cs44
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Permission.cs68
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Preference.cs68
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ProgramAudioEntity.cs37
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/ApiKey.cs56
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/Device.cs107
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/DeviceOptions.cs35
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/TrickplayInfo.cs75
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/User.cs338
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Entities/UserData.cs92
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ArtKind.cs33
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ChromecastVersion.cs18
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/DynamicDayOfWeek.cs58
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/HomeSectionType.cs58
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/IndexingKind.cs23
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/MediaFileKind.cs33
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/MediaSegmentType.cs39
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PermissionKind.cs128
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PersonRoleType.cs68
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PreferenceKind.cs73
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ScrollDirection.cs18
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SortOrder.cs18
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SubtitlePlaybackMode.cs33
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SyncPlayUserAccessType.cs23
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ViewType.cs113
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/IJellyfinDatabaseProvider.cs43
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasArtwork.cs16
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasCompanies.cs16
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasConcurrencyToken.cs18
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasPermissions.cs17
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasReleases.cs16
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/Jellyfin.Database.Implementations.csproj43
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDatabaseProviderKeyAttribute.cs29
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDbContext.cs275
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ActivityLogConfiguration.cs17
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/AncestorIdConfiguration.cs21
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ApiKeyConfiguration.cs20
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/AttachmentStreamInfoConfiguration.cs17
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemConfiguration.cs57
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemMetadataFieldConfiguration.cs18
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemProviderConfiguration.cs20
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemTrailerTypeConfiguration.cs18
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ChapterConfiguration.cs19
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/CustomItemDisplayPreferencesConfiguration.cs20
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DeviceConfiguration.cs28
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DeviceOptionsConfiguration.cs20
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DisplayPreferencesConfiguration.cs25
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ItemValuesConfiguration.cs19
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ItemValuesMapConfiguration.cs20
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/MediaStreamInfoConfiguration.cs22
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PeopleBaseItemMapConfiguration.cs22
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PeopleConfiguration.cs20
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PermissionConfiguration.cs24
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PreferenceConfiguration.cs21
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/TrickplayInfoConfiguration.cs18
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserConfiguration.cs55
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserDataConfiguration.cs23
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Jellyfin.Database.Providers.SqLite.csproj55
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/.gitattributes1
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200514181226_AddActivityLog.Designer.cs72
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200514181226_AddActivityLog.cs46
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200613202153_AddUsers.Designer.cs312
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200613202153_AddUsers.cs197
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200728005145_AddDisplayPreferences.Designer.cs459
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200728005145_AddDisplayPreferences.cs132
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200905220533_FixDisplayPreferencesIndex.Designer.cs461
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200905220533_FixDisplayPreferencesIndex.cs51
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201004171403_AddMaxActiveSessions.Designer.cs464
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201004171403_AddMaxActiveSessions.cs28
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201204223655_AddCustomDisplayPreferences.Designer.cs522
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201204223655_AddCustomDisplayPreferences.cs108
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210320181425_AddIndexesAndCollations.Designer.cs535
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210320181425_AddIndexesAndCollations.cs240
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210407110544_NullableCustomPrefValue.Designer.cs520
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210407110544_NullableCustomPrefValue.cs35
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210814002109_AddDevices.Designer.cs653
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210814002109_AddDevices.cs128
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20221022080052_AddIndexActivityLogsDateCreated.Designer.cs657
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20221022080052_AddIndexActivityLogsDateCreated.cs28
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230526173516_RemoveEasyPassword.Designer.cs650
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230526173516_RemoveEasyPassword.cs164
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230626233818_AddTrickplayInfos.Designer.cs681
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230626233818_AddTrickplayInfos.cs40
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230923170422_UserCastReceiver.Designer.cs654
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230923170422_UserCastReceiver.cs29
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240729140605_AddMediaSegments.Designer.cs708
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240729140605_AddMediaSegments.cs38
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.Designer.cs712
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.cs36
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241020103111_LibraryDbMigration.Designer.cs1607
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241020103111_LibraryDbMigration.cs639
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111131257_AddedCustomDataKey.Designer.cs1610
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111131257_AddedCustomDataKey.cs28
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111135439_AddedCustomDataKeyKey.Designer.cs1610
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111135439_AddedCustomDataKeyKey.cs54
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112152323_FixAncestorIdConfig.Designer.cs1603
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112152323_FixAncestorIdConfig.cs49
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112232041_fixMediaStreams.Designer.cs1600
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112232041_fixMediaStreams.cs702
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112234144_FixMediaStreams2.Designer.cs1594
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112234144_FixMediaStreams2.cs144
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241113133548_EnforceUniqueItemValue.Designer.cs1595
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241113133548_EnforceUniqueItemValue.cs37
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250202021306_FixedCollation.Designer.cs1594
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250202021306_FixedCollation.cs40
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250204092455_MakeStartEndDateNullable.Designer.cs1595
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250204092455_MakeStartEndDateNullable.cs55
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250214031148_ChannelIdGuid.Designer.cs1595
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250214031148_ChannelIdGuid.cs22
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/JellyfinDbModelSnapshot.cs1591
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/SqliteDesignTimeJellyfinDbFactory.cs25
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/ModelBuilderExtensions.cs48
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Properties/AssemblyInfo.cs23
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/SqliteDatabaseProvider.cs78
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.SqLite/ValueConverters/DateTimeKindValueConverter.cs21
-rw-r--r--Jellyfin.Database/readme.md26
180 files changed, 0 insertions, 35230 deletions
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/DbConfiguration/DatabaseConfigurationOptions.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/DbConfiguration/DatabaseConfigurationOptions.cs
deleted file mode 100644
index d49d8536a3..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/DbConfiguration/DatabaseConfigurationOptions.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-
-namespace Jellyfin.Server.Implementations.DatabaseConfiguration;
-
-/// <summary>
-/// Options to configure jellyfins managed database.
-/// </summary>
-public class DatabaseConfigurationOptions
-{
- /// <summary>
- /// Gets or Sets the type of database jellyfin should use.
- /// </summary>
- public required string DatabaseType { get; set; }
-
- /// <summary>
- /// Gets or Sets the settings to run jellyfin with Postgres.
- /// </summary>
- public PostgreSqlOptions? PostgreSql { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/DbConfiguration/PostgreSqlOptions.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/DbConfiguration/PostgreSqlOptions.cs
deleted file mode 100644
index 1f7c30b098..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/DbConfiguration/PostgreSqlOptions.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-
-namespace Jellyfin.Server.Implementations.DatabaseConfiguration;
-
-/// <summary>
-/// Options specific to run jellyfin on a postgreSql database.
-/// </summary>
-public class PostgreSqlOptions
-{
- /// <summary>
- /// Gets or Sets the Port. Defaults to 5432.
- /// </summary>
- public required int Port { get; set; } = 5432;
-
- /// <summary>
- /// Gets or Sets the Server name.
- /// </summary>
- public required string ServerName { get; set; }
-
- /// <summary>
- /// Gets or Sets the username.
- /// </summary>
- public required string Username { get; set; }
-
- /// <summary>
- /// Gets or Sets the password.
- /// </summary>
- public required string Password { get; set; }
-
- /// <summary>
- /// Gets or Sets the database name. Defaults to "Jellyfin".
- /// </summary>
- public string DatabaseName { get; set; } = "Jellyfin";
-
- /// <summary>
- /// Gets or Sets the timeout in secounds before a running command is terminated. Defaults to 30.
- /// </summary>
- public int Timeout { get; set; } = 30;
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AccessSchedule.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AccessSchedule.cs
deleted file mode 100644
index f534e49f3f..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AccessSchedule.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Xml.Serialization;
-using Jellyfin.Data.Enums;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity representing a user's access schedule.
- /// </summary>
- public class AccessSchedule
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="AccessSchedule"/> class.
- /// </summary>
- /// <param name="dayOfWeek">The day of the week.</param>
- /// <param name="startHour">The start hour.</param>
- /// <param name="endHour">The end hour.</param>
- /// <param name="userId">The associated user's id.</param>
- public AccessSchedule(DynamicDayOfWeek dayOfWeek, double startHour, double endHour, Guid userId)
- {
- UserId = userId;
- DayOfWeek = dayOfWeek;
- StartHour = startHour;
- EndHour = endHour;
- }
-
- /// <summary>
- /// Gets the id of this instance.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [XmlIgnore]
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets the id of the associated user.
- /// </summary>
- [XmlIgnore]
- public Guid UserId { get; private set; }
-
- /// <summary>
- /// Gets or sets the day of week.
- /// </summary>
- /// <value>The day of week.</value>
- public DynamicDayOfWeek DayOfWeek { get; set; }
-
- /// <summary>
- /// Gets or sets the start hour.
- /// </summary>
- /// <value>The start hour.</value>
- public double StartHour { get; set; }
-
- /// <summary>
- /// Gets or sets the end hour.
- /// </summary>
- /// <value>The end hour.</value>
- public double EndHour { get; set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ActivityLog.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ActivityLog.cs
deleted file mode 100644
index 51dd0ffb8e..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ActivityLog.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-using Microsoft.Extensions.Logging;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity referencing an activity log entry.
- /// </summary>
- public class ActivityLog : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ActivityLog"/> class.
- /// Public constructor with required data.
- /// </summary>
- /// <param name="name">The name.</param>
- /// <param name="type">The type.</param>
- /// <param name="userId">The user id.</param>
- public ActivityLog(string name, string type, Guid userId)
- {
- ArgumentException.ThrowIfNullOrEmpty(name);
- ArgumentException.ThrowIfNullOrEmpty(type);
-
- Name = name;
- Type = type;
- UserId = userId;
- DateCreated = DateTime.UtcNow;
- LogSeverity = LogLevel.Information;
- }
-
- /// <summary>
- /// Gets the identity of this instance.
- /// </summary>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 512.
- /// </remarks>
- [MaxLength(512)]
- [StringLength(512)]
- public string Name { get; set; }
-
- /// <summary>
- /// Gets or sets the overview.
- /// </summary>
- /// <remarks>
- /// Max length = 512.
- /// </remarks>
- [MaxLength(512)]
- [StringLength(512)]
- public string? Overview { get; set; }
-
- /// <summary>
- /// Gets or sets the short overview.
- /// </summary>
- /// <remarks>
- /// Max length = 512.
- /// </remarks>
- [MaxLength(512)]
- [StringLength(512)]
- public string? ShortOverview { get; set; }
-
- /// <summary>
- /// Gets or sets the type.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 256.
- /// </remarks>
- [MaxLength(256)]
- [StringLength(256)]
- public string Type { get; set; }
-
- /// <summary>
- /// Gets or sets the user id.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public Guid UserId { get; set; }
-
- /// <summary>
- /// Gets or sets the item id.
- /// </summary>
- /// <remarks>
- /// Max length = 256.
- /// </remarks>
- [MaxLength(256)]
- [StringLength(256)]
- public string? ItemId { get; set; }
-
- /// <summary>
- /// Gets or sets the date created. This should be in UTC.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public DateTime DateCreated { get; set; }
-
- /// <summary>
- /// Gets or sets the log severity. Default is <see cref="LogLevel.Trace"/>.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public LogLevel LogSeverity { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AncestorId.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AncestorId.cs
deleted file mode 100644
index 954416dfe1..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AncestorId.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Represents the relational information for an <see cref="BaseItemEntity"/>.
-/// </summary>
-public class AncestorId
-{
- /// <summary>
- /// Gets or Sets the AncestorId.
- /// </summary>
- public required Guid ParentItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets the related BaseItem.
- /// </summary>
- public required Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets the ParentItem.
- /// </summary>
- public required BaseItemEntity ParentItem { get; set; }
-
- /// <summary>
- /// Gets or Sets the Child item.
- /// </summary>
- public required BaseItemEntity Item { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AttachmentStreamInfo.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AttachmentStreamInfo.cs
deleted file mode 100644
index 19265a0115..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/AttachmentStreamInfo.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Provides information about an Attachment to an <see cref="BaseItemEntity"/>.
-/// </summary>
-public class AttachmentStreamInfo
-{
- /// <summary>
- /// Gets or Sets the <see cref="BaseItemEntity"/> reference.
- /// </summary>
- public required Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets the <see cref="BaseItemEntity"/> reference.
- /// </summary>
- public required BaseItemEntity Item { get; set; }
-
- /// <summary>
- /// Gets or Sets the index within the source file.
- /// </summary>
- public required int Index { get; set; }
-
- /// <summary>
- /// Gets or Sets the codec of the attachment.
- /// </summary>
- public required string Codec { get; set; }
-
- /// <summary>
- /// Gets or Sets the codec tag of the attachment.
- /// </summary>
- public string? CodecTag { get; set; }
-
- /// <summary>
- /// Gets or Sets the comment of the attachment.
- /// </summary>
- public string? Comment { get; set; }
-
- /// <summary>
- /// Gets or Sets the filename of the attachment.
- /// </summary>
- public string? Filename { get; set; }
-
- /// <summary>
- /// Gets or Sets the attachments mimetype.
- /// </summary>
- public string? MimeType { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemEntity.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemEntity.cs
deleted file mode 100644
index e3e0e0861e..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemEntity.cs
+++ /dev/null
@@ -1,186 +0,0 @@
-#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
-#pragma warning disable CA2227 // Collection properties should be read only
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities;
-
-public class BaseItemEntity
-{
- public required Guid Id { get; set; }
-
- public required string Type { get; set; }
-
- public string? Data { get; set; }
-
- public string? Path { get; set; }
-
- public DateTime? StartDate { get; set; }
-
- public DateTime? EndDate { get; set; }
-
- public Guid? ChannelId { get; set; }
-
- public bool IsMovie { get; set; }
-
- public float? CommunityRating { get; set; }
-
- public string? CustomRating { get; set; }
-
- public int? IndexNumber { get; set; }
-
- public bool IsLocked { get; set; }
-
- public string? Name { get; set; }
-
- public string? OfficialRating { get; set; }
-
- public string? MediaType { get; set; }
-
- public string? Overview { get; set; }
-
- public int? ParentIndexNumber { get; set; }
-
- public DateTime? PremiereDate { get; set; }
-
- public int? ProductionYear { get; set; }
-
- public string? Genres { get; set; }
-
- public string? SortName { get; set; }
-
- public string? ForcedSortName { get; set; }
-
- public long? RunTimeTicks { get; set; }
-
- public DateTime? DateCreated { get; set; }
-
- public DateTime? DateModified { get; set; }
-
- public bool IsSeries { get; set; }
-
- public string? EpisodeTitle { get; set; }
-
- public bool IsRepeat { get; set; }
-
- public string? PreferredMetadataLanguage { get; set; }
-
- public string? PreferredMetadataCountryCode { get; set; }
-
- public DateTime? DateLastRefreshed { get; set; }
-
- public DateTime? DateLastSaved { get; set; }
-
- public bool IsInMixedFolder { get; set; }
-
- public string? Studios { get; set; }
-
- public string? ExternalServiceId { get; set; }
-
- public string? Tags { get; set; }
-
- public bool IsFolder { get; set; }
-
- public int? InheritedParentalRatingValue { get; set; }
-
- public string? UnratedType { get; set; }
-
- public float? CriticRating { get; set; }
-
- public string? CleanName { get; set; }
-
- public string? PresentationUniqueKey { get; set; }
-
- public string? OriginalTitle { get; set; }
-
- public string? PrimaryVersionId { get; set; }
-
- public DateTime? DateLastMediaAdded { get; set; }
-
- public string? Album { get; set; }
-
- public float? LUFS { get; set; }
-
- public float? NormalizationGain { get; set; }
-
- public bool IsVirtualItem { get; set; }
-
- public string? SeriesName { get; set; }
-
- public string? SeasonName { get; set; }
-
- public string? ExternalSeriesId { get; set; }
-
- public string? Tagline { get; set; }
-
- public string? ProductionLocations { get; set; }
-
- public string? ExtraIds { get; set; }
-
- public int? TotalBitrate { get; set; }
-
- public BaseItemExtraType? ExtraType { get; set; }
-
- public string? Artists { get; set; }
-
- public string? AlbumArtists { get; set; }
-
- public string? ExternalId { get; set; }
-
- public string? SeriesPresentationUniqueKey { get; set; }
-
- public string? ShowId { get; set; }
-
- public string? OwnerId { get; set; }
-
- public int? Width { get; set; }
-
- public int? Height { get; set; }
-
- public long? Size { get; set; }
-
- public ProgramAudioEntity? Audio { get; set; }
-
- public Guid? ParentId { get; set; }
-
- public Guid? TopParentId { get; set; }
-
- public Guid? SeasonId { get; set; }
-
- public Guid? SeriesId { get; set; }
-
- public ICollection<PeopleBaseItemMap>? Peoples { get; set; }
-
- public ICollection<UserData>? UserData { get; set; }
-
- public ICollection<ItemValueMap>? ItemValues { get; set; }
-
- public ICollection<MediaStreamInfo>? MediaStreams { get; set; }
-
- public ICollection<Chapter>? Chapters { get; set; }
-
- public ICollection<BaseItemProvider>? Provider { get; set; }
-
- public ICollection<AncestorId>? ParentAncestors { get; set; }
-
- public ICollection<AncestorId>? Children { get; set; }
-
- public ICollection<BaseItemMetadataField>? LockedFields { get; set; }
-
- public ICollection<BaseItemTrailerType>? TrailerTypes { get; set; }
-
- public ICollection<BaseItemImageInfo>? Images { get; set; }
-
- // those are references to __LOCAL__ ids not DB ids ... TODO: Bring the whole folder structure into the DB
- // public ICollection<BaseItemEntity>? SeriesEpisodes { get; set; }
- // public BaseItemEntity? Series { get; set; }
- // public BaseItemEntity? Season { get; set; }
- // public BaseItemEntity? Parent { get; set; }
- // public ICollection<BaseItemEntity>? DirectChildren { get; set; }
- // public BaseItemEntity? TopParent { get; set; }
- // public ICollection<BaseItemEntity>? AllChildren { get; set; }
- // public ICollection<BaseItemEntity>? SeasonEpisodes { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemExtraType.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemExtraType.cs
deleted file mode 100644
index 54aef50e40..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemExtraType.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-#pragma warning disable CS1591
-namespace Jellyfin.Data.Entities;
-
-public enum BaseItemExtraType
-{
- Unknown = 0,
- Clip = 1,
- Trailer = 2,
- BehindTheScenes = 3,
- DeletedScene = 4,
- Interview = 5,
- Scene = 6,
- Sample = 7,
- ThemeSong = 8,
- ThemeVideo = 9,
- Featurette = 10,
- Short = 11
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemImageInfo.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemImageInfo.cs
deleted file mode 100644
index 37723df116..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemImageInfo.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-#pragma warning disable CA2227
-
-using System;
-using System.Collections.Generic;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Enum TrailerTypes.
-/// </summary>
-public class BaseItemImageInfo
-{
- /// <summary>
- /// Gets or Sets.
- /// </summary>
- public required Guid Id { get; set; }
-
- /// <summary>
- /// Gets or Sets the path to the original image.
- /// </summary>
- public required string Path { get; set; }
-
- /// <summary>
- /// Gets or Sets the time the image was last modified.
- /// </summary>
- public DateTime DateModified { get; set; }
-
- /// <summary>
- /// Gets or Sets the imagetype.
- /// </summary>
- public ImageInfoImageType ImageType { get; set; }
-
- /// <summary>
- /// Gets or Sets the width of the original image.
- /// </summary>
- public int Width { get; set; }
-
- /// <summary>
- /// Gets or Sets the height of the original image.
- /// </summary>
- public int Height { get; set; }
-
-#pragma warning disable CA1819 // Properties should not return arrays
- /// <summary>
- /// Gets or Sets the blurhash.
- /// </summary>
- public byte[]? Blurhash { get; set; }
-#pragma warning restore CA1819
-
- /// <summary>
- /// Gets or Sets the reference id to the BaseItem.
- /// </summary>
- public required Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets the referenced Item.
- /// </summary>
- public required BaseItemEntity Item { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemMetadataField.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemMetadataField.cs
deleted file mode 100644
index 27bbfc4731..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemMetadataField.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Enum MetadataFields.
-/// </summary>
-public class BaseItemMetadataField
-{
- /// <summary>
- /// Gets or Sets Numerical ID of this enumerable.
- /// </summary>
- public required int Id { get; set; }
-
- /// <summary>
- /// Gets or Sets all referenced <see cref="BaseItemEntity"/>.
- /// </summary>
- public required Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets all referenced <see cref="BaseItemEntity"/>.
- /// </summary>
- public required BaseItemEntity Item { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemProvider.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemProvider.cs
deleted file mode 100644
index 9a1565728d..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemProvider.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Represents a Key-Value relation of an BaseItem's provider.
-/// </summary>
-public class BaseItemProvider
-{
- /// <summary>
- /// Gets or Sets the reference ItemId.
- /// </summary>
- public Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets the reference BaseItem.
- /// </summary>
- public required BaseItemEntity Item { get; set; }
-
- /// <summary>
- /// Gets or Sets the ProvidersId.
- /// </summary>
- public required string ProviderId { get; set; }
-
- /// <summary>
- /// Gets or Sets the Providers Value.
- /// </summary>
- public required string ProviderValue { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemTrailerType.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemTrailerType.cs
deleted file mode 100644
index 2bb648138a..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/BaseItemTrailerType.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Enum TrailerTypes.
-/// </summary>
-public class BaseItemTrailerType
-{
- /// <summary>
- /// Gets or Sets Numerical ID of this enumerable.
- /// </summary>
- public required int Id { get; set; }
-
- /// <summary>
- /// Gets or Sets all referenced <see cref="BaseItemEntity"/>.
- /// </summary>
- public required Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets all referenced <see cref="BaseItemEntity"/>.
- /// </summary>
- public required BaseItemEntity Item { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Chapter.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Chapter.cs
deleted file mode 100644
index 579442cdb6..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Chapter.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// The Chapter entity.
-/// </summary>
-public class Chapter
-{
- /// <summary>
- /// Gets or Sets the <see cref="BaseItemEntity"/> reference id.
- /// </summary>
- public required Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets the <see cref="BaseItemEntity"/> reference.
- /// </summary>
- public required BaseItemEntity Item { get; set; }
-
- /// <summary>
- /// Gets or Sets the chapters index in Item.
- /// </summary>
- public required int ChapterIndex { get; set; }
-
- /// <summary>
- /// Gets or Sets the position within the source file.
- /// </summary>
- public required long StartPositionTicks { get; set; }
-
- /// <summary>
- /// Gets or Sets the common name.
- /// </summary>
- public string? Name { get; set; }
-
- /// <summary>
- /// Gets or Sets the image path.
- /// </summary>
- public string? ImagePath { get; set; }
-
- /// <summary>
- /// Gets or Sets the time the image was last modified.
- /// </summary>
- public DateTime? ImageDateModified { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/CustomItemDisplayPreferences.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/CustomItemDisplayPreferences.cs
deleted file mode 100644
index a606595122..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/CustomItemDisplayPreferences.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity that represents a user's custom display preferences for a specific item.
- /// </summary>
- public class CustomItemDisplayPreferences
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="CustomItemDisplayPreferences"/> class.
- /// </summary>
- /// <param name="userId">The user id.</param>
- /// <param name="itemId">The item id.</param>
- /// <param name="client">The client.</param>
- /// <param name="key">The preference key.</param>
- /// <param name="value">The preference value.</param>
- public CustomItemDisplayPreferences(Guid userId, Guid itemId, string client, string key, string? value)
- {
- UserId = userId;
- ItemId = itemId;
- Client = client;
- Key = key;
- Value = value;
- }
-
- /// <summary>
- /// Gets the Id.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the user Id.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public Guid UserId { get; set; }
-
- /// <summary>
- /// Gets or sets the id of the associated item.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or sets the client string.
- /// </summary>
- /// <remarks>
- /// Required. Max Length = 32.
- /// </remarks>
- [MaxLength(32)]
- [StringLength(32)]
- public string Client { get; set; }
-
- /// <summary>
- /// Gets or sets the preference key.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public string Key { get; set; }
-
- /// <summary>
- /// Gets or sets the preference value.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public string? Value { get; set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/DisplayPreferences.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/DisplayPreferences.cs
deleted file mode 100644
index f0be657691..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/DisplayPreferences.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Enums;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity representing a user's display preferences.
- /// </summary>
- public class DisplayPreferences
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="DisplayPreferences"/> class.
- /// </summary>
- /// <param name="userId">The user's id.</param>
- /// <param name="itemId">The item id.</param>
- /// <param name="client">The client string.</param>
- public DisplayPreferences(Guid userId, Guid itemId, string client)
- {
- UserId = userId;
- ItemId = itemId;
- Client = client;
- ShowSidebar = false;
- ShowBackdrop = true;
- SkipForwardLength = 30000;
- SkipBackwardLength = 10000;
- ScrollDirection = ScrollDirection.Horizontal;
- ChromecastVersion = ChromecastVersion.Stable;
-
- HomeSections = new HashSet<HomeSection>();
- }
-
- /// <summary>
- /// Gets the Id.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the user Id.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public Guid UserId { get; set; }
-
- /// <summary>
- /// Gets or sets the id of the associated item.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or sets the client string.
- /// </summary>
- /// <remarks>
- /// Required. Max Length = 32.
- /// </remarks>
- [MaxLength(32)]
- [StringLength(32)]
- public string Client { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether to show the sidebar.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool ShowSidebar { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether to show the backdrop.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool ShowBackdrop { get; set; }
-
- /// <summary>
- /// Gets or sets the scroll direction.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public ScrollDirection ScrollDirection { get; set; }
-
- /// <summary>
- /// Gets or sets what the view should be indexed by.
- /// </summary>
- public IndexingKind? IndexBy { get; set; }
-
- /// <summary>
- /// Gets or sets the length of time to skip forwards, in milliseconds.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int SkipForwardLength { get; set; }
-
- /// <summary>
- /// Gets or sets the length of time to skip backwards, in milliseconds.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int SkipBackwardLength { get; set; }
-
- /// <summary>
- /// Gets or sets the Chromecast Version.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public ChromecastVersion ChromecastVersion { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the next video info overlay should be shown.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool EnableNextVideoInfoOverlay { get; set; }
-
- /// <summary>
- /// Gets or sets the dashboard theme.
- /// </summary>
- [MaxLength(32)]
- [StringLength(32)]
- public string? DashboardTheme { get; set; }
-
- /// <summary>
- /// Gets or sets the tv home screen.
- /// </summary>
- [MaxLength(32)]
- [StringLength(32)]
- public string? TvHome { get; set; }
-
- /// <summary>
- /// Gets the home sections.
- /// </summary>
- public virtual ICollection<HomeSection> HomeSections { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Group.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Group.cs
deleted file mode 100644
index 09f2372893..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Group.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using Jellyfin.Data.Enums;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity representing a group.
- /// </summary>
- public class Group : IHasPermissions, IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Group"/> class.
- /// </summary>
- /// <param name="name">The name of the group.</param>
- public Group(string name)
- {
- ArgumentException.ThrowIfNullOrEmpty(name);
-
- Name = name;
- Id = Guid.NewGuid();
-
- Permissions = new HashSet<Permission>();
- Preferences = new HashSet<Preference>();
- }
-
- /// <summary>
- /// Gets the id of this group.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- public Guid Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the group's name.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string Name { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the group's permissions.
- /// </summary>
- public virtual ICollection<Permission> Permissions { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the group's preferences.
- /// </summary>
- public virtual ICollection<Preference> Preferences { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/HomeSection.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/HomeSection.cs
deleted file mode 100644
index 8dd6e647e2..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/HomeSection.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Enums;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity representing a section on the user's home page.
- /// </summary>
- public class HomeSection
- {
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity. Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the Id of the associated display preferences.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int DisplayPreferencesId { get; set; }
-
- /// <summary>
- /// Gets or sets the order.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int Order { get; set; }
-
- /// <summary>
- /// Gets or sets the type.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public HomeSectionType Type { get; set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ImageInfo.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ImageInfo.cs
deleted file mode 100644
index 935a53a263..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ImageInfo.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity representing an image.
- /// </summary>
- public class ImageInfo
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ImageInfo"/> class.
- /// </summary>
- /// <param name="path">The path.</param>
- public ImageInfo(string path)
- {
- Path = path;
- LastModified = DateTime.UtcNow;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets the user id.
- /// </summary>
- public Guid? UserId { get; private set; }
-
- /// <summary>
- /// Gets or sets the path of the image.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- [MaxLength(512)]
- [StringLength(512)]
- public string Path { get; set; }
-
- /// <summary>
- /// Gets or sets the date last modified.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public DateTime LastModified { get; set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ImageInfoImageType.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ImageInfoImageType.cs
deleted file mode 100644
index f78178dd22..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ImageInfoImageType.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Enum ImageType.
-/// </summary>
-public enum ImageInfoImageType
-{
- /// <summary>
- /// The primary.
- /// </summary>
- Primary = 0,
-
- /// <summary>
- /// The art.
- /// </summary>
- Art = 1,
-
- /// <summary>
- /// The backdrop.
- /// </summary>
- Backdrop = 2,
-
- /// <summary>
- /// The banner.
- /// </summary>
- Banner = 3,
-
- /// <summary>
- /// The logo.
- /// </summary>
- Logo = 4,
-
- /// <summary>
- /// The thumb.
- /// </summary>
- Thumb = 5,
-
- /// <summary>
- /// The disc.
- /// </summary>
- Disc = 6,
-
- /// <summary>
- /// The box.
- /// </summary>
- Box = 7,
-
- /// <summary>
- /// The screenshot.
- /// </summary>
- /// <remarks>
- /// This enum value is obsolete.
- /// XmlSerializer does not serialize/deserialize objects that are marked as [Obsolete].
- /// </remarks>
- Screenshot = 8,
-
- /// <summary>
- /// The menu.
- /// </summary>
- Menu = 9,
-
- /// <summary>
- /// The chapter image.
- /// </summary>
- Chapter = 10,
-
- /// <summary>
- /// The box rear.
- /// </summary>
- BoxRear = 11,
-
- /// <summary>
- /// The user profile image.
- /// </summary>
- Profile = 12
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemDisplayPreferences.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemDisplayPreferences.cs
deleted file mode 100644
index 93e6664ea4..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemDisplayPreferences.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Enums;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity that represents a user's display preferences for a specific item.
- /// </summary>
- public class ItemDisplayPreferences
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ItemDisplayPreferences"/> class.
- /// </summary>
- /// <param name="userId">The user id.</param>
- /// <param name="itemId">The item id.</param>
- /// <param name="client">The client.</param>
- public ItemDisplayPreferences(Guid userId, Guid itemId, string client)
- {
- UserId = userId;
- ItemId = itemId;
- Client = client;
-
- SortBy = "SortName";
- SortOrder = SortOrder.Ascending;
- RememberSorting = false;
- RememberIndexing = false;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the user Id.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public Guid UserId { get; set; }
-
- /// <summary>
- /// Gets or sets the id of the associated item.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or sets the client string.
- /// </summary>
- /// <remarks>
- /// Required. Max Length = 32.
- /// </remarks>
- [MaxLength(32)]
- [StringLength(32)]
- public string Client { get; set; }
-
- /// <summary>
- /// Gets or sets the view type.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public ViewType ViewType { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the indexing should be remembered.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool RememberIndexing { get; set; }
-
- /// <summary>
- /// Gets or sets what the view should be indexed by.
- /// </summary>
- public IndexingKind? IndexBy { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the sorting type should be remembered.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool RememberSorting { get; set; }
-
- /// <summary>
- /// Gets or sets what the view should be sorted by.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- [MaxLength(64)]
- [StringLength(64)]
- public string SortBy { get; set; }
-
- /// <summary>
- /// Gets or sets the sort order.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public SortOrder SortOrder { get; set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValue.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValue.cs
deleted file mode 100644
index 11d8e383ee..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValue.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Represents an ItemValue for a BaseItem.
-/// </summary>
-public class ItemValue
-{
- /// <summary>
- /// Gets or Sets the ItemValueId.
- /// </summary>
- public required Guid ItemValueId { get; set; }
-
- /// <summary>
- /// Gets or Sets the Type.
- /// </summary>
- public required ItemValueType Type { get; set; }
-
- /// <summary>
- /// Gets or Sets the Value.
- /// </summary>
- public required string Value { get; set; }
-
- /// <summary>
- /// Gets or Sets the sanitized Value.
- /// </summary>
- public required string CleanValue { get; set; }
-
- /// <summary>
- /// Gets or Sets all associated BaseItems.
- /// </summary>
-#pragma warning disable CA2227 // Collection properties should be read only
- public ICollection<ItemValueMap>? BaseItemsMap { get; set; }
-#pragma warning restore CA2227 // Collection properties should be read only
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValueMap.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValueMap.cs
deleted file mode 100644
index 94db6a011b..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValueMap.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Mapping table for the ItemValue BaseItem relation.
-/// </summary>
-public class ItemValueMap
-{
- /// <summary>
- /// Gets or Sets the ItemId.
- /// </summary>
- public required Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets the ItemValueId.
- /// </summary>
- public required Guid ItemValueId { get; set; }
-
- /// <summary>
- /// Gets or Sets the referenced <see cref="BaseItemEntity"/>.
- /// </summary>
- public required BaseItemEntity Item { get; set; }
-
- /// <summary>
- /// Gets or Sets the referenced <see cref="ItemValue"/>.
- /// </summary>
- public required ItemValue ItemValue { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValueType.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValueType.cs
deleted file mode 100644
index 3bae3beccd..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ItemValueType.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-#pragma warning disable CA1027 // Mark enums with FlagsAttribute
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Provides the Value types for an <see cref="ItemValue"/>.
-/// </summary>
-public enum ItemValueType
-{
- /// <summary>
- /// Artists.
- /// </summary>
- Artist = 0,
-
- /// <summary>
- /// Album.
- /// </summary>
- AlbumArtist = 1,
-
- /// <summary>
- /// Genre.
- /// </summary>
- Genre = 2,
-
- /// <summary>
- /// Studios.
- /// </summary>
- Studios = 3,
-
- /// <summary>
- /// Tags.
- /// </summary>
- Tags = 4,
-
- /// <summary>
- /// InheritedTags.
- /// </summary>
- InheritedTags = 6,
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Artwork.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Artwork.cs
deleted file mode 100644
index fc3c1036f0..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Artwork.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Enums;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing artwork.
- /// </summary>
- public class Artwork : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Artwork"/> class.
- /// </summary>
- /// <param name="path">The path.</param>
- /// <param name="kind">The kind of art.</param>
- public Artwork(string path, ArtKind kind)
- {
- ArgumentException.ThrowIfNullOrEmpty(path);
-
- Path = path;
- Kind = kind;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the path.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 65535.
- /// </remarks>
- [MaxLength(65535)]
- [StringLength(65535)]
- public string Path { get; set; }
-
- /// <summary>
- /// Gets or sets the kind of artwork.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public ArtKind Kind { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Book.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Book.cs
deleted file mode 100644
index a838686d05..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Book.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a book.
- /// </summary>
- public class Book : LibraryItem, IHasReleases
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Book"/> class.
- /// </summary>
- /// <param name="library">The library.</param>
- public Book(Library library) : base(library)
- {
- BookMetadata = new HashSet<BookMetadata>();
- Releases = new HashSet<Release>();
- }
-
- /// <summary>
- /// Gets a collection containing the metadata for this book.
- /// </summary>
- public virtual ICollection<BookMetadata> BookMetadata { get; private set; }
-
- /// <inheritdoc />
- public virtual ICollection<Release> Releases { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/BookMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/BookMetadata.cs
deleted file mode 100644
index 4a350d200e..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/BookMetadata.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity containing metadata for a book.
- /// </summary>
- public class BookMetadata : ItemMetadata, IHasCompanies
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="BookMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the object.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- public BookMetadata(string title, string language) : base(title, language)
- {
- Publishers = new HashSet<Company>();
- }
-
- /// <summary>
- /// Gets or sets the ISBN.
- /// </summary>
- public long? Isbn { get; set; }
-
- /// <summary>
- /// Gets a collection of the publishers for this book.
- /// </summary>
- public virtual ICollection<Company> Publishers { get; private set; }
-
- /// <inheritdoc />
- public ICollection<Company> Companies => Publishers;
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Chapter.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Chapter.cs
deleted file mode 100644
index f068338f92..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Chapter.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a chapter.
- /// </summary>
- public class Chapter : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Chapter"/> class.
- /// </summary>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- /// <param name="startTime">The start time for this chapter.</param>
- public Chapter(string language, long startTime)
- {
- ArgumentException.ThrowIfNullOrEmpty(language);
-
- Language = language;
- StartTime = startTime;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Name { get; set; }
-
- /// <summary>
- /// Gets or sets the language.
- /// </summary>
- /// <remarks>
- /// Required, Min length = 3, Max length = 3
- /// ISO-639-3 3-character language codes.
- /// </remarks>
- [MinLength(3)]
- [MaxLength(3)]
- [StringLength(3)]
- public string Language { get; set; }
-
- /// <summary>
- /// Gets or sets the start time.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public long StartTime { get; set; }
-
- /// <summary>
- /// Gets or sets the end time.
- /// </summary>
- public long? EndTime { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Collection.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Collection.cs
deleted file mode 100644
index 7de6019692..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Collection.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-#pragma warning disable CA1711 // Identifiers should not have incorrect suffix
-
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a collection.
- /// </summary>
- public class Collection : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Collection"/> class.
- /// </summary>
- public Collection()
- {
- Items = new HashSet<CollectionItem>();
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Name { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets a collection containing this collection's items.
- /// </summary>
- public virtual ICollection<CollectionItem> Items { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CollectionItem.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CollectionItem.cs
deleted file mode 100644
index 15b356a74e..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CollectionItem.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a collection item.
- /// </summary>
- public class CollectionItem : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="CollectionItem"/> class.
- /// </summary>
- /// <param name="libraryItem">The library item.</param>
- public CollectionItem(LibraryItem libraryItem)
- {
- LibraryItem = libraryItem;
- }
-
- /// <summary>
- /// Gets or sets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets or sets the library item.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public virtual LibraryItem LibraryItem { get; set; }
-
- /// <summary>
- /// Gets or sets the next item in the collection.
- /// </summary>
- /// <remarks>
- /// TODO check if this properly updated Dependent and has the proper principal relationship.
- /// </remarks>
- public virtual CollectionItem? Next { get; set; }
-
- /// <summary>
- /// Gets or sets the previous item in the collection.
- /// </summary>
- /// <remarks>
- /// TODO check if this properly updated Dependent and has the proper principal relationship.
- /// </remarks>
- public virtual CollectionItem? Previous { get; set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Company.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Company.cs
deleted file mode 100644
index 1abbee4458..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Company.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a company.
- /// </summary>
- public class Company : IHasCompanies, IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Company"/> class.
- /// </summary>
- public Company()
- {
- CompanyMetadata = new HashSet<CompanyMetadata>();
- ChildCompanies = new HashSet<Company>();
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the metadata.
- /// </summary>
- public virtual ICollection<CompanyMetadata> CompanyMetadata { get; private set; }
-
- /// <summary>
- /// Gets a collection containing this company's child companies.
- /// </summary>
- public virtual ICollection<Company> ChildCompanies { get; private set; }
-
- /// <inheritdoc />
- public ICollection<Company> Companies => ChildCompanies;
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CompanyMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CompanyMetadata.cs
deleted file mode 100644
index a29f08c7f6..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CompanyMetadata.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity holding metadata for a <see cref="Company"/>.
- /// </summary>
- public class CompanyMetadata : ItemMetadata
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="CompanyMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the object.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- public CompanyMetadata(string title, string language) : base(title, language)
- {
- }
-
- /// <summary>
- /// Gets or sets the description.
- /// </summary>
- /// <remarks>
- /// Max length = 65535.
- /// </remarks>
- [MaxLength(65535)]
- [StringLength(65535)]
- public string? Description { get; set; }
-
- /// <summary>
- /// Gets or sets the headquarters.
- /// </summary>
- /// <remarks>
- /// Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string? Headquarters { get; set; }
-
- /// <summary>
- /// Gets or sets the country code.
- /// </summary>
- /// <remarks>
- /// Max length = 2.
- /// </remarks>
- [MaxLength(2)]
- [StringLength(2)]
- public string? Country { get; set; }
-
- /// <summary>
- /// Gets or sets the homepage.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Homepage { get; set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CustomItem.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CustomItem.cs
deleted file mode 100644
index e27d01d860..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CustomItem.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a custom item.
- /// </summary>
- public class CustomItem : LibraryItem, IHasReleases
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="CustomItem"/> class.
- /// </summary>
- /// <param name="library">The library.</param>
- public CustomItem(Library library) : base(library)
- {
- CustomItemMetadata = new HashSet<CustomItemMetadata>();
- Releases = new HashSet<Release>();
- }
-
- /// <summary>
- /// Gets a collection containing the metadata for this item.
- /// </summary>
- public virtual ICollection<CustomItemMetadata> CustomItemMetadata { get; private set; }
-
- /// <inheritdoc />
- public virtual ICollection<Release> Releases { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CustomItemMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CustomItemMetadata.cs
deleted file mode 100644
index af2393870f..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/CustomItemMetadata.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity containing metadata for a custom item.
- /// </summary>
- public class CustomItemMetadata : ItemMetadata
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="CustomItemMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the object.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- public CustomItemMetadata(string title, string language) : base(title, language)
- {
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Episode.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Episode.cs
deleted file mode 100644
index ce2f0c6178..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Episode.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing an episode.
- /// </summary>
- public class Episode : LibraryItem, IHasReleases
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Episode"/> class.
- /// </summary>
- /// <param name="library">The library.</param>
- public Episode(Library library) : base(library)
- {
- Releases = new HashSet<Release>();
- EpisodeMetadata = new HashSet<EpisodeMetadata>();
- }
-
- /// <summary>
- /// Gets or sets the episode number.
- /// </summary>
- public int? EpisodeNumber { get; set; }
-
- /// <inheritdoc />
- public virtual ICollection<Release> Releases { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the metadata for this episode.
- /// </summary>
- public virtual ICollection<EpisodeMetadata> EpisodeMetadata { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/EpisodeMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/EpisodeMetadata.cs
deleted file mode 100644
index b0ef11e0f2..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/EpisodeMetadata.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity containing metadata for an <see cref="Episode"/>.
- /// </summary>
- public class EpisodeMetadata : ItemMetadata
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="EpisodeMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the object.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- public EpisodeMetadata(string title, string language) : base(title, language)
- {
- }
-
- /// <summary>
- /// Gets or sets the outline.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Outline { get; set; }
-
- /// <summary>
- /// Gets or sets the plot.
- /// </summary>
- /// <remarks>
- /// Max length = 65535.
- /// </remarks>
- [MaxLength(65535)]
- [StringLength(65535)]
- public string? Plot { get; set; }
-
- /// <summary>
- /// Gets or sets the tagline.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Tagline { get; set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Genre.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Genre.cs
deleted file mode 100644
index 3b822ee828..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Genre.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a genre.
- /// </summary>
- public class Genre : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Genre"/> class.
- /// </summary>
- /// <param name="name">The name.</param>
- public Genre(string name)
- {
- Name = name;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <remarks>
- /// Indexed, Required, Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string Name { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/ItemMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/ItemMetadata.cs
deleted file mode 100644
index fa9276c669..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/ItemMetadata.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An abstract class that holds metadata.
- /// </summary>
- public abstract class ItemMetadata : IHasArtwork, IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ItemMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the object.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- protected ItemMetadata(string title, string language)
- {
- ArgumentException.ThrowIfNullOrEmpty(title);
- ArgumentException.ThrowIfNullOrEmpty(language);
-
- Title = title;
- Language = language;
- DateAdded = DateTime.UtcNow;
- DateModified = DateAdded;
-
- PersonRoles = new HashSet<PersonRole>();
- Genres = new HashSet<Genre>();
- Artwork = new HashSet<Artwork>();
- Ratings = new HashSet<Rating>();
- Sources = new HashSet<MetadataProviderId>();
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the title.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string Title { get; set; }
-
- /// <summary>
- /// Gets or sets the original title.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? OriginalTitle { get; set; }
-
- /// <summary>
- /// Gets or sets the sort title.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? SortTitle { get; set; }
-
- /// <summary>
- /// Gets or sets the language.
- /// </summary>
- /// <remarks>
- /// Required, Min length = 3, Max length = 3.
- /// ISO-639-3 3-character language codes.
- /// </remarks>
- [MinLength(3)]
- [MaxLength(3)]
- [StringLength(3)]
- public string Language { get; set; }
-
- /// <summary>
- /// Gets or sets the release date.
- /// </summary>
- public DateTimeOffset? ReleaseDate { get; set; }
-
- /// <summary>
- /// Gets the date added.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public DateTime DateAdded { get; private set; }
-
- /// <summary>
- /// Gets or sets the date modified.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public DateTime DateModified { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the person roles for this item.
- /// </summary>
- public virtual ICollection<PersonRole> PersonRoles { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the genres for this item.
- /// </summary>
- public virtual ICollection<Genre> Genres { get; private set; }
-
- /// <inheritdoc />
- public virtual ICollection<Artwork> Artwork { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the ratings for this item.
- /// </summary>
- public virtual ICollection<Rating> Ratings { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the metadata sources for this item.
- /// </summary>
- public virtual ICollection<MetadataProviderId> Sources { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Library.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Library.cs
deleted file mode 100644
index 0db42a1c7b..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Library.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a library.
- /// </summary>
- public class Library : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Library"/> class.
- /// </summary>
- /// <param name="name">The name of the library.</param>
- /// <param name="path">The path of the library.</param>
- public Library(string name, string path)
- {
- Name = name;
- Path = path;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 128.
- /// </remarks>
- [MaxLength(128)]
- [StringLength(128)]
- public string Name { get; set; }
-
- /// <summary>
- /// Gets or sets the root path of the library.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public string Path { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/LibraryItem.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/LibraryItem.cs
deleted file mode 100644
index d889b871ed..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/LibraryItem.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a library item.
- /// </summary>
- public abstract class LibraryItem : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="LibraryItem"/> class.
- /// </summary>
- /// <param name="library">The library of this item.</param>
- protected LibraryItem(Library library)
- {
- DateAdded = DateTime.UtcNow;
- Library = library;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets the date this library item was added.
- /// </summary>
- public DateTime DateAdded { get; private set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets or sets the library of this item.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public virtual Library Library { get; set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MediaFile.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MediaFile.cs
deleted file mode 100644
index 7b5a3af64c..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MediaFile.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Enums;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a file on disk.
- /// </summary>
- public class MediaFile : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="MediaFile"/> class.
- /// </summary>
- /// <param name="path">The path relative to the LibraryRoot.</param>
- /// <param name="kind">The file kind.</param>
- public MediaFile(string path, MediaFileKind kind)
- {
- ArgumentException.ThrowIfNullOrEmpty(path);
-
- Path = path;
- Kind = kind;
-
- MediaFileStreams = new HashSet<MediaFileStream>();
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the path relative to the library root.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 65535.
- /// </remarks>
- [MaxLength(65535)]
- [StringLength(65535)]
- public string Path { get; set; }
-
- /// <summary>
- /// Gets or sets the kind of media file.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public MediaFileKind Kind { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the streams in this file.
- /// </summary>
- public virtual ICollection<MediaFileStream> MediaFileStreams { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MediaFileStream.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MediaFileStream.cs
deleted file mode 100644
index e24e73ecb7..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MediaFileStream.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-#pragma warning disable CA1711 // Identifiers should not have incorrect suffix
-
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a stream in a media file.
- /// </summary>
- public class MediaFileStream : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="MediaFileStream"/> class.
- /// </summary>
- /// <param name="streamNumber">The number of this stream.</param>
- public MediaFileStream(int streamNumber)
- {
- StreamNumber = streamNumber;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the stream number.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int StreamNumber { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MetadataProvider.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MetadataProvider.cs
deleted file mode 100644
index b38d6a4f1f..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MetadataProvider.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a metadata provider.
- /// </summary>
- public class MetadataProvider : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="MetadataProvider"/> class.
- /// </summary>
- /// <param name="name">The name of the metadata provider.</param>
- public MetadataProvider(string name)
- {
- ArgumentException.ThrowIfNullOrEmpty(name);
-
- Name = name;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string Name { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MetadataProviderId.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MetadataProviderId.cs
deleted file mode 100644
index a198f53ba3..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MetadataProviderId.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a unique identifier for a metadata provider.
- /// </summary>
- public class MetadataProviderId : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="MetadataProviderId"/> class.
- /// </summary>
- /// <param name="providerId">The provider id.</param>
- /// <param name="metadataProvider">The metadata provider.</param>
- public MetadataProviderId(string providerId, MetadataProvider metadataProvider)
- {
- ArgumentException.ThrowIfNullOrEmpty(providerId);
-
- ProviderId = providerId;
- MetadataProvider = metadataProvider;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the provider id.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string ProviderId { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets or sets the metadata provider.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public virtual MetadataProvider MetadataProvider { get; set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Movie.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Movie.cs
deleted file mode 100644
index 499fafd0e1..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Movie.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a movie.
- /// </summary>
- public class Movie : LibraryItem, IHasReleases
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Movie"/> class.
- /// </summary>
- /// <param name="library">The library.</param>
- public Movie(Library library) : base(library)
- {
- Releases = new HashSet<Release>();
- MovieMetadata = new HashSet<MovieMetadata>();
- }
-
- /// <inheritdoc />
- public virtual ICollection<Release> Releases { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the metadata for this movie.
- /// </summary>
- public virtual ICollection<MovieMetadata> MovieMetadata { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MovieMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MovieMetadata.cs
deleted file mode 100644
index 44b5f34d7f..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MovieMetadata.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity holding the metadata for a movie.
- /// </summary>
- public class MovieMetadata : ItemMetadata, IHasCompanies
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="MovieMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the movie.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- public MovieMetadata(string title, string language) : base(title, language)
- {
- Studios = new HashSet<Company>();
- }
-
- /// <summary>
- /// Gets or sets the outline.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Outline { get; set; }
-
- /// <summary>
- /// Gets or sets the tagline.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Tagline { get; set; }
-
- /// <summary>
- /// Gets or sets the plot.
- /// </summary>
- /// <remarks>
- /// Max length = 65535.
- /// </remarks>
- [MaxLength(65535)]
- [StringLength(65535)]
- public string? Plot { get; set; }
-
- /// <summary>
- /// Gets or sets the country code.
- /// </summary>
- /// <remarks>
- /// Max length = 2.
- /// </remarks>
- [MaxLength(2)]
- [StringLength(2)]
- public string? Country { get; set; }
-
- /// <summary>
- /// Gets the studios that produced this movie.
- /// </summary>
- public virtual ICollection<Company> Studios { get; private set; }
-
- /// <inheritdoc />
- public ICollection<Company> Companies => Studios;
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MusicAlbum.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MusicAlbum.cs
deleted file mode 100644
index d6231bbf02..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MusicAlbum.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System.Collections.Generic;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a music album.
- /// </summary>
- public class MusicAlbum : LibraryItem
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="MusicAlbum"/> class.
- /// </summary>
- /// <param name="library">The library.</param>
- public MusicAlbum(Library library) : base(library)
- {
- MusicAlbumMetadata = new HashSet<MusicAlbumMetadata>();
- Tracks = new HashSet<Track>();
- }
-
- /// <summary>
- /// Gets a collection containing the album metadata.
- /// </summary>
- public virtual ICollection<MusicAlbumMetadata> MusicAlbumMetadata { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the tracks.
- /// </summary>
- public virtual ICollection<Track> Tracks { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MusicAlbumMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MusicAlbumMetadata.cs
deleted file mode 100644
index 691f3504fa..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/MusicAlbumMetadata.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity holding the metadata for a music album.
- /// </summary>
- public class MusicAlbumMetadata : ItemMetadata
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="MusicAlbumMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the album.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- public MusicAlbumMetadata(string title, string language) : base(title, language)
- {
- Labels = new HashSet<Company>();
- }
-
- /// <summary>
- /// Gets or sets the barcode.
- /// </summary>
- /// <remarks>
- /// Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string? Barcode { get; set; }
-
- /// <summary>
- /// Gets or sets the label number.
- /// </summary>
- /// <remarks>
- /// Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string? LabelNumber { get; set; }
-
- /// <summary>
- /// Gets or sets the country code.
- /// </summary>
- /// <remarks>
- /// Max length = 2.
- /// </remarks>
- [MaxLength(2)]
- [StringLength(2)]
- public string? Country { get; set; }
-
- /// <summary>
- /// Gets a collection containing the labels.
- /// </summary>
- public virtual ICollection<Company> Labels { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Person.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Person.cs
deleted file mode 100644
index 90dc55b70d..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Person.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a person.
- /// </summary>
- public class Person : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Person"/> class.
- /// </summary>
- /// <param name="name">The name of the person.</param>
- public Person(string name)
- {
- ArgumentException.ThrowIfNullOrEmpty(name);
-
- Name = name;
- DateAdded = DateTime.UtcNow;
- DateModified = DateAdded;
-
- Sources = new HashSet<MetadataProviderId>();
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string Name { get; set; }
-
- /// <summary>
- /// Gets or sets the source id.
- /// </summary>
- /// <remarks>
- /// Max length = 255.
- /// </remarks>
- [MaxLength(256)]
- [StringLength(256)]
- public string? SourceId { get; set; }
-
- /// <summary>
- /// Gets the date added.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public DateTime DateAdded { get; private set; }
-
- /// <summary>
- /// Gets or sets the date modified.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public DateTime DateModified { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets a list of metadata sources for this person.
- /// </summary>
- public virtual ICollection<MetadataProviderId> Sources { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/PersonRole.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/PersonRole.cs
deleted file mode 100644
index 7d40bdf448..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/PersonRole.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Enums;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a person's role in media.
- /// </summary>
- public class PersonRole : IHasArtwork, IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="PersonRole"/> class.
- /// </summary>
- /// <param name="type">The role type.</param>
- /// <param name="person">The person.</param>
- public PersonRole(PersonRoleType type, Person person)
- {
- Type = type;
- Person = person;
- Artwork = new HashSet<Artwork>();
- Sources = new HashSet<MetadataProviderId>();
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the name of the person's role.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Role { get; set; }
-
- /// <summary>
- /// Gets or sets the person's role type.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public PersonRoleType Type { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets or sets the person.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public virtual Person Person { get; set; }
-
- /// <inheritdoc />
- public virtual ICollection<Artwork> Artwork { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the metadata sources for this person role.
- /// </summary>
- public virtual ICollection<MetadataProviderId> Sources { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Photo.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Photo.cs
deleted file mode 100644
index 4b459432bc..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Photo.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a photo.
- /// </summary>
- public class Photo : LibraryItem, IHasReleases
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Photo"/> class.
- /// </summary>
- /// <param name="library">The library.</param>
- public Photo(Library library) : base(library)
- {
- PhotoMetadata = new HashSet<PhotoMetadata>();
- Releases = new HashSet<Release>();
- }
-
- /// <summary>
- /// Gets a collection containing the photo metadata.
- /// </summary>
- public virtual ICollection<PhotoMetadata> PhotoMetadata { get; private set; }
-
- /// <inheritdoc />
- public virtual ICollection<Release> Releases { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/PhotoMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/PhotoMetadata.cs
deleted file mode 100644
index 6c284307d7..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/PhotoMetadata.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity that holds metadata for a photo.
- /// </summary>
- public class PhotoMetadata : ItemMetadata
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="PhotoMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the photo.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- public PhotoMetadata(string title, string language) : base(title, language)
- {
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Rating.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Rating.cs
deleted file mode 100644
index 58c8fa49ef..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Rating.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a rating for an entity.
- /// </summary>
- public class Rating : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Rating"/> class.
- /// </summary>
- /// <param name="value">The value.</param>
- public Rating(double value)
- {
- Value = value;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the value.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public double Value { get; set; }
-
- /// <summary>
- /// Gets or sets the number of votes.
- /// </summary>
- public int? Votes { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets or sets the rating type.
- /// If this is <c>null</c> it's the internal user rating.
- /// </summary>
- public virtual RatingSource? RatingType { get; set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/RatingSource.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/RatingSource.cs
deleted file mode 100644
index 0f3a073244..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/RatingSource.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// This is the entity to store review ratings, not age ratings.
- /// </summary>
- public class RatingSource : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="RatingSource"/> class.
- /// </summary>
- /// <param name="minimumValue">The minimum value.</param>
- /// <param name="maximumValue">The maximum value.</param>
- public RatingSource(double minimumValue, double maximumValue)
- {
- MinimumValue = minimumValue;
- MaximumValue = maximumValue;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Name { get; set; }
-
- /// <summary>
- /// Gets or sets the minimum value.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public double MinimumValue { get; set; }
-
- /// <summary>
- /// Gets or sets the maximum value.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public double MaximumValue { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets or sets the metadata source.
- /// </summary>
- public virtual MetadataProviderId? Source { get; set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Release.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Release.cs
deleted file mode 100644
index e68ab9105a..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Release.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a release for a library item, eg. Director's cut vs. standard.
- /// </summary>
- public class Release : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Release"/> class.
- /// </summary>
- /// <param name="name">The name of this release.</param>
- public Release(string name)
- {
- ArgumentException.ThrowIfNullOrEmpty(name);
-
- Name = name;
-
- MediaFiles = new HashSet<MediaFile>();
- Chapters = new HashSet<Chapter>();
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string Name { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the media files for this release.
- /// </summary>
- public virtual ICollection<MediaFile> MediaFiles { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the chapters for this release.
- /// </summary>
- public virtual ICollection<Chapter> Chapters { get; private set; }
-
- /// <inheritdoc />
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Season.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Season.cs
deleted file mode 100644
index fc110b49da..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Season.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Collections.Generic;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a season.
- /// </summary>
- public class Season : LibraryItem
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Season"/> class.
- /// </summary>
- /// <param name="library">The library.</param>
- public Season(Library library) : base(library)
- {
- Episodes = new HashSet<Episode>();
- SeasonMetadata = new HashSet<SeasonMetadata>();
- }
-
- /// <summary>
- /// Gets or sets the season number.
- /// </summary>
- public int? SeasonNumber { get; set; }
-
- /// <summary>
- /// Gets the season metadata.
- /// </summary>
- public virtual ICollection<SeasonMetadata> SeasonMetadata { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the number of episodes.
- /// </summary>
- public virtual ICollection<Episode> Episodes { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/SeasonMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/SeasonMetadata.cs
deleted file mode 100644
index da40a075f5..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/SeasonMetadata.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity that holds metadata for seasons.
- /// </summary>
- public class SeasonMetadata : ItemMetadata
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="SeasonMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the object.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- public SeasonMetadata(string title, string language) : base(title, language)
- {
- }
-
- /// <summary>
- /// Gets or sets the outline.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Outline { get; set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Series.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Series.cs
deleted file mode 100644
index ab484c96d6..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Series.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a series.
- /// </summary>
- public class Series : LibraryItem
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Series"/> class.
- /// </summary>
- /// <param name="library">The library.</param>
- public Series(Library library) : base(library)
- {
- Seasons = new HashSet<Season>();
- SeriesMetadata = new HashSet<SeriesMetadata>();
- }
-
- /// <summary>
- /// Gets or sets the days of week.
- /// </summary>
- public DayOfWeek? AirsDayOfWeek { get; set; }
-
- /// <summary>
- /// Gets or sets the time the show airs, ignore the date portion.
- /// </summary>
- public DateTimeOffset? AirsTime { get; set; }
-
- /// <summary>
- /// Gets or sets the date the series first aired.
- /// </summary>
- public DateTime? FirstAired { get; set; }
-
- /// <summary>
- /// Gets a collection containing the series metadata.
- /// </summary>
- public virtual ICollection<SeriesMetadata> SeriesMetadata { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the seasons.
- /// </summary>
- public virtual ICollection<Season> Seasons { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/SeriesMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/SeriesMetadata.cs
deleted file mode 100644
index 42115802c5..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/SeriesMetadata.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing series metadata.
- /// </summary>
- public class SeriesMetadata : ItemMetadata, IHasCompanies
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="SeriesMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the object.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- public SeriesMetadata(string title, string language) : base(title, language)
- {
- Networks = new HashSet<Company>();
- }
-
- /// <summary>
- /// Gets or sets the outline.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Outline { get; set; }
-
- /// <summary>
- /// Gets or sets the plot.
- /// </summary>
- /// <remarks>
- /// Max length = 65535.
- /// </remarks>
- [MaxLength(65535)]
- [StringLength(65535)]
- public string? Plot { get; set; }
-
- /// <summary>
- /// Gets or sets the tagline.
- /// </summary>
- /// <remarks>
- /// Max length = 1024.
- /// </remarks>
- [MaxLength(1024)]
- [StringLength(1024)]
- public string? Tagline { get; set; }
-
- /// <summary>
- /// Gets or sets the country code.
- /// </summary>
- /// <remarks>
- /// Max length = 2.
- /// </remarks>
- [MaxLength(2)]
- [StringLength(2)]
- public string? Country { get; set; }
-
- /// <summary>
- /// Gets a collection containing the networks.
- /// </summary>
- public virtual ICollection<Company> Networks { get; private set; }
-
- /// <inheritdoc />
- public ICollection<Company> Companies => Networks;
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Track.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Track.cs
deleted file mode 100644
index d354000337..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/Track.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity representing a track.
- /// </summary>
- public class Track : LibraryItem, IHasReleases
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Track"/> class.
- /// </summary>
- /// <param name="library">The library.</param>
- public Track(Library library) : base(library)
- {
- Releases = new HashSet<Release>();
- TrackMetadata = new HashSet<TrackMetadata>();
- }
-
- /// <summary>
- /// Gets or sets the track number.
- /// </summary>
- public int? TrackNumber { get; set; }
-
- /// <inheritdoc />
- public virtual ICollection<Release> Releases { get; private set; }
-
- /// <summary>
- /// Gets a collection containing the track metadata.
- /// </summary>
- public virtual ICollection<TrackMetadata> TrackMetadata { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/TrackMetadata.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/TrackMetadata.cs
deleted file mode 100644
index 042d2b90db..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Libraries/TrackMetadata.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace Jellyfin.Data.Entities.Libraries
-{
- /// <summary>
- /// An entity holding metadata for a track.
- /// </summary>
- public class TrackMetadata : ItemMetadata
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="TrackMetadata"/> class.
- /// </summary>
- /// <param name="title">The title or name of the object.</param>
- /// <param name="language">ISO-639-3 3-character language codes.</param>
- public TrackMetadata(string title, string language) : base(title, language)
- {
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaSegment.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaSegment.cs
deleted file mode 100644
index 90120d7721..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaSegment.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Enums;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// An entity representing the metadata for a group of trickplay tiles.
-/// </summary>
-public class MediaSegment
-{
- /// <summary>
- /// Gets or sets the id of the media segment.
- /// </summary>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public Guid Id { get; set; }
-
- /// <summary>
- /// Gets or sets the id of the associated item.
- /// </summary>
- public Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or sets the Type of content this segment defines.
- /// </summary>
- public MediaSegmentType Type { get; set; }
-
- /// <summary>
- /// Gets or sets the end of the segment.
- /// </summary>
- public long EndTicks { get; set; }
-
- /// <summary>
- /// Gets or sets the start of the segment.
- /// </summary>
- public long StartTicks { get; set; }
-
- /// <summary>
- /// Gets or sets Id of the media segment provider this entry originates from.
- /// </summary>
- public required string SegmentProviderId { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaStreamInfo.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaStreamInfo.cs
deleted file mode 100644
index 77816565af..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaStreamInfo.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
-
-using System;
-using System.Diagnostics.CodeAnalysis;
-
-namespace Jellyfin.Data.Entities;
-
-public class MediaStreamInfo
-{
- public required Guid ItemId { get; set; }
-
- public required BaseItemEntity Item { get; set; }
-
- public int StreamIndex { get; set; }
-
- public required MediaStreamTypeEntity StreamType { get; set; }
-
- public string? Codec { get; set; }
-
- public string? Language { get; set; }
-
- public string? ChannelLayout { get; set; }
-
- public string? Profile { get; set; }
-
- public string? AspectRatio { get; set; }
-
- public string? Path { get; set; }
-
- public bool? IsInterlaced { get; set; }
-
- public int? BitRate { get; set; }
-
- public int? Channels { get; set; }
-
- public int? SampleRate { get; set; }
-
- public bool IsDefault { get; set; }
-
- public bool IsForced { get; set; }
-
- public bool IsExternal { get; set; }
-
- public int? Height { get; set; }
-
- public int? Width { get; set; }
-
- public float? AverageFrameRate { get; set; }
-
- public float? RealFrameRate { get; set; }
-
- public float? Level { get; set; }
-
- public string? PixelFormat { get; set; }
-
- public int? BitDepth { get; set; }
-
- public bool? IsAnamorphic { get; set; }
-
- public int? RefFrames { get; set; }
-
- public string? CodecTag { get; set; }
-
- public string? Comment { get; set; }
-
- public string? NalLengthSize { get; set; }
-
- public bool? IsAvc { get; set; }
-
- public string? Title { get; set; }
-
- public string? TimeBase { get; set; }
-
- public string? CodecTimeBase { get; set; }
-
- public string? ColorPrimaries { get; set; }
-
- public string? ColorSpace { get; set; }
-
- public string? ColorTransfer { get; set; }
-
- public int? DvVersionMajor { get; set; }
-
- public int? DvVersionMinor { get; set; }
-
- public int? DvProfile { get; set; }
-
- public int? DvLevel { get; set; }
-
- public int? RpuPresentFlag { get; set; }
-
- public int? ElPresentFlag { get; set; }
-
- public int? BlPresentFlag { get; set; }
-
- public int? DvBlSignalCompatibilityId { get; set; }
-
- public bool? IsHearingImpaired { get; set; }
-
- public int? Rotation { get; set; }
-
- public string? KeyFrames { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaStreamTypeEntity.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaStreamTypeEntity.cs
deleted file mode 100644
index f57672a2cf..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/MediaStreamTypeEntity.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Enum MediaStreamType.
-/// </summary>
-public enum MediaStreamTypeEntity
-{
- /// <summary>
- /// The audio.
- /// </summary>
- Audio = 0,
-
- /// <summary>
- /// The video.
- /// </summary>
- Video = 1,
-
- /// <summary>
- /// The subtitle.
- /// </summary>
- Subtitle = 2,
-
- /// <summary>
- /// The embedded image.
- /// </summary>
- EmbeddedImage = 3,
-
- /// <summary>
- /// The data.
- /// </summary>
- Data = 4,
-
- /// <summary>
- /// The lyric.
- /// </summary>
- Lyric = 5
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/People.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/People.cs
deleted file mode 100644
index 18c778b17a..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/People.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-#pragma warning disable CA2227 // Collection properties should be read only
-
-using System;
-using System.Collections.Generic;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// People entity.
-/// </summary>
-public class People
-{
- /// <summary>
- /// Gets or Sets the PeopleId.
- /// </summary>
- public required Guid Id { get; set; }
-
- /// <summary>
- /// Gets or Sets the Persons Name.
- /// </summary>
- public required string Name { get; set; }
-
- /// <summary>
- /// Gets or Sets the Type.
- /// </summary>
- public string? PersonType { get; set; }
-
- /// <summary>
- /// Gets or Sets the mapping of People to BaseItems.
- /// </summary>
- public ICollection<PeopleBaseItemMap>? BaseItems { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/PeopleBaseItemMap.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/PeopleBaseItemMap.cs
deleted file mode 100644
index bfaaf82151..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/PeopleBaseItemMap.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Mapping table for People to BaseItems.
-/// </summary>
-public class PeopleBaseItemMap
-{
- /// <summary>
- /// Gets or Sets the SortOrder.
- /// </summary>
- public int? SortOrder { get; set; }
-
- /// <summary>
- /// Gets or Sets the ListOrder.
- /// </summary>
- public int? ListOrder { get; set; }
-
- /// <summary>
- /// Gets or Sets the Role name the associated actor played in the <see cref="BaseItemEntity"/>.
- /// </summary>
- public string? Role { get; set; }
-
- /// <summary>
- /// Gets or Sets The ItemId.
- /// </summary>
- public required Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets Reference Item.
- /// </summary>
- public required BaseItemEntity Item { get; set; }
-
- /// <summary>
- /// Gets or Sets The PeopleId.
- /// </summary>
- public required Guid PeopleId { get; set; }
-
- /// <summary>
- /// Gets or Sets Reference People.
- /// </summary>
- public required People People { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Permission.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Permission.cs
deleted file mode 100644
index 6d2e68077c..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Permission.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-#pragma warning disable CA1711 // Identifiers should not have incorrect suffix
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Enums;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity representing whether the associated user has a specific permission.
- /// </summary>
- public class Permission : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Permission"/> class.
- /// Public constructor with required data.
- /// </summary>
- /// <param name="kind">The permission kind.</param>
- /// <param name="value">The value of this permission.</param>
- public Permission(PermissionKind kind, bool value)
- {
- Kind = kind;
- Value = value;
- }
-
- /// <summary>
- /// Gets the id of this permission.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the id of the associated user.
- /// </summary>
- public Guid? UserId { get; set; }
-
- /// <summary>
- /// Gets the type of this permission.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public PermissionKind Kind { get; private set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the associated user has this permission.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool Value { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <inheritdoc/>
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Preference.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Preference.cs
deleted file mode 100644
index a6ab275d31..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Preference.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Jellyfin.Data.Enums;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity representing a preference attached to a user or group.
- /// </summary>
- public class Preference : IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Preference"/> class.
- /// Public constructor with required data.
- /// </summary>
- /// <param name="kind">The preference kind.</param>
- /// <param name="value">The value.</param>
- public Preference(PreferenceKind kind, string value)
- {
- Kind = kind;
- Value = value ?? throw new ArgumentNullException(nameof(value));
- }
-
- /// <summary>
- /// Gets the id of this preference.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the id of the associated user.
- /// </summary>
- public Guid? UserId { get; set; }
-
- /// <summary>
- /// Gets the type of this preference.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public PreferenceKind Kind { get; private set; }
-
- /// <summary>
- /// Gets or sets the value of this preference.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 65535.
- /// </remarks>
- [MaxLength(65535)]
- [StringLength(65535)]
- public string Value { get; set; }
-
- /// <inheritdoc/>
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <inheritdoc/>
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ProgramAudioEntity.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ProgramAudioEntity.cs
deleted file mode 100644
index 9d79e5ddb1..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/ProgramAudioEntity.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Lists types of Audio.
-/// </summary>
-public enum ProgramAudioEntity
-{
- /// <summary>
- /// Mono.
- /// </summary>
- Mono = 0,
-
- /// <summary>
- /// Stereo.
- /// </summary>
- Stereo = 1,
-
- /// <summary>
- /// Dolby.
- /// </summary>
- Dolby = 2,
-
- /// <summary>
- /// DolbyDigital.
- /// </summary>
- DolbyDigital = 3,
-
- /// <summary>
- /// Thx.
- /// </summary>
- Thx = 4,
-
- /// <summary>
- /// Atmos.
- /// </summary>
- Atmos = 5
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/ApiKey.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/ApiKey.cs
deleted file mode 100644
index 1fcbe0f5e9..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/ApiKey.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Globalization;
-
-namespace Jellyfin.Data.Entities.Security
-{
- /// <summary>
- /// An entity representing an API key.
- /// </summary>
- public class ApiKey
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ApiKey"/> class.
- /// </summary>
- /// <param name="name">The name.</param>
- public ApiKey(string name)
- {
- Name = name;
-
- AccessToken = Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture);
- DateCreated = DateTime.UtcNow;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets or sets the date created.
- /// </summary>
- public DateTime DateCreated { get; set; }
-
- /// <summary>
- /// Gets or sets the date of last activity.
- /// </summary>
- public DateTime DateLastActivity { get; set; }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- [MaxLength(64)]
- [StringLength(64)]
- public string Name { get; set; }
-
- /// <summary>
- /// Gets or sets the access token.
- /// </summary>
- public string AccessToken { get; set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/Device.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/Device.cs
deleted file mode 100644
index 67d7f78eda..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/Device.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Globalization;
-
-namespace Jellyfin.Data.Entities.Security
-{
- /// <summary>
- /// An entity representing a device.
- /// </summary>
- public class Device
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="Device"/> class.
- /// </summary>
- /// <param name="userId">The user id.</param>
- /// <param name="appName">The app name.</param>
- /// <param name="appVersion">The app version.</param>
- /// <param name="deviceName">The device name.</param>
- /// <param name="deviceId">The device id.</param>
- public Device(Guid userId, string appName, string appVersion, string deviceName, string deviceId)
- {
- UserId = userId;
- AppName = appName;
- AppVersion = appVersion;
- DeviceName = deviceName;
- DeviceId = deviceId;
-
- AccessToken = Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture);
- DateCreated = DateTime.UtcNow;
- DateModified = DateCreated;
- DateLastActivity = DateCreated;
-
- // Non-nullable for EF Core, as this is a required relationship.
- User = null!;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets the user id.
- /// </summary>
- public Guid UserId { get; private set; }
-
- /// <summary>
- /// Gets or sets the access token.
- /// </summary>
- public string AccessToken { get; set; }
-
- /// <summary>
- /// Gets or sets the app name.
- /// </summary>
- [MaxLength(64)]
- [StringLength(64)]
- public string AppName { get; set; }
-
- /// <summary>
- /// Gets or sets the app version.
- /// </summary>
- [MaxLength(32)]
- [StringLength(32)]
- public string AppVersion { get; set; }
-
- /// <summary>
- /// Gets or sets the device name.
- /// </summary>
- [MaxLength(64)]
- [StringLength(64)]
- public string DeviceName { get; set; }
-
- /// <summary>
- /// Gets or sets the device id.
- /// </summary>
- [MaxLength(256)]
- [StringLength(256)]
- public string DeviceId { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether this device is active.
- /// </summary>
- public bool IsActive { get; set; }
-
- /// <summary>
- /// Gets or sets the date created.
- /// </summary>
- public DateTime DateCreated { get; set; }
-
- /// <summary>
- /// Gets or sets the date modified.
- /// </summary>
- public DateTime DateModified { get; set; }
-
- /// <summary>
- /// Gets or sets the date of last activity.
- /// </summary>
- public DateTime DateLastActivity { get; set; }
-
- /// <summary>
- /// Gets the user.
- /// </summary>
- public User User { get; private set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/DeviceOptions.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/DeviceOptions.cs
deleted file mode 100644
index 531f66c627..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/Security/DeviceOptions.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities.Security
-{
- /// <summary>
- /// An entity representing custom options for a device.
- /// </summary>
- public class DeviceOptions
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="DeviceOptions"/> class.
- /// </summary>
- /// <param name="deviceId">The device id.</param>
- public DeviceOptions(string deviceId)
- {
- DeviceId = deviceId;
- }
-
- /// <summary>
- /// Gets the id.
- /// </summary>
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int Id { get; private set; }
-
- /// <summary>
- /// Gets the device id.
- /// </summary>
- public string DeviceId { get; private set; }
-
- /// <summary>
- /// Gets or sets the custom name.
- /// </summary>
- public string? CustomName { get; set; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/TrickplayInfo.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/TrickplayInfo.cs
deleted file mode 100644
index ff9a68beff..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/TrickplayInfo.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using System;
-using System.Text.Json.Serialization;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// An entity representing the metadata for a group of trickplay tiles.
-/// </summary>
-public class TrickplayInfo
-{
- /// <summary>
- /// Gets or sets the id of the associated item.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- [JsonIgnore]
- public Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or sets width of an individual thumbnail.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int Width { get; set; }
-
- /// <summary>
- /// Gets or sets height of an individual thumbnail.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int Height { get; set; }
-
- /// <summary>
- /// Gets or sets amount of thumbnails per row.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int TileWidth { get; set; }
-
- /// <summary>
- /// Gets or sets amount of thumbnails per column.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int TileHeight { get; set; }
-
- /// <summary>
- /// Gets or sets total amount of non-black thumbnails.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int ThumbnailCount { get; set; }
-
- /// <summary>
- /// Gets or sets interval in milliseconds between each trickplay thumbnail.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int Interval { get; set; }
-
- /// <summary>
- /// Gets or sets peak bandwidth usage in bits per second.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int Bandwidth { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/User.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/User.cs
deleted file mode 100644
index f3398eeeac..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/User.cs
+++ /dev/null
@@ -1,338 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Text.Json.Serialization;
-using Jellyfin.Data.Enums;
-using Jellyfin.Data.Interfaces;
-
-namespace Jellyfin.Data.Entities
-{
- /// <summary>
- /// An entity representing a user.
- /// </summary>
- public class User : IHasPermissions, IHasConcurrencyToken
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="User"/> class.
- /// Public constructor with required data.
- /// </summary>
- /// <param name="username">The username for the new user.</param>
- /// <param name="authenticationProviderId">The Id of the user's authentication provider.</param>
- /// <param name="passwordResetProviderId">The Id of the user's password reset provider.</param>
- public User(string username, string authenticationProviderId, string passwordResetProviderId)
- {
- ArgumentException.ThrowIfNullOrEmpty(username);
- ArgumentException.ThrowIfNullOrEmpty(authenticationProviderId);
- ArgumentException.ThrowIfNullOrEmpty(passwordResetProviderId);
-
- Username = username;
- AuthenticationProviderId = authenticationProviderId;
- PasswordResetProviderId = passwordResetProviderId;
-
- AccessSchedules = new HashSet<AccessSchedule>();
- DisplayPreferences = new HashSet<DisplayPreferences>();
- ItemDisplayPreferences = new HashSet<ItemDisplayPreferences>();
- // Groups = new HashSet<Group>();
- Permissions = new HashSet<Permission>();
- Preferences = new HashSet<Preference>();
- // ProviderMappings = new HashSet<ProviderMapping>();
-
- // Set default values
- Id = Guid.NewGuid();
- InvalidLoginAttemptCount = 0;
- EnableUserPreferenceAccess = true;
- MustUpdatePassword = false;
- DisplayMissingEpisodes = false;
- DisplayCollectionsView = false;
- HidePlayedInLatest = true;
- RememberAudioSelections = true;
- RememberSubtitleSelections = true;
- EnableNextEpisodeAutoPlay = true;
- EnableAutoLogin = false;
- PlayDefaultAudioTrack = true;
- SubtitleMode = SubtitlePlaybackMode.Default;
- SyncPlayAccess = SyncPlayUserAccessType.CreateAndJoinGroups;
- }
-
- /// <summary>
- /// Gets or sets the Id of the user.
- /// </summary>
- /// <remarks>
- /// Identity, Indexed, Required.
- /// </remarks>
- [JsonIgnore]
- public Guid Id { get; set; }
-
- /// <summary>
- /// Gets or sets the user's name.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string Username { get; set; }
-
- /// <summary>
- /// Gets or sets the user's password, or <c>null</c> if none is set.
- /// </summary>
- /// <remarks>
- /// Max length = 65535.
- /// </remarks>
- [MaxLength(65535)]
- [StringLength(65535)]
- public string? Password { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the user must update their password.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool MustUpdatePassword { get; set; }
-
- /// <summary>
- /// Gets or sets the audio language preference.
- /// </summary>
- /// <remarks>
- /// Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string? AudioLanguagePreference { get; set; }
-
- /// <summary>
- /// Gets or sets the authentication provider id.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string AuthenticationProviderId { get; set; }
-
- /// <summary>
- /// Gets or sets the password reset provider id.
- /// </summary>
- /// <remarks>
- /// Required, Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string PasswordResetProviderId { get; set; }
-
- /// <summary>
- /// Gets or sets the invalid login attempt count.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public int InvalidLoginAttemptCount { get; set; }
-
- /// <summary>
- /// Gets or sets the last activity date.
- /// </summary>
- public DateTime? LastActivityDate { get; set; }
-
- /// <summary>
- /// Gets or sets the last login date.
- /// </summary>
- public DateTime? LastLoginDate { get; set; }
-
- /// <summary>
- /// Gets or sets the number of login attempts the user can make before they are locked out.
- /// </summary>
- public int? LoginAttemptsBeforeLockout { get; set; }
-
- /// <summary>
- /// Gets or sets the maximum number of active sessions the user can have at once.
- /// </summary>
- public int MaxActiveSessions { get; set; }
-
- /// <summary>
- /// Gets or sets the subtitle mode.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public SubtitlePlaybackMode SubtitleMode { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the default audio track should be played.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool PlayDefaultAudioTrack { get; set; }
-
- /// <summary>
- /// Gets or sets the subtitle language preference.
- /// </summary>
- /// <remarks>
- /// Max length = 255.
- /// </remarks>
- [MaxLength(255)]
- [StringLength(255)]
- public string? SubtitleLanguagePreference { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether missing episodes should be displayed.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool DisplayMissingEpisodes { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether to display the collections view.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool DisplayCollectionsView { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the user has a local password.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool EnableLocalPassword { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the server should hide played content in "Latest".
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool HidePlayedInLatest { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether to remember audio selections on played content.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool RememberAudioSelections { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether to remember subtitle selections on played content.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool RememberSubtitleSelections { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether to enable auto-play for the next episode.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool EnableNextEpisodeAutoPlay { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the user should auto-login.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool EnableAutoLogin { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the user can change their preferences.
- /// </summary>
- /// <remarks>
- /// Required.
- /// </remarks>
- public bool EnableUserPreferenceAccess { get; set; }
-
- /// <summary>
- /// Gets or sets the maximum parental age rating.
- /// </summary>
- public int? MaxParentalAgeRating { get; set; }
-
- /// <summary>
- /// Gets or sets the remote client bitrate limit.
- /// </summary>
- public int? RemoteClientBitrateLimit { get; set; }
-
- /// <summary>
- /// Gets or sets the internal id.
- /// This is a temporary stopgap for until the library db is migrated.
- /// This corresponds to the value of the index of this user in the library db.
- /// </summary>
- public long InternalId { get; set; }
-
- /// <summary>
- /// Gets or sets the user's profile image. Can be <c>null</c>.
- /// </summary>
- // [ForeignKey("UserId")]
- public virtual ImageInfo? ProfileImage { get; set; }
-
- /// <summary>
- /// Gets the user's display preferences.
- /// </summary>
- public virtual ICollection<DisplayPreferences> DisplayPreferences { get; private set; }
-
- /// <summary>
- /// Gets or sets the level of sync play permissions this user has.
- /// </summary>
- public SyncPlayUserAccessType SyncPlayAccess { get; set; }
-
- /// <summary>
- /// Gets or sets the cast receiver id.
- /// </summary>
- [StringLength(32)]
- public string? CastReceiverId { get; set; }
-
- /// <inheritdoc />
- [ConcurrencyCheck]
- public uint RowVersion { get; private set; }
-
- /// <summary>
- /// Gets the list of access schedules this user has.
- /// </summary>
- public virtual ICollection<AccessSchedule> AccessSchedules { get; private set; }
-
- /// <summary>
- /// Gets the list of item display preferences.
- /// </summary>
- public virtual ICollection<ItemDisplayPreferences> ItemDisplayPreferences { get; private set; }
-
- /*
- /// <summary>
- /// Gets the list of groups this user is a member of.
- /// </summary>
- public virtual ICollection<Group> Groups { get; private set; }
- */
-
- /// <summary>
- /// Gets the list of permissions this user has.
- /// </summary>
- [ForeignKey("Permission_Permissions_Guid")]
- public virtual ICollection<Permission> Permissions { get; private set; }
-
- /*
- /// <summary>
- /// Gets the list of provider mappings this user has.
- /// </summary>
- public virtual ICollection<ProviderMapping> ProviderMappings { get; private set; }
- */
-
- /// <summary>
- /// Gets the list of preferences this user has.
- /// </summary>
- [ForeignKey("Preference_Preferences_Guid")]
- public virtual ICollection<Preference> Preferences { get; private set; }
-
- /// <inheritdoc/>
- public void OnSavingChanges()
- {
- RowVersion++;
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/UserData.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/UserData.cs
deleted file mode 100644
index 05ab6dd2d2..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Entities/UserData.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities;
-
-/// <summary>
-/// Provides <see cref="BaseItemEntity"/> and <see cref="User"/> related data.
-/// </summary>
-public class UserData
-{
- /// <summary>
- /// Gets or sets the custom data key.
- /// </summary>
- /// <value>The rating.</value>
- public required string CustomDataKey { get; set; }
-
- /// <summary>
- /// Gets or sets the users 0-10 rating.
- /// </summary>
- /// <value>The rating.</value>
- public double? Rating { get; set; }
-
- /// <summary>
- /// Gets or sets the playback position ticks.
- /// </summary>
- /// <value>The playback position ticks.</value>
- public long PlaybackPositionTicks { get; set; }
-
- /// <summary>
- /// Gets or sets the play count.
- /// </summary>
- /// <value>The play count.</value>
- public int PlayCount { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether this instance is favorite.
- /// </summary>
- /// <value><c>true</c> if this instance is favorite; otherwise, <c>false</c>.</value>
- public bool IsFavorite { get; set; }
-
- /// <summary>
- /// Gets or sets the last played date.
- /// </summary>
- /// <value>The last played date.</value>
- public DateTime? LastPlayedDate { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether this <see cref="UserData" /> is played.
- /// </summary>
- /// <value><c>true</c> if played; otherwise, <c>false</c>.</value>
- public bool Played { get; set; }
-
- /// <summary>
- /// Gets or sets the index of the audio stream.
- /// </summary>
- /// <value>The index of the audio stream.</value>
- public int? AudioStreamIndex { get; set; }
-
- /// <summary>
- /// Gets or sets the index of the subtitle stream.
- /// </summary>
- /// <value>The index of the subtitle stream.</value>
- public int? SubtitleStreamIndex { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether the item is liked or not.
- /// This should never be serialized.
- /// </summary>
- /// <value><c>null</c> if [likes] contains no value, <c>true</c> if [likes]; otherwise, <c>false</c>.</value>
- public bool? Likes { get; set; }
-
- /// <summary>
- /// Gets or sets the key.
- /// </summary>
- /// <value>The key.</value>
- public required Guid ItemId { get; set; }
-
- /// <summary>
- /// Gets or Sets the BaseItem.
- /// </summary>
- public required BaseItemEntity? Item { get; set; }
-
- /// <summary>
- /// Gets or Sets the UserId.
- /// </summary>
- public required Guid UserId { get; set; }
-
- /// <summary>
- /// Gets or Sets the User.
- /// </summary>
- public required User? User { get; set; }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ArtKind.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ArtKind.cs
deleted file mode 100644
index f7a73848c8..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ArtKind.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum representing types of art.
- /// </summary>
- public enum ArtKind
- {
- /// <summary>
- /// Another type of art, not covered by the other members.
- /// </summary>
- Other = 0,
-
- /// <summary>
- /// A poster.
- /// </summary>
- Poster = 1,
-
- /// <summary>
- /// A banner.
- /// </summary>
- Banner = 2,
-
- /// <summary>
- /// A thumbnail.
- /// </summary>
- Thumbnail = 3,
-
- /// <summary>
- /// A logo.
- /// </summary>
- Logo = 4
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ChromecastVersion.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ChromecastVersion.cs
deleted file mode 100644
index c9c8a4a625..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ChromecastVersion.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum representing the version of Chromecast to be used by clients.
- /// </summary>
- public enum ChromecastVersion
- {
- /// <summary>
- /// Stable Chromecast version.
- /// </summary>
- Stable = 0,
-
- /// <summary>
- /// Unstable Chromecast version.
- /// </summary>
- Unstable = 1
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/DynamicDayOfWeek.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/DynamicDayOfWeek.cs
deleted file mode 100644
index d3d8dd8227..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/DynamicDayOfWeek.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum that represents a day of the week, weekdays, weekends, or all days.
- /// </summary>
- public enum DynamicDayOfWeek
- {
- /// <summary>
- /// Sunday.
- /// </summary>
- Sunday = 0,
-
- /// <summary>
- /// Monday.
- /// </summary>
- Monday = 1,
-
- /// <summary>
- /// Tuesday.
- /// </summary>
- Tuesday = 2,
-
- /// <summary>
- /// Wednesday.
- /// </summary>
- Wednesday = 3,
-
- /// <summary>
- /// Thursday.
- /// </summary>
- Thursday = 4,
-
- /// <summary>
- /// Friday.
- /// </summary>
- Friday = 5,
-
- /// <summary>
- /// Saturday.
- /// </summary>
- Saturday = 6,
-
- /// <summary>
- /// All days of the week.
- /// </summary>
- Everyday = 7,
-
- /// <summary>
- /// A week day, or Monday-Friday.
- /// </summary>
- Weekday = 8,
-
- /// <summary>
- /// Saturday and Sunday.
- /// </summary>
- Weekend = 9
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/HomeSectionType.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/HomeSectionType.cs
deleted file mode 100644
index 62da8c3fff..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/HomeSectionType.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum representing the different options for the home screen sections.
- /// </summary>
- public enum HomeSectionType
- {
- /// <summary>
- /// None.
- /// </summary>
- None = 0,
-
- /// <summary>
- /// My Media.
- /// </summary>
- SmallLibraryTiles = 1,
-
- /// <summary>
- /// My Media Small.
- /// </summary>
- LibraryButtons = 2,
-
- /// <summary>
- /// Active Recordings.
- /// </summary>
- ActiveRecordings = 3,
-
- /// <summary>
- /// Continue Watching.
- /// </summary>
- Resume = 4,
-
- /// <summary>
- /// Continue Listening.
- /// </summary>
- ResumeAudio = 5,
-
- /// <summary>
- /// Latest Media.
- /// </summary>
- LatestMedia = 6,
-
- /// <summary>
- /// Next Up.
- /// </summary>
- NextUp = 7,
-
- /// <summary>
- /// Live TV.
- /// </summary>
- LiveTv = 8,
-
- /// <summary>
- /// Continue Reading.
- /// </summary>
- ResumeBook = 9
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/IndexingKind.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/IndexingKind.cs
deleted file mode 100644
index 3967712b03..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/IndexingKind.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum representing a type of indexing in a user's display preferences.
- /// </summary>
- public enum IndexingKind
- {
- /// <summary>
- /// Index by the premiere date.
- /// </summary>
- PremiereDate = 0,
-
- /// <summary>
- /// Index by the production year.
- /// </summary>
- ProductionYear = 1,
-
- /// <summary>
- /// Index by the community rating.
- /// </summary>
- CommunityRating = 2
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/MediaFileKind.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/MediaFileKind.cs
deleted file mode 100644
index 797c26ec27..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/MediaFileKind.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum representing the type of media file.
- /// </summary>
- public enum MediaFileKind
- {
- /// <summary>
- /// The main file.
- /// </summary>
- Main = 0,
-
- /// <summary>
- /// A sidecar file.
- /// </summary>
- Sidecar = 1,
-
- /// <summary>
- /// An additional part to the main file.
- /// </summary>
- AdditionalPart = 2,
-
- /// <summary>
- /// An alternative format to the main file.
- /// </summary>
- AlternativeFormat = 3,
-
- /// <summary>
- /// An additional stream for the main file.
- /// </summary>
- AdditionalStream = 4
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/MediaSegmentType.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/MediaSegmentType.cs
deleted file mode 100644
index 4586354504..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/MediaSegmentType.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using Jellyfin.Data.Entities;
-
-namespace Jellyfin.Data.Enums;
-
-/// <summary>
-/// Defines the types of content an individual <see cref="MediaSegment"/> represents.
-/// </summary>
-public enum MediaSegmentType
-{
- /// <summary>
- /// Default media type or custom one.
- /// </summary>
- Unknown = 0,
-
- /// <summary>
- /// Commercial.
- /// </summary>
- Commercial = 1,
-
- /// <summary>
- /// Preview.
- /// </summary>
- Preview = 2,
-
- /// <summary>
- /// Recap.
- /// </summary>
- Recap = 3,
-
- /// <summary>
- /// Outro.
- /// </summary>
- Outro = 4,
-
- /// <summary>
- /// Intro.
- /// </summary>
- Intro = 5
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PermissionKind.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PermissionKind.cs
deleted file mode 100644
index c3d6705c24..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PermissionKind.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// The types of user permissions.
- /// </summary>
- public enum PermissionKind
- {
- /// <summary>
- /// Whether the user is an administrator.
- /// </summary>
- IsAdministrator = 0,
-
- /// <summary>
- /// Whether the user is hidden.
- /// </summary>
- IsHidden = 1,
-
- /// <summary>
- /// Whether the user is disabled.
- /// </summary>
- IsDisabled = 2,
-
- /// <summary>
- /// Whether the user can control shared devices.
- /// </summary>
- EnableSharedDeviceControl = 3,
-
- /// <summary>
- /// Whether the user can access the server remotely.
- /// </summary>
- EnableRemoteAccess = 4,
-
- /// <summary>
- /// Whether the user can manage live tv.
- /// </summary>
- EnableLiveTvManagement = 5,
-
- /// <summary>
- /// Whether the user can access live tv.
- /// </summary>
- EnableLiveTvAccess = 6,
-
- /// <summary>
- /// Whether the user can play media.
- /// </summary>
- EnableMediaPlayback = 7,
-
- /// <summary>
- /// Whether the server should transcode audio for the user if requested.
- /// </summary>
- EnableAudioPlaybackTranscoding = 8,
-
- /// <summary>
- /// Whether the server should transcode video for the user if requested.
- /// </summary>
- EnableVideoPlaybackTranscoding = 9,
-
- /// <summary>
- /// Whether the user can delete content.
- /// </summary>
- EnableContentDeletion = 10,
-
- /// <summary>
- /// Whether the user can download content.
- /// </summary>
- EnableContentDownloading = 11,
-
- /// <summary>
- /// Whether to enable sync transcoding for the user.
- /// </summary>
- EnableSyncTranscoding = 12,
-
- /// <summary>
- /// Whether the user can do media conversion.
- /// </summary>
- EnableMediaConversion = 13,
-
- /// <summary>
- /// Whether the user has access to all devices.
- /// </summary>
- EnableAllDevices = 14,
-
- /// <summary>
- /// Whether the user has access to all channels.
- /// </summary>
- EnableAllChannels = 15,
-
- /// <summary>
- /// Whether the user has access to all folders.
- /// </summary>
- EnableAllFolders = 16,
-
- /// <summary>
- /// Whether to enable public sharing for the user.
- /// </summary>
- EnablePublicSharing = 17,
-
- /// <summary>
- /// Whether the user can remotely control other users.
- /// </summary>
- EnableRemoteControlOfOtherUsers = 18,
-
- /// <summary>
- /// Whether the user is permitted to do playback remuxing.
- /// </summary>
- EnablePlaybackRemuxing = 19,
-
- /// <summary>
- /// Whether the server should force transcoding on remote connections for the user.
- /// </summary>
- ForceRemoteSourceTranscoding = 20,
-
- /// <summary>
- /// Whether the user can create, modify and delete collections.
- /// </summary>
- EnableCollectionManagement = 21,
-
- /// <summary>
- /// Whether the user can edit subtitles.
- /// </summary>
- EnableSubtitleManagement = 22,
-
- /// <summary>
- /// Whether the user can edit lyrics.
- /// </summary>
- EnableLyricManagement = 23,
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PersonRoleType.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PersonRoleType.cs
deleted file mode 100644
index 1e619f5eef..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PersonRoleType.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum representing a person's role in a specific media item.
- /// </summary>
- public enum PersonRoleType
- {
- /// <summary>
- /// Another role, not covered by the other types.
- /// </summary>
- Other = 0,
-
- /// <summary>
- /// The director of the media.
- /// </summary>
- Director = 1,
-
- /// <summary>
- /// An artist.
- /// </summary>
- Artist = 2,
-
- /// <summary>
- /// The original artist.
- /// </summary>
- OriginalArtist = 3,
-
- /// <summary>
- /// An actor.
- /// </summary>
- Actor = 4,
-
- /// <summary>
- /// A voice actor.
- /// </summary>
- VoiceActor = 5,
-
- /// <summary>
- /// A producer.
- /// </summary>
- Producer = 6,
-
- /// <summary>
- /// A remixer.
- /// </summary>
- Remixer = 7,
-
- /// <summary>
- /// A conductor.
- /// </summary>
- Conductor = 8,
-
- /// <summary>
- /// A composer.
- /// </summary>
- Composer = 9,
-
- /// <summary>
- /// An author.
- /// </summary>
- Author = 10,
-
- /// <summary>
- /// An editor.
- /// </summary>
- Editor = 11
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PreferenceKind.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PreferenceKind.cs
deleted file mode 100644
index d2b412e459..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/PreferenceKind.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// The types of user preferences.
- /// </summary>
- public enum PreferenceKind
- {
- /// <summary>
- /// A list of blocked tags.
- /// </summary>
- BlockedTags = 0,
-
- /// <summary>
- /// A list of blocked channels.
- /// </summary>
- BlockedChannels = 1,
-
- /// <summary>
- /// A list of blocked media folders.
- /// </summary>
- BlockedMediaFolders = 2,
-
- /// <summary>
- /// A list of enabled devices.
- /// </summary>
- EnabledDevices = 3,
-
- /// <summary>
- /// A list of enabled channels.
- /// </summary>
- EnabledChannels = 4,
-
- /// <summary>
- /// A list of enabled folders.
- /// </summary>
- EnabledFolders = 5,
-
- /// <summary>
- /// A list of folders to allow content deletion from.
- /// </summary>
- EnableContentDeletionFromFolders = 6,
-
- /// <summary>
- /// A list of latest items to exclude.
- /// </summary>
- LatestItemExcludes = 7,
-
- /// <summary>
- /// A list of media to exclude.
- /// </summary>
- MyMediaExcludes = 8,
-
- /// <summary>
- /// A list of grouped folders.
- /// </summary>
- GroupedFolders = 9,
-
- /// <summary>
- /// A list of unrated items to block.
- /// </summary>
- BlockUnratedItems = 10,
-
- /// <summary>
- /// A list of ordered views.
- /// </summary>
- OrderedViews = 11,
-
- /// <summary>
- /// A list of allowed tags.
- /// </summary>
- AllowedTags = 12
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ScrollDirection.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ScrollDirection.cs
deleted file mode 100644
index 29c50e2c4e..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ScrollDirection.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum representing the axis that should be scrolled.
- /// </summary>
- public enum ScrollDirection
- {
- /// <summary>
- /// Horizontal scrolling direction.
- /// </summary>
- Horizontal = 0,
-
- /// <summary>
- /// Vertical scrolling direction.
- /// </summary>
- Vertical = 1
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SortOrder.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SortOrder.cs
deleted file mode 100644
index 4151448e4e..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SortOrder.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum representing the sorting order.
- /// </summary>
- public enum SortOrder
- {
- /// <summary>
- /// Sort in increasing order.
- /// </summary>
- Ascending = 0,
-
- /// <summary>
- /// Sort in decreasing order.
- /// </summary>
- Descending = 1
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SubtitlePlaybackMode.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SubtitlePlaybackMode.cs
deleted file mode 100644
index 79693d321a..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SubtitlePlaybackMode.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum representing a subtitle playback mode.
- /// </summary>
- public enum SubtitlePlaybackMode
- {
- /// <summary>
- /// The default subtitle playback mode.
- /// </summary>
- Default = 0,
-
- /// <summary>
- /// Always show subtitles.
- /// </summary>
- Always = 1,
-
- /// <summary>
- /// Only show forced subtitles.
- /// </summary>
- OnlyForced = 2,
-
- /// <summary>
- /// Don't show subtitles.
- /// </summary>
- None = 3,
-
- /// <summary>
- /// Only show subtitles when the current audio stream is in a different language.
- /// </summary>
- Smart = 4
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SyncPlayUserAccessType.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SyncPlayUserAccessType.cs
deleted file mode 100644
index 030d16fb90..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/SyncPlayUserAccessType.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// Enum SyncPlayUserAccessType.
- /// </summary>
- public enum SyncPlayUserAccessType
- {
- /// <summary>
- /// User can create groups and join them.
- /// </summary>
- CreateAndJoinGroups = 0,
-
- /// <summary>
- /// User can only join already existing groups.
- /// </summary>
- JoinGroups = 1,
-
- /// <summary>
- /// SyncPlay is disabled for the user.
- /// </summary>
- None = 2
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ViewType.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ViewType.cs
deleted file mode 100644
index c0fd7d448b..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Enums/ViewType.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-namespace Jellyfin.Data.Enums
-{
- /// <summary>
- /// An enum representing the type of view for a library or collection.
- /// </summary>
- public enum ViewType
- {
- /// <summary>
- /// Shows albums.
- /// </summary>
- Albums = 0,
-
- /// <summary>
- /// Shows album artists.
- /// </summary>
- AlbumArtists = 1,
-
- /// <summary>
- /// Shows artists.
- /// </summary>
- Artists = 2,
-
- /// <summary>
- /// Shows channels.
- /// </summary>
- Channels = 3,
-
- /// <summary>
- /// Shows collections.
- /// </summary>
- Collections = 4,
-
- /// <summary>
- /// Shows episodes.
- /// </summary>
- Episodes = 5,
-
- /// <summary>
- /// Shows favorites.
- /// </summary>
- Favorites = 6,
-
- /// <summary>
- /// Shows genres.
- /// </summary>
- Genres = 7,
-
- /// <summary>
- /// Shows guide.
- /// </summary>
- Guide = 8,
-
- /// <summary>
- /// Shows movies.
- /// </summary>
- Movies = 9,
-
- /// <summary>
- /// Shows networks.
- /// </summary>
- Networks = 10,
-
- /// <summary>
- /// Shows playlists.
- /// </summary>
- Playlists = 11,
-
- /// <summary>
- /// Shows programs.
- /// </summary>
- Programs = 12,
-
- /// <summary>
- /// Shows recordings.
- /// </summary>
- Recordings = 13,
-
- /// <summary>
- /// Shows schedule.
- /// </summary>
- Schedule = 14,
-
- /// <summary>
- /// Shows series.
- /// </summary>
- Series = 15,
-
- /// <summary>
- /// Shows shows.
- /// </summary>
- Shows = 16,
-
- /// <summary>
- /// Shows songs.
- /// </summary>
- Songs = 17,
-
- /// <summary>
- /// Shows songs.
- /// </summary>
- Suggestions = 18,
-
- /// <summary>
- /// Shows trailers.
- /// </summary>
- Trailers = 19,
-
- /// <summary>
- /// Shows upcoming.
- /// </summary>
- Upcoming = 20
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/IJellyfinDatabaseProvider.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/IJellyfinDatabaseProvider.cs
deleted file mode 100644
index b27a88971d..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/IJellyfinDatabaseProvider.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.EntityFrameworkCore;
-
-namespace Jellyfin.Server.Implementations;
-
-/// <summary>
-/// Defines the type and extension points for multi database support.
-/// </summary>
-public interface IJellyfinDatabaseProvider
-{
- /// <summary>
- /// Gets or Sets the Database Factory when initialisaition is done.
- /// </summary>
- IDbContextFactory<JellyfinDbContext>? DbContextFactory { get; set; }
-
- /// <summary>
- /// Initialises jellyfins EFCore database access.
- /// </summary>
- /// <param name="options">The EFCore database options.</param>
- void Initialise(DbContextOptionsBuilder options);
-
- /// <summary>
- /// Will be invoked when EFCore wants to build its model.
- /// </summary>
- /// <param name="modelBuilder">The ModelBuilder from EFCore.</param>
- void OnModelCreating(ModelBuilder modelBuilder);
-
- /// <summary>
- /// If supported this should run any periodic maintaince tasks.
- /// </summary>
- /// <param name="cancellationToken">The token to abort the operation.</param>
- /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
- Task RunScheduledOptimisation(CancellationToken cancellationToken);
-
- /// <summary>
- /// If supported this should perform any actions that are required on stopping the jellyfin server.
- /// </summary>
- /// <param name="cancellationToken">The token that will be used to abort the operation.</param>
- /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
- Task RunShutdownTask(CancellationToken cancellationToken);
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasArtwork.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasArtwork.cs
deleted file mode 100644
index a4d9c54af4..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasArtwork.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Entities.Libraries;
-
-namespace Jellyfin.Data.Interfaces
-{
- /// <summary>
- /// An interface abstracting an entity that has artwork.
- /// </summary>
- public interface IHasArtwork
- {
- /// <summary>
- /// Gets a collection containing this entity's artwork.
- /// </summary>
- ICollection<Artwork> Artwork { get; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasCompanies.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasCompanies.cs
deleted file mode 100644
index 8f19ce04fa..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasCompanies.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Entities.Libraries;
-
-namespace Jellyfin.Data.Interfaces
-{
- /// <summary>
- /// An abstraction representing an entity that has companies.
- /// </summary>
- public interface IHasCompanies
- {
- /// <summary>
- /// Gets a collection containing this entity's companies.
- /// </summary>
- ICollection<Company> Companies { get; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasConcurrencyToken.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasConcurrencyToken.cs
deleted file mode 100644
index 2c4091493e..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasConcurrencyToken.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-namespace Jellyfin.Data.Interfaces
-{
- /// <summary>
- /// An interface abstracting an entity that has a concurrency token.
- /// </summary>
- public interface IHasConcurrencyToken
- {
- /// <summary>
- /// Gets the version of this row. Acts as a concurrency token.
- /// </summary>
- uint RowVersion { get; }
-
- /// <summary>
- /// Called when saving changes to this entity.
- /// </summary>
- void OnSavingChanges();
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasPermissions.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasPermissions.cs
deleted file mode 100644
index 6d1eb59f67..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasPermissions.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Entities;
-using Jellyfin.Data.Enums;
-
-namespace Jellyfin.Data.Interfaces
-{
- /// <summary>
- /// An abstraction representing an entity that has permissions.
- /// </summary>
- public interface IHasPermissions
- {
- /// <summary>
- /// Gets a collection containing this entity's permissions.
- /// </summary>
- ICollection<Permission> Permissions { get; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasReleases.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasReleases.cs
deleted file mode 100644
index 3b615893ed..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Interfaces/IHasReleases.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System.Collections.Generic;
-using Jellyfin.Data.Entities.Libraries;
-
-namespace Jellyfin.Data.Interfaces
-{
- /// <summary>
- /// An abstraction representing an entity that has releases.
- /// </summary>
- public interface IHasReleases
- {
- /// <summary>
- /// Gets a collection containing this entity's releases.
- /// </summary>
- ICollection<Release> Releases { get; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/Jellyfin.Database.Implementations.csproj b/Jellyfin.Database/Jellyfin.Database.Implementations/Jellyfin.Database.Implementations.csproj
deleted file mode 100644
index 96cea69dfc..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/Jellyfin.Database.Implementations.csproj
+++ /dev/null
@@ -1,43 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
- <PropertyGroup>
- <TargetFramework>net9.0</TargetFramework>
- <ImplicitUsings>enable</ImplicitUsings>
- <Nullable>enable</Nullable>
- <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
- <GenerateDocumentationFile>true</GenerateDocumentationFile>
- </PropertyGroup>
-
-
- <!-- Code Analyzers -->
- <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
- <PackageReference Include="IDisposableAnalyzers">
- <PrivateAssets>all</PrivateAssets>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
- </PackageReference>
- <PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers">
- <PrivateAssets>all</PrivateAssets>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
- </PackageReference>
- <PackageReference Include="SerilogAnalyzer" PrivateAssets="All" />
- <PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
- <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" PrivateAssets="All" />
- </ItemGroup>
-
- <ItemGroup>
- <Compile Include="..\..\SharedVersion.cs" />
- </ItemGroup>
-
- <ItemGroup>
- <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Design">
- <PrivateAssets>all</PrivateAssets>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
- </PackageReference>
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools">
- <PrivateAssets>all</PrivateAssets>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
- </PackageReference>
- </ItemGroup>
-
-</Project>
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDatabaseProviderKeyAttribute.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDatabaseProviderKeyAttribute.cs
deleted file mode 100644
index b3ab3d0944..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDatabaseProviderKeyAttribute.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-namespace Jellyfin.Server.Implementations;
-
-/// <summary>
-/// Defines the key of the database provider.
-/// </summary>
-[System.AttributeUsage(System.AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
-public sealed class JellyfinDatabaseProviderKeyAttribute : System.Attribute
-{
- // See the attribute guidelines at
- // http://go.microsoft.com/fwlink/?LinkId=85236
- private readonly string _databaseProviderKey;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="JellyfinDatabaseProviderKeyAttribute"/> class.
- /// </summary>
- /// <param name="databaseProviderKey">The key on which to identify the annotated provider.</param>
- public JellyfinDatabaseProviderKeyAttribute(string databaseProviderKey)
- {
- this._databaseProviderKey = databaseProviderKey;
- }
-
- /// <summary>
- /// Gets the key on which to identify the annotated provider.
- /// </summary>
- public string DatabaseProviderKey
- {
- get { return _databaseProviderKey; }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDbContext.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDbContext.cs
deleted file mode 100644
index a0a0f2d0ee..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDbContext.cs
+++ /dev/null
@@ -1,275 +0,0 @@
-using System;
-using System.Linq;
-using Jellyfin.Data.Entities;
-using Jellyfin.Data.Entities.Security;
-using Jellyfin.Data.Interfaces;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.Extensions.Logging;
-
-namespace Jellyfin.Server.Implementations;
-
-/// <inheritdoc/>
-/// <summary>
-/// Initializes a new instance of the <see cref="JellyfinDbContext"/> class.
-/// </summary>
-/// <param name="options">The database context options.</param>
-/// <param name="logger">Logger.</param>
-/// <param name="jellyfinDatabaseProvider">The provider for the database engine specific operations.</param>
-public class JellyfinDbContext(DbContextOptions<JellyfinDbContext> options, ILogger<JellyfinDbContext> logger, IJellyfinDatabaseProvider jellyfinDatabaseProvider) : DbContext(options)
-{
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the access schedules.
- /// </summary>
- public DbSet<AccessSchedule> AccessSchedules => Set<AccessSchedule>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the activity logs.
- /// </summary>
- public DbSet<ActivityLog> ActivityLogs => Set<ActivityLog>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the API keys.
- /// </summary>
- public DbSet<ApiKey> ApiKeys => Set<ApiKey>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the devices.
- /// </summary>
- public DbSet<Device> Devices => Set<Device>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the device options.
- /// </summary>
- public DbSet<DeviceOptions> DeviceOptions => Set<DeviceOptions>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the display preferences.
- /// </summary>
- public DbSet<DisplayPreferences> DisplayPreferences => Set<DisplayPreferences>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the image infos.
- /// </summary>
- public DbSet<ImageInfo> ImageInfos => Set<ImageInfo>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the item display preferences.
- /// </summary>
- public DbSet<ItemDisplayPreferences> ItemDisplayPreferences => Set<ItemDisplayPreferences>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the custom item display preferences.
- /// </summary>
- public DbSet<CustomItemDisplayPreferences> CustomItemDisplayPreferences => Set<CustomItemDisplayPreferences>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the permissions.
- /// </summary>
- public DbSet<Permission> Permissions => Set<Permission>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the preferences.
- /// </summary>
- public DbSet<Preference> Preferences => Set<Preference>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the users.
- /// </summary>
- public DbSet<User> Users => Set<User>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the trickplay metadata.
- /// </summary>
- public DbSet<TrickplayInfo> TrickplayInfos => Set<TrickplayInfo>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the media segments.
- /// </summary>
- public DbSet<MediaSegment> MediaSegments => Set<MediaSegment>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the user data.
- /// </summary>
- public DbSet<UserData> UserData => Set<UserData>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the user data.
- /// </summary>
- public DbSet<AncestorId> AncestorIds => Set<AncestorId>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the user data.
- /// </summary>
- public DbSet<AttachmentStreamInfo> AttachmentStreamInfos => Set<AttachmentStreamInfo>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the user data.
- /// </summary>
- public DbSet<BaseItemEntity> BaseItems => Set<BaseItemEntity>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the user data.
- /// </summary>
- public DbSet<Chapter> Chapters => Set<Chapter>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/>.
- /// </summary>
- public DbSet<ItemValue> ItemValues => Set<ItemValue>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/>.
- /// </summary>
- public DbSet<ItemValueMap> ItemValuesMap => Set<ItemValueMap>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/>.
- /// </summary>
- public DbSet<MediaStreamInfo> MediaStreamInfos => Set<MediaStreamInfo>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/>.
- /// </summary>
- public DbSet<People> Peoples => Set<People>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/>.
- /// </summary>
- public DbSet<PeopleBaseItemMap> PeopleBaseItemMap => Set<PeopleBaseItemMap>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/> containing the referenced Providers with ids.
- /// </summary>
- public DbSet<BaseItemProvider> BaseItemProviders => Set<BaseItemProvider>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/>.
- /// </summary>
- public DbSet<BaseItemImageInfo> BaseItemImageInfos => Set<BaseItemImageInfo>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/>.
- /// </summary>
- public DbSet<BaseItemMetadataField> BaseItemMetadataFields => Set<BaseItemMetadataField>();
-
- /// <summary>
- /// Gets the <see cref="DbSet{TEntity}"/>.
- /// </summary>
- public DbSet<BaseItemTrailerType> BaseItemTrailerTypes => Set<BaseItemTrailerType>();
-
- /*public DbSet<Artwork> Artwork => Set<Artwork>();
-
- public DbSet<Book> Books => Set<Book>();
-
- public DbSet<BookMetadata> BookMetadata => Set<BookMetadata>();
-
- public DbSet<Chapter> Chapters => Set<Chapter>();
-
- public DbSet<Collection> Collections => Set<Collection>();
-
- public DbSet<CollectionItem> CollectionItems => Set<CollectionItem>();
-
- public DbSet<Company> Companies => Set<Company>();
-
- public DbSet<CompanyMetadata> CompanyMetadata => Set<CompanyMetadata>();
-
- public DbSet<CustomItem> CustomItems => Set<CustomItem>();
-
- public DbSet<CustomItemMetadata> CustomItemMetadata => Set<CustomItemMetadata>();
-
- public DbSet<Episode> Episodes => Set<Episode>();
-
- public DbSet<EpisodeMetadata> EpisodeMetadata => Set<EpisodeMetadata>();
-
- public DbSet<Genre> Genres => Set<Genre>();
-
- public DbSet<Group> Groups => Set<Groups>();
-
- public DbSet<Library> Libraries => Set<Library>();
-
- public DbSet<LibraryItem> LibraryItems => Set<LibraryItems>();
-
- public DbSet<LibraryRoot> LibraryRoot => Set<LibraryRoot>();
-
- public DbSet<MediaFile> MediaFiles => Set<MediaFiles>();
-
- public DbSet<MediaFileStream> MediaFileStream => Set<MediaFileStream>();
-
- public DbSet<Metadata> Metadata => Set<Metadata>();
-
- public DbSet<MetadataProvider> MetadataProviders => Set<MetadataProvider>();
-
- public DbSet<MetadataProviderId> MetadataProviderIds => Set<MetadataProviderId>();
-
- public DbSet<Movie> Movies => Set<Movie>();
-
- public DbSet<MovieMetadata> MovieMetadata => Set<MovieMetadata>();
-
- public DbSet<MusicAlbum> MusicAlbums => Set<MusicAlbum>();
-
- public DbSet<MusicAlbumMetadata> MusicAlbumMetadata => Set<MusicAlbumMetadata>();
-
- public DbSet<Person> People => Set<Person>();
-
- public DbSet<PersonRole> PersonRoles => Set<PersonRole>();
-
- public DbSet<Photo> Photo => Set<Photo>();
-
- public DbSet<PhotoMetadata> PhotoMetadata => Set<PhotoMetadata>();
-
- public DbSet<ProviderMapping> ProviderMappings => Set<ProviderMapping>();
-
- public DbSet<Rating> Ratings => Set<Rating>();
-
- /// <summary>
- /// Repository for global::Jellyfin.Data.Entities.RatingSource - This is the entity to
- /// store review ratings, not age ratings.
- /// </summary>
- public DbSet<RatingSource> RatingSources => Set<RatingSource>();
-
- public DbSet<Release> Releases => Set<Release>();
-
- public DbSet<Season> Seasons => Set<Season>();
-
- public DbSet<SeasonMetadata> SeasonMetadata => Set<SeasonMetadata>();
-
- public DbSet<Series> Series => Set<Series>();
-
- public DbSet<SeriesMetadata> SeriesMetadata => Set<SeriesMetadata();
-
- public DbSet<Track> Tracks => Set<Track>();
-
- public DbSet<TrackMetadata> TrackMetadata => Set<TrackMetadata>();*/
-
- /// <inheritdoc/>
- public override int SaveChanges()
- {
- foreach (var saveEntity in ChangeTracker.Entries()
- .Where(e => e.State == EntityState.Modified)
- .Select(entry => entry.Entity)
- .OfType<IHasConcurrencyToken>())
- {
- saveEntity.OnSavingChanges();
- }
-
- try
- {
- return base.SaveChanges();
- }
- catch (Exception e)
- {
- logger.LogError(e, "Error trying to save changes.");
- throw;
- }
- }
-
- /// <inheritdoc />
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- jellyfinDatabaseProvider.OnModelCreating(modelBuilder);
- base.OnModelCreating(modelBuilder);
-
- // Configuration for each entity is in its own class inside 'ModelConfiguration'.
- modelBuilder.ApplyConfigurationsFromAssembly(typeof(JellyfinDbContext).Assembly);
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ActivityLogConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ActivityLogConfiguration.cs
deleted file mode 100644
index 9a63ed9f21..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ActivityLogConfiguration.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// FluentAPI configuration for the ActivityLog entity.
-/// </summary>
-public class ActivityLogConfiguration : IEntityTypeConfiguration<ActivityLog>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<ActivityLog> builder)
- {
- builder.HasIndex(entity => entity.DateCreated);
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/AncestorIdConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/AncestorIdConfiguration.cs
deleted file mode 100644
index 8cc817fb8b..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/AncestorIdConfiguration.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// AncestorId configuration.
-/// </summary>
-public class AncestorIdConfiguration : IEntityTypeConfiguration<AncestorId>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<AncestorId> builder)
- {
- builder.HasKey(e => new { e.ItemId, e.ParentItemId });
- builder.HasIndex(e => e.ParentItemId);
- builder.HasOne(e => e.ParentItem).WithMany(e => e.ParentAncestors).HasForeignKey(f => f.ParentItemId);
- builder.HasOne(e => e.Item).WithMany(e => e.Children).HasForeignKey(f => f.ItemId);
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ApiKeyConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ApiKeyConfiguration.cs
deleted file mode 100644
index 3f19b6986a..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ApiKeyConfiguration.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Jellyfin.Data.Entities.Security;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration
-{
- /// <summary>
- /// FluentAPI configuration for the ApiKey entity.
- /// </summary>
- public class ApiKeyConfiguration : IEntityTypeConfiguration<ApiKey>
- {
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<ApiKey> builder)
- {
- builder
- .HasIndex(entity => entity.AccessToken)
- .IsUnique();
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/AttachmentStreamInfoConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/AttachmentStreamInfoConfiguration.cs
deleted file mode 100644
index 057b6689ac..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/AttachmentStreamInfoConfiguration.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// FluentAPI configuration for the AttachmentStreamInfo entity.
-/// </summary>
-public class AttachmentStreamInfoConfiguration : IEntityTypeConfiguration<AttachmentStreamInfo>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<AttachmentStreamInfo> builder)
- {
- builder.HasKey(e => new { e.ItemId, e.Index });
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemConfiguration.cs
deleted file mode 100644
index 08f2a33566..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemConfiguration.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// Configuration for BaseItem.
-/// </summary>
-public class BaseItemConfiguration : IEntityTypeConfiguration<BaseItemEntity>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<BaseItemEntity> builder)
- {
- builder.HasKey(e => e.Id);
- // TODO: See rant in entity file.
- // builder.HasOne(e => e.Parent).WithMany(e => e.DirectChildren).HasForeignKey(e => e.ParentId);
- // builder.HasOne(e => e.TopParent).WithMany(e => e.AllChildren).HasForeignKey(e => e.TopParentId);
- // builder.HasOne(e => e.Season).WithMany(e => e.SeasonEpisodes).HasForeignKey(e => e.SeasonId);
- // builder.HasOne(e => e.Series).WithMany(e => e.SeriesEpisodes).HasForeignKey(e => e.SeriesId);
- builder.HasMany(e => e.Peoples);
- builder.HasMany(e => e.UserData);
- builder.HasMany(e => e.ItemValues);
- builder.HasMany(e => e.MediaStreams);
- builder.HasMany(e => e.Chapters);
- builder.HasMany(e => e.Provider);
- builder.HasMany(e => e.ParentAncestors);
- builder.HasMany(e => e.Children);
- builder.HasMany(e => e.LockedFields);
- builder.HasMany(e => e.TrailerTypes);
- builder.HasMany(e => e.Images);
-
- builder.HasIndex(e => e.Path);
- builder.HasIndex(e => e.ParentId);
- builder.HasIndex(e => e.PresentationUniqueKey);
- builder.HasIndex(e => new { e.Id, e.Type, e.IsFolder, e.IsVirtualItem });
-
- // covering index
- builder.HasIndex(e => new { e.TopParentId, e.Id });
- // series
- builder.HasIndex(e => new { e.Type, e.SeriesPresentationUniqueKey, e.PresentationUniqueKey, e.SortName });
- // series counts
- // seriesdateplayed sort order
- builder.HasIndex(e => new { e.Type, e.SeriesPresentationUniqueKey, e.IsFolder, e.IsVirtualItem });
- // live tv programs
- builder.HasIndex(e => new { e.Type, e.TopParentId, e.StartDate });
- // covering index for getitemvalues
- builder.HasIndex(e => new { e.Type, e.TopParentId, e.Id });
- // used by movie suggestions
- builder.HasIndex(e => new { e.Type, e.TopParentId, e.PresentationUniqueKey });
- // latest items
- builder.HasIndex(e => new { e.Type, e.TopParentId, e.IsVirtualItem, e.PresentationUniqueKey, e.DateCreated });
- builder.HasIndex(e => new { e.IsFolder, e.TopParentId, e.IsVirtualItem, e.PresentationUniqueKey, e.DateCreated });
- // resume
- builder.HasIndex(e => new { e.MediaType, e.TopParentId, e.IsVirtualItem, e.PresentationUniqueKey });
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemMetadataFieldConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemMetadataFieldConfiguration.cs
deleted file mode 100644
index b4c6511bf2..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemMetadataFieldConfiguration.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// Provides configuration for the BaseItemMetadataField entity.
-/// </summary>
-public class BaseItemMetadataFieldConfiguration : IEntityTypeConfiguration<BaseItemMetadataField>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<BaseItemMetadataField> builder)
- {
- builder.HasKey(e => new { e.Id, e.ItemId });
- builder.HasOne(e => e.Item);
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemProviderConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemProviderConfiguration.cs
deleted file mode 100644
index d15049a1fa..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemProviderConfiguration.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// BaseItemProvider configuration.
-/// </summary>
-public class BaseItemProviderConfiguration : IEntityTypeConfiguration<BaseItemProvider>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<BaseItemProvider> builder)
- {
- builder.HasKey(e => new { e.ItemId, e.ProviderId });
- builder.HasOne(e => e.Item);
- builder.HasIndex(e => new { e.ProviderId, e.ProviderValue, e.ItemId });
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemTrailerTypeConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemTrailerTypeConfiguration.cs
deleted file mode 100644
index e9564b854b..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/BaseItemTrailerTypeConfiguration.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// Provides configuration for the BaseItemMetadataField entity.
-/// </summary>
-public class BaseItemTrailerTypeConfiguration : IEntityTypeConfiguration<BaseItemTrailerType>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<BaseItemTrailerType> builder)
- {
- builder.HasKey(e => new { e.Id, e.ItemId });
- builder.HasOne(e => e.Item);
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ChapterConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ChapterConfiguration.cs
deleted file mode 100644
index 5a84f7750a..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ChapterConfiguration.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// Chapter configuration.
-/// </summary>
-public class ChapterConfiguration : IEntityTypeConfiguration<Chapter>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<Chapter> builder)
- {
- builder.HasKey(e => new { e.ItemId, e.ChapterIndex });
- builder.HasOne(e => e.Item);
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/CustomItemDisplayPreferencesConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/CustomItemDisplayPreferencesConfiguration.cs
deleted file mode 100644
index 779aec986b..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/CustomItemDisplayPreferencesConfiguration.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration
-{
- /// <summary>
- /// FluentAPI configuration for the CustomItemDisplayPreferences entity.
- /// </summary>
- public class CustomItemDisplayPreferencesConfiguration : IEntityTypeConfiguration<CustomItemDisplayPreferences>
- {
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<CustomItemDisplayPreferences> builder)
- {
- builder
- .HasIndex(entity => new { entity.UserId, entity.ItemId, entity.Client, entity.Key })
- .IsUnique();
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DeviceConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DeviceConfiguration.cs
deleted file mode 100644
index a750b65c03..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DeviceConfiguration.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using Jellyfin.Data.Entities.Security;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration
-{
- /// <summary>
- /// FluentAPI configuration for the Device entity.
- /// </summary>
- public class DeviceConfiguration : IEntityTypeConfiguration<Device>
- {
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<Device> builder)
- {
- builder
- .HasIndex(entity => new { entity.DeviceId, entity.DateLastActivity });
-
- builder
- .HasIndex(entity => new { entity.AccessToken, entity.DateLastActivity });
-
- builder
- .HasIndex(entity => new { entity.UserId, entity.DeviceId });
-
- builder
- .HasIndex(entity => entity.DeviceId);
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DeviceOptionsConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DeviceOptionsConfiguration.cs
deleted file mode 100644
index 038afd7524..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DeviceOptionsConfiguration.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Jellyfin.Data.Entities.Security;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration
-{
- /// <summary>
- /// FluentAPI configuration for the DeviceOptions entity.
- /// </summary>
- public class DeviceOptionsConfiguration : IEntityTypeConfiguration<DeviceOptions>
- {
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<DeviceOptions> builder)
- {
- builder
- .HasIndex(entity => entity.DeviceId)
- .IsUnique();
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DisplayPreferencesConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DisplayPreferencesConfiguration.cs
deleted file mode 100644
index 9b437861bb..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/DisplayPreferencesConfiguration.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration
-{
- /// <summary>
- /// FluentAPI configuration for the DisplayPreferencesConfiguration entity.
- /// </summary>
- public class DisplayPreferencesConfiguration : IEntityTypeConfiguration<DisplayPreferences>
- {
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<DisplayPreferences> builder)
- {
- builder
- .HasMany(d => d.HomeSections)
- .WithOne()
- .OnDelete(DeleteBehavior.Cascade);
-
- builder
- .HasIndex(entity => new { entity.UserId, entity.ItemId, entity.Client })
- .IsUnique();
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ItemValuesConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ItemValuesConfiguration.cs
deleted file mode 100644
index abeeb09c9b..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ItemValuesConfiguration.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// itemvalues Configuration.
-/// </summary>
-public class ItemValuesConfiguration : IEntityTypeConfiguration<ItemValue>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<ItemValue> builder)
- {
- builder.HasKey(e => e.ItemValueId);
- builder.HasIndex(e => new { e.Type, e.CleanValue }).IsUnique();
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ItemValuesMapConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ItemValuesMapConfiguration.cs
deleted file mode 100644
index 9c22b114c7..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/ItemValuesMapConfiguration.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// itemvalues Configuration.
-/// </summary>
-public class ItemValuesMapConfiguration : IEntityTypeConfiguration<ItemValueMap>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<ItemValueMap> builder)
- {
- builder.HasKey(e => new { e.ItemValueId, e.ItemId });
- builder.HasOne(e => e.Item);
- builder.HasOne(e => e.ItemValue);
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/MediaStreamInfoConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/MediaStreamInfoConfiguration.cs
deleted file mode 100644
index 7e572f9a39..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/MediaStreamInfoConfiguration.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// People configuration.
-/// </summary>
-public class MediaStreamInfoConfiguration : IEntityTypeConfiguration<MediaStreamInfo>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<MediaStreamInfo> builder)
- {
- builder.HasKey(e => new { e.ItemId, e.StreamIndex });
- builder.HasIndex(e => e.StreamIndex);
- builder.HasIndex(e => e.StreamType);
- builder.HasIndex(e => new { e.StreamIndex, e.StreamType });
- builder.HasIndex(e => new { e.StreamIndex, e.StreamType, e.Language });
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PeopleBaseItemMapConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PeopleBaseItemMapConfiguration.cs
deleted file mode 100644
index cdaee9161c..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PeopleBaseItemMapConfiguration.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// People configuration.
-/// </summary>
-public class PeopleBaseItemMapConfiguration : IEntityTypeConfiguration<PeopleBaseItemMap>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<PeopleBaseItemMap> builder)
- {
- builder.HasKey(e => new { e.ItemId, e.PeopleId });
- builder.HasIndex(e => new { e.ItemId, e.SortOrder });
- builder.HasIndex(e => new { e.ItemId, e.ListOrder });
- builder.HasOne(e => e.Item);
- builder.HasOne(e => e.People);
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PeopleConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PeopleConfiguration.cs
deleted file mode 100644
index f3cccb13fe..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PeopleConfiguration.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// People configuration.
-/// </summary>
-public class PeopleConfiguration : IEntityTypeConfiguration<People>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<People> builder)
- {
- builder.HasKey(e => e.Id);
- builder.HasIndex(e => e.Name);
- builder.HasMany(e => e.BaseItems);
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PermissionConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PermissionConfiguration.cs
deleted file mode 100644
index 240e284c0c..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PermissionConfiguration.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration
-{
- /// <summary>
- /// FluentAPI configuration for the Permission entity.
- /// </summary>
- public class PermissionConfiguration : IEntityTypeConfiguration<Permission>
- {
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<Permission> builder)
- {
- // Used to get a user's permissions or a specific permission for a user.
- // Also prevents multiple values being created for a user.
- // Filtered over non-null user ids for when other entities (groups, API keys) get permissions
- builder
- .HasIndex(p => new { p.UserId, p.Kind })
- .HasFilter("[UserId] IS NOT NULL")
- .IsUnique();
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PreferenceConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PreferenceConfiguration.cs
deleted file mode 100644
index 49c869c6a8..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/PreferenceConfiguration.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration
-{
- /// <summary>
- /// FluentAPI configuration for the Permission entity.
- /// </summary>
- public class PreferenceConfiguration : IEntityTypeConfiguration<Preference>
- {
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<Preference> builder)
- {
- builder
- .HasIndex(p => new { p.UserId, p.Kind })
- .HasFilter("[UserId] IS NOT NULL")
- .IsUnique();
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/TrickplayInfoConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/TrickplayInfoConfiguration.cs
deleted file mode 100644
index dc1c17e5ef..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/TrickplayInfoConfiguration.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration
-{
- /// <summary>
- /// FluentAPI configuration for the TrickplayInfo entity.
- /// </summary>
- public class TrickplayInfoConfiguration : IEntityTypeConfiguration<TrickplayInfo>
- {
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<TrickplayInfo> builder)
- {
- builder.HasKey(info => new { info.ItemId, info.Width });
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserConfiguration.cs
deleted file mode 100644
index bcaa3634ed..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserConfiguration.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration
-{
- /// <summary>
- /// FluentAPI configuration for the User entity.
- /// </summary>
- public class UserConfiguration : IEntityTypeConfiguration<User>
- {
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<User> builder)
- {
- builder
- .Property(user => user.Username);
-
- builder
- .HasOne(u => u.ProfileImage)
- .WithOne()
- .OnDelete(DeleteBehavior.Cascade);
-
- builder
- .HasMany(u => u.Permissions)
- .WithOne()
- .HasForeignKey(p => p.UserId)
- .OnDelete(DeleteBehavior.Cascade);
-
- builder
- .HasMany(u => u.Preferences)
- .WithOne()
- .HasForeignKey(p => p.UserId)
- .OnDelete(DeleteBehavior.Cascade);
-
- builder
- .HasMany(u => u.AccessSchedules)
- .WithOne()
- .OnDelete(DeleteBehavior.Cascade);
-
- builder
- .HasMany(u => u.DisplayPreferences)
- .WithOne()
- .OnDelete(DeleteBehavior.Cascade);
-
- builder
- .HasMany(u => u.ItemDisplayPreferences)
- .WithOne()
- .OnDelete(DeleteBehavior.Cascade);
-
- builder
- .HasIndex(entity => entity.Username)
- .IsUnique();
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserDataConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserDataConfiguration.cs
deleted file mode 100644
index 7bbb28d431..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserDataConfiguration.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using Jellyfin.Data.Entities;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace Jellyfin.Server.Implementations.ModelConfiguration;
-
-/// <summary>
-/// FluentAPI configuration for the UserData entity.
-/// </summary>
-public class UserDataConfiguration : IEntityTypeConfiguration<UserData>
-{
- /// <inheritdoc/>
- public void Configure(EntityTypeBuilder<UserData> builder)
- {
- builder.HasKey(d => new { d.ItemId, d.UserId, d.CustomDataKey });
- builder.HasIndex(d => new { d.ItemId, d.UserId, d.Played });
- builder.HasIndex(d => new { d.ItemId, d.UserId, d.PlaybackPositionTicks });
- builder.HasIndex(d => new { d.ItemId, d.UserId, d.IsFavorite });
- builder.HasIndex(d => new { d.ItemId, d.UserId, d.LastPlayedDate });
- builder.HasOne(e => e.Item);
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Jellyfin.Database.Providers.SqLite.csproj b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Jellyfin.Database.Providers.SqLite.csproj
deleted file mode 100644
index fca872d902..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Jellyfin.Database.Providers.SqLite.csproj
+++ /dev/null
@@ -1,55 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
- <PropertyGroup>
- <TargetFramework>net9.0</TargetFramework>
- <ImplicitUsings>enable</ImplicitUsings>
- <Nullable>enable</Nullable>
- <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
- <GenerateDocumentationFile>true</GenerateDocumentationFile>
- </PropertyGroup>
-
-
- <!-- Code Analyzers -->
- <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
- <PackageReference Include="IDisposableAnalyzers">
- <PrivateAssets>all</PrivateAssets>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
- </PackageReference>
- <PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers">
- <PrivateAssets>all</PrivateAssets>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
- </PackageReference>
- <PackageReference Include="SerilogAnalyzer" PrivateAssets="All" />
- <PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
- <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" PrivateAssets="All" />
- </ItemGroup>
-
- <ItemGroup>
- <Compile Include="..\..\SharedVersion.cs" />
- </ItemGroup>
-
- <ItemGroup>
- <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Design">
- <PrivateAssets>all</PrivateAssets>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
- </PackageReference>
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools">
- <PrivateAssets>all</PrivateAssets>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
- </PackageReference>
- </ItemGroup>
-
- <ItemGroup>
- <ProjectReference Include="..\..\Jellyfin.Data\Jellyfin.Data.csproj" />
- <ProjectReference Include="..\..\MediaBrowser.Controller\MediaBrowser.Controller.csproj" />
- <ProjectReference Include="..\..\MediaBrowser.Model\MediaBrowser.Model.csproj" />
- <!-- <ProjectReference Include="..\..\Jellyfin.Server.Implementations\Jellyfin.Server.Implementations.csproj" /> -->
- </ItemGroup>
-
- <ItemGroup>
- <Folder Include="Properties/" />
- </ItemGroup>
-
-</Project>
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/.gitattributes b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/.gitattributes
deleted file mode 100644
index da5c26f400..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-JellyfinDbModelSnapshot.cs binary
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200514181226_AddActivityLog.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200514181226_AddActivityLog.Designer.cs
deleted file mode 100644
index 80fe784dd7..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200514181226_AddActivityLog.Designer.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-#pragma warning disable CS1591
-
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20200514181226_AddActivityLog")]
- partial class AddActivityLog
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasDefaultSchema("jellyfin")
- .HasAnnotation("ProductVersion", "3.1.3");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasColumnType("TEXT")
- .HasMaxLength(256);
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(256);
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityLogs");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200514181226_AddActivityLog.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200514181226_AddActivityLog.cs
deleted file mode 100644
index 002e5296ee..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200514181226_AddActivityLog.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-#pragma warning disable CS1591
-#pragma warning disable SA1601
-
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- public partial class AddActivityLog : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.EnsureSchema(
- name: "jellyfin");
-
- migrationBuilder.CreateTable(
- name: "ActivityLogs",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- Name = table.Column<string>(maxLength: 512, nullable: false),
- Overview = table.Column<string>(maxLength: 512, nullable: true),
- ShortOverview = table.Column<string>(maxLength: 512, nullable: true),
- Type = table.Column<string>(maxLength: 256, nullable: false),
- UserId = table.Column<Guid>(nullable: false),
- ItemId = table.Column<string>(maxLength: 256, nullable: true),
- DateCreated = table.Column<DateTime>(nullable: false),
- LogSeverity = table.Column<int>(nullable: false),
- RowVersion = table.Column<uint>(nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_ActivityLogs", x => x.Id);
- });
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "ActivityLogs",
- schema: "jellyfin");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200613202153_AddUsers.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200613202153_AddUsers.Designer.cs
deleted file mode 100644
index 7aa4479b3d..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200613202153_AddUsers.Designer.cs
+++ /dev/null
@@ -1,312 +0,0 @@
-#pragma warning disable CS1591
-
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20200613202153_AddUsers")]
- partial class AddUsers
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasDefaultSchema("jellyfin")
- .HasAnnotation("ProductVersion", "3.1.4");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasColumnType("TEXT")
- .HasMaxLength(256);
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(256);
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("Permission_Permissions_Guid");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.HasKey("Id");
-
- b.HasIndex("Preference_Preferences_Guid");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<string>("EasyPassword")
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.HasKey("Id");
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("Permission_Permissions_Guid");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("Preference_Preferences_Guid");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200613202153_AddUsers.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200613202153_AddUsers.cs
deleted file mode 100644
index 706a97ba2b..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200613202153_AddUsers.cs
+++ /dev/null
@@ -1,197 +0,0 @@
-#pragma warning disable CS1591
-#pragma warning disable SA1601
-
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- public partial class AddUsers : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateTable(
- name: "Users",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<Guid>(nullable: false),
- Username = table.Column<string>(maxLength: 255, nullable: false),
- Password = table.Column<string>(maxLength: 65535, nullable: true),
- EasyPassword = table.Column<string>(maxLength: 65535, nullable: true),
- MustUpdatePassword = table.Column<bool>(nullable: false),
- AudioLanguagePreference = table.Column<string>(maxLength: 255, nullable: true),
- AuthenticationProviderId = table.Column<string>(maxLength: 255, nullable: false),
- PasswordResetProviderId = table.Column<string>(maxLength: 255, nullable: false),
- InvalidLoginAttemptCount = table.Column<int>(nullable: false),
- LastActivityDate = table.Column<DateTime>(nullable: true),
- LastLoginDate = table.Column<DateTime>(nullable: true),
- LoginAttemptsBeforeLockout = table.Column<int>(nullable: true),
- SubtitleMode = table.Column<int>(nullable: false),
- PlayDefaultAudioTrack = table.Column<bool>(nullable: false),
- SubtitleLanguagePreference = table.Column<string>(maxLength: 255, nullable: true),
- DisplayMissingEpisodes = table.Column<bool>(nullable: false),
- DisplayCollectionsView = table.Column<bool>(nullable: false),
- EnableLocalPassword = table.Column<bool>(nullable: false),
- HidePlayedInLatest = table.Column<bool>(nullable: false),
- RememberAudioSelections = table.Column<bool>(nullable: false),
- RememberSubtitleSelections = table.Column<bool>(nullable: false),
- EnableNextEpisodeAutoPlay = table.Column<bool>(nullable: false),
- EnableAutoLogin = table.Column<bool>(nullable: false),
- EnableUserPreferenceAccess = table.Column<bool>(nullable: false),
- MaxParentalAgeRating = table.Column<int>(nullable: true),
- RemoteClientBitrateLimit = table.Column<int>(nullable: true),
- InternalId = table.Column<long>(nullable: false),
- SyncPlayAccess = table.Column<int>(nullable: false),
- RowVersion = table.Column<uint>(nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Users", x => x.Id);
- });
-
- migrationBuilder.CreateTable(
- name: "AccessSchedules",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- UserId = table.Column<Guid>(nullable: false),
- DayOfWeek = table.Column<int>(nullable: false),
- StartHour = table.Column<double>(nullable: false),
- EndHour = table.Column<double>(nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_AccessSchedules", x => x.Id);
- table.ForeignKey(
- name: "FK_AccessSchedules_Users_UserId",
- column: x => x.UserId,
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "ImageInfos",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- UserId = table.Column<Guid>(nullable: true),
- Path = table.Column<string>(maxLength: 512, nullable: false),
- LastModified = table.Column<DateTime>(nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_ImageInfos", x => x.Id);
- table.ForeignKey(
- name: "FK_ImageInfos_Users_UserId",
- column: x => x.UserId,
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Restrict);
- });
-
- migrationBuilder.CreateTable(
- name: "Permissions",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- Kind = table.Column<int>(nullable: false),
- Value = table.Column<bool>(nullable: false),
- RowVersion = table.Column<uint>(nullable: false),
- Permission_Permissions_Guid = table.Column<Guid>(nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Permissions", x => x.Id);
- table.ForeignKey(
- name: "FK_Permissions_Users_Permission_Permissions_Guid",
- column: x => x.Permission_Permissions_Guid,
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Restrict);
- });
-
- migrationBuilder.CreateTable(
- name: "Preferences",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- Kind = table.Column<int>(nullable: false),
- Value = table.Column<string>(maxLength: 65535, nullable: false),
- RowVersion = table.Column<uint>(nullable: false),
- Preference_Preferences_Guid = table.Column<Guid>(nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Preferences", x => x.Id);
- table.ForeignKey(
- name: "FK_Preferences_Users_Preference_Preferences_Guid",
- column: x => x.Preference_Preferences_Guid,
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Restrict);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_AccessSchedules_UserId",
- schema: "jellyfin",
- table: "AccessSchedules",
- column: "UserId");
-
- migrationBuilder.CreateIndex(
- name: "IX_ImageInfos_UserId",
- schema: "jellyfin",
- table: "ImageInfos",
- column: "UserId",
- unique: true);
-
- migrationBuilder.CreateIndex(
- name: "IX_Permissions_Permission_Permissions_Guid",
- schema: "jellyfin",
- table: "Permissions",
- column: "Permission_Permissions_Guid");
-
- migrationBuilder.CreateIndex(
- name: "IX_Preferences_Preference_Preferences_Guid",
- schema: "jellyfin",
- table: "Preferences",
- column: "Preference_Preferences_Guid");
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "AccessSchedules",
- schema: "jellyfin");
-
- migrationBuilder.DropTable(
- name: "ImageInfos",
- schema: "jellyfin");
-
- migrationBuilder.DropTable(
- name: "Permissions",
- schema: "jellyfin");
-
- migrationBuilder.DropTable(
- name: "Preferences",
- schema: "jellyfin");
-
- migrationBuilder.DropTable(
- name: "Users",
- schema: "jellyfin");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200728005145_AddDisplayPreferences.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200728005145_AddDisplayPreferences.Designer.cs
deleted file mode 100644
index 3860c851d0..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200728005145_AddDisplayPreferences.Designer.cs
+++ /dev/null
@@ -1,459 +0,0 @@
-#pragma warning disable CS1591
-
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20200728005145_AddDisplayPreferences")]
- partial class AddDisplayPreferences
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasDefaultSchema("jellyfin")
- .HasAnnotation("ProductVersion", "3.1.6");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasColumnType("TEXT")
- .HasMaxLength(256);
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(256);
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<string>("DashboardTheme")
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(64);
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("Permission_Permissions_Guid");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.HasKey("Id");
-
- b.HasIndex("Preference_Preferences_Guid");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<string>("EasyPassword")
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.HasKey("Id");
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("DisplayPreferences")
- .HasForeignKey("Jellyfin.Data.Entities.DisplayPreferences", "UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("Permission_Permissions_Guid");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("Preference_Preferences_Guid");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200728005145_AddDisplayPreferences.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200728005145_AddDisplayPreferences.cs
deleted file mode 100644
index 8cd5516423..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200728005145_AddDisplayPreferences.cs
+++ /dev/null
@@ -1,132 +0,0 @@
-#pragma warning disable CS1591
-#pragma warning disable SA1601
-
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- public partial class AddDisplayPreferences : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateTable(
- name: "DisplayPreferences",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- UserId = table.Column<Guid>(nullable: false),
- Client = table.Column<string>(maxLength: 32, nullable: false),
- ShowSidebar = table.Column<bool>(nullable: false),
- ShowBackdrop = table.Column<bool>(nullable: false),
- ScrollDirection = table.Column<int>(nullable: false),
- IndexBy = table.Column<int>(nullable: true),
- SkipForwardLength = table.Column<int>(nullable: false),
- SkipBackwardLength = table.Column<int>(nullable: false),
- ChromecastVersion = table.Column<int>(nullable: false),
- EnableNextVideoInfoOverlay = table.Column<bool>(nullable: false),
- DashboardTheme = table.Column<string>(maxLength: 32, nullable: true),
- TvHome = table.Column<string>(maxLength: 32, nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_DisplayPreferences", x => x.Id);
- table.ForeignKey(
- name: "FK_DisplayPreferences_Users_UserId",
- column: x => x.UserId,
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "ItemDisplayPreferences",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- UserId = table.Column<Guid>(nullable: false),
- ItemId = table.Column<Guid>(nullable: false),
- Client = table.Column<string>(maxLength: 32, nullable: false),
- ViewType = table.Column<int>(nullable: false),
- RememberIndexing = table.Column<bool>(nullable: false),
- IndexBy = table.Column<int>(nullable: true),
- RememberSorting = table.Column<bool>(nullable: false),
- SortBy = table.Column<string>(maxLength: 64, nullable: false),
- SortOrder = table.Column<int>(nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_ItemDisplayPreferences", x => x.Id);
- table.ForeignKey(
- name: "FK_ItemDisplayPreferences_Users_UserId",
- column: x => x.UserId,
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "HomeSection",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- DisplayPreferencesId = table.Column<int>(nullable: false),
- Order = table.Column<int>(nullable: false),
- Type = table.Column<int>(nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_HomeSection", x => x.Id);
- table.ForeignKey(
- name: "FK_HomeSection_DisplayPreferences_DisplayPreferencesId",
- column: x => x.DisplayPreferencesId,
- principalSchema: "jellyfin",
- principalTable: "DisplayPreferences",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_DisplayPreferences_UserId",
- schema: "jellyfin",
- table: "DisplayPreferences",
- column: "UserId",
- unique: true);
-
- migrationBuilder.CreateIndex(
- name: "IX_HomeSection_DisplayPreferencesId",
- schema: "jellyfin",
- table: "HomeSection",
- column: "DisplayPreferencesId");
-
- migrationBuilder.CreateIndex(
- name: "IX_ItemDisplayPreferences_UserId",
- schema: "jellyfin",
- table: "ItemDisplayPreferences",
- column: "UserId");
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "HomeSection",
- schema: "jellyfin");
-
- migrationBuilder.DropTable(
- name: "ItemDisplayPreferences",
- schema: "jellyfin");
-
- migrationBuilder.DropTable(
- name: "DisplayPreferences",
- schema: "jellyfin");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200905220533_FixDisplayPreferencesIndex.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200905220533_FixDisplayPreferencesIndex.Designer.cs
deleted file mode 100644
index 1134f7aa42..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200905220533_FixDisplayPreferencesIndex.Designer.cs
+++ /dev/null
@@ -1,461 +0,0 @@
-#pragma warning disable CS1591
-
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20200905220533_FixDisplayPreferencesIndex")]
- partial class FixDisplayPreferencesIndex
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasDefaultSchema("jellyfin")
- .HasAnnotation("ProductVersion", "3.1.7");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasColumnType("TEXT")
- .HasMaxLength(256);
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(256);
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<string>("DashboardTheme")
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.HasIndex("UserId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(64);
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("Permission_Permissions_Guid");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.HasKey("Id");
-
- b.HasIndex("Preference_Preferences_Guid");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<string>("EasyPassword")
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.HasKey("Id");
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("DisplayPreferences")
- .HasForeignKey("Jellyfin.Data.Entities.DisplayPreferences", "UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("Permission_Permissions_Guid");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("Preference_Preferences_Guid");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200905220533_FixDisplayPreferencesIndex.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200905220533_FixDisplayPreferencesIndex.cs
deleted file mode 100644
index 91d2b190db..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20200905220533_FixDisplayPreferencesIndex.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-#pragma warning disable CS1591
-#pragma warning disable SA1601
-
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- public partial class FixDisplayPreferencesIndex : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropIndex(
- name: "IX_DisplayPreferences_UserId",
- schema: "jellyfin",
- table: "DisplayPreferences");
-
- migrationBuilder.CreateIndex(
- name: "IX_DisplayPreferences_UserId",
- schema: "jellyfin",
- table: "DisplayPreferences",
- column: "UserId");
-
- migrationBuilder.CreateIndex(
- name: "IX_DisplayPreferences_UserId_Client",
- schema: "jellyfin",
- table: "DisplayPreferences",
- columns: new[] { "UserId", "Client" },
- unique: true);
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropIndex(
- name: "IX_DisplayPreferences_UserId",
- schema: "jellyfin",
- table: "DisplayPreferences");
-
- migrationBuilder.DropIndex(
- name: "IX_DisplayPreferences_UserId_Client",
- schema: "jellyfin",
- table: "DisplayPreferences");
-
- migrationBuilder.CreateIndex(
- name: "IX_DisplayPreferences_UserId",
- schema: "jellyfin",
- table: "DisplayPreferences",
- column: "UserId",
- unique: true);
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201004171403_AddMaxActiveSessions.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201004171403_AddMaxActiveSessions.Designer.cs
deleted file mode 100644
index 607310caae..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201004171403_AddMaxActiveSessions.Designer.cs
+++ /dev/null
@@ -1,464 +0,0 @@
-#pragma warning disable CS1591
-
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20201004171403_AddMaxActiveSessions")]
- partial class AddMaxActiveSessions
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasDefaultSchema("jellyfin")
- .HasAnnotation("ProductVersion", "3.1.8");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasColumnType("TEXT")
- .HasMaxLength(256);
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(256);
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<string>("DashboardTheme")
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.HasIndex("UserId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(512);
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(32);
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(64);
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("Permission_Permissions_Guid");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.HasKey("Id");
-
- b.HasIndex("Preference_Preferences_Guid");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<string>("EasyPassword")
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasColumnType("TEXT")
- .HasMaxLength(65535);
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasColumnType("TEXT")
- .HasMaxLength(255);
-
- b.HasKey("Id");
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("DisplayPreferences")
- .HasForeignKey("Jellyfin.Data.Entities.DisplayPreferences", "UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("Permission_Permissions_Guid");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("Preference_Preferences_Guid");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201004171403_AddMaxActiveSessions.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201004171403_AddMaxActiveSessions.cs
deleted file mode 100644
index e37b4e6961..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201004171403_AddMaxActiveSessions.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma warning disable CS1591
-#pragma warning disable SA1601
-
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- public partial class AddMaxActiveSessions : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AddColumn<int>(
- name: "MaxActiveSessions",
- schema: "jellyfin",
- table: "Users",
- nullable: false,
- defaultValue: 0);
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropColumn(
- name: "MaxActiveSessions",
- schema: "jellyfin",
- table: "Users");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201204223655_AddCustomDisplayPreferences.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201204223655_AddCustomDisplayPreferences.Designer.cs
deleted file mode 100644
index 02c3fc7532..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201204223655_AddCustomDisplayPreferences.Designer.cs
+++ /dev/null
@@ -1,522 +0,0 @@
-#pragma warning disable CS1591
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20201204223655_AddCustomDisplayPreferences")]
- partial class AddCustomDisplayPreferences
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasDefaultSchema("jellyfin")
- .HasAnnotation("ProductVersion", "5.0.0");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("Permission_Permissions_Guid");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Preference_Preferences_Guid");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<string>("EasyPassword")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("DisplayPreferences")
- .HasForeignKey("Jellyfin.Data.Entities.DisplayPreferences", "UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("Permission_Permissions_Guid");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("Preference_Preferences_Guid");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences")
- .IsRequired();
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201204223655_AddCustomDisplayPreferences.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201204223655_AddCustomDisplayPreferences.cs
deleted file mode 100644
index ce2b21d0c1..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20201204223655_AddCustomDisplayPreferences.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-#pragma warning disable CS1591
-// <auto-generated />
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- public partial class AddCustomDisplayPreferences : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropIndex(
- name: "IX_DisplayPreferences_UserId_Client",
- schema: "jellyfin",
- table: "DisplayPreferences");
-
- migrationBuilder.AlterColumn<int>(
- name: "MaxActiveSessions",
- schema: "jellyfin",
- table: "Users",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AddColumn<Guid>(
- name: "ItemId",
- schema: "jellyfin",
- table: "DisplayPreferences",
- type: "TEXT",
- nullable: false,
- defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
-
- migrationBuilder.CreateTable(
- name: "CustomItemDisplayPreferences",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(type: "INTEGER", nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- UserId = table.Column<Guid>(type: "TEXT", nullable: false),
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- Client = table.Column<string>(type: "TEXT", maxLength: 32, nullable: false),
- Key = table.Column<string>(type: "TEXT", nullable: false),
- Value = table.Column<string>(type: "TEXT", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_CustomItemDisplayPreferences", x => x.Id);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_DisplayPreferences_UserId_ItemId_Client",
- schema: "jellyfin",
- table: "DisplayPreferences",
- columns: new[] { "UserId", "ItemId", "Client" },
- unique: true);
-
- migrationBuilder.CreateIndex(
- name: "IX_CustomItemDisplayPreferences_UserId",
- schema: "jellyfin",
- table: "CustomItemDisplayPreferences",
- column: "UserId");
-
- migrationBuilder.CreateIndex(
- name: "IX_CustomItemDisplayPreferences_UserId_ItemId_Client_Key",
- schema: "jellyfin",
- table: "CustomItemDisplayPreferences",
- columns: new[] { "UserId", "ItemId", "Client", "Key" },
- unique: true);
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "CustomItemDisplayPreferences",
- schema: "jellyfin");
-
- migrationBuilder.DropIndex(
- name: "IX_DisplayPreferences_UserId_ItemId_Client",
- schema: "jellyfin",
- table: "DisplayPreferences");
-
- migrationBuilder.DropColumn(
- name: "ItemId",
- schema: "jellyfin",
- table: "DisplayPreferences");
-
- migrationBuilder.AlterColumn<int>(
- name: "MaxActiveSessions",
- schema: "jellyfin",
- table: "Users",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.CreateIndex(
- name: "IX_DisplayPreferences_UserId_Client",
- schema: "jellyfin",
- table: "DisplayPreferences",
- columns: new[] { "UserId", "Client" },
- unique: true);
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210320181425_AddIndexesAndCollations.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210320181425_AddIndexesAndCollations.Designer.cs
deleted file mode 100644
index 1cfd7112ce..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210320181425_AddIndexesAndCollations.Designer.cs
+++ /dev/null
@@ -1,535 +0,0 @@
-#pragma warning disable CS1591
-
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20210320181425_AddIndexesAndCollations")]
- partial class AddIndexesAndCollations
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasDefaultSchema("jellyfin")
- .HasAnnotation("ProductVersion", "5.0.3");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<string>("EasyPassword")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210320181425_AddIndexesAndCollations.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210320181425_AddIndexesAndCollations.cs
deleted file mode 100644
index 3acd5e7b5b..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210320181425_AddIndexesAndCollations.cs
+++ /dev/null
@@ -1,240 +0,0 @@
-#pragma warning disable CS1591
-#pragma warning disable SA1601
-
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- public partial class AddIndexesAndCollations : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_ImageInfos_Users_UserId",
- schema: "jellyfin",
- table: "ImageInfos");
-
- migrationBuilder.DropForeignKey(
- name: "FK_Permissions_Users_Permission_Permissions_Guid",
- schema: "jellyfin",
- table: "Permissions");
-
- migrationBuilder.DropForeignKey(
- name: "FK_Preferences_Users_Preference_Preferences_Guid",
- schema: "jellyfin",
- table: "Preferences");
-
- migrationBuilder.DropIndex(
- name: "IX_Preferences_Preference_Preferences_Guid",
- schema: "jellyfin",
- table: "Preferences");
-
- migrationBuilder.DropIndex(
- name: "IX_Permissions_Permission_Permissions_Guid",
- schema: "jellyfin",
- table: "Permissions");
-
- migrationBuilder.DropIndex(
- name: "IX_DisplayPreferences_UserId",
- schema: "jellyfin",
- table: "DisplayPreferences");
-
- migrationBuilder.DropIndex(
- name: "IX_CustomItemDisplayPreferences_UserId",
- schema: "jellyfin",
- table: "CustomItemDisplayPreferences");
-
- migrationBuilder.AlterColumn<string>(
- name: "Username",
- schema: "jellyfin",
- table: "Users",
- type: "TEXT",
- maxLength: 255,
- nullable: false,
- collation: "NOCASE",
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldMaxLength: 255);
-
- migrationBuilder.AddColumn<Guid>(
- name: "UserId",
- schema: "jellyfin",
- table: "Preferences",
- type: "TEXT",
- nullable: true);
-
- migrationBuilder.AddColumn<Guid>(
- name: "UserId",
- schema: "jellyfin",
- table: "Permissions",
- type: "TEXT",
- nullable: true);
-
- migrationBuilder.Sql("UPDATE Preferences SET UserId = Preference_Preferences_Guid");
- migrationBuilder.Sql("UPDATE Permissions SET UserId = Permission_Permissions_Guid");
-
- migrationBuilder.CreateIndex(
- name: "IX_Users_Username",
- schema: "jellyfin",
- table: "Users",
- column: "Username",
- unique: true);
-
- migrationBuilder.CreateIndex(
- name: "IX_Preferences_UserId_Kind",
- schema: "jellyfin",
- table: "Preferences",
- columns: new[] { "UserId", "Kind" },
- unique: true,
- filter: "[UserId] IS NOT NULL");
-
- migrationBuilder.CreateIndex(
- name: "IX_Permissions_UserId_Kind",
- schema: "jellyfin",
- table: "Permissions",
- columns: new[] { "UserId", "Kind" },
- unique: true,
- filter: "[UserId] IS NOT NULL");
-
- migrationBuilder.AddForeignKey(
- name: "FK_ImageInfos_Users_UserId",
- schema: "jellyfin",
- table: "ImageInfos",
- column: "UserId",
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
-
- migrationBuilder.AddForeignKey(
- name: "FK_Permissions_Users_UserId",
- schema: "jellyfin",
- table: "Permissions",
- column: "UserId",
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
-
- migrationBuilder.AddForeignKey(
- name: "FK_Preferences_Users_UserId",
- schema: "jellyfin",
- table: "Preferences",
- column: "UserId",
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_ImageInfos_Users_UserId",
- schema: "jellyfin",
- table: "ImageInfos");
-
- migrationBuilder.DropForeignKey(
- name: "FK_Permissions_Users_UserId",
- schema: "jellyfin",
- table: "Permissions");
-
- migrationBuilder.DropForeignKey(
- name: "FK_Preferences_Users_UserId",
- schema: "jellyfin",
- table: "Preferences");
-
- migrationBuilder.DropIndex(
- name: "IX_Users_Username",
- schema: "jellyfin",
- table: "Users");
-
- migrationBuilder.DropIndex(
- name: "IX_Preferences_UserId_Kind",
- schema: "jellyfin",
- table: "Preferences");
-
- migrationBuilder.DropIndex(
- name: "IX_Permissions_UserId_Kind",
- schema: "jellyfin",
- table: "Permissions");
-
- migrationBuilder.DropColumn(
- name: "UserId",
- schema: "jellyfin",
- table: "Preferences");
-
- migrationBuilder.DropColumn(
- name: "UserId",
- schema: "jellyfin",
- table: "Permissions");
-
- migrationBuilder.AlterColumn<string>(
- name: "Username",
- schema: "jellyfin",
- table: "Users",
- type: "TEXT",
- maxLength: 255,
- nullable: false,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldMaxLength: 255,
- oldCollation: "NOCASE");
-
- migrationBuilder.CreateIndex(
- name: "IX_Preferences_Preference_Preferences_Guid",
- schema: "jellyfin",
- table: "Preferences",
- column: "Preference_Preferences_Guid");
-
- migrationBuilder.CreateIndex(
- name: "IX_Permissions_Permission_Permissions_Guid",
- schema: "jellyfin",
- table: "Permissions",
- column: "Permission_Permissions_Guid");
-
- migrationBuilder.CreateIndex(
- name: "IX_DisplayPreferences_UserId",
- schema: "jellyfin",
- table: "DisplayPreferences",
- column: "UserId");
-
- migrationBuilder.CreateIndex(
- name: "IX_CustomItemDisplayPreferences_UserId",
- schema: "jellyfin",
- table: "CustomItemDisplayPreferences",
- column: "UserId");
-
- migrationBuilder.AddForeignKey(
- name: "FK_ImageInfos_Users_UserId",
- schema: "jellyfin",
- table: "ImageInfos",
- column: "UserId",
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Restrict);
-
- migrationBuilder.AddForeignKey(
- name: "FK_Permissions_Users_Permission_Permissions_Guid",
- schema: "jellyfin",
- table: "Permissions",
- column: "Permission_Permissions_Guid",
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Restrict);
-
- migrationBuilder.AddForeignKey(
- name: "FK_Preferences_Users_Preference_Preferences_Guid",
- schema: "jellyfin",
- table: "Preferences",
- column: "Preference_Preferences_Guid",
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Restrict);
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210407110544_NullableCustomPrefValue.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210407110544_NullableCustomPrefValue.Designer.cs
deleted file mode 100644
index ecf7af4952..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210407110544_NullableCustomPrefValue.Designer.cs
+++ /dev/null
@@ -1,520 +0,0 @@
-#pragma warning disable CS1591
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20210407110544_NullableCustomPrefValue")]
- partial class NullableCustomPrefValue
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasDefaultSchema("jellyfin")
- .HasAnnotation("ProductVersion", "5.0.3");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("Permission_Permissions_Guid");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Preference_Preferences_Guid");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<string>("EasyPassword")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("Permission_Permissions_Guid");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("Preference_Preferences_Guid");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210407110544_NullableCustomPrefValue.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210407110544_NullableCustomPrefValue.cs
deleted file mode 100644
index a6b169a614..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210407110544_NullableCustomPrefValue.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-#pragma warning disable CS1591
-// <auto-generated />
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- public partial class NullableCustomPrefValue : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<string>(
- name: "Value",
- schema: "jellyfin",
- table: "CustomItemDisplayPreferences",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<string>(
- name: "Value",
- schema: "jellyfin",
- table: "CustomItemDisplayPreferences",
- type: "TEXT",
- nullable: false,
- defaultValue: "",
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210814002109_AddDevices.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210814002109_AddDevices.Designer.cs
deleted file mode 100644
index dccba6f773..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210814002109_AddDevices.Designer.cs
+++ /dev/null
@@ -1,653 +0,0 @@
-#pragma warning disable CS1591
-
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20210814002109_AddDevices")]
- partial class AddDevices
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasDefaultSchema("jellyfin")
- .HasAnnotation("ProductVersion", "5.0.7");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<string>("EasyPassword")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210814002109_AddDevices.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210814002109_AddDevices.cs
deleted file mode 100644
index bf90044cb4..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20210814002109_AddDevices.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-#pragma warning disable CS1591, SA1601
-
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- public partial class AddDevices : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateTable(
- name: "ApiKeys",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(type: "INTEGER", nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- DateCreated = table.Column<DateTime>(type: "TEXT", nullable: false),
- DateLastActivity = table.Column<DateTime>(type: "TEXT", nullable: false),
- Name = table.Column<string>(type: "TEXT", maxLength: 64, nullable: false),
- AccessToken = table.Column<string>(type: "TEXT", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_ApiKeys", x => x.Id);
- });
-
- migrationBuilder.CreateTable(
- name: "DeviceOptions",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(type: "INTEGER", nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- DeviceId = table.Column<string>(type: "TEXT", nullable: false),
- CustomName = table.Column<string>(type: "TEXT", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_DeviceOptions", x => x.Id);
- });
-
- migrationBuilder.CreateTable(
- name: "Devices",
- schema: "jellyfin",
- columns: table => new
- {
- Id = table.Column<int>(type: "INTEGER", nullable: false)
- .Annotation("Sqlite:Autoincrement", true),
- UserId = table.Column<Guid>(type: "TEXT", nullable: false),
- AccessToken = table.Column<string>(type: "TEXT", nullable: false),
- AppName = table.Column<string>(type: "TEXT", maxLength: 64, nullable: false),
- AppVersion = table.Column<string>(type: "TEXT", maxLength: 32, nullable: false),
- DeviceName = table.Column<string>(type: "TEXT", maxLength: 64, nullable: false),
- DeviceId = table.Column<string>(type: "TEXT", maxLength: 256, nullable: false),
- IsActive = table.Column<bool>(type: "INTEGER", nullable: false),
- DateCreated = table.Column<DateTime>(type: "TEXT", nullable: false),
- DateModified = table.Column<DateTime>(type: "TEXT", nullable: false),
- DateLastActivity = table.Column<DateTime>(type: "TEXT", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Devices", x => x.Id);
- table.ForeignKey(
- name: "FK_Devices_Users_UserId",
- column: x => x.UserId,
- principalSchema: "jellyfin",
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_ApiKeys_AccessToken",
- schema: "jellyfin",
- table: "ApiKeys",
- column: "AccessToken",
- unique: true);
-
- migrationBuilder.CreateIndex(
- name: "IX_DeviceOptions_DeviceId",
- schema: "jellyfin",
- table: "DeviceOptions",
- column: "DeviceId",
- unique: true);
-
- migrationBuilder.CreateIndex(
- name: "IX_Devices_AccessToken_DateLastActivity",
- schema: "jellyfin",
- table: "Devices",
- columns: new[] { "AccessToken", "DateLastActivity" });
-
- migrationBuilder.CreateIndex(
- name: "IX_Devices_DeviceId",
- schema: "jellyfin",
- table: "Devices",
- column: "DeviceId");
-
- migrationBuilder.CreateIndex(
- name: "IX_Devices_DeviceId_DateLastActivity",
- schema: "jellyfin",
- table: "Devices",
- columns: new[] { "DeviceId", "DateLastActivity" });
-
- migrationBuilder.CreateIndex(
- name: "IX_Devices_UserId_DeviceId",
- schema: "jellyfin",
- table: "Devices",
- columns: new[] { "UserId", "DeviceId" });
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "ApiKeys",
- schema: "jellyfin");
-
- migrationBuilder.DropTable(
- name: "DeviceOptions",
- schema: "jellyfin");
-
- migrationBuilder.DropTable(
- name: "Devices",
- schema: "jellyfin");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20221022080052_AddIndexActivityLogsDateCreated.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20221022080052_AddIndexActivityLogsDateCreated.Designer.cs
deleted file mode 100644
index e821c106e3..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20221022080052_AddIndexActivityLogsDateCreated.Designer.cs
+++ /dev/null
@@ -1,657 +0,0 @@
-#pragma warning disable CS1591
-
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20221022080052_AddIndexActivityLogsDateCreated")]
- partial class AddIndexActivityLogsDateCreated
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasDefaultSchema("jellyfin")
- .HasAnnotation("ProductVersion", "6.0.9");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<string>("EasyPassword")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users", "jellyfin");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20221022080052_AddIndexActivityLogsDateCreated.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20221022080052_AddIndexActivityLogsDateCreated.cs
deleted file mode 100644
index 9d5d7632bf..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20221022080052_AddIndexActivityLogsDateCreated.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma warning disable CS1591, SA1601
-
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- public partial class AddIndexActivityLogsDateCreated : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateIndex(
- name: "IX_ActivityLogs_DateCreated",
- schema: "jellyfin",
- table: "ActivityLogs",
- column: "DateCreated");
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropIndex(
- name: "IX_ActivityLogs_DateCreated",
- schema: "jellyfin",
- table: "ActivityLogs");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230526173516_RemoveEasyPassword.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230526173516_RemoveEasyPassword.Designer.cs
deleted file mode 100644
index 360fa03768..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230526173516_RemoveEasyPassword.Designer.cs
+++ /dev/null
@@ -1,650 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20230526173516_RemoveEasyPassword")]
- partial class RemoveEasyPassword
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "7.0.5");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230526173516_RemoveEasyPassword.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230526173516_RemoveEasyPassword.cs
deleted file mode 100644
index 354d91c380..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230526173516_RemoveEasyPassword.cs
+++ /dev/null
@@ -1,164 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class RemoveEasyPassword : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropColumn(
- name: "EasyPassword",
- schema: "jellyfin",
- table: "Users");
-
- migrationBuilder.RenameTable(
- name: "Users",
- schema: "jellyfin",
- newName: "Users");
-
- migrationBuilder.RenameTable(
- name: "Preferences",
- schema: "jellyfin",
- newName: "Preferences");
-
- migrationBuilder.RenameTable(
- name: "Permissions",
- schema: "jellyfin",
- newName: "Permissions");
-
- migrationBuilder.RenameTable(
- name: "ItemDisplayPreferences",
- schema: "jellyfin",
- newName: "ItemDisplayPreferences");
-
- migrationBuilder.RenameTable(
- name: "ImageInfos",
- schema: "jellyfin",
- newName: "ImageInfos");
-
- migrationBuilder.RenameTable(
- name: "HomeSection",
- schema: "jellyfin",
- newName: "HomeSection");
-
- migrationBuilder.RenameTable(
- name: "DisplayPreferences",
- schema: "jellyfin",
- newName: "DisplayPreferences");
-
- migrationBuilder.RenameTable(
- name: "Devices",
- schema: "jellyfin",
- newName: "Devices");
-
- migrationBuilder.RenameTable(
- name: "DeviceOptions",
- schema: "jellyfin",
- newName: "DeviceOptions");
-
- migrationBuilder.RenameTable(
- name: "CustomItemDisplayPreferences",
- schema: "jellyfin",
- newName: "CustomItemDisplayPreferences");
-
- migrationBuilder.RenameTable(
- name: "ApiKeys",
- schema: "jellyfin",
- newName: "ApiKeys");
-
- migrationBuilder.RenameTable(
- name: "ActivityLogs",
- schema: "jellyfin",
- newName: "ActivityLogs");
-
- migrationBuilder.RenameTable(
- name: "AccessSchedules",
- schema: "jellyfin",
- newName: "AccessSchedules");
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.EnsureSchema(
- name: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "Users",
- newName: "Users",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "Preferences",
- newName: "Preferences",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "Permissions",
- newName: "Permissions",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "ItemDisplayPreferences",
- newName: "ItemDisplayPreferences",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "ImageInfos",
- newName: "ImageInfos",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "HomeSection",
- newName: "HomeSection",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "DisplayPreferences",
- newName: "DisplayPreferences",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "Devices",
- newName: "Devices",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "DeviceOptions",
- newName: "DeviceOptions",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "CustomItemDisplayPreferences",
- newName: "CustomItemDisplayPreferences",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "ApiKeys",
- newName: "ApiKeys",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "ActivityLogs",
- newName: "ActivityLogs",
- newSchema: "jellyfin");
-
- migrationBuilder.RenameTable(
- name: "AccessSchedules",
- newName: "AccessSchedules",
- newSchema: "jellyfin");
-
- migrationBuilder.AddColumn<string>(
- name: "EasyPassword",
- schema: "jellyfin",
- table: "Users",
- type: "TEXT",
- maxLength: 65535,
- nullable: true);
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230626233818_AddTrickplayInfos.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230626233818_AddTrickplayInfos.Designer.cs
deleted file mode 100644
index 17d33845f5..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230626233818_AddTrickplayInfos.Designer.cs
+++ /dev/null
@@ -1,681 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20230626233818_AddTrickplayInfos")]
- partial class AddTrickplayInfos
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "7.0.7");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230626233818_AddTrickplayInfos.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230626233818_AddTrickplayInfos.cs
deleted file mode 100644
index 85f1b5b7dd..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230626233818_AddTrickplayInfos.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class AddTrickplayInfos : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateTable(
- name: "TrickplayInfos",
- columns: table => new
- {
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- Width = table.Column<int>(type: "INTEGER", nullable: false),
- Height = table.Column<int>(type: "INTEGER", nullable: false),
- TileWidth = table.Column<int>(type: "INTEGER", nullable: false),
- TileHeight = table.Column<int>(type: "INTEGER", nullable: false),
- ThumbnailCount = table.Column<int>(type: "INTEGER", nullable: false),
- Interval = table.Column<int>(type: "INTEGER", nullable: false),
- Bandwidth = table.Column<int>(type: "INTEGER", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_TrickplayInfos", x => new { x.ItemId, x.Width });
- });
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "TrickplayInfos");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230923170422_UserCastReceiver.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230923170422_UserCastReceiver.Designer.cs
deleted file mode 100644
index 4c09176691..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230923170422_UserCastReceiver.Designer.cs
+++ /dev/null
@@ -1,654 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20230923170422_UserCastReceiver")]
- partial class UserCastReceiver
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "7.0.11");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230923170422_UserCastReceiver.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230923170422_UserCastReceiver.cs
deleted file mode 100644
index 5919e46657..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20230923170422_UserCastReceiver.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class UserCastReceiver : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AddColumn<string>(
- name: "CastReceiverId",
- table: "Users",
- type: "TEXT",
- maxLength: 32,
- nullable: true);
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropColumn(
- name: "CastReceiverId",
- table: "Users");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240729140605_AddMediaSegments.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240729140605_AddMediaSegments.Designer.cs
deleted file mode 100644
index 35a3cdad2d..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240729140605_AddMediaSegments.Designer.cs
+++ /dev/null
@@ -1,708 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20240729140605_AddMediaSegments")]
- partial class AddMediaSegments
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "8.0.7");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240729140605_AddMediaSegments.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240729140605_AddMediaSegments.cs
deleted file mode 100644
index 18164d9998..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240729140605_AddMediaSegments.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class AddMediaSegments : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateTable(
- name: "MediaSegments",
- columns: table => new
- {
- Id = table.Column<Guid>(type: "TEXT", nullable: false),
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- Type = table.Column<int>(type: "INTEGER", nullable: false),
- EndTicks = table.Column<long>(type: "INTEGER", nullable: false),
- StartTicks = table.Column<long>(type: "INTEGER", nullable: false),
- SegmentProviderId = table.Column<string>(type: "TEXT", nullable: false),
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_MediaSegments", x => x.Id);
- });
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "MediaSegments");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.Designer.cs
deleted file mode 100644
index 8dba31a67f..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.Designer.cs
+++ /dev/null
@@ -1,712 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20240928082930_MarkSegmentProviderIdNonNullable")]
- partial class MarkSegmentProviderIdNonNullable
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "8.0.8");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.cs
deleted file mode 100644
index 55b90a54d7..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class MarkSegmentProviderIdNonNullable : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<string>(
- name: "SegmentProviderId",
- table: "MediaSegments",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<string>(
- name: "SegmentProviderId",
- table: "MediaSegments",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241020103111_LibraryDbMigration.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241020103111_LibraryDbMigration.Designer.cs
deleted file mode 100644
index 27745f601a..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241020103111_LibraryDbMigration.Designer.cs
+++ /dev/null
@@ -1,1607 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20241020103111_LibraryDbMigration")]
- partial class LibraryDbMigration
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "8.0.10");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("BaseItemEntityId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("BaseItemEntityId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue");
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .HasColumnType("TEXT");
-
- b.Property<float>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .HasColumnType("TEXT");
-
- b.Property<int>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .HasColumnType("TEXT");
-
- b.Property<float>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .HasColumnType("TEXT");
-
- b.Property<float>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", null)
- .WithMany("AncestorIds")
- .HasForeignKey("BaseItemEntityId");
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany()
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("AncestorIds");
-
- b.Navigation("Chapters");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241020103111_LibraryDbMigration.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241020103111_LibraryDbMigration.cs
deleted file mode 100644
index 8cc7fb452d..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241020103111_LibraryDbMigration.cs
+++ /dev/null
@@ -1,639 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class LibraryDbMigration : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateTable(
- name: "BaseItems",
- columns: table => new
- {
- Id = table.Column<Guid>(type: "TEXT", nullable: false),
- Type = table.Column<string>(type: "TEXT", nullable: false),
- Data = table.Column<string>(type: "TEXT", nullable: true),
- Path = table.Column<string>(type: "TEXT", nullable: true),
- StartDate = table.Column<DateTime>(type: "TEXT", nullable: false),
- EndDate = table.Column<DateTime>(type: "TEXT", nullable: false),
- ChannelId = table.Column<string>(type: "TEXT", nullable: true),
- IsMovie = table.Column<bool>(type: "INTEGER", nullable: false),
- CommunityRating = table.Column<float>(type: "REAL", nullable: true),
- CustomRating = table.Column<string>(type: "TEXT", nullable: true),
- IndexNumber = table.Column<int>(type: "INTEGER", nullable: true),
- IsLocked = table.Column<bool>(type: "INTEGER", nullable: false),
- Name = table.Column<string>(type: "TEXT", nullable: true),
- OfficialRating = table.Column<string>(type: "TEXT", nullable: true),
- MediaType = table.Column<string>(type: "TEXT", nullable: true),
- Overview = table.Column<string>(type: "TEXT", nullable: true),
- ParentIndexNumber = table.Column<int>(type: "INTEGER", nullable: true),
- PremiereDate = table.Column<DateTime>(type: "TEXT", nullable: true),
- ProductionYear = table.Column<int>(type: "INTEGER", nullable: true),
- Genres = table.Column<string>(type: "TEXT", nullable: true),
- SortName = table.Column<string>(type: "TEXT", nullable: true),
- ForcedSortName = table.Column<string>(type: "TEXT", nullable: true),
- RunTimeTicks = table.Column<long>(type: "INTEGER", nullable: true),
- DateCreated = table.Column<DateTime>(type: "TEXT", nullable: true),
- DateModified = table.Column<DateTime>(type: "TEXT", nullable: true),
- IsSeries = table.Column<bool>(type: "INTEGER", nullable: false),
- EpisodeTitle = table.Column<string>(type: "TEXT", nullable: true),
- IsRepeat = table.Column<bool>(type: "INTEGER", nullable: false),
- PreferredMetadataLanguage = table.Column<string>(type: "TEXT", nullable: true),
- PreferredMetadataCountryCode = table.Column<string>(type: "TEXT", nullable: true),
- DateLastRefreshed = table.Column<DateTime>(type: "TEXT", nullable: true),
- DateLastSaved = table.Column<DateTime>(type: "TEXT", nullable: true),
- IsInMixedFolder = table.Column<bool>(type: "INTEGER", nullable: false),
- Studios = table.Column<string>(type: "TEXT", nullable: true),
- ExternalServiceId = table.Column<string>(type: "TEXT", nullable: true),
- Tags = table.Column<string>(type: "TEXT", nullable: true),
- IsFolder = table.Column<bool>(type: "INTEGER", nullable: false),
- InheritedParentalRatingValue = table.Column<int>(type: "INTEGER", nullable: true),
- UnratedType = table.Column<string>(type: "TEXT", nullable: true),
- CriticRating = table.Column<float>(type: "REAL", nullable: true),
- CleanName = table.Column<string>(type: "TEXT", nullable: true),
- PresentationUniqueKey = table.Column<string>(type: "TEXT", nullable: true),
- OriginalTitle = table.Column<string>(type: "TEXT", nullable: true),
- PrimaryVersionId = table.Column<string>(type: "TEXT", nullable: true),
- DateLastMediaAdded = table.Column<DateTime>(type: "TEXT", nullable: true),
- Album = table.Column<string>(type: "TEXT", nullable: true),
- LUFS = table.Column<float>(type: "REAL", nullable: true),
- NormalizationGain = table.Column<float>(type: "REAL", nullable: true),
- IsVirtualItem = table.Column<bool>(type: "INTEGER", nullable: false),
- SeriesName = table.Column<string>(type: "TEXT", nullable: true),
- SeasonName = table.Column<string>(type: "TEXT", nullable: true),
- ExternalSeriesId = table.Column<string>(type: "TEXT", nullable: true),
- Tagline = table.Column<string>(type: "TEXT", nullable: true),
- ProductionLocations = table.Column<string>(type: "TEXT", nullable: true),
- ExtraIds = table.Column<string>(type: "TEXT", nullable: true),
- TotalBitrate = table.Column<int>(type: "INTEGER", nullable: true),
- ExtraType = table.Column<int>(type: "INTEGER", nullable: true),
- Artists = table.Column<string>(type: "TEXT", nullable: true),
- AlbumArtists = table.Column<string>(type: "TEXT", nullable: true),
- ExternalId = table.Column<string>(type: "TEXT", nullable: true),
- SeriesPresentationUniqueKey = table.Column<string>(type: "TEXT", nullable: true),
- ShowId = table.Column<string>(type: "TEXT", nullable: true),
- OwnerId = table.Column<string>(type: "TEXT", nullable: true),
- Width = table.Column<int>(type: "INTEGER", nullable: true),
- Height = table.Column<int>(type: "INTEGER", nullable: true),
- Size = table.Column<long>(type: "INTEGER", nullable: true),
- Audio = table.Column<int>(type: "INTEGER", nullable: true),
- ParentId = table.Column<Guid>(type: "TEXT", nullable: true),
- TopParentId = table.Column<Guid>(type: "TEXT", nullable: true),
- SeasonId = table.Column<Guid>(type: "TEXT", nullable: true),
- SeriesId = table.Column<Guid>(type: "TEXT", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_BaseItems", x => x.Id);
- });
-
- migrationBuilder.CreateTable(
- name: "ItemValues",
- columns: table => new
- {
- ItemValueId = table.Column<Guid>(type: "TEXT", nullable: false),
- Type = table.Column<int>(type: "INTEGER", nullable: false),
- Value = table.Column<string>(type: "TEXT", nullable: false),
- CleanValue = table.Column<string>(type: "TEXT", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_ItemValues", x => x.ItemValueId);
- });
-
- migrationBuilder.CreateTable(
- name: "Peoples",
- columns: table => new
- {
- Id = table.Column<Guid>(type: "TEXT", nullable: false),
- Name = table.Column<string>(type: "TEXT", nullable: false),
- PersonType = table.Column<string>(type: "TEXT", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Peoples", x => x.Id);
- });
-
- migrationBuilder.CreateTable(
- name: "AncestorIds",
- columns: table => new
- {
- ParentItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- BaseItemEntityId = table.Column<Guid>(type: "TEXT", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_AncestorIds", x => new { x.ItemId, x.ParentItemId });
- table.ForeignKey(
- name: "FK_AncestorIds_BaseItems_BaseItemEntityId",
- column: x => x.BaseItemEntityId,
- principalTable: "BaseItems",
- principalColumn: "Id");
- table.ForeignKey(
- name: "FK_AncestorIds_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "FK_AncestorIds_BaseItems_ParentItemId",
- column: x => x.ParentItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "AttachmentStreamInfos",
- columns: table => new
- {
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- Index = table.Column<int>(type: "INTEGER", nullable: false),
- Codec = table.Column<string>(type: "TEXT", nullable: false),
- CodecTag = table.Column<string>(type: "TEXT", nullable: true),
- Comment = table.Column<string>(type: "TEXT", nullable: true),
- Filename = table.Column<string>(type: "TEXT", nullable: true),
- MimeType = table.Column<string>(type: "TEXT", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_AttachmentStreamInfos", x => new { x.ItemId, x.Index });
- table.ForeignKey(
- name: "FK_AttachmentStreamInfos_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "BaseItemImageInfos",
- columns: table => new
- {
- Id = table.Column<Guid>(type: "TEXT", nullable: false),
- Path = table.Column<string>(type: "TEXT", nullable: false),
- DateModified = table.Column<DateTime>(type: "TEXT", nullable: false),
- ImageType = table.Column<int>(type: "INTEGER", nullable: false),
- Width = table.Column<int>(type: "INTEGER", nullable: false),
- Height = table.Column<int>(type: "INTEGER", nullable: false),
- Blurhash = table.Column<byte[]>(type: "BLOB", nullable: true),
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_BaseItemImageInfos", x => x.Id);
- table.ForeignKey(
- name: "FK_BaseItemImageInfos_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "BaseItemMetadataFields",
- columns: table => new
- {
- Id = table.Column<int>(type: "INTEGER", nullable: false),
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_BaseItemMetadataFields", x => new { x.Id, x.ItemId });
- table.ForeignKey(
- name: "FK_BaseItemMetadataFields_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "BaseItemProviders",
- columns: table => new
- {
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- ProviderId = table.Column<string>(type: "TEXT", nullable: false),
- ProviderValue = table.Column<string>(type: "TEXT", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_BaseItemProviders", x => new { x.ItemId, x.ProviderId });
- table.ForeignKey(
- name: "FK_BaseItemProviders_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "BaseItemTrailerTypes",
- columns: table => new
- {
- Id = table.Column<int>(type: "INTEGER", nullable: false),
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_BaseItemTrailerTypes", x => new { x.Id, x.ItemId });
- table.ForeignKey(
- name: "FK_BaseItemTrailerTypes_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "Chapters",
- columns: table => new
- {
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- ChapterIndex = table.Column<int>(type: "INTEGER", nullable: false),
- StartPositionTicks = table.Column<long>(type: "INTEGER", nullable: false),
- Name = table.Column<string>(type: "TEXT", nullable: true),
- ImagePath = table.Column<string>(type: "TEXT", nullable: true),
- ImageDateModified = table.Column<DateTime>(type: "TEXT", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Chapters", x => new { x.ItemId, x.ChapterIndex });
- table.ForeignKey(
- name: "FK_Chapters_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "MediaStreamInfos",
- columns: table => new
- {
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- StreamIndex = table.Column<int>(type: "INTEGER", nullable: false),
- StreamType = table.Column<int>(type: "INTEGER", nullable: true),
- Codec = table.Column<string>(type: "TEXT", nullable: true),
- Language = table.Column<string>(type: "TEXT", nullable: true),
- ChannelLayout = table.Column<string>(type: "TEXT", nullable: true),
- Profile = table.Column<string>(type: "TEXT", nullable: true),
- AspectRatio = table.Column<string>(type: "TEXT", nullable: true),
- Path = table.Column<string>(type: "TEXT", nullable: true),
- IsInterlaced = table.Column<bool>(type: "INTEGER", nullable: false),
- BitRate = table.Column<int>(type: "INTEGER", nullable: false),
- Channels = table.Column<int>(type: "INTEGER", nullable: false),
- SampleRate = table.Column<int>(type: "INTEGER", nullable: false),
- IsDefault = table.Column<bool>(type: "INTEGER", nullable: false),
- IsForced = table.Column<bool>(type: "INTEGER", nullable: false),
- IsExternal = table.Column<bool>(type: "INTEGER", nullable: false),
- Height = table.Column<int>(type: "INTEGER", nullable: false),
- Width = table.Column<int>(type: "INTEGER", nullable: false),
- AverageFrameRate = table.Column<float>(type: "REAL", nullable: false),
- RealFrameRate = table.Column<float>(type: "REAL", nullable: false),
- Level = table.Column<float>(type: "REAL", nullable: false),
- PixelFormat = table.Column<string>(type: "TEXT", nullable: true),
- BitDepth = table.Column<int>(type: "INTEGER", nullable: false),
- IsAnamorphic = table.Column<bool>(type: "INTEGER", nullable: false),
- RefFrames = table.Column<int>(type: "INTEGER", nullable: false),
- CodecTag = table.Column<string>(type: "TEXT", nullable: false),
- Comment = table.Column<string>(type: "TEXT", nullable: false),
- NalLengthSize = table.Column<string>(type: "TEXT", nullable: false),
- IsAvc = table.Column<bool>(type: "INTEGER", nullable: false),
- Title = table.Column<string>(type: "TEXT", nullable: false),
- TimeBase = table.Column<string>(type: "TEXT", nullable: false),
- CodecTimeBase = table.Column<string>(type: "TEXT", nullable: false),
- ColorPrimaries = table.Column<string>(type: "TEXT", nullable: false),
- ColorSpace = table.Column<string>(type: "TEXT", nullable: false),
- ColorTransfer = table.Column<string>(type: "TEXT", nullable: false),
- DvVersionMajor = table.Column<int>(type: "INTEGER", nullable: false),
- DvVersionMinor = table.Column<int>(type: "INTEGER", nullable: false),
- DvProfile = table.Column<int>(type: "INTEGER", nullable: false),
- DvLevel = table.Column<int>(type: "INTEGER", nullable: false),
- RpuPresentFlag = table.Column<int>(type: "INTEGER", nullable: false),
- ElPresentFlag = table.Column<int>(type: "INTEGER", nullable: false),
- BlPresentFlag = table.Column<int>(type: "INTEGER", nullable: false),
- DvBlSignalCompatibilityId = table.Column<int>(type: "INTEGER", nullable: false),
- IsHearingImpaired = table.Column<bool>(type: "INTEGER", nullable: false),
- Rotation = table.Column<int>(type: "INTEGER", nullable: false),
- KeyFrames = table.Column<string>(type: "TEXT", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_MediaStreamInfos", x => new { x.ItemId, x.StreamIndex });
- table.ForeignKey(
- name: "FK_MediaStreamInfos_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "UserData",
- columns: table => new
- {
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- UserId = table.Column<Guid>(type: "TEXT", nullable: false),
- Rating = table.Column<double>(type: "REAL", nullable: true),
- PlaybackPositionTicks = table.Column<long>(type: "INTEGER", nullable: false),
- PlayCount = table.Column<int>(type: "INTEGER", nullable: false),
- IsFavorite = table.Column<bool>(type: "INTEGER", nullable: false),
- LastPlayedDate = table.Column<DateTime>(type: "TEXT", nullable: true),
- Played = table.Column<bool>(type: "INTEGER", nullable: false),
- AudioStreamIndex = table.Column<int>(type: "INTEGER", nullable: true),
- SubtitleStreamIndex = table.Column<int>(type: "INTEGER", nullable: true),
- Likes = table.Column<bool>(type: "INTEGER", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_UserData", x => new { x.ItemId, x.UserId });
- table.ForeignKey(
- name: "FK_UserData_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "FK_UserData_Users_UserId",
- column: x => x.UserId,
- principalTable: "Users",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "ItemValuesMap",
- columns: table => new
- {
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- ItemValueId = table.Column<Guid>(type: "TEXT", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_ItemValuesMap", x => new { x.ItemValueId, x.ItemId });
- table.ForeignKey(
- name: "FK_ItemValuesMap_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "FK_ItemValuesMap_ItemValues_ItemValueId",
- column: x => x.ItemValueId,
- principalTable: "ItemValues",
- principalColumn: "ItemValueId",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "PeopleBaseItemMap",
- columns: table => new
- {
- ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
- PeopleId = table.Column<Guid>(type: "TEXT", nullable: false),
- SortOrder = table.Column<int>(type: "INTEGER", nullable: true),
- ListOrder = table.Column<int>(type: "INTEGER", nullable: true),
- Role = table.Column<string>(type: "TEXT", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_PeopleBaseItemMap", x => new { x.ItemId, x.PeopleId });
- table.ForeignKey(
- name: "FK_PeopleBaseItemMap_BaseItems_ItemId",
- column: x => x.ItemId,
- principalTable: "BaseItems",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "FK_PeopleBaseItemMap_Peoples_PeopleId",
- column: x => x.PeopleId,
- principalTable: "Peoples",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_AncestorIds_BaseItemEntityId",
- table: "AncestorIds",
- column: "BaseItemEntityId");
-
- migrationBuilder.CreateIndex(
- name: "IX_AncestorIds_ParentItemId",
- table: "AncestorIds",
- column: "ParentItemId");
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItemImageInfos_ItemId",
- table: "BaseItemImageInfos",
- column: "ItemId");
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItemMetadataFields_ItemId",
- table: "BaseItemMetadataFields",
- column: "ItemId");
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItemProviders_ProviderId_ProviderValue_ItemId",
- table: "BaseItemProviders",
- columns: new[] { "ProviderId", "ProviderValue", "ItemId" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_Id_Type_IsFolder_IsVirtualItem",
- table: "BaseItems",
- columns: new[] { "Id", "Type", "IsFolder", "IsVirtualItem" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_IsFolder_TopParentId_IsVirtualItem_PresentationUniqueKey_DateCreated",
- table: "BaseItems",
- columns: new[] { "IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_MediaType_TopParentId_IsVirtualItem_PresentationUniqueKey",
- table: "BaseItems",
- columns: new[] { "MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_ParentId",
- table: "BaseItems",
- column: "ParentId");
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_Path",
- table: "BaseItems",
- column: "Path");
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_PresentationUniqueKey",
- table: "BaseItems",
- column: "PresentationUniqueKey");
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_TopParentId_Id",
- table: "BaseItems",
- columns: new[] { "TopParentId", "Id" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_Type_SeriesPresentationUniqueKey_IsFolder_IsVirtualItem",
- table: "BaseItems",
- columns: new[] { "Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_Type_SeriesPresentationUniqueKey_PresentationUniqueKey_SortName",
- table: "BaseItems",
- columns: new[] { "Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_Type_TopParentId_Id",
- table: "BaseItems",
- columns: new[] { "Type", "TopParentId", "Id" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_Type_TopParentId_IsVirtualItem_PresentationUniqueKey_DateCreated",
- table: "BaseItems",
- columns: new[] { "Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_Type_TopParentId_PresentationUniqueKey",
- table: "BaseItems",
- columns: new[] { "Type", "TopParentId", "PresentationUniqueKey" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItems_Type_TopParentId_StartDate",
- table: "BaseItems",
- columns: new[] { "Type", "TopParentId", "StartDate" });
-
- migrationBuilder.CreateIndex(
- name: "IX_BaseItemTrailerTypes_ItemId",
- table: "BaseItemTrailerTypes",
- column: "ItemId");
-
- migrationBuilder.CreateIndex(
- name: "IX_ItemValues_Type_CleanValue",
- table: "ItemValues",
- columns: new[] { "Type", "CleanValue" });
-
- migrationBuilder.CreateIndex(
- name: "IX_ItemValuesMap_ItemId",
- table: "ItemValuesMap",
- column: "ItemId");
-
- migrationBuilder.CreateIndex(
- name: "IX_MediaStreamInfos_StreamIndex",
- table: "MediaStreamInfos",
- column: "StreamIndex");
-
- migrationBuilder.CreateIndex(
- name: "IX_MediaStreamInfos_StreamIndex_StreamType",
- table: "MediaStreamInfos",
- columns: new[] { "StreamIndex", "StreamType" });
-
- migrationBuilder.CreateIndex(
- name: "IX_MediaStreamInfos_StreamIndex_StreamType_Language",
- table: "MediaStreamInfos",
- columns: new[] { "StreamIndex", "StreamType", "Language" });
-
- migrationBuilder.CreateIndex(
- name: "IX_MediaStreamInfos_StreamType",
- table: "MediaStreamInfos",
- column: "StreamType");
-
- migrationBuilder.CreateIndex(
- name: "IX_PeopleBaseItemMap_ItemId_ListOrder",
- table: "PeopleBaseItemMap",
- columns: new[] { "ItemId", "ListOrder" });
-
- migrationBuilder.CreateIndex(
- name: "IX_PeopleBaseItemMap_ItemId_SortOrder",
- table: "PeopleBaseItemMap",
- columns: new[] { "ItemId", "SortOrder" });
-
- migrationBuilder.CreateIndex(
- name: "IX_PeopleBaseItemMap_PeopleId",
- table: "PeopleBaseItemMap",
- column: "PeopleId");
-
- migrationBuilder.CreateIndex(
- name: "IX_Peoples_Name",
- table: "Peoples",
- column: "Name");
-
- migrationBuilder.CreateIndex(
- name: "IX_UserData_ItemId_UserId_IsFavorite",
- table: "UserData",
- columns: new[] { "ItemId", "UserId", "IsFavorite" });
-
- migrationBuilder.CreateIndex(
- name: "IX_UserData_ItemId_UserId_LastPlayedDate",
- table: "UserData",
- columns: new[] { "ItemId", "UserId", "LastPlayedDate" });
-
- migrationBuilder.CreateIndex(
- name: "IX_UserData_ItemId_UserId_PlaybackPositionTicks",
- table: "UserData",
- columns: new[] { "ItemId", "UserId", "PlaybackPositionTicks" });
-
- migrationBuilder.CreateIndex(
- name: "IX_UserData_ItemId_UserId_Played",
- table: "UserData",
- columns: new[] { "ItemId", "UserId", "Played" });
-
- migrationBuilder.CreateIndex(
- name: "IX_UserData_UserId",
- table: "UserData",
- column: "UserId");
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "AncestorIds");
-
- migrationBuilder.DropTable(
- name: "AttachmentStreamInfos");
-
- migrationBuilder.DropTable(
- name: "BaseItemImageInfos");
-
- migrationBuilder.DropTable(
- name: "BaseItemMetadataFields");
-
- migrationBuilder.DropTable(
- name: "BaseItemProviders");
-
- migrationBuilder.DropTable(
- name: "BaseItemTrailerTypes");
-
- migrationBuilder.DropTable(
- name: "Chapters");
-
- migrationBuilder.DropTable(
- name: "ItemValuesMap");
-
- migrationBuilder.DropTable(
- name: "MediaStreamInfos");
-
- migrationBuilder.DropTable(
- name: "PeopleBaseItemMap");
-
- migrationBuilder.DropTable(
- name: "UserData");
-
- migrationBuilder.DropTable(
- name: "ItemValues");
-
- migrationBuilder.DropTable(
- name: "Peoples");
-
- migrationBuilder.DropTable(
- name: "BaseItems");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111131257_AddedCustomDataKey.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111131257_AddedCustomDataKey.Designer.cs
deleted file mode 100644
index 1fbf21492d..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111131257_AddedCustomDataKey.Designer.cs
+++ /dev/null
@@ -1,1610 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20241111131257_AddedCustomDataKey")]
- partial class AddedCustomDataKey
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "8.0.10");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("BaseItemEntityId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("BaseItemEntityId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue");
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .HasColumnType("TEXT");
-
- b.Property<float>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .HasColumnType("TEXT");
-
- b.Property<int>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .HasColumnType("TEXT");
-
- b.Property<float>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .HasColumnType("TEXT");
-
- b.Property<float>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomDataKey")
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", null)
- .WithMany("AncestorIds")
- .HasForeignKey("BaseItemEntityId");
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany()
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("AncestorIds");
-
- b.Navigation("Chapters");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111131257_AddedCustomDataKey.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111131257_AddedCustomDataKey.cs
deleted file mode 100644
index ac78019eda..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111131257_AddedCustomDataKey.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class AddedCustomDataKey : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AddColumn<string>(
- name: "CustomDataKey",
- table: "UserData",
- type: "TEXT",
- nullable: true);
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropColumn(
- name: "CustomDataKey",
- table: "UserData");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111135439_AddedCustomDataKeyKey.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111135439_AddedCustomDataKeyKey.Designer.cs
deleted file mode 100644
index bac6fd5b5a..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111135439_AddedCustomDataKeyKey.Designer.cs
+++ /dev/null
@@ -1,1610 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20241111135439_AddedCustomDataKeyKey")]
- partial class AddedCustomDataKeyKey
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "8.0.10");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("BaseItemEntityId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("BaseItemEntityId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue");
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .HasColumnType("TEXT");
-
- b.Property<float>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .HasColumnType("TEXT");
-
- b.Property<int>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .HasColumnType("TEXT");
-
- b.Property<float>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .HasColumnType("TEXT");
-
- b.Property<float>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CustomDataKey")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId", "CustomDataKey");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", null)
- .WithMany("AncestorIds")
- .HasForeignKey("BaseItemEntityId");
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany()
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("AncestorIds");
-
- b.Navigation("Chapters");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111135439_AddedCustomDataKeyKey.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111135439_AddedCustomDataKeyKey.cs
deleted file mode 100644
index 4558d7c49c..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241111135439_AddedCustomDataKeyKey.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class AddedCustomDataKeyKey : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropPrimaryKey(
- name: "PK_UserData",
- table: "UserData");
-
- migrationBuilder.AlterColumn<string>(
- name: "CustomDataKey",
- table: "UserData",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AddPrimaryKey(
- name: "PK_UserData",
- table: "UserData",
- columns: new[] { "ItemId", "UserId", "CustomDataKey" });
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropPrimaryKey(
- name: "PK_UserData",
- table: "UserData");
-
- migrationBuilder.AlterColumn<string>(
- name: "CustomDataKey",
- table: "UserData",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AddPrimaryKey(
- name: "PK_UserData",
- table: "UserData",
- columns: new[] { "ItemId", "UserId" });
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112152323_FixAncestorIdConfig.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112152323_FixAncestorIdConfig.Designer.cs
deleted file mode 100644
index ad622d44c5..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112152323_FixAncestorIdConfig.Designer.cs
+++ /dev/null
@@ -1,1603 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20241112152323_FixAncestorIdConfig")]
- partial class FixAncestorIdConfig
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "8.0.10");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue");
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .HasColumnType("TEXT");
-
- b.Property<float>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .HasColumnType("TEXT");
-
- b.Property<int>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .HasColumnType("TEXT");
-
- b.Property<float>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .HasColumnType("TEXT");
-
- b.Property<float>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CustomDataKey")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId", "CustomDataKey");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Children")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany("ParentAncestors")
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("Chapters");
-
- b.Navigation("Children");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("ParentAncestors");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112152323_FixAncestorIdConfig.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112152323_FixAncestorIdConfig.cs
deleted file mode 100644
index 70e81f3676..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112152323_FixAncestorIdConfig.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class FixAncestorIdConfig : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_AncestorIds_BaseItems_BaseItemEntityId",
- table: "AncestorIds");
-
- migrationBuilder.DropIndex(
- name: "IX_AncestorIds_BaseItemEntityId",
- table: "AncestorIds");
-
- migrationBuilder.DropColumn(
- name: "BaseItemEntityId",
- table: "AncestorIds");
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AddColumn<Guid>(
- name: "BaseItemEntityId",
- table: "AncestorIds",
- type: "TEXT",
- nullable: true);
-
- migrationBuilder.CreateIndex(
- name: "IX_AncestorIds_BaseItemEntityId",
- table: "AncestorIds",
- column: "BaseItemEntityId");
-
- migrationBuilder.AddForeignKey(
- name: "FK_AncestorIds_BaseItems_BaseItemEntityId",
- table: "AncestorIds",
- column: "BaseItemEntityId",
- principalTable: "BaseItems",
- principalColumn: "Id");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112232041_fixMediaStreams.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112232041_fixMediaStreams.Designer.cs
deleted file mode 100644
index dc4c8212ba..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112232041_fixMediaStreams.Designer.cs
+++ /dev/null
@@ -1,1600 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20241112232041_FixMediaStreams")]
- partial class FixMediaStreams
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "8.0.10");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue");
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<float?>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int?>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<int?>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<float?>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<float?>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CustomDataKey")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId", "CustomDataKey");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Children")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany("ParentAncestors")
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("Chapters");
-
- b.Navigation("Children");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("ParentAncestors");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112232041_fixMediaStreams.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112232041_fixMediaStreams.cs
deleted file mode 100644
index d57ea81b3a..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112232041_fixMediaStreams.cs
+++ /dev/null
@@ -1,702 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class FixMediaStreams : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<int>(
- name: "Width",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<string>(
- name: "Title",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "TimeBase",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<int>(
- name: "StreamType",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "SampleRate",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "RpuPresentFlag",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "Rotation",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "RefFrames",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<float>(
- name: "RealFrameRate",
- table: "MediaStreamInfos",
- type: "REAL",
- nullable: true,
- oldClrType: typeof(float),
- oldType: "REAL");
-
- migrationBuilder.AlterColumn<string>(
- name: "Profile",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "Path",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "NalLengthSize",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<float>(
- name: "Level",
- table: "MediaStreamInfos",
- type: "REAL",
- nullable: true,
- oldClrType: typeof(float),
- oldType: "REAL");
-
- migrationBuilder.AlterColumn<string>(
- name: "Language",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<bool>(
- name: "IsHearingImpaired",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(bool),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<bool>(
- name: "IsAvc",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(bool),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<bool>(
- name: "IsAnamorphic",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(bool),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "Height",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "ElPresentFlag",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "DvVersionMinor",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "DvVersionMajor",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "DvProfile",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "DvLevel",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "DvBlSignalCompatibilityId",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<string>(
- name: "Comment",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "ColorTransfer",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "ColorSpace",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "ColorPrimaries",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "CodecTimeBase",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "CodecTag",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "Codec",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "Channels",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<string>(
- name: "ChannelLayout",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "BlPresentFlag",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "BitRate",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "BitDepth",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<float>(
- name: "AverageFrameRate",
- table: "MediaStreamInfos",
- type: "REAL",
- nullable: true,
- oldClrType: typeof(float),
- oldType: "REAL");
-
- migrationBuilder.AlterColumn<string>(
- name: "AspectRatio",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<int>(
- name: "Width",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "Title",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "TimeBase",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "StreamType",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(int),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<int>(
- name: "SampleRate",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "RpuPresentFlag",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "Rotation",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "RefFrames",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<float>(
- name: "RealFrameRate",
- table: "MediaStreamInfos",
- type: "REAL",
- nullable: false,
- defaultValue: 0f,
- oldClrType: typeof(float),
- oldType: "REAL",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "Profile",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "Path",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "NalLengthSize",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<float>(
- name: "Level",
- table: "MediaStreamInfos",
- type: "REAL",
- nullable: false,
- defaultValue: 0f,
- oldClrType: typeof(float),
- oldType: "REAL",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "Language",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<bool>(
- name: "IsHearingImpaired",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: false,
- oldClrType: typeof(bool),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<bool>(
- name: "IsAvc",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: false,
- oldClrType: typeof(bool),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<bool>(
- name: "IsAnamorphic",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: false,
- oldClrType: typeof(bool),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "Height",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "ElPresentFlag",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "DvVersionMinor",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "DvVersionMajor",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "DvProfile",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "DvLevel",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "DvBlSignalCompatibilityId",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "Comment",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "ColorTransfer",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "ColorSpace",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "ColorPrimaries",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "CodecTimeBase",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "CodecTag",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "Codec",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<int>(
- name: "Channels",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "ChannelLayout",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<int>(
- name: "BlPresentFlag",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "BitRate",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<int>(
- name: "BitDepth",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: 0,
- oldClrType: typeof(int),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<float>(
- name: "AverageFrameRate",
- table: "MediaStreamInfos",
- type: "REAL",
- nullable: false,
- defaultValue: 0f,
- oldClrType: typeof(float),
- oldType: "REAL",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "AspectRatio",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112234144_FixMediaStreams2.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112234144_FixMediaStreams2.Designer.cs
deleted file mode 100644
index 5714120b5c..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112234144_FixMediaStreams2.Designer.cs
+++ /dev/null
@@ -1,1594 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20241112234144_FixMediaStreams2")]
- partial class FixMediaStreams2
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "8.0.10");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue");
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .HasColumnType("TEXT");
-
- b.Property<float?>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<int?>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .HasColumnType("TEXT");
-
- b.Property<float?>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .HasColumnType("TEXT");
-
- b.Property<float?>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CustomDataKey")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId", "CustomDataKey");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Children")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany("ParentAncestors")
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("Chapters");
-
- b.Navigation("Children");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("ParentAncestors");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112234144_FixMediaStreams2.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112234144_FixMediaStreams2.cs
deleted file mode 100644
index 78611b9e4c..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241112234144_FixMediaStreams2.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class FixMediaStreams2 : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<string>(
- name: "Profile",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "Path",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "Language",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<bool>(
- name: "IsInterlaced",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: true,
- oldClrType: typeof(bool),
- oldType: "INTEGER");
-
- migrationBuilder.AlterColumn<string>(
- name: "Codec",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "ChannelLayout",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<string>(
- name: "AspectRatio",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(string),
- oldType: "TEXT");
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<string>(
- name: "Profile",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "Path",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "Language",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<bool>(
- name: "IsInterlaced",
- table: "MediaStreamInfos",
- type: "INTEGER",
- nullable: false,
- defaultValue: false,
- oldClrType: typeof(bool),
- oldType: "INTEGER",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "Codec",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "ChannelLayout",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<string>(
- name: "AspectRatio",
- table: "MediaStreamInfos",
- type: "TEXT",
- nullable: false,
- defaultValue: string.Empty,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldNullable: true);
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241113133548_EnforceUniqueItemValue.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241113133548_EnforceUniqueItemValue.Designer.cs
deleted file mode 100644
index 855f02fd3f..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241113133548_EnforceUniqueItemValue.Designer.cs
+++ /dev/null
@@ -1,1595 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20241113133548_EnforceUniqueItemValue")]
- partial class EnforceUniqueItemValue
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "8.0.10");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue")
- .IsUnique();
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .HasColumnType("TEXT");
-
- b.Property<float?>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<int?>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .HasColumnType("TEXT");
-
- b.Property<float?>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .HasColumnType("TEXT");
-
- b.Property<float?>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CustomDataKey")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId", "CustomDataKey");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Children")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany("ParentAncestors")
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("Chapters");
-
- b.Navigation("Children");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("ParentAncestors");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241113133548_EnforceUniqueItemValue.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241113133548_EnforceUniqueItemValue.cs
deleted file mode 100644
index d1b06ceaec..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20241113133548_EnforceUniqueItemValue.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class EnforceUniqueItemValue : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropIndex(
- name: "IX_ItemValues_Type_CleanValue",
- table: "ItemValues");
-
- migrationBuilder.CreateIndex(
- name: "IX_ItemValues_Type_CleanValue",
- table: "ItemValues",
- columns: new[] { "Type", "CleanValue" },
- unique: true);
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropIndex(
- name: "IX_ItemValues_Type_CleanValue",
- table: "ItemValues");
-
- migrationBuilder.CreateIndex(
- name: "IX_ItemValues_Type_CleanValue",
- table: "ItemValues",
- columns: new[] { "Type", "CleanValue" });
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250202021306_FixedCollation.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250202021306_FixedCollation.Designer.cs
deleted file mode 100644
index d7b806d7a3..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250202021306_FixedCollation.Designer.cs
+++ /dev/null
@@ -1,1594 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20250202021306_FixedCollation")]
- partial class FixedCollation
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "9.0.1");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue")
- .IsUnique();
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .HasColumnType("TEXT");
-
- b.Property<float?>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<int?>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .HasColumnType("TEXT");
-
- b.Property<float?>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .HasColumnType("TEXT");
-
- b.Property<float?>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CustomDataKey")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId", "CustomDataKey");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Children")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany("ParentAncestors")
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("Chapters");
-
- b.Navigation("Children");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("ParentAncestors");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250202021306_FixedCollation.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250202021306_FixedCollation.cs
deleted file mode 100644
index e82575e418..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250202021306_FixedCollation.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class FixedCollation : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<string>(
- name: "Username",
- table: "Users",
- type: "TEXT",
- maxLength: 255,
- nullable: false,
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldMaxLength: 255,
- oldCollation: "NOCASE");
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<string>(
- name: "Username",
- table: "Users",
- type: "TEXT",
- maxLength: 255,
- nullable: false,
- collation: "NOCASE",
- oldClrType: typeof(string),
- oldType: "TEXT",
- oldMaxLength: 255);
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250204092455_MakeStartEndDateNullable.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250204092455_MakeStartEndDateNullable.Designer.cs
deleted file mode 100644
index a329f1ef16..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250204092455_MakeStartEndDateNullable.Designer.cs
+++ /dev/null
@@ -1,1595 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20250204092455_MakeStartEndDateNullable")]
- partial class MakeStartEndDateNullable
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "9.0.1");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue")
- .IsUnique();
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .HasColumnType("TEXT");
-
- b.Property<float?>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<int?>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .HasColumnType("TEXT");
-
- b.Property<float?>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .HasColumnType("TEXT");
-
- b.Property<float?>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CustomDataKey")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId", "CustomDataKey");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Children")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany("ParentAncestors")
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("Chapters");
-
- b.Navigation("Children");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("ParentAncestors");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250204092455_MakeStartEndDateNullable.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250204092455_MakeStartEndDateNullable.cs
deleted file mode 100644
index 2c60dd7a62..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250204092455_MakeStartEndDateNullable.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class MakeStartEndDateNullable : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<DateTime>(
- name: "StartDate",
- table: "BaseItems",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(DateTime),
- oldType: "TEXT");
-
- migrationBuilder.AlterColumn<DateTime>(
- name: "EndDate",
- table: "BaseItems",
- type: "TEXT",
- nullable: true,
- oldClrType: typeof(DateTime),
- oldType: "TEXT");
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn<DateTime>(
- name: "StartDate",
- table: "BaseItems",
- type: "TEXT",
- nullable: false,
- defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
- oldClrType: typeof(DateTime),
- oldType: "TEXT",
- oldNullable: true);
-
- migrationBuilder.AlterColumn<DateTime>(
- name: "EndDate",
- table: "BaseItems",
- type: "TEXT",
- nullable: false,
- defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
- oldClrType: typeof(DateTime),
- oldType: "TEXT",
- oldNullable: true);
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250214031148_ChannelIdGuid.Designer.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250214031148_ChannelIdGuid.Designer.cs
deleted file mode 100644
index 48919c9b5d..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250214031148_ChannelIdGuid.Designer.cs
+++ /dev/null
@@ -1,1595 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- [Migration("20250214031148_ChannelIdGuid")]
- partial class ChannelIdGuid
- {
- /// <inheritdoc />
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "9.0.2");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue")
- .IsUnique();
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .HasColumnType("TEXT");
-
- b.Property<float?>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<int?>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .HasColumnType("TEXT");
-
- b.Property<float?>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .HasColumnType("TEXT");
-
- b.Property<float?>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .UseCollation("NOCASE");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CustomDataKey")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId", "CustomDataKey");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Children")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany("ParentAncestors")
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("Chapters");
-
- b.Navigation("Children");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("ParentAncestors");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250214031148_ChannelIdGuid.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250214031148_ChannelIdGuid.cs
deleted file mode 100644
index 1e904e833e..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/20250214031148_ChannelIdGuid.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <inheritdoc />
- public partial class ChannelIdGuid : Migration
- {
- /// <inheritdoc />
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- // NOOP, Guids and strings are stored the same in SQLite.
- }
-
- /// <inheritdoc />
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- // NOOP, Guids and strings are stored the same in SQLite.
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/JellyfinDbModelSnapshot.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/JellyfinDbModelSnapshot.cs
deleted file mode 100644
index 79587a9c33..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/JellyfinDbModelSnapshot.cs
+++ /dev/null
@@ -1,1591 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- [DbContext(typeof(JellyfinDbContext))]
- partial class JellyfinDbModelSnapshot : ModelSnapshot
- {
- protected override void BuildModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "9.0.2");
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DayOfWeek")
- .HasColumnType("INTEGER");
-
- b.Property<double>("EndHour")
- .HasColumnType("REAL");
-
- b.Property<double>("StartHour")
- .HasColumnType("REAL");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AccessSchedules");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<string>("ItemId")
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<int>("LogSeverity")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("ShortOverview")
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DateCreated");
-
- b.ToTable("ActivityLogs");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ParentItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ParentItemId");
-
- b.HasIndex("ParentItemId");
-
- b.ToTable("AncestorIds");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Index")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<string>("Filename")
- .HasColumnType("TEXT");
-
- b.Property<string>("MimeType")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "Index");
-
- b.ToTable("AttachmentStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Album")
- .HasColumnType("TEXT");
-
- b.Property<string>("AlbumArtists")
- .HasColumnType("TEXT");
-
- b.Property<string>("Artists")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Audio")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("ChannelId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanName")
- .HasColumnType("TEXT");
-
- b.Property<float?>("CommunityRating")
- .HasColumnType("REAL");
-
- b.Property<float?>("CriticRating")
- .HasColumnType("REAL");
-
- b.Property<string>("CustomRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("Data")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastMediaAdded")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastRefreshed")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateLastSaved")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("EndDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("EpisodeTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalSeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExternalServiceId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ExtraIds")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ExtraType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ForcedSortName")
- .HasColumnType("TEXT");
-
- b.Property<string>("Genres")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("InheritedParentalRatingValue")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsInMixedFolder")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsLocked")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsMovie")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsRepeat")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsSeries")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsVirtualItem")
- .HasColumnType("INTEGER");
-
- b.Property<float?>("LUFS")
- .HasColumnType("REAL");
-
- b.Property<string>("MediaType")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<float?>("NormalizationGain")
- .HasColumnType("REAL");
-
- b.Property<string>("OfficialRating")
- .HasColumnType("TEXT");
-
- b.Property<string>("OriginalTitle")
- .HasColumnType("TEXT");
-
- b.Property<string>("Overview")
- .HasColumnType("TEXT");
-
- b.Property<string>("OwnerId")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("ParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ParentIndexNumber")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataCountryCode")
- .HasColumnType("TEXT");
-
- b.Property<string>("PreferredMetadataLanguage")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("PremiereDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("PresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("PrimaryVersionId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProductionLocations")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ProductionYear")
- .HasColumnType("INTEGER");
-
- b.Property<long?>("RunTimeTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("SeasonId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeasonName")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("SeriesId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesName")
- .HasColumnType("TEXT");
-
- b.Property<string>("SeriesPresentationUniqueKey")
- .HasColumnType("TEXT");
-
- b.Property<string>("ShowId")
- .HasColumnType("TEXT");
-
- b.Property<long?>("Size")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortName")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("StartDate")
- .HasColumnType("TEXT");
-
- b.Property<string>("Studios")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tagline")
- .HasColumnType("TEXT");
-
- b.Property<string>("Tags")
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("TopParentId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("TotalBitrate")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Type")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("UnratedType")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ParentId");
-
- b.HasIndex("Path");
-
- b.HasIndex("PresentationUniqueKey");
-
- b.HasIndex("TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "Id");
-
- b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
- b.HasIndex("Type", "TopParentId", "StartDate");
-
- b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
- b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
- b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
- b.ToTable("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<byte[]>("Blurhash")
- .HasColumnType("BLOB");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ImageType")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemMetadataFields");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderId")
- .HasColumnType("TEXT");
-
- b.Property<string>("ProviderValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemId", "ProviderId");
-
- b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
- b.ToTable("BaseItemProviders");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.Property<int>("Id")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("BaseItemTrailerTypes");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ChapterIndex")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("ImageDateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("ImagePath")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .HasColumnType("TEXT");
-
- b.Property<long>("StartPositionTicks")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "ChapterIndex");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Key")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client", "Key")
- .IsUnique();
-
- b.ToTable("CustomItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("ChromecastVersion")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<string>("DashboardTheme")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("EnableNextVideoInfoOverlay")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ScrollDirection")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowBackdrop")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("ShowSidebar")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipBackwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SkipForwardLength")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TvHome")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "ItemId", "Client")
- .IsUnique();
-
- b.ToTable("DisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("DisplayPreferencesId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Order")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("DisplayPreferencesId");
-
- b.ToTable("HomeSection");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<DateTime>("LastModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .IsRequired()
- .HasMaxLength(512)
- .HasColumnType("TEXT");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ImageInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("Client")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<int?>("IndexBy")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("RememberIndexing")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSorting")
- .HasColumnType("INTEGER");
-
- b.Property<string>("SortBy")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<int>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<int>("ViewType")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("ItemDisplayPreferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Property<Guid>("ItemValueId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("CleanValue")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId");
-
- b.HasIndex("Type", "CleanValue")
- .IsUnique();
-
- b.ToTable("ItemValues");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.Property<Guid>("ItemValueId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.HasKey("ItemValueId", "ItemId");
-
- b.HasIndex("ItemId");
-
- b.ToTable("ItemValuesMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<long>("EndTicks")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<string>("SegmentProviderId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<long>("StartTicks")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Type")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.ToTable("MediaSegments");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("StreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<string>("AspectRatio")
- .HasColumnType("TEXT");
-
- b.Property<float?>("AverageFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("BitDepth")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BitRate")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("BlPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<string>("ChannelLayout")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Channels")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Codec")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTag")
- .HasColumnType("TEXT");
-
- b.Property<string>("CodecTimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorPrimaries")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorSpace")
- .HasColumnType("TEXT");
-
- b.Property<string>("ColorTransfer")
- .HasColumnType("TEXT");
-
- b.Property<string>("Comment")
- .HasColumnType("TEXT");
-
- b.Property<int?>("DvBlSignalCompatibilityId")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvLevel")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvProfile")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMajor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("DvVersionMinor")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("ElPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAnamorphic")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsAvc")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsDefault")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsExternal")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsForced")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsHearingImpaired")
- .HasColumnType("INTEGER");
-
- b.Property<bool?>("IsInterlaced")
- .HasColumnType("INTEGER");
-
- b.Property<string>("KeyFrames")
- .HasColumnType("TEXT");
-
- b.Property<string>("Language")
- .HasColumnType("TEXT");
-
- b.Property<float?>("Level")
- .HasColumnType("REAL");
-
- b.Property<string>("NalLengthSize")
- .HasColumnType("TEXT");
-
- b.Property<string>("Path")
- .HasColumnType("TEXT");
-
- b.Property<string>("PixelFormat")
- .HasColumnType("TEXT");
-
- b.Property<string>("Profile")
- .HasColumnType("TEXT");
-
- b.Property<float?>("RealFrameRate")
- .HasColumnType("REAL");
-
- b.Property<int?>("RefFrames")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("Rotation")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RpuPresentFlag")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("SampleRate")
- .HasColumnType("INTEGER");
-
- b.Property<int>("StreamType")
- .HasColumnType("INTEGER");
-
- b.Property<string>("TimeBase")
- .HasColumnType("TEXT");
-
- b.Property<string>("Title")
- .HasColumnType("TEXT");
-
- b.Property<int?>("Width")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "StreamIndex");
-
- b.HasIndex("StreamIndex");
-
- b.HasIndex("StreamType");
-
- b.HasIndex("StreamIndex", "StreamType");
-
- b.HasIndex("StreamIndex", "StreamType", "Language");
-
- b.ToTable("MediaStreamInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("PersonType")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Name");
-
- b.ToTable("Peoples");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("PeopleId")
- .HasColumnType("TEXT");
-
- b.Property<int?>("ListOrder")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Role")
- .HasColumnType("TEXT");
-
- b.Property<int?>("SortOrder")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "PeopleId");
-
- b.HasIndex("PeopleId");
-
- b.HasIndex("ItemId", "ListOrder");
-
- b.HasIndex("ItemId", "SortOrder");
-
- b.ToTable("PeopleBaseItemMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Permission_Permissions_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<bool>("Value")
- .HasColumnType("INTEGER");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Permissions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<int>("Kind")
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("Preference_Preferences_Guid")
- .HasColumnType("TEXT");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("Value")
- .IsRequired()
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId", "Kind")
- .IsUnique()
- .HasFilter("[UserId] IS NOT NULL");
-
- b.ToTable("Preferences");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<string>("Name")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("AccessToken")
- .IsUnique();
-
- b.ToTable("ApiKeys");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("AccessToken")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property<string>("AppName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<string>("AppVersion")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateCreated")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateLastActivity")
- .HasColumnType("TEXT");
-
- b.Property<DateTime>("DateModified")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasMaxLength(256)
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceName")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("TEXT");
-
- b.Property<bool>("IsActive")
- .HasColumnType("INTEGER");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId");
-
- b.HasIndex("AccessToken", "DateLastActivity");
-
- b.HasIndex("DeviceId", "DateLastActivity");
-
- b.HasIndex("UserId", "DeviceId");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property<string>("CustomName")
- .HasColumnType("TEXT");
-
- b.Property<string>("DeviceId")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("DeviceId")
- .IsUnique();
-
- b.ToTable("DeviceOptions");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<int>("Width")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Bandwidth")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Height")
- .HasColumnType("INTEGER");
-
- b.Property<int>("Interval")
- .HasColumnType("INTEGER");
-
- b.Property<int>("ThumbnailCount")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileHeight")
- .HasColumnType("INTEGER");
-
- b.Property<int>("TileWidth")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "Width");
-
- b.ToTable("TrickplayInfos");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property<string>("AudioLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("AuthenticationProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<string>("CastReceiverId")
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property<bool>("DisplayCollectionsView")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("DisplayMissingEpisodes")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableAutoLogin")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableLocalPassword")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableNextEpisodeAutoPlay")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("EnableUserPreferenceAccess")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("HidePlayedInLatest")
- .HasColumnType("INTEGER");
-
- b.Property<long>("InternalId")
- .HasColumnType("INTEGER");
-
- b.Property<int>("InvalidLoginAttemptCount")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastActivityDate")
- .HasColumnType("TEXT");
-
- b.Property<DateTime?>("LastLoginDate")
- .HasColumnType("TEXT");
-
- b.Property<int?>("LoginAttemptsBeforeLockout")
- .HasColumnType("INTEGER");
-
- b.Property<int>("MaxActiveSessions")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("MaxParentalAgeRating")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("MustUpdatePassword")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Password")
- .HasMaxLength(65535)
- .HasColumnType("TEXT");
-
- b.Property<string>("PasswordResetProviderId")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<bool>("PlayDefaultAudioTrack")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberAudioSelections")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("RememberSubtitleSelections")
- .HasColumnType("INTEGER");
-
- b.Property<int?>("RemoteClientBitrateLimit")
- .HasColumnType("INTEGER");
-
- b.Property<uint>("RowVersion")
- .IsConcurrencyToken()
- .HasColumnType("INTEGER");
-
- b.Property<string>("SubtitleLanguagePreference")
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.Property<int>("SubtitleMode")
- .HasColumnType("INTEGER");
-
- b.Property<int>("SyncPlayAccess")
- .HasColumnType("INTEGER");
-
- b.Property<string>("Username")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("TEXT");
-
- b.HasKey("Id");
-
- b.HasIndex("Username")
- .IsUnique();
-
- b.ToTable("Users");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.Property<Guid>("ItemId")
- .HasColumnType("TEXT");
-
- b.Property<Guid>("UserId")
- .HasColumnType("TEXT");
-
- b.Property<string>("CustomDataKey")
- .HasColumnType("TEXT");
-
- b.Property<int?>("AudioStreamIndex")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("IsFavorite")
- .HasColumnType("INTEGER");
-
- b.Property<DateTime?>("LastPlayedDate")
- .HasColumnType("TEXT");
-
- b.Property<bool?>("Likes")
- .HasColumnType("INTEGER");
-
- b.Property<int>("PlayCount")
- .HasColumnType("INTEGER");
-
- b.Property<long>("PlaybackPositionTicks")
- .HasColumnType("INTEGER");
-
- b.Property<bool>("Played")
- .HasColumnType("INTEGER");
-
- b.Property<double?>("Rating")
- .HasColumnType("REAL");
-
- b.Property<int?>("SubtitleStreamIndex")
- .HasColumnType("INTEGER");
-
- b.HasKey("ItemId", "UserId", "CustomDataKey");
-
- b.HasIndex("UserId");
-
- b.HasIndex("ItemId", "UserId", "IsFavorite");
-
- b.HasIndex("ItemId", "UserId", "LastPlayedDate");
-
- b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
-
- b.HasIndex("ItemId", "UserId", "Played");
-
- b.ToTable("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("AccessSchedules")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Children")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
- .WithMany("ParentAncestors")
- .HasForeignKey("ParentItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ParentItem");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany()
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Images")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("LockedFields")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Provider")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("TrailerTypes")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Chapters")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("DisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
- .WithMany("HomeSections")
- .HasForeignKey("DisplayPreferencesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithOne("ProfileImage")
- .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("ItemDisplayPreferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("ItemValues")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
- .WithMany("BaseItemsMap")
- .HasForeignKey("ItemValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("ItemValue");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("MediaStreams")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("Peoples")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.People", "People")
- .WithMany("BaseItems")
- .HasForeignKey("PeopleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("People");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Permissions")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", null)
- .WithMany("Preferences")
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade);
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
- {
- b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
- .WithMany("UserData")
- .HasForeignKey("ItemId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Jellyfin.Data.Entities.User", "User")
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Item");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
- {
- b.Navigation("Chapters");
-
- b.Navigation("Children");
-
- b.Navigation("Images");
-
- b.Navigation("ItemValues");
-
- b.Navigation("LockedFields");
-
- b.Navigation("MediaStreams");
-
- b.Navigation("ParentAncestors");
-
- b.Navigation("Peoples");
-
- b.Navigation("Provider");
-
- b.Navigation("TrailerTypes");
-
- b.Navigation("UserData");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
- {
- b.Navigation("HomeSections");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
- {
- b.Navigation("BaseItemsMap");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
- {
- b.Navigation("BaseItems");
- });
-
- modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
- {
- b.Navigation("AccessSchedules");
-
- b.Navigation("DisplayPreferences");
-
- b.Navigation("ItemDisplayPreferences");
-
- b.Navigation("Permissions");
-
- b.Navigation("Preferences");
-
- b.Navigation("ProfileImage");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/SqliteDesignTimeJellyfinDbFactory.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/SqliteDesignTimeJellyfinDbFactory.cs
deleted file mode 100644
index 11eeb8e02d..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Migrations/SqliteDesignTimeJellyfinDbFactory.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using Jellyfin.Database.Providers.SqLite;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Design;
-using Microsoft.Extensions.Logging.Abstractions;
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
- /// <summary>
- /// The design time factory for <see cref="JellyfinDbContext"/>.
- /// This is only used for the creation of migrations and not during runtime.
- /// </summary>
- internal sealed class SqliteDesignTimeJellyfinDbFactory : IDesignTimeDbContextFactory<JellyfinDbContext>
- {
- public JellyfinDbContext CreateDbContext(string[] args)
- {
- var optionsBuilder = new DbContextOptionsBuilder<JellyfinDbContext>();
- optionsBuilder.UseSqlite("Data Source=jellyfin.db", f => f.MigrationsAssembly(GetType().Assembly));
-
- return new JellyfinDbContext(
- optionsBuilder.Options,
- NullLogger<JellyfinDbContext>.Instance,
- new SqliteDatabaseProvider(null!, NullLogger<SqliteDatabaseProvider>.Instance));
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/ModelBuilderExtensions.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/ModelBuilderExtensions.cs
deleted file mode 100644
index 79ae1661aa..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/ModelBuilderExtensions.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System;
-using Jellyfin.Server.Implementations.ValueConverters;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations
-{
- /// <summary>
- /// Model builder extensions.
- /// </summary>
- public static class ModelBuilderExtensions
- {
- /// <summary>
- /// Specify value converter for the object type.
- /// </summary>
- /// <param name="modelBuilder">The model builder.</param>
- /// <param name="converter">The <see cref="ValueConverter{TModel,TProvider}"/>.</param>
- /// <typeparam name="T">The type to convert.</typeparam>
- /// <returns>The modified <see cref="ModelBuilder"/>.</returns>
- public static ModelBuilder UseValueConverterForType<T>(this ModelBuilder modelBuilder, ValueConverter converter)
- {
- var type = typeof(T);
- foreach (var entityType in modelBuilder.Model.GetEntityTypes())
- {
- foreach (var property in entityType.GetProperties())
- {
- if (property.ClrType == type)
- {
- property.SetValueConverter(converter);
- }
- }
- }
-
- return modelBuilder;
- }
-
- /// <summary>
- /// Specify the default <see cref="DateTimeKind"/>.
- /// </summary>
- /// <param name="modelBuilder">The model builder to extend.</param>
- /// <param name="kind">The <see cref="DateTimeKind"/> to specify.</param>
- public static void SetDefaultDateTimeKind(this ModelBuilder modelBuilder, DateTimeKind kind)
- {
- modelBuilder.UseValueConverterForType<DateTime>(new DateTimeKindValueConverter(kind));
- modelBuilder.UseValueConverterForType<DateTime?>(new DateTimeKindValueConverter(kind));
- }
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Properties/AssemblyInfo.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Properties/AssemblyInfo.cs
deleted file mode 100644
index 8d6920f2e8..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System.Reflection;
-using System.Resources;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Jellyfin.Database.Providers.SqLite")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Jellyfin Project")]
-[assembly: AssemblyProduct("Jellyfin Server")]
-[assembly: AssemblyCopyright("Copyright © 2019 Jellyfin Contributors. Code released under the GNU General Public License")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-[assembly: NeutralResourcesLanguage("en")]
-[assembly: InternalsVisibleTo("Jellyfin.Server.Implementations.Tests")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/SqliteDatabaseProvider.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/SqliteDatabaseProvider.cs
deleted file mode 100644
index ef4f00384b..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/SqliteDatabaseProvider.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-using Jellyfin.Server.Implementations;
-using MediaBrowser.Common.Configuration;
-using Microsoft.Data.Sqlite;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.Extensions.Logging;
-
-namespace Jellyfin.Database.Providers.SqLite;
-
-/// <summary>
-/// Configures jellyfin to use an SQLite database.
-/// </summary>
-[JellyfinDatabaseProviderKey("Jellyfin-SQLite")]
-public sealed class SqliteDatabaseProvider : IJellyfinDatabaseProvider
-{
- private readonly IApplicationPaths _applicationPaths;
- private readonly ILogger<SqliteDatabaseProvider> _logger;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="SqliteDatabaseProvider"/> class.
- /// </summary>
- /// <param name="applicationPaths">Service to construct the fallback when the old data path configuration is used.</param>
- /// <param name="logger">A logger.</param>
- public SqliteDatabaseProvider(IApplicationPaths applicationPaths, ILogger<SqliteDatabaseProvider> logger)
- {
- _applicationPaths = applicationPaths;
- _logger = logger;
- }
-
- /// <inheritdoc/>
- public IDbContextFactory<JellyfinDbContext>? DbContextFactory { get; set; }
-
- /// <inheritdoc/>
- public void Initialise(DbContextOptionsBuilder options)
- {
- options.UseSqlite(
- $"Filename={Path.Combine(_applicationPaths.DataPath, "jellyfin.db")};Pooling=false",
- sqLiteOptions => sqLiteOptions.MigrationsAssembly(GetType().Assembly));
- }
-
- /// <inheritdoc/>
- public async Task RunScheduledOptimisation(CancellationToken cancellationToken)
- {
- var context = await DbContextFactory!.CreateDbContextAsync(cancellationToken).ConfigureAwait(false);
- await using (context.ConfigureAwait(false))
- {
- if (context.Database.IsSqlite())
- {
- await context.Database.ExecuteSqlRawAsync("PRAGMA optimize", cancellationToken).ConfigureAwait(false);
- await context.Database.ExecuteSqlRawAsync("VACUUM", cancellationToken).ConfigureAwait(false);
- _logger.LogInformation("jellyfin.db optimized successfully!");
- }
- else
- {
- _logger.LogInformation("This database doesn't support optimization");
- }
- }
- }
-
- /// <inheritdoc/>
- public void OnModelCreating(ModelBuilder modelBuilder)
- {
- modelBuilder.SetDefaultDateTimeKind(DateTimeKind.Utc);
- }
-
- /// <inheritdoc/>
- public async Task RunShutdownTask(CancellationToken cancellationToken)
- {
- // Run before disposing the application
- var context = await DbContextFactory!.CreateDbContextAsync(cancellationToken).ConfigureAwait(false);
- await using (context.ConfigureAwait(false))
- {
- await context.Database.ExecuteSqlRawAsync("PRAGMA optimize", cancellationToken).ConfigureAwait(false);
- }
-
- SqliteConnection.ClearAllPools();
- }
-}
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/ValueConverters/DateTimeKindValueConverter.cs b/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/ValueConverters/DateTimeKindValueConverter.cs
deleted file mode 100644
index 2e585c92df..0000000000
--- a/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/ValueConverters/DateTimeKindValueConverter.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace Jellyfin.Server.Implementations.ValueConverters
-{
- /// <summary>
- /// ValueConverter to specify kind.
- /// </summary>
- public class DateTimeKindValueConverter : ValueConverter<DateTime, DateTime>
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="DateTimeKindValueConverter"/> class.
- /// </summary>
- /// <param name="kind">The kind to specify.</param>
- /// <param name="mappingHints">The mapping hints.</param>
- public DateTimeKindValueConverter(DateTimeKind kind, ConverterMappingHints? mappingHints = null)
- : base(v => v.ToUniversalTime(), v => DateTime.SpecifyKind(v, kind), mappingHints)
- {
- }
- }
-}
diff --git a/Jellyfin.Database/readme.md b/Jellyfin.Database/readme.md
deleted file mode 100644
index 55d57d3eff..0000000000
--- a/Jellyfin.Database/readme.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# How to run EFCore migrations
-
-This shall provide context on how to work with entity frameworks multi provider migration feature.
-
-Jellyfin supports multiple database providers, namely SqLite as its default and the experimental postgresSQL.
-
-Each provider has its own set of migrations, as they contain provider specific instructions to migrate the specific changes to their respective systems.
-
-When creating a new migration, you always have to create migrations for all providers. This is supported via the following syntax:
-
-```cmd
-dotnet ef migrations add MIGRATION_NAME --project "PATH_TO_PROJECT" -- --provider PROVIDER_KEY
-```
-
-with both sqlite and pgsql currently beeing supported and both need migrations, you need to run the Entity Framework tool with the correct project to tell EFCore where to store the migrations and the correct provider key to tell jellyfin to load that provider.
-
-The example is made from the root folder of the project e.g for codespaces `/workspaces/jellyfin`
-
-```cmd
-dotnet ef migrations add {MIGRATION_NAME} --project "Jellyfin.Database/Jellyfin.Database.Providers.SqLite" -- --migration-provider Jellyfin-SQLite
-dotnet ef migrations add {MIGRATION_NAME} --project "Jellyfin.Database/Jellyfin.Database.Providers.PgSql" -- --migration-provider Jellyfin-PgSql
-```
-
-If you get the error: `Run "dotnet tool restore" to make the "dotnet-ef" command available.` Run `dotnet restore`.
-
-in the event that you get the error: `System.UnauthorizedAccessException: Access to the path '/Jellyfin.Database' is denied.` you have to restore as sudo and then run `ef migrations` as sudo too.