diff --git a/Kyoo/Controllers/Repositories/CollectionRepository.cs b/Kyoo/Controllers/Repositories/CollectionRepository.cs index d76cad51..878292ee 100644 --- a/Kyoo/Controllers/Repositories/CollectionRepository.cs +++ b/Kyoo/Controllers/Repositories/CollectionRepository.cs @@ -12,6 +12,7 @@ namespace Kyoo.Controllers { public class CollectionRepository : LocalRepository, ICollectionRepository { + private bool _disposed; private readonly DatabaseContext _database; private readonly Lazy _shows; private readonly Lazy _libraries; @@ -26,7 +27,10 @@ namespace Kyoo.Controllers public override void Dispose() { - base.Dispose(); + if (_disposed) + return; + _disposed = true; + _database.Dispose(); if (_shows.IsValueCreated) _shows.Value.Dispose(); if (_libraries.IsValueCreated) @@ -35,6 +39,9 @@ namespace Kyoo.Controllers public override async ValueTask DisposeAsync() { + if (_disposed) + return; + _disposed = true; await _database.DisposeAsync(); if (_shows.IsValueCreated) await _shows.Value.DisposeAsync(); diff --git a/Kyoo/Controllers/Repositories/EpisodeRepository.cs b/Kyoo/Controllers/Repositories/EpisodeRepository.cs index 277dda98..974271bc 100644 --- a/Kyoo/Controllers/Repositories/EpisodeRepository.cs +++ b/Kyoo/Controllers/Repositories/EpisodeRepository.cs @@ -12,6 +12,7 @@ namespace Kyoo.Controllers { public class EpisodeRepository : LocalRepository, IEpisodeRepository { + private bool _disposed; private readonly DatabaseContext _database; private readonly IProviderRepository _providers; private readonly IShowRepository _shows; @@ -34,12 +35,18 @@ namespace Kyoo.Controllers public override void Dispose() { + if (_disposed) + return; + _disposed = true; _database.Dispose(); _providers.Dispose(); } public override async ValueTask DisposeAsync() { + if (_disposed) + return; + _disposed = true; await _database.DisposeAsync(); await _providers.DisposeAsync(); } diff --git a/Kyoo/Controllers/Repositories/GenreRepository.cs b/Kyoo/Controllers/Repositories/GenreRepository.cs index 607c2da9..5d86abd2 100644 --- a/Kyoo/Controllers/Repositories/GenreRepository.cs +++ b/Kyoo/Controllers/Repositories/GenreRepository.cs @@ -12,6 +12,7 @@ namespace Kyoo.Controllers { public class GenreRepository : LocalRepository, IGenreRepository { + private bool _disposed; private readonly DatabaseContext _database; private readonly Lazy _shows; protected override Expression> DefaultSort => x => x.Slug; @@ -25,13 +26,19 @@ namespace Kyoo.Controllers public override void Dispose() { - base.Dispose(); + if (_disposed) + return; + _disposed = true; + _database.Dispose(); if (_shows.IsValueCreated) _shows.Value.Dispose(); } public override async ValueTask DisposeAsync() { + if (_disposed) + return; + _disposed = true; await _database.DisposeAsync(); if (_shows.IsValueCreated) await _shows.Value.DisposeAsync(); diff --git a/Kyoo/Controllers/Repositories/LibraryItemRepository.cs b/Kyoo/Controllers/Repositories/LibraryItemRepository.cs index 1298a421..137e1419 100644 --- a/Kyoo/Controllers/Repositories/LibraryItemRepository.cs +++ b/Kyoo/Controllers/Repositories/LibraryItemRepository.cs @@ -12,6 +12,7 @@ namespace Kyoo.Controllers { public class LibraryItemRepository : LocalRepository, ILibraryItemRepository { + private bool _disposed; private readonly DatabaseContext _database; private readonly IProviderRepository _providers; private readonly Lazy _libraries; @@ -32,6 +33,9 @@ namespace Kyoo.Controllers public override void Dispose() { + if (_disposed) + return; + _disposed = true; _database.Dispose(); _providers.Dispose(); if (_shows.IsValueCreated) @@ -42,6 +46,9 @@ namespace Kyoo.Controllers public override async ValueTask DisposeAsync() { + if (_disposed) + return; + _disposed = true; await _database.DisposeAsync(); await _providers.DisposeAsync(); if (_shows.IsValueCreated) diff --git a/Kyoo/Controllers/Repositories/LibraryRepository.cs b/Kyoo/Controllers/Repositories/LibraryRepository.cs index 66e402c6..665aa032 100644 --- a/Kyoo/Controllers/Repositories/LibraryRepository.cs +++ b/Kyoo/Controllers/Repositories/LibraryRepository.cs @@ -12,6 +12,7 @@ namespace Kyoo.Controllers { public class LibraryRepository : LocalRepository, ILibraryRepository { + private bool _disposed; private readonly DatabaseContext _database; private readonly IProviderRepository _providers; private readonly Lazy _shows; @@ -28,6 +29,9 @@ namespace Kyoo.Controllers public override void Dispose() { + if (_disposed) + return; + _disposed = true; _database.Dispose(); _providers.Dispose(); if (_shows.IsValueCreated) @@ -36,6 +40,9 @@ namespace Kyoo.Controllers public override async ValueTask DisposeAsync() { + if (_disposed) + return; + _disposed = true; await _database.DisposeAsync(); await _providers.DisposeAsync(); if (_shows.IsValueCreated) diff --git a/Kyoo/Controllers/Repositories/PeopleRepository.cs b/Kyoo/Controllers/Repositories/PeopleRepository.cs index 5a36b292..9ef29490 100644 --- a/Kyoo/Controllers/Repositories/PeopleRepository.cs +++ b/Kyoo/Controllers/Repositories/PeopleRepository.cs @@ -12,6 +12,7 @@ namespace Kyoo.Controllers { public class PeopleRepository : LocalRepository, IPeopleRepository { + private bool _disposed; private readonly DatabaseContext _database; private readonly IProviderRepository _providers; private readonly Lazy _shows; @@ -28,6 +29,9 @@ namespace Kyoo.Controllers public override void Dispose() { + if (_disposed) + return; + _disposed = true; _database.Dispose(); _providers.Dispose(); if (_shows.IsValueCreated) @@ -36,6 +40,9 @@ namespace Kyoo.Controllers public override async ValueTask DisposeAsync() { + if (_disposed) + return; + _disposed = true; await _database.DisposeAsync(); await _providers.DisposeAsync(); if (_shows.IsValueCreated) diff --git a/Kyoo/Controllers/Repositories/SeasonRepository.cs b/Kyoo/Controllers/Repositories/SeasonRepository.cs index 5d0a56d9..7cb7243d 100644 --- a/Kyoo/Controllers/Repositories/SeasonRepository.cs +++ b/Kyoo/Controllers/Repositories/SeasonRepository.cs @@ -13,6 +13,7 @@ namespace Kyoo.Controllers { public class SeasonRepository : LocalRepository, ISeasonRepository { + private bool _disposed; private readonly DatabaseContext _database; private readonly IProviderRepository _providers; private readonly Lazy _episodes; @@ -35,6 +36,9 @@ namespace Kyoo.Controllers public override void Dispose() { + if (_disposed) + return; + _disposed = true; _database.Dispose(); _providers.Dispose(); if (_episodes.IsValueCreated) @@ -43,6 +47,9 @@ namespace Kyoo.Controllers public override async ValueTask DisposeAsync() { + if (_disposed) + return; + _disposed = true; await _database.DisposeAsync(); await _providers.DisposeAsync(); if (_episodes.IsValueCreated) diff --git a/Kyoo/Controllers/Repositories/ShowRepository.cs b/Kyoo/Controllers/Repositories/ShowRepository.cs index b54e12ca..3f8f6a3b 100644 --- a/Kyoo/Controllers/Repositories/ShowRepository.cs +++ b/Kyoo/Controllers/Repositories/ShowRepository.cs @@ -12,6 +12,7 @@ namespace Kyoo.Controllers { public class ShowRepository : LocalRepository, IShowRepository { + private bool _disposed; private readonly DatabaseContext _database; private readonly IStudioRepository _studios; private readonly IPeopleRepository _people; @@ -44,6 +45,9 @@ namespace Kyoo.Controllers public override void Dispose() { + if (_disposed) + return; + _disposed = true; _database.Dispose(); _studios.Dispose(); _people.Dispose(); @@ -61,6 +65,9 @@ namespace Kyoo.Controllers public override async ValueTask DisposeAsync() { + if (_disposed) + return; + _disposed = true; await _database.DisposeAsync(); await _studios.DisposeAsync(); await _people.DisposeAsync(); diff --git a/Kyoo/Controllers/Repositories/TrackRepository.cs b/Kyoo/Controllers/Repositories/TrackRepository.cs index 6765309e..ed4f6da4 100644 --- a/Kyoo/Controllers/Repositories/TrackRepository.cs +++ b/Kyoo/Controllers/Repositories/TrackRepository.cs @@ -13,6 +13,7 @@ namespace Kyoo.Controllers { public class TrackRepository : LocalRepository, ITrackRepository { + private bool _disposed; private readonly DatabaseContext _database; private readonly Lazy _episodes; protected override Expression> DefaultSort => x => x.ID; @@ -26,6 +27,9 @@ namespace Kyoo.Controllers public override void Dispose() { + if (_disposed) + return; + _disposed = true; _database.Dispose(); if (_episodes.IsValueCreated) _episodes.Value.Dispose(); @@ -33,6 +37,9 @@ namespace Kyoo.Controllers public override async ValueTask DisposeAsync() { + if (_disposed) + return; + _disposed = true; await _database.DisposeAsync(); if (_episodes.IsValueCreated) await _episodes.Value.DisposeAsync(); diff --git a/Kyoo/Models/Resources/CollectionDE.cs b/Kyoo/Models/Resources/CollectionDE.cs index ea68dfeb..8235b993 100644 --- a/Kyoo/Models/Resources/CollectionDE.cs +++ b/Kyoo/Models/Resources/CollectionDE.cs @@ -15,7 +15,7 @@ namespace Kyoo.Models } [JsonIgnore] [NotMergable] public virtual IEnumerable LibraryLinks { get; set; } - public override IEnumerable Libraries + /*[ExpressionRewrite(x => x.LibraryLinks, y => y.Genre)]*/ public override IEnumerable Libraries { get => LibraryLinks?.Select(x => x.Library); set => LibraryLinks = value?.Select(x => new LibraryLink(x, this)); diff --git a/Kyoo/Models/Resources/ShowDE.cs b/Kyoo/Models/Resources/ShowDE.cs index 7343e0fc..f0b0868a 100644 --- a/Kyoo/Models/Resources/ShowDE.cs +++ b/Kyoo/Models/Resources/ShowDE.cs @@ -14,7 +14,7 @@ namespace Kyoo.Models public override IEnumerable Genres { get => GenreLinks?.Select(x => x.Genre); - set => GenreLinks = value?.Select(x => new GenreLink(this, x)).ToList(); + set => GenreLinks = value?.Select(x => new GenreLink(this, x)); } [JsonIgnore] [NotMergable] public virtual IEnumerable LibraryLinks { get; set; } @@ -32,15 +32,6 @@ namespace Kyoo.Models set => CollectionLinks = value?.Select(x => new CollectionLink(x, this)); } - public override void OnMerge(object merged) - { - base.OnMerge(merged); - - if (GenreLinks != null) - foreach (GenreLink genre in GenreLinks) - genre.Show = this; - } - public ShowDE() {} public ShowDE(Show show)