Fixed the issues where the DB was being disposed too early

This commit is contained in:
tidusjar 2019-11-07 22:22:53 +00:00
parent 47f323fcdd
commit 96e3e88261
16 changed files with 86 additions and 91 deletions

View file

@ -188,11 +188,7 @@ namespace Ombi.Core.Engine
var requests = await (OrderMovies(allRequests, orderFilter.OrderType)).Skip(position).Take(count) var requests = await (OrderMovies(allRequests, orderFilter.OrderType)).Skip(position).Take(count)
.ToListAsync(); .ToListAsync();
requests.ForEach(async x => await CheckForSubscription(shouldHide, requests);
{
x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
await CheckForSubscription(shouldHide, x);
});
return new RequestsViewModel<MovieRequests> return new RequestsViewModel<MovieRequests>
{ {
Collection = requests, Collection = requests,
@ -251,26 +247,30 @@ namespace Ombi.Core.Engine
allRequests = await MovieRepository.GetWithUser().ToListAsync(); allRequests = await MovieRepository.GetWithUser().ToListAsync();
} }
allRequests.ForEach(async x => await CheckForSubscription(shouldHide, allRequests);
{
x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
await CheckForSubscription(shouldHide, x);
});
return allRequests; return allRequests;
} }
private async Task CheckForSubscription(HideResult shouldHide, MovieRequests x) private async Task CheckForSubscription(HideResult shouldHide, List<MovieRequests> movieRequests)
{ {
if (shouldHide.UserId == x.RequestedUserId) var requestIds = movieRequests.Select(x => x.Id);
var sub = await _subscriptionRepository.GetAll().Where(s =>
s.UserId == shouldHide.UserId && requestIds.Contains(s.RequestId) && s.RequestType == RequestType.Movie)
.ToListAsync();
foreach (var x in movieRequests)
{ {
x.ShowSubscribe = false; x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
} if (shouldHide.UserId == x.RequestedUserId)
else {
{ x.ShowSubscribe = false;
x.ShowSubscribe = true; }
var sub = await _subscriptionRepository.GetAll().FirstOrDefaultAsync(s => else
s.UserId == shouldHide.UserId && s.RequestId == x.Id && s.RequestType == RequestType.Movie); {
x.Subscribed = sub != null; x.ShowSubscribe = true;
var hasSub = sub.FirstOrDefault(r => r.RequestId == x.Id);
x.Subscribed = hasSub != null;
}
} }
} }
@ -293,11 +293,8 @@ namespace Ombi.Core.Engine
} }
var results = allRequests.Where(x => x.Title.Contains(search, CompareOptions.IgnoreCase)).ToList(); var results = allRequests.Where(x => x.Title.Contains(search, CompareOptions.IgnoreCase)).ToList();
results.ForEach(async x => await CheckForSubscription(shouldHide, results);
{
x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
await CheckForSubscription(shouldHide, x);
});
return results; return results;
} }
@ -493,7 +490,7 @@ namespace Ombi.Core.Engine
RequestType = RequestType.Movie, RequestType = RequestType.Movie,
}); });
return new RequestEngineResult {Result = true, Message = $"{movieName} has been successfully added!", RequestId = model.Id}; return new RequestEngineResult { Result = true, Message = $"{movieName} has been successfully added!", RequestId = model.Id };
} }
public async Task<RequestQuotaCountModel> GetRemainingRequests(OmbiUser user) public async Task<RequestQuotaCountModel> GetRemainingRequests(OmbiUser user)
@ -533,7 +530,7 @@ namespace Ombi.Core.Engine
return new RequestQuotaCountModel() return new RequestQuotaCountModel()
{ {
HasLimit = true, HasLimit = true,
Limit = limit, Limit = limit,
Remaining = count, Remaining = count,
NextRequest = DateTime.SpecifyKind(oldestRequestedAt.AddDays(7), DateTimeKind.Utc), NextRequest = DateTime.SpecifyKind(oldestRequestedAt.AddDays(7), DateTimeKind.Utc),

View file

@ -156,10 +156,10 @@ namespace Ombi.Core.Engine
.ThenInclude(x => x.Episodes) .ThenInclude(x => x.Episodes)
.OrderByDescending(x => x.ChildRequests.Select(y => y.RequestedDate).FirstOrDefault()) .OrderByDescending(x => x.ChildRequests.Select(y => y.RequestedDate).FirstOrDefault())
.Skip(position).Take(count).ToListAsync(); .Skip(position).Take(count).ToListAsync();
}
allRequests.ForEach(async r => { await CheckForSubscription(shouldHide, r); }); }
await CheckForSubscription(shouldHide, allRequests);
allRequests.ForEach(async r => { });
return new RequestsViewModel<TvRequests> return new RequestsViewModel<TvRequests>
{ {
@ -194,7 +194,8 @@ namespace Ombi.Core.Engine
{ {
return new RequestsViewModel<TvRequests>(); return new RequestsViewModel<TvRequests>();
} }
allRequests.ForEach(async r => { await CheckForSubscription(shouldHide, r); });
await CheckForSubscription(shouldHide, allRequests);
return new RequestsViewModel<TvRequests> return new RequestsViewModel<TvRequests>
{ {
@ -216,7 +217,7 @@ namespace Ombi.Core.Engine
allRequests = await TvRepository.Get().ToListAsync(); allRequests = await TvRepository.Get().ToListAsync();
} }
allRequests.ForEach(async r => { await CheckForSubscription(shouldHide, r); }); await CheckForSubscription(shouldHide, allRequests);
return allRequests; return allRequests;
} }
@ -236,7 +237,7 @@ namespace Ombi.Core.Engine
allRequests = await TvRepository.GetLite().ToListAsync(); allRequests = await TvRepository.GetLite().ToListAsync();
} }
allRequests.ForEach(async r => { await CheckForSubscription(shouldHide, r); }); await CheckForSubscription(shouldHide, allRequests);
return allRequests; return allRequests;
} }
@ -255,7 +256,7 @@ namespace Ombi.Core.Engine
request = await TvRepository.Get().Where(x => x.Id == requestId).FirstOrDefaultAsync(); request = await TvRepository.Get().Where(x => x.Id == requestId).FirstOrDefaultAsync();
} }
await CheckForSubscription(shouldHide, request); await CheckForSubscription(shouldHide, new List<TvRequests>{request});
return request; return request;
} }
@ -304,7 +305,7 @@ namespace Ombi.Core.Engine
allRequests = await TvRepository.GetChild().Include(x => x.SeasonRequests).Where(x => x.ParentRequestId == tvId).ToListAsync(); allRequests = await TvRepository.GetChild().Include(x => x.SeasonRequests).Where(x => x.ParentRequestId == tvId).ToListAsync();
} }
allRequests.ForEach(async r => { await CheckForSubscription(shouldHide, r); }); await CheckForSubscription(shouldHide, allRequests);
return allRequests; return allRequests;
} }
@ -323,7 +324,7 @@ namespace Ombi.Core.Engine
} }
var results = await allRequests.Where(x => x.Title.Contains(search, CompareOptions.IgnoreCase)).ToListAsync(); var results = await allRequests.Where(x => x.Title.Contains(search, CompareOptions.IgnoreCase)).ToListAsync();
results.ForEach(async r => { await CheckForSubscription(shouldHide, r); }); await CheckForSubscription(shouldHide, results);
return results; return results;
} }
@ -420,7 +421,7 @@ namespace Ombi.Core.Engine
public async Task<ChildRequests> UpdateChildRequest(ChildRequests request) public async Task<ChildRequests> UpdateChildRequest(ChildRequests request)
{ {
await TvRepository.UpdateChild(request); await TvRepository.UpdateChild(request);
return request; return request;
} }
@ -438,14 +439,14 @@ namespace Ombi.Core.Engine
// Delete the parent // Delete the parent
TvRepository.Db.TvRequests.Remove(parent); TvRepository.Db.TvRequests.Remove(parent);
} }
await TvRepository.Db.SaveChangesAsync(); await TvRepository.Db.SaveChangesAsync();
} }
public async Task RemoveTvRequest(int requestId) public async Task RemoveTvRequest(int requestId)
{ {
var request = await TvRepository.Get().FirstOrDefaultAsync(x => x.Id == requestId); var request = await TvRepository.Get().FirstOrDefaultAsync(x => x.Id == requestId);
await TvRepository.Delete(request); await TvRepository.Delete(request);
} }
public async Task<bool> UserHasRequest(string userId) public async Task<bool> UserHasRequest(string userId)
@ -520,26 +521,32 @@ namespace Ombi.Core.Engine
} }
} }
private async Task CheckForSubscription(HideResult shouldHide, TvRequests x) private async Task CheckForSubscription(HideResult shouldHide, List<TvRequests> x)
{ {
foreach (var tv in x.ChildRequests) foreach (var tvRequest in x)
{ {
await CheckForSubscription(shouldHide, tv); await CheckForSubscription(shouldHide, tvRequest.ChildRequests);
} }
} }
private async Task CheckForSubscription(HideResult shouldHide, ChildRequests x) private async Task CheckForSubscription(HideResult shouldHide, List<ChildRequests> childRequests)
{ {
if (shouldHide.UserId == x.RequestedUserId) var sub = _subscriptionRepository.GetAll();
var childIds = childRequests.Select(x => x.Id);
var relevantSubs = await sub.Where(s =>
s.UserId == shouldHide.UserId && childIds.Contains(s.Id) && s.RequestType == RequestType.TvShow).ToListAsync();
foreach (var x in childRequests)
{ {
x.ShowSubscribe = false; if (shouldHide.UserId == x.RequestedUserId)
} {
else x.ShowSubscribe = false;
{ }
x.ShowSubscribe = true; else
var sub = await _subscriptionRepository.GetAll().FirstOrDefaultAsync(s => {
s.UserId == shouldHide.UserId && s.RequestId == x.Id && s.RequestType == RequestType.TvShow); x.ShowSubscribe = true;
x.Subscribed = sub != null; var result = relevantSubs.FirstOrDefault(s => s.RequestId == x.Id);
x.Subscribed = result != null;
}
} }
} }
@ -560,7 +567,7 @@ namespace Ombi.Core.Engine
return await AfterRequest(model.ChildRequests.FirstOrDefault()); return await AfterRequest(model.ChildRequests.FirstOrDefault());
} }
private static List<ChildRequests> SortEpisodes(List<ChildRequests> items) private static List<ChildRequests> SortEpisodes(List<ChildRequests> items)
{ {
foreach (var value in items) foreach (var value in items)
{ {
@ -597,7 +604,7 @@ namespace Ombi.Core.Engine
var result = await TvSender.Send(model); var result = await TvSender.Send(model);
if (result.Success) if (result.Success)
{ {
return new RequestEngineResult { Result = true, RequestId = model.Id}; return new RequestEngineResult { Result = true, RequestId = model.Id };
} }
return new RequestEngineResult return new RequestEngineResult
{ {
@ -650,10 +657,10 @@ namespace Ombi.Core.Engine
DateTime oldestRequestedAt = await log.OrderBy(x => x.RequestDate) DateTime oldestRequestedAt = await log.OrderBy(x => x.RequestDate)
.Select(x => x.RequestDate) .Select(x => x.RequestDate)
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();
return new RequestQuotaCountModel() return new RequestQuotaCountModel()
{ {
HasLimit = true, HasLimit = true,
Limit = limit, Limit = limit,
Remaining = count, Remaining = count,
NextRequest = DateTime.SpecifyKind(oldestRequestedAt.AddDays(7), DateTimeKind.Utc), NextRequest = DateTime.SpecifyKind(oldestRequestedAt.AddDays(7), DateTimeKind.Utc),

View file

@ -213,7 +213,6 @@ namespace Ombi.Schedule.Jobs.Emby
if (disposing) if (disposing)
{ {
_movieRepo?.Dispose();
} }
_disposed = true; _disposed = true;
} }

View file

@ -206,7 +206,6 @@ namespace Ombi.Schedule.Jobs.Emby
if (disposing) if (disposing)
{ {
_settings?.Dispose(); _settings?.Dispose();
_repo?.Dispose();
} }
_disposed = true; _disposed = true;
} }

View file

@ -156,7 +156,6 @@ namespace Ombi.Schedule.Jobs.Emby
if (disposing) if (disposing)
{ {
_settings?.Dispose(); _settings?.Dispose();
_repo?.Dispose();
} }
_disposed = true; _disposed = true;
} }

View file

@ -49,7 +49,6 @@ namespace Ombi.Schedule.Jobs.Ombi
if (disposing) if (disposing)
{ {
_issuesRepository?.Dispose();
_settings?.Dispose(); _settings?.Dispose();
} }
_disposed = true; _disposed = true;

View file

@ -99,7 +99,6 @@ namespace Ombi.Schedule.Jobs.Ombi
if (disposing) if (disposing)
{ {
_plexRepo?.Dispose();
_settings?.Dispose(); _settings?.Dispose();
} }
_disposed = true; _disposed = true;

View file

@ -66,7 +66,7 @@ namespace Ombi.Schedule.Jobs.Ombi
private readonly IPlexContentRepository _plex; private readonly IPlexContentRepository _plex;
private readonly IEmbyContentRepository _emby; private readonly IEmbyContentRepository _emby;
private readonly IExternalRepository<RecentlyAddedLog> _recentlyAddedLog; private readonly IRepository<RecentlyAddedLog> _recentlyAddedLog;
private readonly IMovieDbApi _movieApi; private readonly IMovieDbApi _movieApi;
private readonly ITvMazeApi _tvApi; private readonly ITvMazeApi _tvApi;
private readonly IEmailProvider _email; private readonly IEmailProvider _email;
@ -78,7 +78,7 @@ namespace Ombi.Schedule.Jobs.Ombi
private readonly UserManager<OmbiUser> _userManager; private readonly UserManager<OmbiUser> _userManager;
private readonly ILogger _log; private readonly ILogger _log;
private readonly ILidarrApi _lidarrApi; private readonly ILidarrApi _lidarrApi;
private readonly IRepository<LidarrAlbumCache> _lidarrAlbumRepository; private readonly IExternalRepository<LidarrAlbumCache> _lidarrAlbumRepository;
private readonly ISettingsService<LidarrSettings> _lidarrSettings; private readonly ISettingsService<LidarrSettings> _lidarrSettings;
private readonly ISettingsService<PlexSettings> _plexSettings; private readonly ISettingsService<PlexSettings> _plexSettings;
private readonly ISettingsService<EmbySettings> _embySettings; private readonly ISettingsService<EmbySettings> _embySettings;
@ -931,12 +931,9 @@ namespace Ombi.Schedule.Jobs.Ombi
if (disposing) if (disposing)
{ {
_plex?.Dispose();
_emby?.Dispose();
_newsletterSettings?.Dispose(); _newsletterSettings?.Dispose();
_customizationSettings?.Dispose(); _customizationSettings?.Dispose();
_emailSettings.Dispose(); _emailSettings.Dispose();
_recentlyAddedLog.Dispose();
_templateRepo?.Dispose(); _templateRepo?.Dispose();
_userManager?.Dispose(); _userManager?.Dispose();
} }

View file

@ -352,8 +352,6 @@ namespace Ombi.Schedule.Jobs.Ombi
if (disposing) if (disposing)
{ {
_plexRepo?.Dispose();
_embyRepo?.Dispose();
_plexSettings?.Dispose(); _plexSettings?.Dispose();
} }
_disposed = true; _disposed = true;

View file

@ -193,8 +193,6 @@ namespace Ombi.Schedule.Jobs.Plex
if (disposing) if (disposing)
{ {
_movieRepo?.Dispose();
_repo?.Dispose();
} }
_disposed = true; _disposed = true;
} }

View file

@ -650,7 +650,6 @@ namespace Ombi.Schedule.Jobs.Plex
if (disposing) if (disposing)
{ {
Plex?.Dispose(); Plex?.Dispose();
Repo?.Dispose();
EpisodeSync?.Dispose(); EpisodeSync?.Dispose();
} }
_disposed = true; _disposed = true;

View file

@ -206,7 +206,6 @@ namespace Ombi.Schedule.Jobs.Plex
if (disposing) if (disposing)
{ {
_repo?.Dispose();
_settings?.Dispose(); _settings?.Dispose();
} }
_disposed = true; _disposed = true;

View file

@ -12,5 +12,10 @@ namespace Ombi.Store.Context.MySql
Database.Migrate(); Database.Migrate();
} }
public override void Dispose()
{
base.Dispose();
}
} }
} }

View file

@ -107,25 +107,25 @@ namespace Ombi.Store.Repository
} }
private bool _disposed; //private bool _disposed;
// Protected implementation of Dispose pattern. //// Protected implementation of Dispose pattern.
protected virtual void Dispose(bool disposing) //protected virtual void Dispose(bool disposing)
{ //{
if (_disposed) // if (_disposed)
return; // return;
if (disposing) // if (disposing)
{ // {
_ctx?.Dispose(); // _ctx?.Dispose();
} // }
_disposed = true; // _disposed = true;
} //}
public void Dispose() //public void Dispose()
{ //{
Dispose(true); // Dispose(true);
GC.SuppressFinalize(this); // GC.SuppressFinalize(this);
} //}
} }
} }

View file

@ -9,7 +9,7 @@ using Ombi.Store.Entities;
namespace Ombi.Store.Repository namespace Ombi.Store.Repository
{ {
public interface IExternalRepository<T> : IDisposable where T : Entity public interface IExternalRepository<T> where T : Entity
{ {
Task<T> Find(object key); Task<T> Find(object key);
IQueryable<T> GetAll(); IQueryable<T> GetAll();

View file

@ -9,7 +9,7 @@ using Ombi.Store.Entities;
namespace Ombi.Store.Repository namespace Ombi.Store.Repository
{ {
public interface IRepository<T> : IDisposable where T : Entity public interface IRepository<T> where T : Entity
{ {
Task<T> Find(object key); Task<T> Find(object key);
IQueryable<T> GetAll(); IQueryable<T> GetAll();