private void SaveHistoryChanges(ChangesEntity changes, IEntityCollection <ReleaseEntity> releaseCollection) { var allReleases = releaseCollection.Find(a => true); var collection = m_DataContext.GetCollection <HistoryChangeEntity> (); var historyChanges = collection.FirstOrDefault(); var releasesIds = changes.NewOnlineSeries.Select(a => a.Key); var seriesReleases = allReleases.Where(a => releasesIds.Contains(a.Id)); var releaseOnlineSeries = new Dictionary <long, int> (); foreach (var seriesRelease in seriesReleases) { releaseOnlineSeries.Add(seriesRelease.Id, seriesRelease.Playlist?.Count() ?? 0); } if (historyChanges == null) { historyChanges = new HistoryChangeEntity { NewOnlineSeries = changes.NewOnlineSeries ?? new Dictionary <long, int> (), NewReleases = changes.NewReleases ?? new List <long> (), NewTorrents = changes.NewTorrents ?? new Dictionary <long, int> (), NewTorrentSeries = changes.NewTorrentSeries ?? new Dictionary <long, IDictionary <long, string> > (), ReleaseOnlineSeries = releaseOnlineSeries }; collection.Add(historyChanges); } else { historyChanges.NewOnlineSeries = changes.NewOnlineSeries ?? new Dictionary <long, int> (); historyChanges.NewReleases = changes.NewReleases ?? new List <long> (); historyChanges.NewTorrents = changes.NewTorrents ?? new Dictionary <long, int> (); historyChanges.NewTorrentSeries = changes.NewTorrentSeries ?? new Dictionary <long, IDictionary <long, string> > (); historyChanges.ReleaseOnlineSeries = releaseOnlineSeries; collection.Update(historyChanges); } }
private ChangesEntity GetChanges(IEntityCollection <ChangesEntity> changesCollection) { var changes = changesCollection.FirstOrDefault(); if (changes == null) { changes = new ChangesEntity { NewOnlineSeries = new Dictionary <long, int> (), NewReleases = new List <long> (), NewTorrents = new Dictionary <long, int> (), NewTorrentSeries = new Dictionary <long, IDictionary <long, string> > () }; changesCollection.Add(changes); } return(changes); }
private void UpdateCachedRelease(Release release, ReleaseEntity releaseEntity, ChangesEntity changesEntity) { var blocked = release.BlockedInfo?.Blocked ?? false; var blockedReason = release.BlockedInfo?.Reason ?? ""; if (blocked && !releaseEntity.Blocked) { //TODO: blocked changes!!!! } releaseEntity.Blocked = blocked; releaseEntity.BlockedReason = blockedReason; if (releaseEntity.Description != release.Description) { releaseEntity.Description = release.Description; } if (releaseEntity.Type != release.Type) { releaseEntity.Type = release.Type; } if (releaseEntity.Status != release.Status) { releaseEntity.Status = release.Status; } if (releaseEntity.Series != release.Series?.TrimEnd()) { releaseEntity.Series = release.Series; } if (releaseEntity.Announce != release.Announce) { releaseEntity.Announce = release.Announce; } if (releaseEntity.Season != release.Season) { releaseEntity.Season = release.Season; } releaseEntity.Rating = release.Favorite?.Rating ?? 0; releaseEntity.Title = release.Names?.FirstOrDefault() ?? ""; releaseEntity.Names = release.Names.ToList(); releaseEntity.Voices = release.Voices.ToList(); releaseEntity.Timestamp = release.Last; if (releaseEntity.Poster != release.Poster) { releaseEntity.Poster = release.Poster; //invalidate poster's cache if (m_DataContext.IsFileExists("Poster", release.Id)) { m_DataContext.DeleteFile("Poster", release.Id); } } if (releaseEntity.Playlist.Count() != release.Playlist.Count()) { if (!changesEntity.NewOnlineSeries.ContainsKey(release.Id)) { changesEntity.NewOnlineSeries.Add(release.Id, releaseEntity.Playlist.Count()); } } releaseEntity.Playlist = release.Playlist .Select( a => new PlaylistItemEntity { Id = a.Id, HD = a.HD, SD = a.SD, FullHD = a.FullHd, Title = a.Title, DownloadableHD = a.SrcHd, DownloadableSD = a.SrcSd } ) .ToList(); if (releaseEntity.Torrents.Count() != release.Torrents.Count()) { if (!changesEntity.NewTorrents.ContainsKey(release.Id)) { changesEntity.NewTorrents.Add(release.Id, releaseEntity.Torrents.Count()); } } for (var i = 0; i < releaseEntity.Torrents.Count(); i++) { var oldTorrent = releaseEntity.Torrents.ElementAt(i); var newTorrent = release.Torrents.ElementAtOrDefault(i); if (newTorrent == null) { break; } if (oldTorrent.Size != newTorrent.Size) { if (!changesEntity.NewTorrentSeries.ContainsKey(release.Id)) { changesEntity.NewTorrentSeries.Add(release.Id, new Dictionary <long, string> ()); } if (!changesEntity.NewTorrentSeries[release.Id].ContainsKey(oldTorrent.Id)) { changesEntity.NewTorrentSeries[release.Id].Add(oldTorrent.Id, oldTorrent.Size.ToString() ?? ""); } } } releaseEntity.Torrents = release.Torrents .Select( a => new TorrentItemEntity { Id = a.Id, Completed = a.Completed, Hash = a.Hash, Leechers = a.Leechers, Quality = a.Quality, Seeders = a.Seeders, Series = a.Series, Size = a.Size, Url = a.Url } ) .ToList(); }