async Task When(DealerManifestDownloadsStarted e, IDealerManifestFile file) { try { var manifest = await file.Download(_dealer, _pages); var added = new Many <DealerManifest.Campaign>(); var updated = new Many <DealerManifest.Campaign>(); //var remainingIds = _campaignsById.Keys.ToHashSet(); var remainingIds = ManyExtensions.ToHashSet(_campaignsById.Keys); foreach (var downloaded in manifest.Campaigns) { remainingIds.Remove(downloaded.Id); if (!_campaignsById.TryGetValue(downloaded.Id, out var existing)) { added.Write.Add(downloaded); } else { if (downloaded.AssetId != existing.AssetId || downloaded.Page != existing.Page || downloaded.Priority != existing.Priority || downloaded.Required != existing.Required || downloaded.Link != existing.Link || downloaded.AltText != existing.AltText || downloaded.WhenStarts != existing.WhenStarts || downloaded.WhenEnds != existing.WhenEnds || downloaded.Model != existing.Model || downloaded.ModelYear != existing.ModelYear) { updated.Write.Add(downloaded); } } } Then(new DealerManifestDownloaded(Id, manifest.Assets, added, updated, remainingIds.ToMany())); } catch (Exception error) { Then(new DealerManifestDownloadFailed(Id, error.ToString())); } }
static Many <Id> Route(DealerManifestDownloadsStarted e) => e.DealerIds;
void Given(DealerManifestDownloadsStarted e) => _pendingDealerIds.AddRange(e.DealerIds);