/// <summary> /// Preview archive fragments /// </summary> /// <param name="camera">Selected camera</param> /// <returns></returns> /// <remarks> /// TODO: Improve performance. Solve freeze behavior. /// </remarks> private async Task InitFragmentsAsync(CameraViewModel camera) { try { _fragments.Clear(); camera.Model.Fragments.Clear(); DateTime dateEnd = DateTime.Now.ToUniversalTime(); DateTime dateStart = new DateTime(year: dateEnd.Year - 1, month: dateEnd.Month, day: dateEnd.Day, hour: dateEnd.Hour, minute: dateEnd.Minute, second: dateEnd.Second); string url = _spec.GetArchiveUrl(camera.Model, dateStart, dateEnd); XmlDocument doc = await SpecificationModel.GetXmlDocAsync(url); await camera.Model.InitFragments(doc); foreach (ArchiveFragment f in camera.Model.Fragments) { _fragments.Add(new ArchiveFragmentViewModel(f.FromTime, f.ToTime)); } } catch (InvalidOperationException e) { System.Diagnostics.Debug.WriteLine(e.Message); } }
private void DummyInitCamera(string text = "None") { _cameras.Clear(); CameraViewModel empty = new CameraViewModel(new Camera(name: text, id: null)); _cameras.Add(empty); }
public async void ChangeStream(CameraViewModel camera, DateTime?time) { CloseStream(); if (camera.Id == null) // Dummy camera { Timestamp = ""; _fragments.Clear(); SetStartScreen(); return; } CancellationToken token = _cts.Token; InitFragmentsAsync(camera); string url = _spec.GetStreamRequestUrl(camera.Model, time); try { await _stream.StartAsync(url, token); } catch (OperationCanceledException) { System.Diagnostics.Debug.WriteLine("User cancel stream."); } }