diff options
| author | Shadowghost <Ghost_of_Stone@web.de> | 2026-10-24 09:56:04 +0200 |
|---|---|---|
| committer | Shadowghost <Ghost_of_Stone@web.de> | 2026-10-24 09:56:04 +0200 |
| commit | d95c2e1425d0d902e8191260ba9151f686aa2650 (patch) | |
| tree | 3bc937664dcf9fe8d7659b00d92fc3a6c61be805 /Emby.Server.Implementations/Data | |
| parent | d3a92c69f8c1c5d1cda803a35f03175d6ba3b091 (diff) | |
| parent | c7ce6a1b56ee7dcc1896250df0f2f9deaa828a81 (diff) | |
Merge branch 'master' into port-async-migration-routines
# Conflicts:
# Jellyfin.Server/Migrations/Routines/20260915120000_MigrateRatingLevels.cs
Diffstat (limited to 'Emby.Server.Implementations/Data')
3 files changed, 37 insertions, 2 deletions
diff --git a/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs b/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs index 17355960c3..81ae9a536b 100644 --- a/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs +++ b/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs @@ -113,7 +113,7 @@ public class CleanDatabaseScheduledTask : ILibraryPostScanTask var transaction = await context.Database.BeginTransactionAsync(cancellationToken).ConfigureAwait(false); await using (transaction.ConfigureAwait(false)) { - await context.ItemValues.Where(e => e.BaseItemsMap!.Count == 0).ExecuteDeleteAsync(cancellationToken).ConfigureAwait(false); + await context.ItemValues.Where(e => !e.BaseItemsMap!.Any()).ExecuteDeleteAsync(cancellationToken).ConfigureAwait(false); subProgress.Report(50); await transaction.CommitAsync(cancellationToken).ConfigureAwait(false); subProgress.Report(100); diff --git a/Emby.Server.Implementations/Data/ItemTypeLookup.cs b/Emby.Server.Implementations/Data/ItemTypeLookup.cs index 82c0a8b6c5..03117f6de5 100644 --- a/Emby.Server.Implementations/Data/ItemTypeLookup.cs +++ b/Emby.Server.Implementations/Data/ItemTypeLookup.cs @@ -1,8 +1,8 @@ using System.Collections.Frozen; using System.Collections.Generic; -using System.Threading.Channels; using Emby.Server.Implementations.Playlists; using Jellyfin.Data.Enums; +using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; diff --git a/Emby.Server.Implementations/Data/RefreshDatabaseStatisticsPostScanTask.cs b/Emby.Server.Implementations/Data/RefreshDatabaseStatisticsPostScanTask.cs new file mode 100644 index 0000000000..be1fe660c9 --- /dev/null +++ b/Emby.Server.Implementations/Data/RefreshDatabaseStatisticsPostScanTask.cs @@ -0,0 +1,35 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Jellyfin.Database.Implementations; +using MediaBrowser.Controller.Library; + +namespace Emby.Server.Implementations.Data; + +/// <summary> +/// Refreshes the database statistics after every library scan. +/// </summary> +/// <remarks> +/// The scheduled optimization skips itself while a scan runs, so without this the first scan of a new server +/// leaves every query planned for an empty library until the next scheduled run. +/// </remarks> +public class RefreshDatabaseStatisticsPostScanTask : ILibraryPostScanTask +{ + private readonly IJellyfinDatabaseProvider _databaseProvider; + + /// <summary> + /// Initializes a new instance of the <see cref="RefreshDatabaseStatisticsPostScanTask"/> class. + /// </summary> + /// <param name="databaseProvider">The database provider.</param> + public RefreshDatabaseStatisticsPostScanTask(IJellyfinDatabaseProvider databaseProvider) + { + _databaseProvider = databaseProvider; + } + + /// <inheritdoc /> + public async Task Run(IProgress<double> progress, CancellationToken cancellationToken) + { + await _databaseProvider.RefreshStatistics(cancellationToken).ConfigureAwait(false); + progress.Report(100); + } +} |
