using EyesAndEars.UWP.Services; using EyesAndEars.UWP.ViewModels; using System; using System.Diagnostics; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace EyesAndEars.UWP { public sealed partial class MainPage : Page { MainPageVM _vm = new MainPageVM(); DispatcherTimer _dispatcherTimer = new DispatcherTimer(); public MainPage() { InitializeComponent(); IntialiseDataContext(); IntialiseRefreshTime(); } private void IntialiseDataContext() { try { // The Update features are not yet working... /* * Note: Why I Did Not Use "await" Here. * ============================================================ * "await" is not used here because the app. is useless until * the data is retreived from DataServices (I.E. Web). It is, * also, called from "MainPain" above and the compiler don't * like you doing that. */ _vm.FactoryDevice1 = DataServices.UpdateFactoryDevice(1).Result; _vm.FactoryDevice2 = DataServices.UpdateFactoryDevice(2).Result; _vm.FactoryDevice3 = DataServices.UpdateFactoryDevice(3).Result; _vm.GalleryDevice1 = DataServices.UpdateGalleryDevice(4).Result; _vm.GalleryDevice2 = DataServices.UpdateGalleryDevice(5).Result; _vm.GalleryDevice3 = DataServices.UpdateGalleryDevice(6).Result; DataContext = _vm; } catch (Exception) { /* * Note: About this Exception * ============================================================ * This is catch-block is here to give the user a chance to * update the base-URL or show me what the app. is doing before * it is abruptly closed by Windows. It, also, gives the server * a bit of time to fix any problems it is having before this * app. thinks it is broken. Make no mistake, though. All this * is doing it buying the user some time. The app. is not is a * good state if execeptions are getting caught here -- * regardless of the type or the reasons why. */ _vm = DataServices.CreateFallBackViewModel(); DataContext = _vm; } } void IntialiseRefreshTime() { // TimeSpan Intervals: Days, Hours, Minutes, Seconds, Milliseconds. _dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 1, 0); _dispatcherTimer.Tick += UpdateViewModel; _dispatcherTimer.Start(); } async void UpdateViewModel(object sender, object e) { try { // I SHOULD PUT THE TRY-CATCH BLOCK IN DATASERVICES AND IF // ERROR THROWN THERE, A ERROR/WARNING VM OBJECT SHOULD BE MADE // UPDATED THERE. // The Update features are not yet working... _vm.FactoryDevice1 = await DataServices.UpdateFactoryDevice(1); _vm.FactoryDevice2 = await DataServices.UpdateFactoryDevice(2); _vm.FactoryDevice3 = await DataServices.UpdateFactoryDevice(3); _vm.GalleryDevice1 = await DataServices.UpdateGalleryDevice(4); _vm.GalleryDevice2 = await DataServices.UpdateGalleryDevice(5); _vm.GalleryDevice3 = await DataServices.UpdateGalleryDevice(6); Debug.WriteLine($"Updated GUI | VM: {_vm.FactoryDevice1.LatestReading.Reading}"); } catch (Exception) { // Shouldn't be relying on this at this point in the cycle. // If there is a problem it should be shown as such... // and dealt with as one. _vm = DataServices.CreateFallBackViewModel(); } } private async void RefreshButton_Click(object sender, RoutedEventArgs e) { // GET THE INITIALISATION WORKING FIRST AND THE DEFAULT CYCLE... } private void SaveURLButton_Click(object sender, RoutedEventArgs e) { // WORK ON THIS WENT YOU HAVE A LIVE SYSTEM WORKING WITH KNOWABLE DEFAULTS. } } }