diff --git a/Kyoo/Controllers/Repositories/SeasonRepository.cs b/Kyoo/Controllers/Repositories/SeasonRepository.cs index a91163a6..e27cf755 100644 --- a/Kyoo/Controllers/Repositories/SeasonRepository.cs +++ b/Kyoo/Controllers/Repositories/SeasonRepository.cs @@ -12,12 +12,14 @@ namespace Kyoo.Controllers { private readonly DatabaseContext _database; private readonly IProviderRepository _providers; + private readonly IEpisodeRepository _episodes; - public SeasonRepository(DatabaseContext database, IProviderRepository providers) + public SeasonRepository(DatabaseContext database, IProviderRepository providers, IEpisodeRepository episodes) { _database = database; _providers = providers; + _episodes = episodes; } public void Dispose() @@ -151,6 +153,9 @@ namespace Kyoo.Controllers if (obj.ExternalIDs != null) foreach (MetadataID entry in obj.ExternalIDs) _database.Entry(entry).State = EntityState.Deleted; + if (obj.Episodes != null) + foreach (Episode episode in obj.Episodes) + await _episodes.Delete(episode); await _database.SaveChangesAsync(); } diff --git a/Kyoo/Controllers/Repositories/ShowRepository.cs b/Kyoo/Controllers/Repositories/ShowRepository.cs index 1be13aba..6821e61f 100644 --- a/Kyoo/Controllers/Repositories/ShowRepository.cs +++ b/Kyoo/Controllers/Repositories/ShowRepository.cs @@ -15,18 +15,24 @@ namespace Kyoo.Controllers private readonly IPeopleRepository _people; private readonly IGenreRepository _genres; private readonly IProviderRepository _providers; + private readonly ISeasonRepository _seasons; + private readonly IEpisodeRepository _episodes; public ShowRepository(DatabaseContext database, IStudioRepository studios, IPeopleRepository people, IGenreRepository genres, - IProviderRepository providers) + IProviderRepository providers, + ISeasonRepository seasons, + IEpisodeRepository episodes) { _database = database; _studios = studios; _people = people; _genres = genres; _providers = providers; + _seasons = seasons; + _episodes = episodes; } public void Dispose() @@ -40,19 +46,19 @@ namespace Kyoo.Controllers await Task.WhenAll(_database.DisposeAsync().AsTask(), _studios.DisposeAsync().AsTask()); } - public async Task Get(int id) + public Task Get(int id) { - return await _database.Shows.FirstOrDefaultAsync(x => x.ID == id); + return _database.Shows.FirstOrDefaultAsync(x => x.ID == id); } - public async Task Get(string slug) + public Task Get(string slug) { - return await _database.Shows.FirstOrDefaultAsync(x => x.Slug == slug); + return _database.Shows.FirstOrDefaultAsync(x => x.Slug == slug); } - public async Task GetByPath(string path) + public Task GetByPath(string path) { - return await _database.Shows.FirstOrDefaultAsync(x => x.Path == path); + return _database.Shows.FirstOrDefaultAsync(x => x.Path == path); } public async Task> Search(string query) @@ -145,22 +151,16 @@ namespace Kyoo.Controllers obj.StudioID = await _studios.CreateIfNotExists(obj.Studio); if (obj.GenreLinks != null) - { foreach (GenreLink link in obj.GenreLinks) link.GenreID = await _genres.CreateIfNotExists(link.Genre); - } if (obj.People != null) - { foreach (PeopleLink link in obj.People) link.PeopleID = await _people.CreateIfNotExists(link.People); - } if (obj.ExternalIDs != null) - { foreach (MetadataID link in obj.ExternalIDs) link.ProviderID = await _providers.CreateIfNotExists(link.Provider); - } } public async Task Delete(Show obj) @@ -184,6 +184,13 @@ namespace Kyoo.Controllers if (obj.LibraryLinks != null) foreach (LibraryLink entry in obj.LibraryLinks) _database.Entry(entry).State = EntityState.Deleted; + + if (obj.Seasons != null) + foreach (Season season in obj.Seasons) + await _seasons.Delete(season); + if (obj.Episodes != null) + foreach (Episode episode in obj.Episodes.Where(x => x.SeasonID == null)) + await _episodes.Delete(episode); await _database.SaveChangesAsync(); } diff --git a/Kyoo/Controllers/Repositories/StudioRepository.cs b/Kyoo/Controllers/Repositories/StudioRepository.cs index 2c598756..c9b56777 100644 --- a/Kyoo/Controllers/Repositories/StudioRepository.cs +++ b/Kyoo/Controllers/Repositories/StudioRepository.cs @@ -115,6 +115,10 @@ namespace Kyoo.Controllers throw new ArgumentNullException(nameof(obj)); _database.Entry(obj).State = EntityState.Deleted; + + // Using Dotnet-EF change discovery service to remove references to this studio on shows. + foreach (Show show in obj.Shows) + show.StudioID = null; await _database.SaveChangesAsync(); } }