diff --git a/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs b/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs index 95cd3ba38..57804d0f3 100644 --- a/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs +++ b/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs @@ -119,7 +119,7 @@ namespace Ombi.Schedule.Jobs.Plex { try { - Logger.LogInformation("Starting to cache the content on server {0}", servers.Name); + Logger.LogInformation("Starting to cache the content on server {0}", servers.Name); if (recentlyAddedSearch) { @@ -162,8 +162,10 @@ namespace Ombi.Schedule.Jobs.Plex if (content.viewGroup.Equals(PlexMediaType.Episode.ToString(), StringComparison.CurrentCultureIgnoreCase)) { Logger.LogInformation("Found some episodes, this must be a recently added sync"); + var count = 0; foreach (var epInfo in content.Metadata) { + count++; var grandParentKey = epInfo.grandparentRatingKey; // Lookup the rating key var showMetadata = await PlexApi.GetMetadata(servers.PlexAuthToken, servers.FullUri, grandParentKey); @@ -174,18 +176,59 @@ namespace Ombi.Schedule.Jobs.Plex } await ProcessTvShow(servers, show, contentToAdd, recentlyAddedSearch, processedContent); + if (contentToAdd.Any()) + { + await Repo.AddRange(contentToAdd, false); + if (recentlyAddedSearch) + { + foreach (var plexServerContent in contentToAdd) + { + processedContent.Add(plexServerContent.Id); + } + } + contentToAdd.Clear(); + } + if (count > 200) + { + await Repo.SaveChangesAsync(); + + } } + // Save just to make sure we don't leave anything hanging + await Repo.SaveChangesAsync(); + await EpisodeSync.ProcessEpsiodes(content.Metadata, allEps); } if (content.viewGroup.Equals(PlexMediaType.Show.ToString(), StringComparison.CurrentCultureIgnoreCase)) { // Process Shows Logger.LogInformation("Processing TV Shows"); + var count = 0; foreach (var show in content.Metadata ?? new Metadata[] { }) { + count++; await ProcessTvShow(servers, show, contentToAdd, recentlyAddedSearch, processedContent); + + if (contentToAdd.Any()) + { + await Repo.AddRange(contentToAdd, false); + if (recentlyAddedSearch) + { + foreach (var plexServerContent in contentToAdd) + { + processedContent.Add(plexServerContent.Id); + } + } + contentToAdd.Clear(); + } + if (count > 200) + { + await Repo.SaveChangesAsync(); + } } + + await Repo.SaveChangesAsync(); } if (content.viewGroup.Equals(PlexMediaType.Movie.ToString(), StringComparison.CurrentCultureIgnoreCase)) { @@ -464,21 +507,6 @@ namespace Ombi.Schedule.Jobs.Plex show.title); } } - - if (contentToAdd.Count > 500 || recentlyAdded) - { - await Repo.AddRange(contentToAdd); - foreach (var plexServerContent in contentToAdd) - { - contentProcessed.Add(plexServerContent.Id); - } - contentToAdd.Clear(); - } - - if (contentToAdd.Any()) - { - await Repo.AddRange(contentToAdd); - } } /// diff --git a/src/Ombi.Store/Repository/IRepository.cs b/src/Ombi.Store/Repository/IRepository.cs index c85b45d8f..810b586a3 100644 --- a/src/Ombi.Store/Repository/IRepository.cs +++ b/src/Ombi.Store/Repository/IRepository.cs @@ -14,7 +14,7 @@ namespace Ombi.Store.Repository Task Find(object key); IQueryable GetAll(); Task FirstOrDefaultAsync(Expression> predicate); - Task AddRange(IEnumerable content); + Task AddRange(IEnumerable content, bool save = true); Task Add(T content); Task DeleteRange(IEnumerable req); Task Delete(T request); diff --git a/src/Ombi.Store/Repository/Repository.cs b/src/Ombi.Store/Repository/Repository.cs index 049da0356..8c07c2371 100644 --- a/src/Ombi.Store/Repository/Repository.cs +++ b/src/Ombi.Store/Repository/Repository.cs @@ -35,10 +35,13 @@ namespace Ombi.Store.Repository return await _db.FirstOrDefaultAsync(predicate); } - public async Task AddRange(IEnumerable content) + public async Task AddRange(IEnumerable content, bool save = true) { _db.AddRange(content); - await _ctx.SaveChangesAsync(); + if (save) + { + await _ctx.SaveChangesAsync(); + } } public async Task Add(T content)