public Task <ZcycData> GetDataForDate(DateTime date) { if (date.Equals(DateTime.Today) && DateTime.Now.Subtract(lastUpdateTime) < cachePeriod) { return(Task.FromResult(todayZcycData)); } var tcs = new TaskCompletionSource <ZcycData>(); var serializer = new XmlSerializer(typeof(IssData)); string downloadingDate = date.ToString("yyyy-MM-dd"); string url = string.Format(DataUrl, downloadingDate); var zData = new ZcycData { Date = date }; try { using XmlReader xmlReader = XmlReader.Create(url); //gets only 500 lines var issData = (IssData)serializer.Deserialize(xmlReader); if (issData == null || issData.data == null || issData.data.rows.Length == 0) { tcs.TrySetResult(zData); } foreach (var item in issData.data.rows) { zData.DataRow.Add(new ZcycDataRow { Period = item.period, Value = item.value }); } if (date.Equals(DateTime.Today)) { todayZcycData = zData; lastUpdateTime = DateTime.Now; } tcs.TrySetResult(zData); } catch (Exception) // on error return empty data { tcs.TrySetResult(zData); } return(tcs.Task); }
public override void Plot(DateTime value) { if (MainChart.Series.Any(_ => (DateTime)_.Tag == value)) { return; } IsBusy = true; Task.Run(async() => { data = await dataManager.GetData(value); if (data.DataRow.Count > 0) { var lineSeries1 = new LineSeries { MarkerType = MarkerType.Circle, MarkerStrokeThickness = 2, MarkerSize = 2, LineStyle = LineStyle.Solid, StrokeThickness = 2, Title = value.ToShortDateString(), InterpolationAlgorithm = InterpolationAlgorithms.CanonicalSpline, Tag = value }; lineSeries1.MarkerStroke = lineSeries1.Color; data.DataRow.ForEach(item => { lineSeries1.Points.Add(new DataPoint(item.Period, item.Value)); }); MainChart.Series.Add(lineSeries1); MainChart.InvalidatePlot(true); dataManager.Status = string.Empty; } else { dataManager.Status = $"No data for {value}"; } IsBusy = false; }); }
public Task <bool> SaveData(ZcycData data) { throw new NotImplementedException(); }