From 0d4bd0495b2e74cb6f1d7f08cda43accb339b77e Mon Sep 17 00:00:00 2001 From: JPVenson Date: Thu, 9 Oct 2025 19:44:07 +0000 Subject: Add migration to remove artist and album artists from database --- .../Migrations/Routines/CleanMusicArtist.cs | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs (limited to 'Jellyfin.Server') diff --git a/Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs b/Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs new file mode 100644 index 000000000..4dc4d6dc7 --- /dev/null +++ b/Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs @@ -0,0 +1,45 @@ +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Jellyfin.Data.Enums; +using Jellyfin.Database.Implementations; +using Jellyfin.Server.ServerSetupApp; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; + +namespace Jellyfin.Server.Migrations.Routines; + +/// +/// Cleans up all Music artists that have been migrated in the 10.11 RC migrations. +/// +public class CleanMusicArtist : IAsyncMigrationRoutine +{ + private readonly IStartupLogger _startupLogger; + private readonly IDbContextFactory _dbContextFactory; + + /// + /// Initializes a new instance of the class. + /// + /// The startup logger. + /// The Db context factory. + public CleanMusicArtist(IStartupLogger startupLogger, IDbContextFactory dbContextFactory) + { + _startupLogger = startupLogger; + _dbContextFactory = dbContextFactory; + } + + /// + public async Task PerformAsync(CancellationToken cancellationToken) + { + var context = await _dbContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); + await using (context.ConfigureAwait(false)) + { + var peoples = context.Peoples.Where(e => e.PersonType == nameof(PersonKind.Artist) || e.PersonType == nameof(PersonKind.AlbumArtist)); + _startupLogger.LogInformation("Delete {Number} Artist and Album Artist person types from db", await peoples.CountAsync(cancellationToken).ConfigureAwait(false)); + + await peoples + .ExecuteDeleteAsync(cancellationToken) + .ConfigureAwait(false); + } + } +} -- cgit v1.2.3