aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Server
diff options
context:
space:
mode:
Diffstat (limited to 'Jellyfin.Server')
-rw-r--r--Jellyfin.Server/Filters/CachingOpenApiProvider.cs2
-rw-r--r--Jellyfin.Server/GlobalSuppressions.cs8
-rw-r--r--Jellyfin.Server/Migrations/MigrationOptions.cs2
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420050000_DisableTranscodingThrottling.cs (renamed from Jellyfin.Server/Migrations/Routines/DisableTranscodingThrottling.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420060000_CreateUserLoggingConfigFile.cs (renamed from Jellyfin.Server/Migrations/Routines/CreateUserLoggingConfigFile.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420070000_MigrateActivityLogDb.cs (renamed from Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420080000_RemoveDuplicateExtras.cs (renamed from Jellyfin.Server/Migrations/Routines/RemoveDuplicateExtras.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420090000_AddDefaultPluginRepository.cs (renamed from Jellyfin.Server/Migrations/Routines/AddDefaultPluginRepository.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420100000_MigrateUserDb.cs (renamed from Jellyfin.Server/Migrations/Routines/MigrateUserDb.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420110000_ReaddDefaultPluginRepository.cs (renamed from Jellyfin.Server/Migrations/Routines/ReaddDefaultPluginRepository.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420120000_MigrateDisplayPreferencesDb.cs (renamed from Jellyfin.Server/Migrations/Routines/MigrateDisplayPreferencesDb.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420130000_RemoveDownloadImagesInAdvance.cs (renamed from Jellyfin.Server/Migrations/Routines/RemoveDownloadImagesInAdvance.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420140000_MigrateAuthenticationDb.cs (renamed from Jellyfin.Server/Migrations/Routines/MigrateAuthenticationDb.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420150000_FixPlaylistOwner.cs (renamed from Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420160000_AddDefaultCastReceivers.cs (renamed from Jellyfin.Server/Migrations/Routines/AddDefaultCastReceivers.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420170000_UpdateDefaultPluginRepository.cs (renamed from Jellyfin.Server/Migrations/Routines/UpdateDefaultPluginRepository.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420180000_FixAudioData.cs (renamed from Jellyfin.Server/Migrations/Routines/FixAudioData.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420190000_RemoveDuplicatePlaylistChildren.cs (renamed from Jellyfin.Server/Migrations/Routines/RemoveDuplicatePlaylistChildren.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420193000_MigrateLibraryDbCompatibilityCheck.cs (renamed from Jellyfin.Server/Migrations/Routines/MigrateLibraryDbCompatibilityCheck.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420200000_MigrateLibraryDb.cs (renamed from Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420210000_MoveExtractedFiles.cs (renamed from Jellyfin.Server/Migrations/Routines/MoveExtractedFiles.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420230000_MoveTrickplayFiles.cs (renamed from Jellyfin.Server/Migrations/Routines/MoveTrickplayFiles.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250420230000_RefreshInternalDateModified.cs (renamed from Jellyfin.Server/Migrations/Routines/RefreshInternalDateModified.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250421000000_MigrateKeyframeData.cs (renamed from Jellyfin.Server/Migrations/Routines/MigrateKeyframeData.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250618010000_MigrateLibraryUserData.cs (renamed from Jellyfin.Server/Migrations/Routines/MigrateLibraryUserData.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250620180000_FixDates.cs (renamed from Jellyfin.Server/Migrations/Routines/FixDates.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20250730215000_ReseedFolderFlag.cs (renamed from Jellyfin.Server/Migrations/Routines/ReseedFolderFlag.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20251008120000_RefreshCleanNames.cs (renamed from Jellyfin.Server/Migrations/Routines/RefreshCleanNames.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20251009200000_CleanMusicArtist.cs (renamed from Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20260113120000_MigrateLinkedChildren.cs (renamed from Jellyfin.Server/Migrations/Routines/MigrateLinkedChildren.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20260113230000_CleanupOrphanedExtras.cs (renamed from Jellyfin.Server/Migrations/Routines/CleanupOrphanedExtras.cs)58
-rw-r--r--Jellyfin.Server/Migrations/Routines/20260115120000_FixIncorrectOwnerIdRelationships.cs (renamed from Jellyfin.Server/Migrations/Routines/FixIncorrectOwnerIdRelationships.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20260206200000_FixLibrarySubtitleDownloadLanguages.cs (renamed from Jellyfin.Server/Migrations/Routines/FixLibrarySubtitleDownloadLanguages.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20260302090000_MigrateRatingLevels.cs (renamed from Jellyfin.Server/Migrations/Routines/MigrateRatingLevels.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20260508120000_MergeDuplicateMusicArtists.cs (renamed from Jellyfin.Server/Migrations/Routines/MergeDuplicateMusicArtists.cs)0
-rw-r--r--Jellyfin.Server/Migrations/Routines/20260508130000_MergeDuplicatePeople.cs (renamed from Jellyfin.Server/Migrations/Routines/MergeDuplicatePeople.cs)14
-rw-r--r--Jellyfin.Server/ServerSetupApp/SetupServer.cs10
-rw-r--r--Jellyfin.Server/ServerSetupApp/index.mstemplate.html4
38 files changed, 54 insertions, 44 deletions
diff --git a/Jellyfin.Server/Filters/CachingOpenApiProvider.cs b/Jellyfin.Server/Filters/CachingOpenApiProvider.cs
index fdc49a9840..c9fd031ef9 100644
--- a/Jellyfin.Server/Filters/CachingOpenApiProvider.cs
+++ b/Jellyfin.Server/Filters/CachingOpenApiProvider.cs
@@ -68,7 +68,7 @@ internal sealed class CachingOpenApiProvider : ISwaggerProvider
try
{
- openApiDocument = _swaggerGenerator.GetSwagger(documentName);
+ openApiDocument = _swaggerGenerator.GetSwagger(documentName);
}
catch (Exception ex)
{
diff --git a/Jellyfin.Server/GlobalSuppressions.cs b/Jellyfin.Server/GlobalSuppressions.cs
new file mode 100644
index 0000000000..676747e29f
--- /dev/null
+++ b/Jellyfin.Server/GlobalSuppressions.cs
@@ -0,0 +1,8 @@
+// This file is used by Code Analysis to maintain SuppressMessage
+// attributes that are applied to this project.
+// Project-level suppressions either have no target or are given
+// a specific target and scoped to a namespace, type, member, etc.
+
+using System.Diagnostics.CodeAnalysis;
+
+[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1649:File name should match first type name", Justification = "Migration files should follow the EFCore standard in regards to naming.", Scope = "namespaceanddescendants", Target = "~N:Jellyfin.Server.Migrations.Routines")]
diff --git a/Jellyfin.Server/Migrations/MigrationOptions.cs b/Jellyfin.Server/Migrations/MigrationOptions.cs
index c9710f1fd1..cd1b74a613 100644
--- a/Jellyfin.Server/Migrations/MigrationOptions.cs
+++ b/Jellyfin.Server/Migrations/MigrationOptions.cs
@@ -16,7 +16,7 @@ namespace Jellyfin.Server.Migrations
Applied = new List<(Guid Id, string Name)>();
}
-// .Net xml serializer can't handle interfaces
+ // .Net xml serializer can't handle interfaces
#pragma warning disable CA1002 // Do not expose generic lists
/// <summary>
/// Gets the list of applied migration routine names.
diff --git a/Jellyfin.Server/Migrations/Routines/DisableTranscodingThrottling.cs b/Jellyfin.Server/Migrations/Routines/20250420050000_DisableTranscodingThrottling.cs
index acf2835fe0..acf2835fe0 100644
--- a/Jellyfin.Server/Migrations/Routines/DisableTranscodingThrottling.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420050000_DisableTranscodingThrottling.cs
diff --git a/Jellyfin.Server/Migrations/Routines/CreateUserLoggingConfigFile.cs b/Jellyfin.Server/Migrations/Routines/20250420060000_CreateUserLoggingConfigFile.cs
index 1326a6dc8d..1326a6dc8d 100644
--- a/Jellyfin.Server/Migrations/Routines/CreateUserLoggingConfigFile.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420060000_CreateUserLoggingConfigFile.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs b/Jellyfin.Server/Migrations/Routines/20250420070000_MigrateActivityLogDb.cs
index 8c8563190d..8c8563190d 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420070000_MigrateActivityLogDb.cs
diff --git a/Jellyfin.Server/Migrations/Routines/RemoveDuplicateExtras.cs b/Jellyfin.Server/Migrations/Routines/20250420080000_RemoveDuplicateExtras.cs
index c9e66d0cfe..c9e66d0cfe 100644
--- a/Jellyfin.Server/Migrations/Routines/RemoveDuplicateExtras.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420080000_RemoveDuplicateExtras.cs
diff --git a/Jellyfin.Server/Migrations/Routines/AddDefaultPluginRepository.cs b/Jellyfin.Server/Migrations/Routines/20250420090000_AddDefaultPluginRepository.cs
index 8c8398a161..8c8398a161 100644
--- a/Jellyfin.Server/Migrations/Routines/AddDefaultPluginRepository.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420090000_AddDefaultPluginRepository.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateUserDb.cs b/Jellyfin.Server/Migrations/Routines/20250420100000_MigrateUserDb.cs
index 8c3361ee16..8c3361ee16 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateUserDb.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420100000_MigrateUserDb.cs
diff --git a/Jellyfin.Server/Migrations/Routines/ReaddDefaultPluginRepository.cs b/Jellyfin.Server/Migrations/Routines/20250420110000_ReaddDefaultPluginRepository.cs
index ebf4a2780e..ebf4a2780e 100644
--- a/Jellyfin.Server/Migrations/Routines/ReaddDefaultPluginRepository.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420110000_ReaddDefaultPluginRepository.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateDisplayPreferencesDb.cs b/Jellyfin.Server/Migrations/Routines/20250420120000_MigrateDisplayPreferencesDb.cs
index ffd06fea0d..ffd06fea0d 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateDisplayPreferencesDb.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420120000_MigrateDisplayPreferencesDb.cs
diff --git a/Jellyfin.Server/Migrations/Routines/RemoveDownloadImagesInAdvance.cs b/Jellyfin.Server/Migrations/Routines/20250420130000_RemoveDownloadImagesInAdvance.cs
index b626c473e3..b626c473e3 100644
--- a/Jellyfin.Server/Migrations/Routines/RemoveDownloadImagesInAdvance.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420130000_RemoveDownloadImagesInAdvance.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateAuthenticationDb.cs b/Jellyfin.Server/Migrations/Routines/20250420140000_MigrateAuthenticationDb.cs
index 0de775e03a..0de775e03a 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateAuthenticationDb.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420140000_MigrateAuthenticationDb.cs
diff --git a/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs b/Jellyfin.Server/Migrations/Routines/20250420150000_FixPlaylistOwner.cs
index 56614ece3c..56614ece3c 100644
--- a/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420150000_FixPlaylistOwner.cs
diff --git a/Jellyfin.Server/Migrations/Routines/AddDefaultCastReceivers.cs b/Jellyfin.Server/Migrations/Routines/20250420160000_AddDefaultCastReceivers.cs
index 00d152b4b8..00d152b4b8 100644
--- a/Jellyfin.Server/Migrations/Routines/AddDefaultCastReceivers.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420160000_AddDefaultCastReceivers.cs
diff --git a/Jellyfin.Server/Migrations/Routines/UpdateDefaultPluginRepository.cs b/Jellyfin.Server/Migrations/Routines/20250420170000_UpdateDefaultPluginRepository.cs
index f58cf27413..f58cf27413 100644
--- a/Jellyfin.Server/Migrations/Routines/UpdateDefaultPluginRepository.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420170000_UpdateDefaultPluginRepository.cs
diff --git a/Jellyfin.Server/Migrations/Routines/FixAudioData.cs b/Jellyfin.Server/Migrations/Routines/20250420180000_FixAudioData.cs
index d102e24b91..d102e24b91 100644
--- a/Jellyfin.Server/Migrations/Routines/FixAudioData.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420180000_FixAudioData.cs
diff --git a/Jellyfin.Server/Migrations/Routines/RemoveDuplicatePlaylistChildren.cs b/Jellyfin.Server/Migrations/Routines/20250420190000_RemoveDuplicatePlaylistChildren.cs
index 1545ebdc8e..1545ebdc8e 100644
--- a/Jellyfin.Server/Migrations/Routines/RemoveDuplicatePlaylistChildren.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420190000_RemoveDuplicatePlaylistChildren.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateLibraryDbCompatibilityCheck.cs b/Jellyfin.Server/Migrations/Routines/20250420193000_MigrateLibraryDbCompatibilityCheck.cs
index d4cc9bbeed..d4cc9bbeed 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateLibraryDbCompatibilityCheck.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420193000_MigrateLibraryDbCompatibilityCheck.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs b/Jellyfin.Server/Migrations/Routines/20250420200000_MigrateLibraryDb.cs
index 3e4205547a..3e4205547a 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420200000_MigrateLibraryDb.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MoveExtractedFiles.cs b/Jellyfin.Server/Migrations/Routines/20250420210000_MoveExtractedFiles.cs
index cfc1628782..cfc1628782 100644
--- a/Jellyfin.Server/Migrations/Routines/MoveExtractedFiles.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420210000_MoveExtractedFiles.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MoveTrickplayFiles.cs b/Jellyfin.Server/Migrations/Routines/20250420230000_MoveTrickplayFiles.cs
index 79a8f9577c..79a8f9577c 100644
--- a/Jellyfin.Server/Migrations/Routines/MoveTrickplayFiles.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420230000_MoveTrickplayFiles.cs
diff --git a/Jellyfin.Server/Migrations/Routines/RefreshInternalDateModified.cs b/Jellyfin.Server/Migrations/Routines/20250420230000_RefreshInternalDateModified.cs
index b23a7dbc42..b23a7dbc42 100644
--- a/Jellyfin.Server/Migrations/Routines/RefreshInternalDateModified.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250420230000_RefreshInternalDateModified.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateKeyframeData.cs b/Jellyfin.Server/Migrations/Routines/20250421000000_MigrateKeyframeData.cs
index aa55309264..aa55309264 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateKeyframeData.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250421000000_MigrateKeyframeData.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateLibraryUserData.cs b/Jellyfin.Server/Migrations/Routines/20250618010000_MigrateLibraryUserData.cs
index 8a0a1741f1..8a0a1741f1 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateLibraryUserData.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250618010000_MigrateLibraryUserData.cs
diff --git a/Jellyfin.Server/Migrations/Routines/FixDates.cs b/Jellyfin.Server/Migrations/Routines/20250620180000_FixDates.cs
index a5b11b11d0..a5b11b11d0 100644
--- a/Jellyfin.Server/Migrations/Routines/FixDates.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250620180000_FixDates.cs
diff --git a/Jellyfin.Server/Migrations/Routines/ReseedFolderFlag.cs b/Jellyfin.Server/Migrations/Routines/20250730215000_ReseedFolderFlag.cs
index 502763ac09..502763ac09 100644
--- a/Jellyfin.Server/Migrations/Routines/ReseedFolderFlag.cs
+++ b/Jellyfin.Server/Migrations/Routines/20250730215000_ReseedFolderFlag.cs
diff --git a/Jellyfin.Server/Migrations/Routines/RefreshCleanNames.cs b/Jellyfin.Server/Migrations/Routines/20251008120000_RefreshCleanNames.cs
index eca50ac100..eca50ac100 100644
--- a/Jellyfin.Server/Migrations/Routines/RefreshCleanNames.cs
+++ b/Jellyfin.Server/Migrations/Routines/20251008120000_RefreshCleanNames.cs
diff --git a/Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs b/Jellyfin.Server/Migrations/Routines/20251009200000_CleanMusicArtist.cs
index d5c5f3d929..d5c5f3d929 100644
--- a/Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs
+++ b/Jellyfin.Server/Migrations/Routines/20251009200000_CleanMusicArtist.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateLinkedChildren.cs b/Jellyfin.Server/Migrations/Routines/20260113120000_MigrateLinkedChildren.cs
index 74f03f5107..74f03f5107 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateLinkedChildren.cs
+++ b/Jellyfin.Server/Migrations/Routines/20260113120000_MigrateLinkedChildren.cs
diff --git a/Jellyfin.Server/Migrations/Routines/CleanupOrphanedExtras.cs b/Jellyfin.Server/Migrations/Routines/20260113230000_CleanupOrphanedExtras.cs
index 14abaa7317..f4dfa49068 100644
--- a/Jellyfin.Server/Migrations/Routines/CleanupOrphanedExtras.cs
+++ b/Jellyfin.Server/Migrations/Routines/20260113230000_CleanupOrphanedExtras.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Jellyfin.Database.Implementations;
+using Jellyfin.Server.Implementations.Item;
using Jellyfin.Server.Migrations.Stages;
using Jellyfin.Server.ServerSetupApp;
using MediaBrowser.Controller.Channels;
@@ -23,7 +24,7 @@ namespace Jellyfin.Server.Migrations.Routines;
/// Removes orphaned extras (items with OwnerId pointing to non-existent items).
/// Must run before EF migrations that add FK constraints on OwnerId.
/// </summary>
-[JellyfinMigration("2026-01-13T23:00:00", nameof(CleanupOrphanedExtras), Stage = JellyfinMigrationStageTypes.CoreInitialisation)]
+[JellyfinMigration("2026-01-13T23:00:00", nameof(CleanupOrphanedExtras), Stage = JellyfinMigrationStageTypes.AppInitialisation)]
[JellyfinMigrationBackup(JellyfinDb = true)]
public class CleanupOrphanedExtras : IAsyncMigrationRoutine
{
@@ -37,39 +38,14 @@ public class CleanupOrphanedExtras : IAsyncMigrationRoutine
/// <param name="logger">The startup logger.</param>
/// <param name="dbContextFactory">The database context factory.</param>
/// <param name="libraryManager">The library manager.</param>
- /// <param name="itemRepository">The item repository.</param>
- /// <param name="itemCountService">The item count service.</param>
- /// <param name="channelManager">The channel manager.</param>
- /// <param name="recordingsManager">The recordings manager.</param>
- /// <param name="mediaSourceManager">The media source manager.</param>
- /// <param name="mediaSegmentManager">The media segments manager.</param>
- /// <param name="configurationManager">The configuration manager.</param>
- /// <param name="fileSystem">The file system.</param>
public CleanupOrphanedExtras(
IStartupLogger<CleanupOrphanedExtras> logger,
IDbContextFactory<JellyfinDbContext> dbContextFactory,
- ILibraryManager libraryManager,
- IItemRepository itemRepository,
- IItemCountService itemCountService,
- IChannelManager channelManager,
- IRecordingsManager recordingsManager,
- IMediaSourceManager mediaSourceManager,
- IMediaSegmentManager mediaSegmentManager,
- IServerConfigurationManager configurationManager,
- IFileSystem fileSystem)
+ ILibraryManager libraryManager)
{
_logger = logger;
_dbContextFactory = dbContextFactory;
_libraryManager = libraryManager;
- BaseItem.LibraryManager ??= libraryManager;
- BaseItem.ItemRepository ??= itemRepository;
- BaseItem.ItemCountService ??= itemCountService;
- BaseItem.ChannelManager ??= channelManager;
- BaseItem.MediaSourceManager ??= mediaSourceManager;
- BaseItem.MediaSegmentManager ??= mediaSegmentManager;
- BaseItem.ConfigurationManager ??= configurationManager;
- BaseItem.FileSystem ??= fileSystem;
- Video.RecordingsManager ??= recordingsManager;
}
/// <inheritdoc/>
@@ -78,12 +54,19 @@ public class CleanupOrphanedExtras : IAsyncMigrationRoutine
var context = await _dbContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false);
await using (context.ConfigureAwait(false))
{
+ var placeholderOwner = Guid.Parse("00000000-0000-0000-0000-000000000001");
+#pragma warning disable RS0030 // Do not use banned APIs
var orphanedItemIds = await context.BaseItems
- .Where(b => b.OwnerId.HasValue && !b.OwnerId.Value.Equals(Guid.Empty))
- .Where(b => !context.BaseItems.Any(parent => parent.Id.Equals(b.OwnerId!.Value)))
- .Select(b => b.Id)
+ .Where(b => b.OwnerId.HasValue && b.OwnerId == placeholderOwner)
+ .Select(b => new
+ {
+ b.Id,
+ b.Path,
+ b.Type
+ })
.ToListAsync(cancellationToken)
.ConfigureAwait(false);
+#pragma warning restore RS0030 // Do not use banned APIs
if (orphanedItemIds.Count == 0)
{
@@ -97,11 +80,16 @@ public class CleanupOrphanedExtras : IAsyncMigrationRoutine
var itemsToDelete = new List<BaseItem>();
foreach (var itemId in orphanedItemIds)
{
- var item = _libraryManager.GetItemById(itemId);
- if (item is not null)
- {
- itemsToDelete.Add(item);
- }
+ itemsToDelete.Add(BaseItemMapper.DeserializeBaseItem(
+ new Database.Implementations.Entities.BaseItemEntity()
+ {
+ Id = itemId.Id,
+ Path = itemId.Path,
+ Type = itemId.Type
+ },
+ _logger,
+ null,
+ true)!);
}
_libraryManager.DeleteItemsUnsafeFast(itemsToDelete);
diff --git a/Jellyfin.Server/Migrations/Routines/FixIncorrectOwnerIdRelationships.cs b/Jellyfin.Server/Migrations/Routines/20260115120000_FixIncorrectOwnerIdRelationships.cs
index 0baf261a2e..0baf261a2e 100644
--- a/Jellyfin.Server/Migrations/Routines/FixIncorrectOwnerIdRelationships.cs
+++ b/Jellyfin.Server/Migrations/Routines/20260115120000_FixIncorrectOwnerIdRelationships.cs
diff --git a/Jellyfin.Server/Migrations/Routines/FixLibrarySubtitleDownloadLanguages.cs b/Jellyfin.Server/Migrations/Routines/20260206200000_FixLibrarySubtitleDownloadLanguages.cs
index 2b1f549940..2b1f549940 100644
--- a/Jellyfin.Server/Migrations/Routines/FixLibrarySubtitleDownloadLanguages.cs
+++ b/Jellyfin.Server/Migrations/Routines/20260206200000_FixLibrarySubtitleDownloadLanguages.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateRatingLevels.cs b/Jellyfin.Server/Migrations/Routines/20260302090000_MigrateRatingLevels.cs
index ed92c34aa3..ed92c34aa3 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateRatingLevels.cs
+++ b/Jellyfin.Server/Migrations/Routines/20260302090000_MigrateRatingLevels.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MergeDuplicateMusicArtists.cs b/Jellyfin.Server/Migrations/Routines/20260508120000_MergeDuplicateMusicArtists.cs
index f598848465..f598848465 100644
--- a/Jellyfin.Server/Migrations/Routines/MergeDuplicateMusicArtists.cs
+++ b/Jellyfin.Server/Migrations/Routines/20260508120000_MergeDuplicateMusicArtists.cs
diff --git a/Jellyfin.Server/Migrations/Routines/MergeDuplicatePeople.cs b/Jellyfin.Server/Migrations/Routines/20260508130000_MergeDuplicatePeople.cs
index d092555139..10433599fa 100644
--- a/Jellyfin.Server/Migrations/Routines/MergeDuplicatePeople.cs
+++ b/Jellyfin.Server/Migrations/Routines/20260508130000_MergeDuplicatePeople.cs
@@ -284,10 +284,16 @@ public class MergeDuplicatePeople : IAsyncMigrationRoutine
return;
}
- await context.Peoples
- .Where(p => idsToDelete.Contains(p.Id))
- .ExecuteDeleteAsync(cancellationToken)
- .ConfigureAwait(false);
+ var idx = 0;
+ foreach (var item in idsToDelete.Chunk(200))
+ {
+ idx++; // humans count at one
+ _logger.LogInformation("Remove batch {BatchNo}/{MaxBatches} duplicate Peoples.", idx, idsToDelete.Count / 200);
+ await context.Peoples
+ .Where(p => item.Contains(p.Id))
+ .ExecuteDeleteAsync(cancellationToken)
+ .ConfigureAwait(false);
+ }
_logger.LogInformation("Removed {Count} duplicate Peoples rows.", idsToDelete.Count);
}
diff --git a/Jellyfin.Server/ServerSetupApp/SetupServer.cs b/Jellyfin.Server/ServerSetupApp/SetupServer.cs
index 05975929db..37bb1abe71 100644
--- a/Jellyfin.Server/ServerSetupApp/SetupServer.cs
+++ b/Jellyfin.Server/ServerSetupApp/SetupServer.cs
@@ -91,6 +91,13 @@ public sealed class SetupServer : IDisposable
_startupUiRenderer = (await ParserOptionsBuilder.New()
.WithTemplate(fileTemplate)
.WithFormatter(
+ (Version version, int arg) =>
+ {
+ // version type does not for some stupid reason implement IFormattable which morestachio relies on for ToString support therefor we need to do it manually.
+ return version.ToString(arg);
+ },
+ "ToString")
+ .WithFormatter(
(StartupLogTopic logEntry, IEnumerable<StartupLogTopic> children) =>
{
if (children.Any())
@@ -237,6 +244,7 @@ public sealed class SetupServer : IDisposable
});
});
+ var version = typeof(Emby.Server.Implementations.ApplicationHost).Assembly.GetName().Version!;
app.Run(async (context) =>
{
context.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
@@ -250,7 +258,7 @@ public sealed class SetupServer : IDisposable
{
{ "isInReportingMode", _isUnhealthy },
{ "retryValue", retryAfterValue },
- { "version", typeof(Emby.Server.Implementations.ApplicationHost).Assembly.GetName().Version! },
+ { "version", version },
{ "logs", startupLogEntries },
{ "networkManagerReady", networkManager is not null },
{ "localNetworkRequest", networkManager is not null && context.Connection.RemoteIpAddress is not null && networkManager.IsInLocalNetwork(context.Connection.RemoteIpAddress) }
diff --git a/Jellyfin.Server/ServerSetupApp/index.mstemplate.html b/Jellyfin.Server/ServerSetupApp/index.mstemplate.html
index 890a77619d..5706ce1fac 100644
--- a/Jellyfin.Server/ServerSetupApp/index.mstemplate.html
+++ b/Jellyfin.Server/ServerSetupApp/index.mstemplate.html
@@ -173,9 +173,9 @@
<header class="flex-row">
{{^IF isInReportingMode}}
- <p>Jellyfin Server {{version}} still starting. Please wait.</p>
+ <p>Jellyfin Server {{version.ToString(2)}} still starting. Please wait.</p>
{{#ELSE}}
- <p>Jellyfin Server has encountered an error and was not able to start.</p>
+ <p>Jellyfin Server {{version.ToString(2)}} has encountered an error and was not able to start.</p>
{{/ELSE}}
{{/IF}}