Fixing the weird stack overflow

This commit is contained in:
Zoe Roux 2020-08-29 19:05:17 +02:00
parent 828f4d3f47
commit ff1be5c145
11 changed files with 67 additions and 13 deletions

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{ {
public class CollectionRepository : LocalRepository<Collection, CollectionDE>, ICollectionRepository public class CollectionRepository : LocalRepository<Collection, CollectionDE>, ICollectionRepository
{ {
private bool _disposed;
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly Lazy<IShowRepository> _shows; private readonly Lazy<IShowRepository> _shows;
private readonly Lazy<ILibraryRepository> _libraries; private readonly Lazy<ILibraryRepository> _libraries;
@ -26,7 +27,10 @@ namespace Kyoo.Controllers
public override void Dispose() public override void Dispose()
{ {
base.Dispose(); if (_disposed)
return;
_disposed = true;
_database.Dispose();
if (_shows.IsValueCreated) if (_shows.IsValueCreated)
_shows.Value.Dispose(); _shows.Value.Dispose();
if (_libraries.IsValueCreated) if (_libraries.IsValueCreated)
@ -35,6 +39,9 @@ namespace Kyoo.Controllers
public override async ValueTask DisposeAsync() public override async ValueTask DisposeAsync()
{ {
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync(); await _database.DisposeAsync();
if (_shows.IsValueCreated) if (_shows.IsValueCreated)
await _shows.Value.DisposeAsync(); await _shows.Value.DisposeAsync();

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{ {
public class EpisodeRepository : LocalRepository<Episode>, IEpisodeRepository public class EpisodeRepository : LocalRepository<Episode>, IEpisodeRepository
{ {
private bool _disposed;
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly IProviderRepository _providers; private readonly IProviderRepository _providers;
private readonly IShowRepository _shows; private readonly IShowRepository _shows;
@ -34,12 +35,18 @@ namespace Kyoo.Controllers
public override void Dispose() public override void Dispose()
{ {
if (_disposed)
return;
_disposed = true;
_database.Dispose(); _database.Dispose();
_providers.Dispose(); _providers.Dispose();
} }
public override async ValueTask DisposeAsync() public override async ValueTask DisposeAsync()
{ {
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync(); await _database.DisposeAsync();
await _providers.DisposeAsync(); await _providers.DisposeAsync();
} }

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{ {
public class GenreRepository : LocalRepository<Genre, GenreDE>, IGenreRepository public class GenreRepository : LocalRepository<Genre, GenreDE>, IGenreRepository
{ {
private bool _disposed;
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly Lazy<IShowRepository> _shows; private readonly Lazy<IShowRepository> _shows;
protected override Expression<Func<GenreDE, object>> DefaultSort => x => x.Slug; protected override Expression<Func<GenreDE, object>> DefaultSort => x => x.Slug;
@ -25,13 +26,19 @@ namespace Kyoo.Controllers
public override void Dispose() public override void Dispose()
{ {
base.Dispose(); if (_disposed)
return;
_disposed = true;
_database.Dispose();
if (_shows.IsValueCreated) if (_shows.IsValueCreated)
_shows.Value.Dispose(); _shows.Value.Dispose();
} }
public override async ValueTask DisposeAsync() public override async ValueTask DisposeAsync()
{ {
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync(); await _database.DisposeAsync();
if (_shows.IsValueCreated) if (_shows.IsValueCreated)
await _shows.Value.DisposeAsync(); await _shows.Value.DisposeAsync();

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{ {
public class LibraryItemRepository : LocalRepository<LibraryItem>, ILibraryItemRepository public class LibraryItemRepository : LocalRepository<LibraryItem>, ILibraryItemRepository
{ {
private bool _disposed;
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly IProviderRepository _providers; private readonly IProviderRepository _providers;
private readonly Lazy<ILibraryRepository> _libraries; private readonly Lazy<ILibraryRepository> _libraries;
@ -32,6 +33,9 @@ namespace Kyoo.Controllers
public override void Dispose() public override void Dispose()
{ {
if (_disposed)
return;
_disposed = true;
_database.Dispose(); _database.Dispose();
_providers.Dispose(); _providers.Dispose();
if (_shows.IsValueCreated) if (_shows.IsValueCreated)
@ -42,6 +46,9 @@ namespace Kyoo.Controllers
public override async ValueTask DisposeAsync() public override async ValueTask DisposeAsync()
{ {
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync(); await _database.DisposeAsync();
await _providers.DisposeAsync(); await _providers.DisposeAsync();
if (_shows.IsValueCreated) if (_shows.IsValueCreated)

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{ {
public class LibraryRepository : LocalRepository<Library, LibraryDE>, ILibraryRepository public class LibraryRepository : LocalRepository<Library, LibraryDE>, ILibraryRepository
{ {
private bool _disposed;
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly IProviderRepository _providers; private readonly IProviderRepository _providers;
private readonly Lazy<IShowRepository> _shows; private readonly Lazy<IShowRepository> _shows;
@ -28,6 +29,9 @@ namespace Kyoo.Controllers
public override void Dispose() public override void Dispose()
{ {
if (_disposed)
return;
_disposed = true;
_database.Dispose(); _database.Dispose();
_providers.Dispose(); _providers.Dispose();
if (_shows.IsValueCreated) if (_shows.IsValueCreated)
@ -36,6 +40,9 @@ namespace Kyoo.Controllers
public override async ValueTask DisposeAsync() public override async ValueTask DisposeAsync()
{ {
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync(); await _database.DisposeAsync();
await _providers.DisposeAsync(); await _providers.DisposeAsync();
if (_shows.IsValueCreated) if (_shows.IsValueCreated)

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{ {
public class PeopleRepository : LocalRepository<People>, IPeopleRepository public class PeopleRepository : LocalRepository<People>, IPeopleRepository
{ {
private bool _disposed;
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly IProviderRepository _providers; private readonly IProviderRepository _providers;
private readonly Lazy<IShowRepository> _shows; private readonly Lazy<IShowRepository> _shows;
@ -28,6 +29,9 @@ namespace Kyoo.Controllers
public override void Dispose() public override void Dispose()
{ {
if (_disposed)
return;
_disposed = true;
_database.Dispose(); _database.Dispose();
_providers.Dispose(); _providers.Dispose();
if (_shows.IsValueCreated) if (_shows.IsValueCreated)
@ -36,6 +40,9 @@ namespace Kyoo.Controllers
public override async ValueTask DisposeAsync() public override async ValueTask DisposeAsync()
{ {
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync(); await _database.DisposeAsync();
await _providers.DisposeAsync(); await _providers.DisposeAsync();
if (_shows.IsValueCreated) if (_shows.IsValueCreated)

View File

@ -13,6 +13,7 @@ namespace Kyoo.Controllers
{ {
public class SeasonRepository : LocalRepository<Season>, ISeasonRepository public class SeasonRepository : LocalRepository<Season>, ISeasonRepository
{ {
private bool _disposed;
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly IProviderRepository _providers; private readonly IProviderRepository _providers;
private readonly Lazy<IEpisodeRepository> _episodes; private readonly Lazy<IEpisodeRepository> _episodes;
@ -35,6 +36,9 @@ namespace Kyoo.Controllers
public override void Dispose() public override void Dispose()
{ {
if (_disposed)
return;
_disposed = true;
_database.Dispose(); _database.Dispose();
_providers.Dispose(); _providers.Dispose();
if (_episodes.IsValueCreated) if (_episodes.IsValueCreated)
@ -43,6 +47,9 @@ namespace Kyoo.Controllers
public override async ValueTask DisposeAsync() public override async ValueTask DisposeAsync()
{ {
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync(); await _database.DisposeAsync();
await _providers.DisposeAsync(); await _providers.DisposeAsync();
if (_episodes.IsValueCreated) if (_episodes.IsValueCreated)

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{ {
public class ShowRepository : LocalRepository<Show, ShowDE>, IShowRepository public class ShowRepository : LocalRepository<Show, ShowDE>, IShowRepository
{ {
private bool _disposed;
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly IStudioRepository _studios; private readonly IStudioRepository _studios;
private readonly IPeopleRepository _people; private readonly IPeopleRepository _people;
@ -44,6 +45,9 @@ namespace Kyoo.Controllers
public override void Dispose() public override void Dispose()
{ {
if (_disposed)
return;
_disposed = true;
_database.Dispose(); _database.Dispose();
_studios.Dispose(); _studios.Dispose();
_people.Dispose(); _people.Dispose();
@ -61,6 +65,9 @@ namespace Kyoo.Controllers
public override async ValueTask DisposeAsync() public override async ValueTask DisposeAsync()
{ {
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync(); await _database.DisposeAsync();
await _studios.DisposeAsync(); await _studios.DisposeAsync();
await _people.DisposeAsync(); await _people.DisposeAsync();

View File

@ -13,6 +13,7 @@ namespace Kyoo.Controllers
{ {
public class TrackRepository : LocalRepository<Track>, ITrackRepository public class TrackRepository : LocalRepository<Track>, ITrackRepository
{ {
private bool _disposed;
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly Lazy<IEpisodeRepository> _episodes; private readonly Lazy<IEpisodeRepository> _episodes;
protected override Expression<Func<Track, object>> DefaultSort => x => x.ID; protected override Expression<Func<Track, object>> DefaultSort => x => x.ID;
@ -26,6 +27,9 @@ namespace Kyoo.Controllers
public override void Dispose() public override void Dispose()
{ {
if (_disposed)
return;
_disposed = true;
_database.Dispose(); _database.Dispose();
if (_episodes.IsValueCreated) if (_episodes.IsValueCreated)
_episodes.Value.Dispose(); _episodes.Value.Dispose();
@ -33,6 +37,9 @@ namespace Kyoo.Controllers
public override async ValueTask DisposeAsync() public override async ValueTask DisposeAsync()
{ {
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync(); await _database.DisposeAsync();
if (_episodes.IsValueCreated) if (_episodes.IsValueCreated)
await _episodes.Value.DisposeAsync(); await _episodes.Value.DisposeAsync();

View File

@ -15,7 +15,7 @@ namespace Kyoo.Models
} }
[JsonIgnore] [NotMergable] public virtual IEnumerable<LibraryLink> LibraryLinks { get; set; } [JsonIgnore] [NotMergable] public virtual IEnumerable<LibraryLink> LibraryLinks { get; set; }
public override IEnumerable<Library> Libraries /*[ExpressionRewrite(x => x.LibraryLinks, y => y.Genre)]*/ public override IEnumerable<Library> Libraries
{ {
get => LibraryLinks?.Select(x => x.Library); get => LibraryLinks?.Select(x => x.Library);
set => LibraryLinks = value?.Select(x => new LibraryLink(x, this)); set => LibraryLinks = value?.Select(x => new LibraryLink(x, this));

View File

@ -14,7 +14,7 @@ namespace Kyoo.Models
public override IEnumerable<Genre> Genres public override IEnumerable<Genre> Genres
{ {
get => GenreLinks?.Select(x => x.Genre); 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<LibraryLink> LibraryLinks { get; set; } [JsonIgnore] [NotMergable] public virtual IEnumerable<LibraryLink> LibraryLinks { get; set; }
@ -32,15 +32,6 @@ namespace Kyoo.Models
set => CollectionLinks = value?.Select(x => new CollectionLink(x, this)); 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() {}
public ShowDE(Show show) public ShowDE(Show show)