From af8530c50d90c12ebe60383e67101920760c314f Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Wed, 27 Dec 2017 13:16:00 +0200 Subject: Fixed issue with local sync SQL Logic error. Added some missing columns to SQLite db. Direct Remote Sync is fully working !!! --- .../Tango.MachineStudio.Synchronization.csproj | 2 +- .../ViewModels/DirectSynchronizationViewVM.cs | 47 ++++++++++++++++++---- .../Views/DirectSynchronizationView.xaml | 5 ++- .../Notifications/DefaultNotificationProvider.cs | 2 +- 4 files changed, 45 insertions(+), 11 deletions(-) (limited to 'Software/Visual_Studio/MachineStudio') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj index bc47bbb0b..3c03f1e48 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj @@ -171,7 +171,7 @@ Tango.db - PreserveNewest + Always diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs index f265fafe7..cfa21a416 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Data.Entity.Validation; using System.IO; using System.Linq; using System.Text; @@ -29,7 +30,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels private String _masterDBFile; private LocalDBComparer _comparer; private INotificationProvider _notification; - private bool _isWorking; + private String _comparedSerialNumber; public IStudioApplicationManager ApplicationManager { get; set; } @@ -44,8 +45,8 @@ namespace Tango.MachineStudio.Synchronization.ViewModels Differences = new ObservableCollection(); - CompareCommand = new RelayCommand(Compare, (x) => !_isWorking && SelectedMachine != null); - CommitAllCommand = new RelayCommand(Synchronize, (x) => Differences.Count > 0 && !_isWorking && SelectedMachine != null); + CompareCommand = new RelayCommand(Compare, (x) => !IsWorking && SelectedMachine != null); + CommitAllCommand = new RelayCommand(Synchronize, (x) => Differences.Count > 0 && !IsWorking && SelectedMachine != null); } #region Commands @@ -89,6 +90,16 @@ namespace Tango.MachineStudio.Synchronization.ViewModels #region Properties + private bool _isWorking; + /// + /// Gets or sets a value indicating whether this instance is working. + /// + public bool IsWorking + { + get { return _isWorking; } + set { _isWorking = value; RaisePropertyChangedAuto(); } + } + private bool _isClearMachine; /// /// Gets or sets a value indicating whether this instance is clear machine. @@ -151,7 +162,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels { try { - _isWorking = true; + IsWorking = true; InvalidateRelayCommands(); Thread.Sleep(1500); @@ -176,6 +187,8 @@ namespace Tango.MachineStudio.Synchronization.ViewModels //Synchronize the SQL Server db with the new SQLite template. (Overwrite basically) RemoteDBSynchronizer.Synchronize(_masterDBFile, SelectedMachine.SerialNumber, true); + _comparedSerialNumber = SelectedMachine.SerialNumber; + using (_notification.PushTaskItem("Comparing database...")) { _comparer = new LocalDBComparer(new SQLiteDataBase(_masterDBFile), new SQLiteDataBase(_slaveDBFile)); @@ -194,13 +207,24 @@ namespace Tango.MachineStudio.Synchronization.ViewModels } } } + catch (DbEntityValidationException ex) + { + String message = "The following validation errors occurred." + Environment.NewLine + Environment.NewLine; + + foreach (var error in ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).ToList()) + { + message += error.ErrorMessage + Environment.NewLine; + } + + ShowError(message); + } catch (Exception ex) { ShowError(ex.Message); } finally { - _isWorking = false; + IsWorking = false; SelectedDifference = null; InvalidateRelayCommands(); } @@ -218,13 +242,19 @@ namespace Tango.MachineStudio.Synchronization.ViewModels } } + if (SelectedMachine.SerialNumber != _comparedSerialNumber) + { + _notification.ShowError("You have selected a different machine serial number after comparing. Please compare again if you wish to synchronize a different machine."); + return; + } + Task.Factory.StartNew(async () => { using (_notification.PushTaskItem("Synchronizing...")) { try { - _isWorking = true; + IsWorking = true; InvalidateRelayCommands(); Thread.Sleep(1500); @@ -252,6 +282,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels } else { + //Synchronize the SQL Server db with the synchronized master DB. + RemoteDBSynchronizer.Synchronize(_masterDBFile, _comparedSerialNumber, false); + PathHelper.TryDeleteFile(_slaveDBFile); PathHelper.TryDeleteFile(_masterDBFile); _slaveDBFile = null; @@ -265,7 +298,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels } finally { - _isWorking = false; + IsWorking = false; SelectedDifference = null; InvalidateRelayCommands(); } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml index 4c5a719b5..ba0530ca6 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml @@ -17,6 +17,7 @@ + @@ -80,7 +81,7 @@ Remote Database - + @@ -174,7 +175,7 @@ - + diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs index ede66dc19..d4d053eaf 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs @@ -103,7 +103,7 @@ namespace Tango.MachineStudio.UI.Notifications if (viewTypes == null) { - viewTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).ToList(); + viewTypes = AppDomain.CurrentDomain.GetAssemblies().Where(x => x.FullName.Contains("MachineStudio")).SelectMany(x => x.GetTypes()).ToList(); } var viewType = viewTypes.SingleOrDefault(x => x.Name == viewName); -- cgit v1.3.1