diff --git a/PlexRequests.Services/Jobs/PlexEpisodeCacher.cs b/PlexRequests.Services/Jobs/PlexEpisodeCacher.cs index 433d9f64b..263d8944e 100644 --- a/PlexRequests.Services/Jobs/PlexEpisodeCacher.cs +++ b/PlexRequests.Services/Jobs/PlexEpisodeCacher.cs @@ -25,6 +25,7 @@ // ************************************************************************/ #endregion using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -100,7 +101,7 @@ namespace PlexRequests.Services.Jobs currentPosition += ResultCount; } - var entities = new HashSet(); + var entities = new ConcurrentDictionary(); Parallel.ForEach(videoHashset, video => { @@ -111,15 +112,17 @@ namespace PlexRequests.Services.Jobs foreach (var metadataVideo in metadata.Video) { var epInfo = PlexHelper.GetSeasonsAndEpisodesFromPlexGuid(metadataVideo.Guid); - entities.Add(new PlexEpisodes - { - EpisodeNumber = epInfo.EpisodeNumber, - EpisodeTitle = metadataVideo.Title, - ProviderId = epInfo.ProviderId, - RatingKey = metadataVideo.RatingKey, - SeasonNumber = epInfo.SeasonNumber, - ShowTitle = metadataVideo.GrandparentThumb - }); + entities.TryAdd( + new PlexEpisodes + { + EpisodeNumber = epInfo.EpisodeNumber, + EpisodeTitle = metadataVideo.Title, + ProviderId = epInfo.ProviderId, + RatingKey = metadataVideo.RatingKey, + SeasonNumber = epInfo.SeasonNumber, + ShowTitle = metadataVideo.GrandparentThumb + }, + 1); } }); @@ -127,7 +130,7 @@ namespace PlexRequests.Services.Jobs Repo.DeleteAll(TableName); // Insert the new items - var result = Repo.BatchInsert(entities, TableName, typeof(PlexEpisodes).GetPropertyNames()); + var result = Repo.BatchInsert(entities.Select(x => x.Key).ToList(), TableName, typeof(PlexEpisodes).GetPropertyNames()); if (!result) { diff --git a/PlexRequests.Store/SqlTables.sql b/PlexRequests.Store/SqlTables.sql index 8e5ada591..74f31d0be 100644 --- a/PlexRequests.Store/SqlTables.sql +++ b/PlexRequests.Store/SqlTables.sql @@ -101,6 +101,7 @@ CREATE TABLE IF NOT EXISTS PlexUsers ); CREATE UNIQUE INDEX IF NOT EXISTS PlexUsers_Id ON PlexUsers (Id); +BEGIN; CREATE TABLE IF NOT EXISTS PlexEpisodes ( Id INTEGER PRIMARY KEY AUTOINCREMENT, @@ -112,4 +113,5 @@ CREATE TABLE IF NOT EXISTS PlexEpisodes EpisodeNumber INTEGER NOT NULL ); CREATE UNIQUE INDEX IF NOT EXISTS PlexEpisodes_Id ON PlexEpisodes (Id); -CREATE INDEX IF NOT EXISTS PlexEpisodes_ProviderId ON PlexEpisodes (ProviderId); \ No newline at end of file +CREATE INDEX IF NOT EXISTS PlexEpisodes_ProviderId ON PlexEpisodes (ProviderId); +COMMIT; \ No newline at end of file