diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a0ecec66..b7f4d1ca3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] ### Fixed - Fix generated streams with mpeg2video +- Fix deleting movies that have been removed from Jellyfin and Emby ### Changed - Change some debug log messages to info so they show by default again diff --git a/ErsatzTV.Infrastructure/Data/Repositories/EmbyTelevisionRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/EmbyTelevisionRepository.cs index 5a004e3ae..acf1d9b20 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/EmbyTelevisionRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/EmbyTelevisionRepository.cs @@ -564,12 +564,8 @@ namespace ErsatzTV.Infrastructure.Data.Repositories new { LibraryId = library.Id, ShowIds = showIds }).Map(result => result.ToList()); await _dbConnection.ExecuteAsync( - @"DELETE FROM MediaItem WHERE Id IN - (SELECT m.Id FROM MediaItem m - INNER JOIN EmbyShow js ON js.Id = m.Id - INNER JOIN LibraryPath lp ON lp.Id = m.LibraryPathId - WHERE lp.LibraryId = @LibraryId AND js.ItemId IN @ShowIds)", - new { LibraryId = library.Id, ShowIds = showIds }); + "DELETE FROM MediaItem WHERE Id IN @Ids", + new { Ids = ids }); return ids; } @@ -593,12 +589,8 @@ namespace ErsatzTV.Infrastructure.Data.Repositories new { LibraryId = library.Id, EpisodeIds = episodeIds }).Map(result => result.ToList()); await _dbConnection.ExecuteAsync( - @"DELETE FROM MediaItem WHERE Id IN - (SELECT m.Id FROM MediaItem m - INNER JOIN EmbyEpisode ee ON ee.Id = m.Id - INNER JOIN LibraryPath LP on m.LibraryPathId = LP.Id - WHERE LP.LibraryId = @LibraryId AND ee.ItemId IN @EpisodeIds)", - new { LibraryId = library.Id, EpisodeIds = episodeIds }); + "DELETE FROM MediaItem WHERE Id IN @Ids", + new { Ids = ids }); return ids; } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/JellyfinTelevisionRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/JellyfinTelevisionRepository.cs index 8fd16ccff..a01d24384 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/JellyfinTelevisionRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/JellyfinTelevisionRepository.cs @@ -565,12 +565,8 @@ namespace ErsatzTV.Infrastructure.Data.Repositories new { LibraryId = library.Id, ShowIds = showIds }).Map(result => result.ToList()); await _dbConnection.ExecuteAsync( - @"DELETE FROM MediaItem WHERE Id IN - (SELECT m.Id FROM MediaItem m - INNER JOIN JellyfinShow js ON js.Id = m.Id - INNER JOIN LibraryPath lp ON lp.Id = m.LibraryPathId - WHERE lp.LibraryId = @LibraryId AND js.ItemId IN @ShowIds)", - new { LibraryId = library.Id, ShowIds = showIds }); + "DELETE FROM MediaItem WHERE Id IN @Ids", + new { Ids = ids }); return ids; } @@ -594,12 +590,8 @@ namespace ErsatzTV.Infrastructure.Data.Repositories new { LibraryId = library.Id, EpisodeIds = episodeIds }).Map(result => result.ToList()); await _dbConnection.ExecuteAsync( - @"DELETE FROM MediaItem WHERE Id IN - (SELECT m.Id FROM MediaItem m - INNER JOIN JellyfinEpisode je ON je.Id = m.Id - INNER JOIN LibraryPath LP on m.LibraryPathId = LP.Id - WHERE LP.LibraryId = @LibraryId AND je.ItemId IN @EpisodeIds)", - new { LibraryId = library.Id, EpisodeIds = episodeIds }); + "DELETE FROM MediaItem WHERE Id IN @Ids", + new { Ids = ids }); return ids; } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs index 754b445dd..4b89c1a58 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs @@ -10,6 +10,7 @@ using ErsatzTV.Core.Emby; using ErsatzTV.Core.Interfaces.Repositories; using ErsatzTV.Core.Jellyfin; using ErsatzTV.Core.Metadata; +using ErsatzTV.Infrastructure.Extensions; using LanguageExt; using LanguageExt.UnsafeValueAccess; using Microsoft.EntityFrameworkCore; @@ -237,12 +238,8 @@ namespace ErsatzTV.Infrastructure.Data.Repositories new { LibraryId = library.Id, Keys = movieKeys }).Map(result => result.ToList()); await _dbConnection.ExecuteAsync( - @"DELETE FROM MediaItem WHERE Id IN - (SELECT m.Id FROM MediaItem m - INNER JOIN PlexMovie pm ON pm.Id = m.Id - INNER JOIN LibraryPath lp ON lp.Id = m.LibraryPathId - WHERE lp.LibraryId = @LibraryId AND pm.Key not in @Keys)", - new { LibraryId = library.Id, Keys = movieKeys }); + "DELETE FROM MediaItem WHERE Id IN @Ids", + new { Ids = ids }); return ids; } @@ -273,7 +270,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories new { LibraryId = library.Id, ItemIds = movieIds }).Map(result => result.ToList()); await _dbConnection.ExecuteAsync( - "DELETE FROM JellyfinMovie WHERE Id IN @Ids", + "DELETE FROM MediaItem WHERE Id IN @Ids", new { Ids = ids }); return ids; @@ -529,7 +526,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories new { LibraryId = library.Id, ItemIds = movieIds }).Map(result => result.ToList()); await _dbConnection.ExecuteAsync( - "DELETE FROM EmbyMovie WHERE Id IN @Ids", + "DELETE FROM MediaItem WHERE Id IN @Ids", new { Ids = ids }); return ids; diff --git a/ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs index d331438fc..1d23f9b58 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs @@ -538,13 +538,8 @@ namespace ErsatzTV.Infrastructure.Data.Repositories new { SeasonKey = seasonKey, Keys = episodeKeys }).Map(result => result.ToList()); await _dbConnection.ExecuteAsync( - @"DELETE FROM MediaItem WHERE Id IN - (SELECT m.Id FROM MediaItem m - INNER JOIN Episode e ON m.Id = e.Id - INNER JOIN PlexEpisode pe ON pe.Id = m.Id - INNER JOIN PlexSeason P on P.Id = e.SeasonId - WHERE P.Key = @SeasonKey AND pe.Key not in @Keys)", - new { SeasonKey = seasonKey, Keys = episodeKeys }); + "DELETE FROM MediaItem WHERE Id IN @Ids", + new { Ids = ids }); return ids; } @@ -683,12 +678,8 @@ namespace ErsatzTV.Infrastructure.Data.Repositories new { LibraryId = library.Id, Keys = showKeys }).Map(result => result.ToList()); await _dbConnection.ExecuteAsync( - @"DELETE FROM MediaItem WHERE Id IN - (SELECT m.Id FROM MediaItem m - INNER JOIN PlexShow ps ON ps.Id = m.Id - INNER JOIN LibraryPath lp ON lp.Id = m.LibraryPathId - WHERE lp.LibraryId = @LibraryId AND ps.Key not in @Keys)", - new { LibraryId = library.Id, Keys = showKeys }); + "DELETE FROM MediaItem WHERE Id IN @Ids", + new { Ids = ids }); return ids; }