private async Task EnsurePricesAvailable(IEventStoreConnection eventStoreConnection) { var a = new PriceAdded("A", 50); var b = new PriceAdded("B", 30); var events = new[] { a, b } .Select(JsonConvert.SerializeObject) .Select(j => new EventData(Guid.NewGuid(), nameof(PriceAdded), true, Encoding.UTF8.GetBytes(j), null)); await eventStoreConnection.AppendToStreamAsync("prices", ExpectedVersion.Any, events); }
private void downloadPrices() { var sets = _repo.SetsByCode.Values.OrderByDescending(_ => _.ReleaseDate).ToArray(); using (var stream = _priceRepository.AppendPriceInProgressStream()) using (var writer = new StreamWriter(stream)) foreach (var set in sets) { var sids = set.Cards .Where(_priceRepository.IsDefined) .Select(_priceRepository.GetPriceId) .Where(F.IsNotNull) .Select(_ => _.Sid) .Where(F.IsNotNull) .Where(sid => !_priceRepository.ContainsPrice(sid)) .Distinct() .ToArray(); Parallel.ForEach(sids, new ParallelOptions { MaxDegreeOfParallelism = Parallelism }, sid => { if (sid.EndsWith("&utm_source=scryfall")) { PriceAdded?.Invoke(); return; } PriceValues price; try { price = _client.DownloadPrice(sid); } catch (WebException) { return; } lock (_sync) { var serialized = JsonConvert.SerializeObject(price, Formatting.None); _priceRepository.AddPrice(sid, price); writer.WriteLine(serialized); PriceAdded?.Invoke(); } }); } }
private void downloadPrices() { var sets = _repo.SetsByCode.Values.OrderByDescending(_ => _.ReleaseDate).ToArray(); using (var stream = _priceRepository.AppendPriceInProgressStream()) using (var writer = new StreamWriter(stream)) foreach (var set in sets) { foreach (var card in set.Cards) { if (_aborted) { return; } if (!_priceRepository.IsDefined(card)) { continue; } var sid = _priceRepository.GetPriceId(card); if (sid == null) { continue; } if (_priceRepository.ContainsPrice(sid)) { continue; } var price = _client.DownloadPrice(sid); _priceRepository.AddPrice(sid, price); PriceAdded?.Invoke(); var serialized = JsonConvert.SerializeObject(_priceRepository.GetPrice(sid), Formatting.None); writer.WriteLine(serialized); } } }
public void AddPrice(float price) { this.prices.Add(price); PriceAdded?.Invoke(this, price); }