diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2021-05-12 15:20:57 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2021-05-12 15:20:57 +0300 |
| commit | 5c1649221047dd4fe3d8de124f21a878a3e4b555 (patch) | |
| tree | b55bf8dd4d1a000162313224aa787ca253559bdd /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels | |
| parent | 896c8152facdee8e78f54d3dfdf324e7415173ba (diff) | |
| download | Tango-5c1649221047dd4fe3d8de124f21a878a3e4b555.tar.gz Tango-5c1649221047dd4fe3d8de124f21a878a3e4b555.zip | |
RML module and Machine designer lists performance improvements !
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels')
| -rw-r--r-- | Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs | 182 |
1 files changed, 121 insertions, 61 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs index 04e2b8826..4b5d0897d 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs @@ -30,6 +30,7 @@ using Tango.MachineStudio.Common.Authentication; using Tango.BL.DTO; using Tango.Core.Cryptography; using Tango.BL.Enumerations; +using Tango.MachineStudio.MachineDesigner.Models; namespace Tango.MachineStudio.MachineDesigner.ViewModels { @@ -52,13 +53,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels set { _isNewMachine = value; RaisePropertyChangedAuto(); } } - private ObservablesStaticCollections _machinesAdapter; - public ObservablesStaticCollections MachinesAdapter - { - get { return _machinesAdapter; } - set { _machinesAdapter = value; RaisePropertyChangedAuto(); } - } - private ObservablesStaticCollections _activeMachineAdapter; public ObservablesStaticCollections ActiveMachineAdapter { @@ -66,11 +60,21 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels set { _activeMachineAdapter = value; RaisePropertyChangedAuto(); } } - private Machine _selectedMachine; + private List<MachineModel> _machines; + /// <summary> + /// Gets or sets the available filtered machines. + /// </summary> + public List<MachineModel> Machines + { + get { return _machines; } + set { _machines = value; RaisePropertyChangedAuto(); } + } + + private MachineModel _selectedMachine; /// <summary> /// Gets or sets the selected machine from the drop down. /// </summary> - public Machine SelectedMachine + public MachineModel SelectedMachine { get { return _selectedMachine; } set @@ -263,11 +267,12 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels /// </summary> public MainViewVM(INotificationProvider notification, IAuthenticationProvider authentication, IActionLogManager actionLogManager) { - MachinesAdapter = new ObservablesStaticCollections(ObservablesContext.CreateDefault()); _notification = notification; _authentication = authentication; _actionLogManager = actionLogManager; + Machines = new List<MachineModel>(); + _machines_action_timer = new ActionTimer(TimeSpan.FromMilliseconds(200)); _dispensers_action_timer = new ActionTimer(TimeSpan.FromMilliseconds(200)); @@ -292,17 +297,11 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels #endregion - #region Application Ready - - public override async void OnApplicationReady() + public override void OnApplicationReady() { - MachinesAdapter.MachineVersions = (await MachinesAdapter.Context.MachineVersions.ToListAsync()).ToObservableCollection(); - MachinesAdapter.MachinePrototypes = (await MachinesAdapter.Context.MachinePrototypes.ToListAsync()).ToObservableCollection(); - MachinesAdapter.HardwareVersions = (await MachinesAdapter.Context.HardwareVersions.ToListAsync()).ToObservableCollection(); + } - #endregion - private void OnDispensersFilterChanged() { if (!String.IsNullOrWhiteSpace(DispensersFilter)) @@ -792,7 +791,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels if (SelectedMachine != null) { - await SelectedMachine.Reload(MachinesAdapter.Context); + await LoadMachines(); } await ColorCalibrationViewVM.Invalidate(); @@ -810,19 +809,49 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } } - private void AddNewMachine() + private async void AddNewMachine() { + List<MachinePrototype> prototypes = new List<MachinePrototype>(); + List<HardwareVersion> hardwareVersions = new List<HardwareVersion>(); + + try + { + IsFree = false; + + using (_notification.PushTaskItem("Loading machine creation data...")) + { + using (ObservablesContext db = ObservablesContext.CreateDefault()) + { + prototypes = await db.MachinePrototypes.ToListAsync(); + hardwareVersions = await db.HardwareVersions.ToListAsync(); + } + } + } + catch (Exception ex) + { + LogManager.Log(ex, "Error loading machine creation data."); + _notification.ShowError($"Error loading machine creation data\n{ex.FlattenMessage()}"); + return; + } + finally + { + IsFree = true; + } + MachineCreationDialogVM vm = new MachineCreationDialogVM(); vm.IsNewMachine = true; - vm.Prototypes = MachinesAdapter.MachinePrototypes.ToList(); - vm.HardwareVersions = MachinesAdapter.HardwareVersions.OrderByDescending(x => x.Version).ToList(); + vm.Prototypes = prototypes.ToList(); + vm.HardwareVersions = hardwareVersions.OrderByDescending(x => x.Version).ToList(); vm.SelectedHardwareVersion = vm.HardwareVersions.FirstOrDefault(); _notification.ShowModalDialog<MachineCreationDialogVM, Views.MachineCreationDialog>(vm, (x) => { - if (MachinesAdapter.Context.Machines.Any(y => y.SerialNumber == vm.SerialNumber || y.Name.ToLower() == vm.Name.ToLower())) + using (ObservablesContext db = ObservablesContext.CreateDefault()) { - _notification.ShowError("Machine serial number or name already exists."); - return; + if (db.Machines.Any(y => y.SerialNumber == vm.SerialNumber || y.Name.ToLower() == vm.Name.ToLower())) + { + _notification.ShowError("Machine serial number or name already exists."); + return; + } } LoadSelectedMachine(true, false, vm); @@ -831,6 +860,8 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels private async void RemoveSelectedMachine() { + if (SelectedMachine == null) return; + if (_notification.ShowQuestion("Are you sure you want to delete the selected machine?")) { using (_notification.PushTaskItem("Removing machine...")) @@ -839,25 +870,28 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { IsFree = false; - var machineToDelete = await new MachineBuilder(MachinesAdapter.Context).Set(SelectedMachine).WithConfiguration().BuildAsync(); - - await machineToDelete.DeleteCascadeAsync(MachinesAdapter.Context); - await machineToDelete.Configuration.DeleteCascadeAsync(MachinesAdapter.Context); - foreach (var dispenser in machineToDelete.Configuration.NoneEmptyIdsPacks.Select(x => x.Dispenser)) + using (ObservablesContext db = ObservablesContext.CreateDefault()) { - if (dispenser != null) + var machineToDelete = await new MachineBuilder(db).Set(SelectedMachine.Guid).WithConfiguration().BuildAsync(); + + await machineToDelete.DeleteCascadeAsync(db); + await machineToDelete.Configuration.DeleteCascadeAsync(db); + foreach (var dispenser in machineToDelete.Configuration.NoneEmptyIdsPacks.Select(x => x.Dispenser)) { - await dispenser.DeleteCascadeAsync(MachinesAdapter.Context); + if (dispenser != null) + { + await dispenser.DeleteCascadeAsync(db); + } } - } - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.MachineDeleted, _authentication.CurrentUser, SelectedMachine.Name, SelectedMachine, "Machine deleted using Machine Studio."); - MachinesAdapter.Context.Machines.Remove(SelectedMachine); - MachinesAdapter.Machines.Remove(SelectedMachine); + await LoadMachines(); + + _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.MachineDeleted, _authentication.CurrentUser, SelectedMachine.Name, machineToDelete, "Machine deleted using Machine Studio."); + } } catch (Exception ex) { - LogManager.Log(ex, $"Error removing machine {SelectedMachine.SerialNumber}."); + LogManager.Log(ex, $"Error removing machine selected machine."); _notification.ShowError($"An error occurred while trying to delete the selected machine.\n{ex.Message}"); } finally @@ -895,7 +929,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels MachinePrototype prototype = MachinePrototype.CreateNew(ActiveMachine, protoName, protoName); db.MachinePrototypes.Add(prototype); await db.SaveChangesAsync(); - MachinesAdapter.MachinePrototypes = (await MachinesAdapter.Context.MachinePrototypes.ToListAsync()).ToObservableCollection(); } } catch (Exception ex) @@ -915,13 +948,15 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { MachineCreationDialogVM vm = new MachineCreationDialogVM(); vm.IsNewMachine = false; - vm.Prototypes = MachinesAdapter.MachinePrototypes.ToList(); _notification.ShowModalDialog<MachineCreationDialogVM, Views.MachineCreationDialog>(vm, (x) => { - if (MachinesAdapter.Context.Machines.Any(y => y.SerialNumber == vm.SerialNumber || y.Name.ToLower() == vm.Name.ToLower())) + using (ObservablesContext db = ObservablesContext.CreateDefault()) { - _notification.ShowError("Machine serial number or name already exists."); - return; + if (db.Machines.Any(y => y.SerialNumber == vm.SerialNumber || y.Name.ToLower() == vm.Name.ToLower())) + { + _notification.ShowError("Machine serial number or name already exists."); + return; + } } LoadSelectedMachine(false, true, vm); @@ -945,29 +980,54 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } } - private void OnFilterChanged() + private async void OnFilterChanged() + { + await LoadMachines(); + } + + private async Task LoadMachines() { - if (Filter != null) + String filter = Filter.ToStringOrEmpty(); + + using (ObservablesContext db = ObservablesContext.CreateDefault()) { - _machines_action_timer.ResetReplace(() => - { - Task.Factory.StartNew(() => + var machines = await db.Machines.Where(x => filter == String.Empty || x.SerialNumber.ToLower().StartsWith(filter.ToLower()) || x.Name.ToLower().Contains(filter.ToLower())) + .Include(x => x.Configuration) + .Include(x => x.MachineVersion.Name) + .Include(x => x.Organization.Name) + .Include(x => x.Configuration.HardwareVersion.Name) + .Include(x => x.Configuration.HardwareVersion.Version).Select(x => new { - try - { - IsFree = false; - MachinesAdapter.Machines = MachinesAdapter.Context.Machines.Where(x => x.SerialNumber.StartsWith(Filter)).Include(x => x.Organization).Include(x => x.MachineVersion).Include(x => x.Configuration).Include(x => x.Configuration.HardwareVersion).OrderBy(x => x.SerialNumber).ToSynchronizedObservableCollection(); - } - catch - { + x.Guid, + x.SerialNumber, + x.Name, + Organization = x.Organization.Name, + MachineVersion = x.MachineVersion.Name, + HardwareVersionName = x.Configuration.HardwareVersion.Name, + HardwareVersionVersion = x.Configuration.HardwareVersion.Version, + x.IsDeviceRegistered, + x.IsDemo, + x.LastUpdated + }).OrderBy(x => x.SerialNumber).ToListAsync(); - } - finally - { - IsFree = true; - } - }); - }); + List<MachineModel> models = new List<MachineModel>(); + + foreach (var machine in machines) + { + MachineModel model = new MachineModel(); + model.Guid = machine.Guid; + model.SerialNumber = machine.SerialNumber; + model.Name = machine.Name; + model.Organization = machine.Organization; + model.HardwareVersion = machine.HardwareVersionName + " v" + machine.HardwareVersionVersion; + model.MachineVersion = machine.MachineVersion; + model.IsDeviceRegistered = machine.IsDeviceRegistered; + model.IsDemo = machine.IsDemo; + model.LastUpdated = machine.LastUpdated; + models.Add(model); + } + + Machines = models; } } |
