using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; using Tango.FSE.Common; using Tango.FSE.Common.Navigation; using Tango.FSE.MachineConfiguration.Messages; using Tango.FSE.MachineConfiguration.Navigation; using static Tango.FSE.BL.Services.MachineConfigurationService; using static Tango.FSE.MachineConfiguration.ViewModels.MachineViewVM; namespace Tango.FSE.MachineConfiguration.ViewModels { public class MachineViewVM : ConfigurationViewModel, INavigationObjectReceiver { public class NavigationObject { public String MachineGuid { get; set; } } public enum NavigationView { SettingsView, DataStoreView, } private NavigationView _selectedView; public NavigationView SelectedView { get { return _selectedView; } set { if (value == NavigationView.DataStoreView) { if (!CurrentUser.HasPermission(Tango.BL.Enumerations.Permissions.DataStoreRead)) { Task.Delay(500).ContinueWith((x) => { SelectedView = _selectedView; NotificationProvider.ShowError("The current user profile does not allow accessing the data store.\nPlease contact your administrator."); }); return; } } _selectedView = value; RaisePropertyChangedAuto(); } } private MachineEditingComposition _editingComposition; public MachineEditingComposition EditingComposition { get { return _editingComposition; } set { _editingComposition = value; RaisePropertyChangedAuto(); } } public void OnNavigatedToWithObject(NavigationObject obj) { SelectedView = NavigationView.SettingsView; LoadMachine(obj.MachineGuid); } private async void LoadMachine(String machineGuid) { using (NotificationProvider.PushTaskItem("Loading machine configuration...")) { try { EditingComposition = await Services.MachineConfigurationService.GetMachineEditingComposition(machineGuid); RaiseMessage(new EditingCompositionLoadedMessage() { EditingComposition = EditingComposition }); } catch (Exception ex) { LogManager.Log(ex, "Error loading machine."); await Task.Delay(1000); await ModularNavigationManager.NavigateBack(); await NotificationProvider.ShowError($"Error loading the selected machine.\n{ex.FlattenMessage()}"); } } } } }