Removing usless IDisposable patterns

This commit is contained in:
Zoe Roux 2021-04-23 18:15:17 +02:00
parent 540a3c27de
commit 22b9f3240f
12 changed files with 12 additions and 211 deletions

View File

@ -12,7 +12,7 @@ namespace Kyoo.Controllers
/// <summary> /// <summary>
/// An interface to interract with the database. Every repository is mapped through here. /// An interface to interract with the database. Every repository is mapped through here.
/// </summary> /// </summary>
public interface ILibraryManager : IDisposable, IAsyncDisposable public interface ILibraryManager
{ {
/// <summary> /// <summary>
/// Get the repository corresponding to the T item. /// Get the repository corresponding to the T item.

View File

@ -109,7 +109,7 @@ namespace Kyoo.Controllers
/// <summary> /// <summary>
/// A base class for repositories. Every service implementing this will be handled by the <see cref="LibraryManager"/>. /// A base class for repositories. Every service implementing this will be handled by the <see cref="LibraryManager"/>.
/// </summary> /// </summary>
public interface IBaseRepository : IDisposable, IAsyncDisposable public interface IBaseRepository
{ {
/// <summary> /// <summary>
/// The type for witch this repository is responsible or null if non applicable. /// The type for witch this repository is responsible or null if non applicable.
@ -119,7 +119,6 @@ namespace Kyoo.Controllers
/// <summary> /// <summary>
/// A common repository for every resources. /// A common repository for every resources.
/// It implement's <see cref="IBaseRepository"/> and <see cref="IDisposable"/>/<see cref="IAsyncDisposable"/>.
/// </summary> /// </summary>
/// <typeparam name="T">The resource's type that this repository manage.</typeparam> /// <typeparam name="T">The resource's type that this repository manage.</typeparam>
public interface IRepository<T> : IBaseRepository where T : class, IResource public interface IRepository<T> : IBaseRepository where T : class, IResource

View File

@ -59,20 +59,6 @@ namespace Kyoo.Controllers
GenreRepository = GetRepository<Genre>() as IGenreRepository; GenreRepository = GetRepository<Genre>() as IGenreRepository;
ProviderRepository = GetRepository<Provider>() as IProviderRepository; ProviderRepository = GetRepository<Provider>() as IProviderRepository;
} }
/// <inheritdoc />
public void Dispose()
{
foreach (IBaseRepository repo in _repositories)
repo.Dispose();
GC.SuppressFinalize(this);
}
/// <inheritdoc />
public async ValueTask DisposeAsync()
{
await Task.WhenAll(_repositories.Select(x => x.DisposeAsync().AsTask()));
}
/// <inheritdoc /> /// <inheritdoc />
public IRepository<T> GetRepository<T>() public IRepository<T> GetRepository<T>()

View File

@ -10,7 +10,6 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
namespace Kyoo.CommonApi namespace Kyoo.CommonApi
{ {
@ -77,7 +76,7 @@ namespace Kyoo.CommonApi
if (result.DeclaredType == null) if (result.DeclaredType == null)
return; return;
await using ILibraryManager library = context.HttpContext.RequestServices.GetService<ILibraryManager>(); ILibraryManager library = context.HttpContext.RequestServices.GetService<ILibraryManager>();
ICollection<string> fields = (ICollection<string>)context.HttpContext.Items["fields"]; ICollection<string> fields = (ICollection<string>)context.HttpContext.Items["fields"];
Type pageType = Utility.GetGenericDefinition(result.DeclaredType, typeof(Page<>)); Type pageType = Utility.GetGenericDefinition(result.DeclaredType, typeof(Page<>));

View File

@ -15,10 +15,6 @@ namespace Kyoo.Controllers
/// </summary> /// </summary>
public class EpisodeRepository : LocalRepository<Episode>, IEpisodeRepository public class EpisodeRepository : LocalRepository<Episode>, IEpisodeRepository
{ {
/// <summary>
/// Has this instance been disposed and should not handle requests?
/// </summary>
private bool _disposed;
/// <summary> /// <summary>
/// The databse handle /// The databse handle
/// </summary> /// </summary>
@ -58,30 +54,7 @@ namespace Kyoo.Controllers
_shows = shows; _shows = shows;
_tracks = tracks; _tracks = tracks;
} }
/// <inheritdoc />
public override void Dispose()
{
if (_disposed)
return;
_disposed = true;
_database.Dispose();
_providers.Dispose();
_shows.Dispose();
GC.SuppressFinalize(this);
}
/// <inheritdoc />
public override async ValueTask DisposeAsync()
{
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync();
await _providers.DisposeAsync();
await _shows.DisposeAsync();
}
/// <inheritdoc /> /// <inheritdoc />
public override async Task<Episode> GetOrDefault(int id) public override async Task<Episode> GetOrDefault(int id)

View File

@ -15,10 +15,6 @@ namespace Kyoo.Controllers
/// </summary> /// </summary>
public class LibraryItemRepository : LocalRepository<LibraryItem>, ILibraryItemRepository public class LibraryItemRepository : LocalRepository<LibraryItem>, ILibraryItemRepository
{ {
/// <summary>
/// Has this instance been disposed and should not handle requests?
/// </summary>
private bool _disposed;
/// <summary> /// <summary>
/// The database handle /// The database handle
/// </summary> /// </summary>
@ -61,35 +57,7 @@ namespace Kyoo.Controllers
_shows = new Lazy<IShowRepository>(services.GetRequiredService<IShowRepository>); _shows = new Lazy<IShowRepository>(services.GetRequiredService<IShowRepository>);
_collections = new Lazy<ICollectionRepository>(services.GetRequiredService<ICollectionRepository>); _collections = new Lazy<ICollectionRepository>(services.GetRequiredService<ICollectionRepository>);
} }
/// <inheritdoc />
public override void Dispose()
{
if (_disposed)
return;
_disposed = true;
_database.Dispose();
_providers.Dispose();
if (_shows.IsValueCreated)
_shows.Value.Dispose();
if (_collections.IsValueCreated)
_collections.Value.Dispose();
GC.SuppressFinalize(this);
}
/// <inheritdoc />
public override async ValueTask DisposeAsync()
{
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync();
await _providers.DisposeAsync();
if (_shows.IsValueCreated)
await _shows.Value.DisposeAsync();
if (_collections.IsValueCreated)
await _collections.Value.DisposeAsync();
}
/// <inheritdoc /> /// <inheritdoc />
public override async Task<LibraryItem> GetOrDefault(int id) public override async Task<LibraryItem> GetOrDefault(int id)

View File

@ -13,10 +13,6 @@ namespace Kyoo.Controllers
/// </summary> /// </summary>
public class LibraryRepository : LocalRepository<Library>, ILibraryRepository public class LibraryRepository : LocalRepository<Library>, ILibraryRepository
{ {
/// <summary>
/// Has this instance been disposed and should not handle requests?
/// </summary>
private bool _disposed;
/// <summary> /// <summary>
/// The database handle /// The database handle
/// </summary> /// </summary>
@ -41,28 +37,8 @@ namespace Kyoo.Controllers
_database = database; _database = database;
_providers = providers; _providers = providers;
} }
/// <inheritdoc />
public override void Dispose()
{
if (_disposed)
return;
_disposed = true;
_database.Dispose();
_providers.Dispose();
GC.SuppressFinalize(this);
}
/// <inheritdoc />
public override async ValueTask DisposeAsync()
{
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync();
await _providers.DisposeAsync();
}
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<Library>> Search(string query) public override async Task<ICollection<Library>> Search(string query)
{ {

View File

@ -15,10 +15,6 @@ namespace Kyoo.Controllers
/// </summary> /// </summary>
public class PeopleRepository : LocalRepository<People>, IPeopleRepository public class PeopleRepository : LocalRepository<People>, IPeopleRepository
{ {
/// <summary>
/// Has this instance been disposed and should not handle requests?
/// </summary>
private bool _disposed;
/// <summary> /// <summary>
/// The database handle /// The database handle
/// </summary> /// </summary>
@ -50,32 +46,7 @@ namespace Kyoo.Controllers
_providers = providers; _providers = providers;
_shows = new Lazy<IShowRepository>(services.GetRequiredService<IShowRepository>); _shows = new Lazy<IShowRepository>(services.GetRequiredService<IShowRepository>);
} }
/// <inheritdoc />
public override void Dispose()
{
if (_disposed)
return;
_disposed = true;
_database.Dispose();
_providers.Dispose();
if (_shows.IsValueCreated)
_shows.Value.Dispose();
GC.SuppressFinalize(this);
}
/// <inheritdoc />
public override async ValueTask DisposeAsync()
{
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync();
await _providers.DisposeAsync();
if (_shows.IsValueCreated)
await _shows.Value.DisposeAsync();
}
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<People>> Search(string query) public override async Task<ICollection<People>> Search(string query)

View File

@ -16,10 +16,6 @@ namespace Kyoo.Controllers
/// </summary> /// </summary>
public class SeasonRepository : LocalRepository<Season>, ISeasonRepository public class SeasonRepository : LocalRepository<Season>, ISeasonRepository
{ {
/// <summary>
/// Has this instance been disposed and should not handle requests?
/// </summary>
private bool _disposed;
/// <summary> /// <summary>
/// The database handle /// The database handle
/// </summary> /// </summary>
@ -60,34 +56,7 @@ namespace Kyoo.Controllers
_shows = shows; _shows = shows;
_episodes = new Lazy<IEpisodeRepository>(services.GetRequiredService<IEpisodeRepository>); _episodes = new Lazy<IEpisodeRepository>(services.GetRequiredService<IEpisodeRepository>);
} }
/// <inheritdoc/>
public override void Dispose()
{
if (_disposed)
return;
_disposed = true;
_database.Dispose();
_providers.Dispose();
_shows.Dispose();
if (_episodes.IsValueCreated)
_episodes.Value.Dispose();
GC.SuppressFinalize(this);
}
/// <inheritdoc/>
public override async ValueTask DisposeAsync()
{
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync();
await _providers.DisposeAsync();
await _shows.DisposeAsync();
if (_episodes.IsValueCreated)
await _episodes.Value.DisposeAsync();
}
/// <inheritdoc/> /// <inheritdoc/>
public override async Task<Season> Get(int id) public override async Task<Season> Get(int id)

View File

@ -14,10 +14,6 @@ namespace Kyoo.Controllers
/// </summary> /// </summary>
public class ShowRepository : LocalRepository<Show>, IShowRepository public class ShowRepository : LocalRepository<Show>, IShowRepository
{ {
/// <summary>
/// Has this instance been disposed and should not handle requests?
/// </summary>
private bool _disposed;
/// <summary> /// <summary>
/// The databse handle /// The databse handle
/// </summary> /// </summary>
@ -75,41 +71,7 @@ namespace Kyoo.Controllers
_seasons = new Lazy<ISeasonRepository>(services.GetRequiredService<ISeasonRepository>); _seasons = new Lazy<ISeasonRepository>(services.GetRequiredService<ISeasonRepository>);
_episodes = new Lazy<IEpisodeRepository>(services.GetRequiredService<IEpisodeRepository>); _episodes = new Lazy<IEpisodeRepository>(services.GetRequiredService<IEpisodeRepository>);
} }
/// <inheritdoc />
public override void Dispose()
{
if (_disposed)
return;
_disposed = true;
_database.Dispose();
_studios.Dispose();
_people.Dispose();
_genres.Dispose();
_providers.Dispose();
if (_seasons.IsValueCreated)
_seasons.Value.Dispose();
if (_episodes.IsValueCreated)
_episodes.Value.Dispose();
GC.SuppressFinalize(this);
}
/// <inheritdoc />
public override async ValueTask DisposeAsync()
{
if (_disposed)
return;
_disposed = true;
await _database.DisposeAsync();
await _studios.DisposeAsync();
await _people.DisposeAsync();
await _genres.DisposeAsync();
await _providers.DisposeAsync();
if (_seasons.IsValueCreated)
await _seasons.Value.DisposeAsync();
if (_episodes.IsValueCreated)
await _episodes.Value.DisposeAsync();
}
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<Show>> Search(string query) public override async Task<ICollection<Show>> Search(string query)

View File

@ -32,7 +32,7 @@ namespace Kyoo.Controllers
public async Task<IEnumerable<string>> GetPossibleParameters() public async Task<IEnumerable<string>> GetPossibleParameters()
{ {
using IServiceScope serviceScope = _serviceProvider.CreateScope(); using IServiceScope serviceScope = _serviceProvider.CreateScope();
await using ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>(); ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
return (await libraryManager!.GetAll<Library>()).Select(x => x.Slug); return (await libraryManager!.GetAll<Library>()).Select(x => x.Slug);
} }
@ -56,7 +56,7 @@ namespace Kyoo.Controllers
_parallelTasks = 30; _parallelTasks = 30;
using IServiceScope serviceScope = _serviceProvider.CreateScope(); using IServiceScope serviceScope = _serviceProvider.CreateScope();
await using ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>(); ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
foreach (Show show in await libraryManager!.GetAll<Show>()) foreach (Show show in await libraryManager!.GetAll<Show>())
if (!Directory.Exists(show.Path)) if (!Directory.Exists(show.Path))
@ -149,7 +149,7 @@ namespace Kyoo.Controllers
if (token.IsCancellationRequested || path.Split(Path.DirectorySeparatorChar).Contains("Subtitles")) if (token.IsCancellationRequested || path.Split(Path.DirectorySeparatorChar).Contains("Subtitles"))
return; return;
using IServiceScope serviceScope = _serviceProvider.CreateScope(); using IServiceScope serviceScope = _serviceProvider.CreateScope();
await using ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>(); ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
string patern = _config.GetValue<string>("subtitleRegex"); string patern = _config.GetValue<string>("subtitleRegex");
Regex regex = new(patern, RegexOptions.IgnoreCase); Regex regex = new(patern, RegexOptions.IgnoreCase);
@ -196,7 +196,7 @@ namespace Kyoo.Controllers
try try
{ {
using IServiceScope serviceScope = _serviceProvider.CreateScope(); using IServiceScope serviceScope = _serviceProvider.CreateScope();
await using ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>(); ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
string patern = _config.GetValue<string>("regex"); string patern = _config.GetValue<string>("regex");
Regex regex = new(patern, RegexOptions.IgnoreCase); Regex regex = new(patern, RegexOptions.IgnoreCase);

View File

@ -64,8 +64,6 @@ namespace Kyoo.Tasks
await ExtractEpisode(episode, thumbs, subs); await ExtractEpisode(episode, thumbs, subs);
break; break;
} }
await _library!.DisposeAsync();
} }
private async Task ExtractShow(Show show, bool thumbs, bool subs, CancellationToken token) private async Task ExtractShow(Show show, bool thumbs, bool subs, CancellationToken token)