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
{
private bool _disposed;
private readonly DatabaseContext _database;
private readonly Lazy<IShowRepository> _shows;
private readonly Lazy<ILibraryRepository> _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();

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{
public class EpisodeRepository : LocalRepository<Episode>, 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();
}

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{
public class GenreRepository : LocalRepository<Genre, GenreDE>, IGenreRepository
{
private bool _disposed;
private readonly DatabaseContext _database;
private readonly Lazy<IShowRepository> _shows;
protected override Expression<Func<GenreDE, object>> 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();

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{
public class LibraryItemRepository : LocalRepository<LibraryItem>, ILibraryItemRepository
{
private bool _disposed;
private readonly DatabaseContext _database;
private readonly IProviderRepository _providers;
private readonly Lazy<ILibraryRepository> _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)

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{
public class LibraryRepository : LocalRepository<Library, LibraryDE>, ILibraryRepository
{
private bool _disposed;
private readonly DatabaseContext _database;
private readonly IProviderRepository _providers;
private readonly Lazy<IShowRepository> _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)

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{
public class PeopleRepository : LocalRepository<People>, IPeopleRepository
{
private bool _disposed;
private readonly DatabaseContext _database;
private readonly IProviderRepository _providers;
private readonly Lazy<IShowRepository> _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)

View File

@ -13,6 +13,7 @@ namespace Kyoo.Controllers
{
public class SeasonRepository : LocalRepository<Season>, ISeasonRepository
{
private bool _disposed;
private readonly DatabaseContext _database;
private readonly IProviderRepository _providers;
private readonly Lazy<IEpisodeRepository> _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)

View File

@ -12,6 +12,7 @@ namespace Kyoo.Controllers
{
public class ShowRepository : LocalRepository<Show, ShowDE>, 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();

View File

@ -13,6 +13,7 @@ namespace Kyoo.Controllers
{
public class TrackRepository : LocalRepository<Track>, ITrackRepository
{
private bool _disposed;
private readonly DatabaseContext _database;
private readonly Lazy<IEpisodeRepository> _episodes;
protected override Expression<Func<Track, object>> 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();

View File

@ -15,7 +15,7 @@ namespace Kyoo.Models
}
[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);
set => LibraryLinks = value?.Select(x => new LibraryLink(x, this));

View File

@ -14,7 +14,7 @@ namespace Kyoo.Models
public override IEnumerable<Genre> 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<LibraryLink> 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)