using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Data; using Tango.BL; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Core.Commands; using Tango.Core.DI; using Tango.PPC.Common; using Tango.PPC.Common.Connection; using Tango.PPC.Common.ExternalBridge; using Tango.PPC.Common.Messages; using Tango.SharedUI.Components; using Tango.WiFi; namespace Tango.PPC.MachineSettings.ViewModels { /// /// Represents the main view VM and entry point for . /// /// public class MainViewVM : PPCViewModel { #region Properties private Machine _machine; public Machine Machine { get { return _machine; } set { _machine = value; RaisePropertyChangedAuto(); } } private SelectedObjectCollection _selectedJobTypes; public SelectedObjectCollection SelectedJobTypes { get { return _selectedJobTypes; } set { _selectedJobTypes = value; RaisePropertyChangedAuto(); } } private SelectedObjectCollection _selectedColorSpaces; public SelectedObjectCollection SelectedColorSpaces { get { return _selectedColorSpaces; } set { _selectedColorSpaces = value; RaisePropertyChangedAuto(); } } private bool _enableHotSpot; public bool EnableHotSpot { get { return _enableHotSpot; } set { _enableHotSpot = value; RaisePropertyChangedAuto(); OnEnableHotSpotChanged(); } } private String _hotSpotPassword; public String HotSpotPassword { get { return _hotSpotPassword; } set { _hotSpotPassword = value; RaisePropertyChangedAuto(); } } private bool _enableExternalBridge; public bool EnableExternalBridge { get { return _enableExternalBridge; } set { _enableExternalBridge = value; RaisePropertyChangedAuto(); OnEnableExternalBridgeChanged(); } } private String _externalBridgePassword; public String ExternalBridgePassword { get { return _externalBridgePassword; } set { _externalBridgePassword = value; RaisePropertyChangedAuto(); } } private bool _enableRemoteAssistance; public bool EnableRemoteAssistance { get { return _enableRemoteAssistance; } set { _enableRemoteAssistance = value; RaisePropertyChangedAuto(); OnEnableRemoteAssistanceChanged(); } } #endregion #region Commands /// /// Gets or sets the save command. /// public RelayCommand SaveCommand { get; set; } /// /// Gets or sets the discard command. /// public RelayCommand DiscardCommand { get; set; } #endregion public MainViewVM() { SaveCommand = new RelayCommand(Save); DiscardCommand = new RelayCommand(Discard); } private void Discard() { NavigationManager.NavigateBack(); } private async void Save() { if (Validate()) { Machine.SupportedJobTypes = SelectedJobTypes.SynchedSource.ToList(); Machine.SupportedColorSpaces = SelectedColorSpaces.SynchedSource.ToList(); Machine.MapPrimitivesWithStrings(MachineProvider.Machine); Settings.EnableHotSpot = EnableHotSpot; Settings.HotSpotPassword = HotSpotPassword; Settings.EnableExternalBridge = EnableExternalBridge; Settings.ExternalBridgePassword = ExternalBridgePassword; Settings.Save(); await MachineProvider.SaveMachine(); await NavigationManager.NavigateBack(); } } protected override void OnValidating() { base.OnValidating(); } /// /// Called when the application has been started /// public override void OnApplicationStarted() { } public override void OnNavigatedTo() { base.OnNavigatedTo(); Machine = MachineProvider.Machine.ShallowClone(); RaisePropertyChanged(nameof(Machine)); _enableHotSpot = HotSpotProvider.IsEnabled; RaisePropertyChanged(nameof(EnableHotSpot)); HotSpotPassword = Settings.HotSpotPassword; _enableExternalBridge = ExternalBridgeService.Enabled; RaisePropertyChanged(nameof(EnableExternalBridge)); ExternalBridgePassword = Settings.ExternalBridgePassword; _enableRemoteAssistance = RemoteAssistanceProvider.IsEnabled; RaisePropertyChanged(nameof(EnableRemoteAssistance)); SelectedJobTypes = new SelectedObjectCollection(Enum.GetValues(typeof(JobTypes)).Cast().ToObservableCollection(), Machine.SupportedJobTypes.ToObservableCollection()); SelectedColorSpaces = new SelectedObjectCollection(Enum.GetValues(typeof(ColorSpaces)).Cast().Where(x => x.IsUserSpace()).ToObservableCollection(), Machine.SupportedColorSpaces.ToObservableCollection()); } private async void OnEnableRemoteAssistanceChanged() { if (EnableRemoteAssistance) { try { await RemoteAssistanceProvider.EnableRemoteAssistance(); } catch { await NotificationProvider.ShowError("An error occurred while trying to activate the remote assistance service. Please check your device settings and try again."); _enableRemoteAssistance = false; } } else { try { await RemoteAssistanceProvider.DisableRemoteAssistance(); } catch { await NotificationProvider.ShowError("An error occurred while trying to deactivate the remote assistance service. Please check your device settings and try again."); _enableRemoteAssistance = true; } } RaisePropertyChanged(nameof(EnableRemoteAssistance)); } private async void OnEnableHotSpotChanged() { if (EnableHotSpot) { if (HotSpotPassword == null || HotSpotPassword.Length < 8 || HotSpotPassword.Length > 16) { await NotificationProvider.ShowError("Hot spot requires a password of 8 to 16 characters."); _enableHotSpot = false; RaisePropertyChanged(nameof(EnableHotSpot)); return; } try { await HotSpotProvider.EnableHotSpot(HotSpotPassword); } catch { await NotificationProvider.ShowError("An error occurred while trying to activate the hot spot network. Please check your device settings and try again."); _enableHotSpot = false; } } else { try { await HotSpotProvider.DisableHotSpot(); } catch { await NotificationProvider.ShowError("An error occurred while trying to deactivate the hot spot network."); _enableHotSpot = true; } } RaisePropertyChanged(nameof(EnableHotSpot)); } private void OnEnableExternalBridgeChanged() { ExternalBridgeService.Enabled = EnableExternalBridge; } } }