From 956f9ea033553136ebf199fff30f288dc26fbeb0 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Wed, 21 Feb 2018 20:21:57 +0200 Subject: Working on machine studio update center.. --- Software/DB/Tango.mdf | Bin 75497472 -> 75497472 bytes Software/DB/Tango_log.ldf | Bin 8388608 -> 8388608 bytes Software/Graphics/new-version.png | Bin 0 -> 1932 bytes Software/Graphics/update.png | Bin 0 -> 5289 bytes .../Navigation/NavigationView.cs | 1 + .../StudioApplication/IStudioApplicationManager.cs | 5 + .../Tango.MachineStudio.Common.csproj | 7 + .../Update/CheckForUpdatesRequest.cs | 22 +++ .../Update/CheckForUpdatesResponse.cs | 31 ++++ .../Update/IMachineStudioUpdateService.cs | 17 ++ .../Update/UpdateServiceHelper.cs | 29 ++++ .../Tango.MachineStudio.UI/App.config | 4 +- .../Tango.MachineStudio.UI/Images/new-version.png | Bin 0 -> 1932 bytes .../Tango.MachineStudio.UI/Images/update.png | Bin 0 -> 5289 bytes .../Tango.MachineStudio.UI/MainWindow.xaml | 3 + .../DefaultStudioApplicationManager.cs | 11 ++ .../Tango.MachineStudio.UI.csproj | 15 ++ .../Tango.MachineStudio.UI/ViewModelLocator.cs | 9 + .../ViewModels/LoadingViewVM.cs | 6 +- .../ViewModels/MainViewVM.cs | 32 ++++ .../ViewModels/UpdateViewVM.cs | 175 +++++++++++++++++++ .../Tango.MachineStudio.UI/Views/LoadingView.xaml | 4 + .../Tango.MachineStudio.UI/Views/MainView.xaml | 4 +- .../Tango.MachineStudio.UI/Views/UpdateView.xaml | 188 +++++++++++++++++++++ .../Views/UpdateView.xaml.cs | 42 +++++ .../MachineStudioUpdateService.svc | 1 + .../MachineStudioUpdateService.svc.cs | 62 +++++++ .../Properties/AssemblyInfo.cs | 36 ++++ .../Tango.MachineStudio.UpdateService.csproj | 142 ++++++++++++++++ .../Web.Debug.config | 30 ++++ .../Web.Release.config | 31 ++++ .../Tango.MachineStudio.UpdateService/Web.config | 55 ++++++ .../packages.config | 4 + .../RealTimeGraphEx/RealTimeGraphEx.csproj | 5 +- .../Tango.DAL.Remote/DB/MACHINE_STUDIO_VERSIONS.cs | 27 +++ .../Tango.DAL.Remote/DB/RemoteADO.Context.cs | 1 + .../Tango.DAL.Remote/DB/RemoteADO.edmx | 73 ++++++++ .../Tango.DAL.Remote/DB/RemoteADO.edmx.diagram | 112 ++++++------ Software/Visual_Studio/Tango.DAL.Remote/DB/USER.cs | 3 + .../Tango.DAL.Remote/Tango.DAL.Remote.csproj | 3 + .../Observables/Entities/MachineStudioVersion.cs | 126 ++++++++++++++ .../Tango.Integration/Observables/Entities/User.cs | 21 +++ .../Observables/ObservablesContext.cs | 15 +- .../ObservablesEntitiesAdapterExtension.cs | 38 +++++ .../Tango.Integration/Tango.Integration.csproj | 1 + .../Visual_Studio/Tango.PMR/Common/MessageType.cs | 87 +++++++--- Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj | 4 +- .../MachineStudioSettings/MachineStudio.cs | 6 + .../Visual_Studio/Tango.Video/Tango.Video.csproj | 8 +- Software/Visual_Studio/Tango.sln | 33 ++++ 50 files changed, 1436 insertions(+), 93 deletions(-) create mode 100644 Software/Graphics/new-version.png create mode 100644 Software/Graphics/update.png create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesRequest.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesResponse.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/IMachineStudioUpdateService.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UpdateServiceHelper.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/new-version.png create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/update.png create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/MachineStudioUpdateService.svc create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/MachineStudioUpdateService.svc.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Properties/AssemblyInfo.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Tango.MachineStudio.UpdateService.csproj create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.Debug.config create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.Release.config create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.config create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/packages.config create mode 100644 Software/Visual_Studio/Tango.DAL.Remote/DB/MACHINE_STUDIO_VERSIONS.cs create mode 100644 Software/Visual_Studio/Tango.Integration/Observables/Entities/MachineStudioVersion.cs diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf index 139bd1108..736485c47 100644 Binary files a/Software/DB/Tango.mdf and b/Software/DB/Tango.mdf differ diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf index a9b0c5cc9..02e398280 100644 Binary files a/Software/DB/Tango_log.ldf and b/Software/DB/Tango_log.ldf differ diff --git a/Software/Graphics/new-version.png b/Software/Graphics/new-version.png new file mode 100644 index 000000000..eab60ef03 Binary files /dev/null and b/Software/Graphics/new-version.png differ diff --git a/Software/Graphics/update.png b/Software/Graphics/update.png new file mode 100644 index 000000000..a82777414 Binary files /dev/null and b/Software/Graphics/update.png differ diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Navigation/NavigationView.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Navigation/NavigationView.cs index db0f0471f..7e324c996 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Navigation/NavigationView.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Navigation/NavigationView.cs @@ -15,5 +15,6 @@ namespace Tango.MachineStudio.Common.Navigation MainView, LoginView, ShutdownView, + UpdateView, } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs index c67c34044..9a5f39a96 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs @@ -48,5 +48,10 @@ namespace Tango.MachineStudio.Common.StudioApplication /// Name of the module. /// The arguments. void RequestModule(String moduleName, Object args); + + /// + /// Gets the machine studio application version. + /// + String Version { get; } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj index cd4fc1aeb..a363ffc44 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj @@ -54,6 +54,8 @@ + + ..\..\packages\MahApps.Metro.1.5.0\lib\net45\System.Windows.Interactivity.dll @@ -96,6 +98,10 @@ + + + + @@ -218,5 +224,6 @@ Tango.Video + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesRequest.cs new file mode 100644 index 000000000..f76e714a2 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesRequest.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.MachineStudio.Common.Update +{ + [DataContract] + public class CheckForUpdatesRequest + { + [DataMember] + public String Email { get; set; } + + [DataMember] + public String Password { get; set; } + + [DataMember] + public String Version { get; set; } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesResponse.cs new file mode 100644 index 000000000..440e162a3 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.MachineStudio.Common.Update +{ + [DataContract] + public class CheckForUpdatesResponse + { + [DataMember] + public bool IsUpdateAvailable { get; set; } + + [DataMember] + public String Version { get; set; } + + [DataMember] + public String FtpHost { get; set; } + + [DataMember] + public String FilePath { get; set; } + + [DataMember] + public String UserName { get; set; } + + [DataMember] + public String Password { get; set; } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/IMachineStudioUpdateService.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/IMachineStudioUpdateService.cs new file mode 100644 index 000000000..7b7269d23 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/IMachineStudioUpdateService.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.ServiceModel; +using System.Text; +using Tango.MachineStudio.Common.Update; + +namespace Tango.MachineStudio.Common.Update +{ + [ServiceContract] + public interface IMachineStudioUpdateService + { + [OperationContract] + CheckForUpdatesResponse CheckForUpdates(CheckForUpdatesRequest request); + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UpdateServiceHelper.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UpdateServiceHelper.cs new file mode 100644 index 000000000..87b974b99 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UpdateServiceHelper.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.ServiceModel; +using System.Text; +using System.Threading.Tasks; +using Tango.Settings; + +namespace Tango.MachineStudio.Common.Update +{ + public static class UpdateServiceHelper + { + public static ChannelFactory GetUpdateServiceChannel() + { + BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None); + binding.ReceiveTimeout = TimeSpan.FromSeconds(20); + binding.SendTimeout = TimeSpan.FromSeconds(20); + binding.MaxBufferPoolSize = 6553600; + binding.MaxBufferSize = 6553600; + binding.MaxReceivedMessageSize = 6553600; + binding.ReaderQuotas.MaxDepth = 6553600; + binding.ReaderQuotas.MaxStringContentLength = 6553600; + binding.ReaderQuotas.MaxArrayLength = 6553600; + binding.ReaderQuotas.MaxBytesPerRead = 6553600; + + return new ChannelFactory(binding, SettingsManager.Default.MachineStudio.UpdateServiceAddress); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config index 9d1c60022..0bd51a469 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config @@ -6,8 +6,10 @@ + + - + diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/new-version.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/new-version.png new file mode 100644 index 000000000..eab60ef03 Binary files /dev/null and b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/new-version.png differ diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/update.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/update.png new file mode 100644 index 000000000..a82777414 Binary files /dev/null and b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/update.png differ diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml index e0f0b1f4f..63b2b3f6a 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml @@ -31,6 +31,9 @@ + + + diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs index ee1724435..9538c59af 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs @@ -111,6 +111,17 @@ namespace Tango.MachineStudio.UI.StudioApplication get { return ConnectedMachine != null; } } + /// + /// Gets the machine studio application version. + /// + public string Version + { + get + { + return typeof(DefaultStudioApplicationManager).Assembly.GetName().Version.ToString(); + } + } + /// /// Shutdown the application. /// diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj index 7c8600594..0ad97907b 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj @@ -110,6 +110,7 @@ ..\..\packages\System.Reactive.Windows.Threading.3.1.1\lib\net45\System.Reactive.Windows.Threading.dll + @@ -153,6 +154,7 @@ + LoadingView.xaml @@ -174,6 +176,9 @@ ShutdownView.xaml + + UpdateView.xaml + ExceptionWindow.xaml @@ -236,6 +241,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -365,6 +374,12 @@ + + + + + + $(TargetDir)linkgen.exe -s "$(TargetPath)" -d "$(TargetDir)Utilities\Machine Studio.lnk" diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs index 1907074c0..330bcd6eb 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs @@ -71,6 +71,7 @@ namespace Tango.MachineStudio.UI SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); + SimpleIoc.Default.Register(); //Register View (Supervising Controller Pattern). if (!ViewModelBase.IsInDesignModeStatic) @@ -127,5 +128,13 @@ namespace Tango.MachineStudio.UI return ServiceLocator.Current.GetInstance(); } } + + public UpdateViewVM UpdateViewVM + { + get + { + return ServiceLocator.Current.GetInstance(); + } + } } } \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs index 7ea7c6fa9..9acf26afd 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs @@ -10,6 +10,7 @@ using Tango.Logging; using Tango.MachineStudio.Common.Modules; using Tango.MachineStudio.Common.Navigation; using Tango.MachineStudio.Common.Notifications; +using Tango.MachineStudio.Common.StudioApplication; using Tango.SharedUI; namespace Tango.MachineStudio.UI.ViewModels @@ -24,14 +25,17 @@ namespace Tango.MachineStudio.UI.ViewModels private INavigationManager _navigationManager; private IStudioModuleLoader _studioModuleLoader; + public IStudioApplicationManager ApplicationManager { get; set; } + /// /// Initializes a new instance of the class. /// /// The navigation manager. /// The studio module loader. /// The notification provider. - public LoadingViewVM(INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider) + public LoadingViewVM(IStudioApplicationManager applicationManager, INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider) { + ApplicationManager = applicationManager; _navigationManager = navigationManager; _studioModuleLoader = studioModuleLoader; _notificationProvider = notificationProvider; diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs index da73e8eae..acd9e7925 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs @@ -99,6 +99,16 @@ namespace Tango.MachineStudio.UI.ViewModels /// public RelayCommand SignoutCommand { get; set; } + /// + /// Gets or sets the exit command. + /// + public RelayCommand ExitCommand { get; set; } + + /// + /// Gets or sets the update center command. + /// + public RelayCommand UpdateCenterCommand { get; set; } + private IAuthenticationProvider _authenticationProvider; /// /// Gets or sets the authentication provider. @@ -169,6 +179,8 @@ namespace Tango.MachineStudio.UI.ViewModels SignoutCommand = new RelayCommand(SignOut); DisconnectCommand = new RelayCommand(DisconnectFromMachine, (x) => ApplicationManager.IsMachineConnected && !_isDisconnecting); OpenModuleInWindowCommand = new RelayCommand(OpenModuleInWindow); + ExitCommand = new RelayCommand(ExitApplication); + UpdateCenterCommand = new RelayCommand(NavigateToUpdateCenter); } /// @@ -315,6 +327,10 @@ namespace Tango.MachineStudio.UI.ViewModels base.OnViewAttached(); } + /// + /// Opens the module in a new window. + /// + /// The module. private void OpenModuleInWindow(IStudioModule module) { if (module == null) return; @@ -351,5 +367,21 @@ namespace Tango.MachineStudio.UI.ViewModels _notificationProvider.ShowError("Error popping out module " + module.Name); } } + + /// + /// Navigates to update center. + /// + private void NavigateToUpdateCenter() + { + _navigation.NavigateTo(NavigationView.UpdateView); + } + + /// + /// Exits the application. + /// + private void ExitApplication() + { + _applicationManager.ShutDown(); + } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs new file mode 100644 index 000000000..014aecdb6 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Tango.Core.Commands; +using Tango.MachineStudio.Common.Authentication; +using Tango.MachineStudio.Common.Navigation; +using Tango.MachineStudio.Common.Notifications; +using Tango.MachineStudio.Common.StudioApplication; +using Tango.MachineStudio.Common.Update; +using Tango.SharedUI; + +namespace Tango.MachineStudio.UI.ViewModels +{ + public enum UpdateStatus + { + None, + CheckingForUpdate, + UpToDate, + UpdateAvailable, + Downloading, + Updating, + UpdateCompleted, + Error, + } + + public class UpdateViewVM : ViewModel + { + private INotificationProvider _notification; + private INavigationManager _navigation; + private IStudioApplicationManager _application; + private IAuthenticationProvider _authentication; + + private UpdateStatus _status; + public UpdateStatus Status + { + get { return _status; } + set { _status = value; RaisePropertyChangedAuto(); } + } + + private String _latestVersion; + public String LatestVersion + { + get { return _latestVersion; } + set { _latestVersion = value; RaisePropertyChangedAuto(); } + } + + private double _downloadProgress; + + public double DownloadProgress + { + get { return _downloadProgress; } + set { _downloadProgress = value; RaisePropertyChangedAuto(); } + } + + private double _updateProgress; + + public double UpdateProgress + { + get { return _updateProgress; } + set { _updateProgress = value; RaisePropertyChangedAuto(); } + } + + public RelayCommand UpdateCommand { get; set; } + + public RelayCommand BackCommand { get; set; } + + public RelayCommand RestartCommand { get; set; } + + public RelayCommand TryAgainCommand { get; set; } + + public UpdateViewVM(INotificationProvider notification, IAuthenticationProvider authentication, INavigationManager navigation, IStudioApplicationManager application) + { + _notification = notification; + _navigation = navigation; + _application = application; + _authentication = authentication; + + LatestVersion = "1.0.0.2"; + Status = UpdateStatus.CheckingForUpdate; + UpdateCommand = new RelayCommand(StartUpdate, () => Status == UpdateStatus.UpdateAvailable); + BackCommand = new RelayCommand(BackToApplication, () => Status != UpdateStatus.Updating); + RestartCommand = new RelayCommand(RestartApplication, () => Status == UpdateStatus.UpdateCompleted); + TryAgainCommand = new RelayCommand(TryAgain, () => Status == UpdateStatus.CheckingForUpdate); + } + + public void OnNavigatedInto() + { + CheckForUpdates(); + } + + private void CheckForUpdates() + { + Status = UpdateStatus.CheckingForUpdate; + + Task.Factory.StartNew(() => + { + var service = UpdateServiceHelper.GetUpdateServiceChannel(); + var client = service.CreateChannel(); + + CheckForUpdatesResponse response = client.CheckForUpdates(new CheckForUpdatesRequest() + { + Email = _authentication.CurrentUser.Email, + Password = _authentication.CurrentUser.Password, + Version = _application.Version, + }); + + var a = response; + + Thread.Sleep(5000); + Status = UpdateStatus.UpdateAvailable; + }); + } + + private void BackToApplication() + { + if (Status == UpdateStatus.Downloading) + { + if (!_notification.ShowQuestion("This will abort all update operations. Are you sure?")) + { + return; + } + } + + _navigation.NavigateTo(NavigationView.MainView); + Status = UpdateStatus.None; + } + + private void StartUpdate() + { + DownloadProgress = 0; + UpdateProgress = 0; + + Status = UpdateStatus.Downloading; + + Task.Factory.StartNew(() => + { + for (int i = 0; i < 100; i++) + { + DownloadProgress++; + Thread.Sleep(30); + } + + Status = UpdateStatus.Updating; + + for (int i = 0; i < 100; i++) + { + UpdateProgress++; + Thread.Sleep(30); + } + + Status = UpdateStatus.UpdateCompleted; + }); + } + + private void TryAgain() + { + CheckForUpdates(); + } + + private void RestartApplication() + { + _application.ShutDown(); + } + + protected override void RaisePropertyChangedAuto([CallerMemberName] string caller = null) + { + base.RaisePropertyChangedAuto(caller); + InvalidateRelayCommands(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml index 2478c1155..aaf4accd4 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml @@ -13,6 +13,10 @@ Machine Studio + + v + + Twine Solutions diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml index 9a2cc37a4..355bdc1fd 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml @@ -126,7 +126,9 @@ + + + + + + + + + + + + + + + + diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml.cs new file mode 100644 index 000000000..75b74f65d --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using Tango.MachineStudio.UI.ViewModels; +using static Tango.SharedUI.Controls.MultiTransitionControl; + +namespace Tango.MachineStudio.UI.Views +{ + /// + /// Interaction logic for UpdateView.xaml + /// + public partial class UpdateView : UserControl, ITransitionView + { + private UpdateViewVM _vm; + + public UpdateView() + { + InitializeComponent(); + + this.Loaded += (x, y) => + { + _vm = DataContext as UpdateViewVM; + }; + } + + public void OnTransitionCompleted() + { + _vm.OnNavigatedInto(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/MachineStudioUpdateService.svc b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/MachineStudioUpdateService.svc new file mode 100644 index 000000000..bad3e4fcd --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/MachineStudioUpdateService.svc @@ -0,0 +1 @@ +<%@ ServiceHost Language="C#" Debug="true" Service="Tango.MachineStudio.UpdateService.MachineStudioUpdateService" CodeBehind="MachineStudioUpdateService.svc.cs" %> \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/MachineStudioUpdateService.svc.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/MachineStudioUpdateService.svc.cs new file mode 100644 index 000000000..4cfea1b8a --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/MachineStudioUpdateService.svc.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Linq; +using System.Runtime.Serialization; +using System.ServiceModel; +using System.ServiceModel.Web; +using System.Text; +using Tango.Integration.Observables; +using Tango.Logging; +using Tango.MachineStudio.Common.Update; + +namespace Tango.MachineStudio.UpdateService +{ + public class MachineStudioUpdateService : IMachineStudioUpdateService + { + public CheckForUpdatesResponse CheckForUpdates(CheckForUpdatesRequest request) + { + LogManager.Log("Request received..."); + + try + { + CheckForUpdatesResponse response = new CheckForUpdatesResponse(); + + using (ObservablesContext db = ObservablesContext.CreateDefaultForWeb()) + { + db.Configuration.LazyLoadingEnabled = false; + + var user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower() && x.Password == request.Password); + + if (user != null) + { + var latestVersion = db.MachineStudioVersions.FirstOrDefault(); + Version currentVersionNumber = Version.Parse(request.Version); + + if (latestVersion != null && Version.Parse(latestVersion.Version) > currentVersionNumber) + { + response.IsUpdateAvailable = true; + + response.FtpHost = ConfigurationManager.AppSettings["FtpHost"].ToString(); + response.UserName = ConfigurationManager.AppSettings["UserName"].ToString(); + response.Password = ConfigurationManager.AppSettings["Password"].ToString(); + response.FilePath = latestVersion.FtpFilePath; + response.Version = latestVersion.Version; + } + } + else + { + throw new FaultException("Invalid user credentials."); + } + } + + return response; + } + catch (Exception ex) + { + LogManager.Log(ex); + throw new FaultException(ex.ToString()); + } + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..6b9387721 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Tango.MachineStudio.UpdateService")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Tango.MachineStudio.UpdateService")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("cc6d62e9-c300-42f3-b452-79966e902b10")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Tango.MachineStudio.UpdateService.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Tango.MachineStudio.UpdateService.csproj new file mode 100644 index 000000000..c9400b2d1 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Tango.MachineStudio.UpdateService.csproj @@ -0,0 +1,142 @@ + + + + Debug + AnyCPU + + + 2.0 + {CC6D62E9-C300-42F3-B452-79966E902B10} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Tango.MachineStudio.UpdateService + Tango.MachineStudio.UpdateService + v4.6 + True + true + true + + + + + + + + true + full + false + ..\..\Build\Debug\Web\Machine Studio Update Service\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + ..\..\packages\EntityFramework.6.0.0\lib\net45\EntityFramework.dll + + + ..\..\packages\EntityFramework.6.0.0\lib\net45\EntityFramework.SqlServer.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + MachineStudioUpdateService.svc + + + + + + + + + + + Web.config + + + Web.config + + + + + {a34ee0f0-649d-41c8-8489-b6f1cc6924ee} + Tango.Core + + + {4206ac58-3b57-4699-8835-90bf6db01a61} + Tango.Integration + + + {bc932dbd-7cdb-488c-99e4-f02cf441f55e} + Tango.Logging + + + {cb0b0aa2-bb24-4bca-a720-45e397684e12} + Tango.MachineStudio.Common + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + True + True + 65206 + / + http://localhost:53044/ + False + False + + + False + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.Debug.config b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.Debug.config new file mode 100644 index 000000000..fae9cfefa --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.Release.config b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.Release.config new file mode 100644 index 000000000..da6e960b8 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.config b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.config new file mode 100644 index 000000000..b0d2452f0 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Web.config @@ -0,0 +1,55 @@ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/packages.config b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/packages.config new file mode 100644 index 000000000..9256e1591 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/SideChains/RealTimeGraphEx/RealTimeGraphEx.csproj b/Software/Visual_Studio/SideChains/RealTimeGraphEx/RealTimeGraphEx.csproj index dd332943a..cc8eda5a4 100644 --- a/Software/Visual_Studio/SideChains/RealTimeGraphEx/RealTimeGraphEx.csproj +++ b/Software/Visual_Studio/SideChains/RealTimeGraphEx/RealTimeGraphEx.csproj @@ -34,11 +34,12 @@ pdbonly - true + false bin\Release\ - TRACE + TRACE;WPF prompt 4 + true diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/MACHINE_STUDIO_VERSIONS.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/MACHINE_STUDIO_VERSIONS.cs new file mode 100644 index 000000000..9d0fa2365 --- /dev/null +++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/MACHINE_STUDIO_VERSIONS.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated from a template. +// +// Manual changes to this file may cause unexpected behavior in your application. +// Manual changes to this file will be overwritten if the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Tango.DAL.Remote.DB +{ + using System; + using System.Collections.Generic; + + public partial class MACHINE_STUDIO_VERSIONS + { + public int ID { get; set; } + public string GUID { get; set; } + public System.DateTime LAST_UPDATED { get; set; } + public string VERSION { get; set; } + public string FTP_FILE_PATH { get; set; } + public string COMMENTS { get; set; } + public string USER_GUID { get; set; } + + public virtual USER USER { get; set; } + } +} diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.Context.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.Context.cs index ebec02eab..660f660b3 100644 --- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.Context.cs +++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.Context.cs @@ -54,6 +54,7 @@ namespace Tango.DAL.Remote.DB public virtual DbSet LINEAR_MASS_DENSITY_UNITS { get; set; } public virtual DbSet LIQUID_TYPES { get; set; } public virtual DbSet LIQUID_TYPES_RMLS { get; set; } + public virtual DbSet MACHINE_STUDIO_VERSIONS { get; set; } public virtual DbSet MACHINE_VERSIONS { get; set; } public virtual DbSet MACHINES { get; set; } public virtual DbSet MACHINES_CONFIGURATIONS { get; set; } diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx index 3f935c70f..a711bbd9e 100644 --- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx +++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx @@ -391,6 +391,18 @@ + + + + + + + + + + + + @@ -1078,6 +1090,18 @@ + + + + + + + + + + + + @@ -1460,6 +1484,7 @@ + @@ -1602,6 +1627,10 @@ + + + + @@ -1749,6 +1778,7 @@ + @@ -1939,6 +1969,10 @@ + + + + @@ -2451,6 +2485,19 @@ + + + + + + + + + + + + + @@ -2804,6 +2851,7 @@ + @@ -3341,6 +3389,18 @@ + + + + + + + + + + + + @@ -3964,6 +4024,19 @@ + + + + + + + + + + + + + diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram index b2b732414..96cebcca5 100644 --- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram +++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram @@ -5,61 +5,62 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101,6 +102,7 @@ + diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/USER.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/USER.cs index e7cfb212f..28dc2a2b8 100644 --- a/Software/Visual_Studio/Tango.DAL.Remote/DB/USER.cs +++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/USER.cs @@ -18,6 +18,7 @@ namespace Tango.DAL.Remote.DB public USER() { this.JOBS = new HashSet(); + this.MACHINE_STUDIO_VERSIONS = new HashSet(); this.MACHINES_EVENTS = new HashSet(); this.USERS_ROLES = new HashSet(); } @@ -37,6 +38,8 @@ namespace Tango.DAL.Remote.DB [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public virtual ICollection JOBS { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] + public virtual ICollection MACHINE_STUDIO_VERSIONS { get; set; } + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public virtual ICollection MACHINES_EVENTS { get; set; } public virtual ORGANIZATION ORGANIZATION { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] diff --git a/Software/Visual_Studio/Tango.DAL.Remote/Tango.DAL.Remote.csproj b/Software/Visual_Studio/Tango.DAL.Remote/Tango.DAL.Remote.csproj index 58ed81525..561cf44ff 100644 --- a/Software/Visual_Studio/Tango.DAL.Remote/Tango.DAL.Remote.csproj +++ b/Software/Visual_Studio/Tango.DAL.Remote/Tango.DAL.Remote.csproj @@ -161,6 +161,9 @@ RemoteADO.tt + + RemoteADO.tt + RemoteADO.tt diff --git a/Software/Visual_Studio/Tango.Integration/Observables/Entities/MachineStudioVersion.cs b/Software/Visual_Studio/Tango.Integration/Observables/Entities/MachineStudioVersion.cs new file mode 100644 index 000000000..9ff07682b --- /dev/null +++ b/Software/Visual_Studio/Tango.Integration/Observables/Entities/MachineStudioVersion.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Xml.Serialization; +using Newtonsoft.Json; +using System.Linq; +using Tango.DAL.Remote.DB; + +namespace Tango.Integration.Observables +{ + [Table("MACHINE_STUDIO_VERSIONS")] + public partial class MachineStudioVersion : ObservableEntity + { + + protected String _version; + /// + /// Gets or sets the machinestudioversion version. + /// + [Column("VERSION")] + + public String Version + { + get + { + return _version; + } + + set + { + _version = value; RaisePropertyChanged(nameof(Version)); + } + + } + + protected String _ftpfilepath; + /// + /// Gets or sets the machinestudioversion ftp file path. + /// + [Column("FTP_FILE_PATH")] + + public String FtpFilePath + { + get + { + return _ftpfilepath; + } + + set + { + _ftpfilepath = value; RaisePropertyChanged(nameof(FtpFilePath)); + } + + } + + protected String _comments; + /// + /// Gets or sets the machinestudioversion comments. + /// + [Column("COMMENTS")] + + public String Comments + { + get + { + return _comments; + } + + set + { + _comments = value; RaisePropertyChanged(nameof(Comments)); + } + + } + + protected String _userguid; + /// + /// Gets or sets the machinestudioversion user guid. + /// + [Column("USER_GUID")] + [ForeignKey("User")] + + public String UserGuid + { + get + { + return _userguid; + } + + set + { + _userguid = value; RaisePropertyChanged(nameof(UserGuid)); + } + + } + + protected User _user; + /// + /// Gets or sets the machinestudioversion user. + /// + + [XmlIgnore] + [JsonIgnore] + public virtual User User + { + get + { + return _user; + } + + set + { + _user = value; RaisePropertyChanged(nameof(User)); + } + + } + + /// + /// Initializes a new instance of the class. + /// + public MachineStudioVersion() : base() + { + } + } +} diff --git a/Software/Visual_Studio/Tango.Integration/Observables/Entities/User.cs b/Software/Visual_Studio/Tango.Integration/Observables/Entities/User.cs index 3acfb8fb6..50ca7e775 100644 --- a/Software/Visual_Studio/Tango.Integration/Observables/Entities/User.cs +++ b/Software/Visual_Studio/Tango.Integration/Observables/Entities/User.cs @@ -198,6 +198,25 @@ namespace Tango.Integration.Observables } + protected ObservableCollection _machinestudioversions; + /// + /// Gets or sets the user machine studio versions. + /// + + public virtual ObservableCollection MachineStudioVersions + { + get + { + return _machinestudioversions; + } + + set + { + _machinestudioversions = value; RaisePropertyChanged(nameof(MachineStudioVersions)); + } + + } + protected ObservableCollection _machinesevents; /// /// Gets or sets the user machines events. @@ -265,6 +284,8 @@ namespace Tango.Integration.Observables Jobs = new ObservableCollection(); + MachineStudioVersions = new ObservableCollection(); + MachinesEvents = new ObservableCollection(); UsersRoles = new ObservableCollection(); diff --git a/Software/Visual_Studio/Tango.Integration/Observables/ObservablesContext.cs b/Software/Visual_Studio/Tango.Integration/Observables/ObservablesContext.cs index 6c5947306..37830081d 100644 --- a/Software/Visual_Studio/Tango.Integration/Observables/ObservablesContext.cs +++ b/Software/Visual_Studio/Tango.Integration/Observables/ObservablesContext.cs @@ -30,7 +30,7 @@ namespace Tango.Integration.Observables { if (!isFile) { - return String.Format("Data Source={0};Initial Catalog=Tango;Integrated Security=true", source); + return String.Format("Data Source={0};Initial Catalog=Tango;User Id=Developer;Password=1111;", source); } else { @@ -47,6 +47,11 @@ namespace Tango.Integration.Observables return new ObservablesContext(SettingsManager.Default.DataBase.SQLServerAddress, false); } + public static ObservablesContext CreateDefaultForWeb() + { + return new ObservablesContext("localhost\\SQLEXPRESS", false); + } + /// /// Gets or sets the ActionTypes. /// @@ -279,6 +284,14 @@ namespace Tango.Integration.Observables get; set; } + /// + /// Gets or sets the MachineStudioVersions. + /// + public DbSet MachineStudioVersions + { + get; set; + } + /// /// Gets or sets the MachineVersions. /// diff --git a/Software/Visual_Studio/Tango.Integration/Observables/ObservablesEntitiesAdapterExtension.cs b/Software/Visual_Studio/Tango.Integration/Observables/ObservablesEntitiesAdapterExtension.cs index 70aad649d..b8aef34f7 100644 --- a/Software/Visual_Studio/Tango.Integration/Observables/ObservablesEntitiesAdapterExtension.cs +++ b/Software/Visual_Studio/Tango.Integration/Observables/ObservablesEntitiesAdapterExtension.cs @@ -1050,6 +1050,42 @@ namespace Tango.Integration.Observables } + private ObservableCollection _machinestudioversions; + /// + /// Gets or sets the MachineStudioVersions. + /// + public ObservableCollection MachineStudioVersions + { + get + { + return _machinestudioversions; + } + + set + { + _machinestudioversions = value; RaisePropertyChanged(nameof(MachineStudioVersions)); + } + + } + + private ICollectionView _machinestudioversionsViewSource; + /// + /// Gets or sets the MachineStudioVersions View Source. + /// + public ICollectionView MachineStudioVersionsViewSource + { + get + { + return _machinestudioversionsViewSource; + } + + set + { + _machinestudioversionsViewSource = value; RaisePropertyChanged(nameof(MachineStudioVersionsViewSource)); + } + + } + private ObservableCollection _machineversions; /// /// Gets or sets the MachineVersions. @@ -2050,6 +2086,8 @@ namespace Tango.Integration.Observables LiquidTypesRmlsViewSource = CreateCollectionView(LiquidTypesRmls); + MachineStudioVersionsViewSource = CreateCollectionView(MachineStudioVersions); + MachineVersionsViewSource = CreateCollectionView(MachineVersions); MachinesViewSource = CreateCollectionView(Machines); diff --git a/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj b/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj index 1a053a937..3f4d2056b 100644 --- a/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj +++ b/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj @@ -113,6 +113,7 @@ + diff --git a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs index 4811280d1..9ea29b24f 100644 --- a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs +++ b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs @@ -22,7 +22,7 @@ namespace Tango.PMR.Common { static MessageTypeReflection() { byte[] descriptorData = global::System.Convert.FromBase64String( string.Concat( - "ChFNZXNzYWdlVHlwZS5wcm90bxIQVGFuZ28uUE1SLkNvbW1vbiqREAoLTWVz", + "ChFNZXNzYWdlVHlwZS5wcm90bxIQVGFuZ28uUE1SLkNvbW1vbirJFAoLTWVz", "c2FnZVR5cGUSCAoETm9uZRAAEhQKEENhbGN1bGF0ZVJlcXVlc3QQAxIVChFD", "YWxjdWxhdGVSZXNwb25zZRAEEhMKD1Byb2dyZXNzUmVxdWVzdBAFEhQKEFBy", "b2dyZXNzUmVzcG9uc2UQBhIcChhTdHViQ2FydHJpZGdlUmVhZFJlcXVlc3QQ", @@ -44,32 +44,45 @@ namespace Tango.PMR.Common { "ChBTdHViVmFsdmVSZXF1ZXN0EB8SFQoRU3R1YlZhbHZlUmVzcG9uc2UQIBIb", "ChdTdHViRXh0Rmxhc2hSZWFkUmVxdWVzdBAhEhwKGFN0dWJFeHRGbGFzaFJl", "YWRSZXNwb25zZRAiEhwKGFN0dWJFeHRGbGFzaFdyaXRlUmVxdWVzdBAjEh0K", - "GVN0dWJFeHRGbGFzaFdyaXRlUmVzcG9uc2UQJBIlCiBFeHRlcm5hbEJyaWRn", - "ZVVkcERpc2NvdmVyeVBhY2tldBDoBxIfChpFeHRlcm5hbENsaWVudExvZ2lu", - "UmVxdWVzdBDpBxIgChtFeHRlcm5hbENsaWVudExvZ2luUmVzcG9uc2UQ6gcS", - "IQocRGlyZWN0U3luY2hyb25pemF0aW9uUmVxdWVzdBDrBxIiCh1EaXJlY3RT", - "eW5jaHJvbml6YXRpb25SZXNwb25zZRDsBxIcChdPdmVycmlkZURhdGFCYXNl", - "UmVxdWVzdBDtBxIdChhPdmVycmlkZURhdGFCYXNlUmVzcG9uc2UQ7gcSFQoQ", - "S2VlcEFsaXZlUmVxdWVzdBDvBxIWChFLZWVwQWxpdmVSZXNwb25zZRDwBxIb", - "ChZQdXNoRGlhZ25vc3RpY3NSZXF1ZXN0ENAPEhwKF1B1c2hEaWFnbm9zdGlj", - "c1Jlc3BvbnNlENEPEhwKF01vdG9yQWJvcnRIb21pbmdSZXF1ZXN0ENIPEh0K", - "GE1vdG9yQWJvcnRIb21pbmdSZXNwb25zZRDTDxIXChJNb3RvckhvbWluZ1Jl", - "cXVlc3QQ1A8SGAoTTW90b3JIb21pbmdSZXNwb25zZRDVDxIYChNNb3Rvckpv", - "Z2dpbmdSZXF1ZXN0ENYPEhkKFE1vdG9ySm9nZ2luZ1Jlc3BvbnNlENcPEh0K", - "GE1vdG9yQWJvcnRKb2dnaW5nUmVxdWVzdBDYDxIeChlNb3RvckFib3J0Sm9n", - "Z2luZ1Jlc3BvbnNlENkPEiAKG0Rpc3BlbnNlckFib3J0SG9taW5nUmVxdWVz", - "dBDaDxIhChxEaXNwZW5zZXJBYm9ydEhvbWluZ1Jlc3BvbnNlENsPEhsKFkRp", - "c3BlbnNlckhvbWluZ1JlcXVlc3QQ3A8SHAoXRGlzcGVuc2VySG9taW5nUmVz", - "cG9uc2UQ3Q8SHAoXRGlzcGVuc2VySm9nZ2luZ1JlcXVlc3QQ3g8SHQoYRGlz", - "cGVuc2VySm9nZ2luZ1Jlc3BvbnNlEN8PEiEKHERpc3BlbnNlckFib3J0Sm9n", - "Z2luZ1JlcXVlc3QQ4A8SIgodRGlzcGVuc2VyQWJvcnRKb2dnaW5nUmVzcG9u", - "c2UQ4Q8SGQoUU2V0RGlnaXRhbE91dFJlcXVlc3QQ4g8SGgoVU2V0RGlnaXRh", - "bE91dFJlc3BvbnNlEOMPEhkKFFRocmVhZEpvZ2dpbmdSZXF1ZXN0EOQPEhoK", - "FVRocmVhZEpvZ2dpbmdSZXNwb25zZRDlDxIeChlUaHJlYWRBYm9ydEpvZ2dp", - "bmdSZXF1ZXN0EOYPEh8KGlRocmVhZEFib3J0Sm9nZ2luZ1Jlc3BvbnNlEOcP", - "Eg8KCkpvYlJlcXVlc3QQuBcSEAoLSm9iUmVzcG9uc2UQuRcSFAoPQWJvcnRK", - "b2JSZXF1ZXN0ELoXEhUKEEFib3J0Sm9iUmVzcG9uc2UQuxdCHAoaY29tLnR3", - "aW5lLnRhbmdvLnBtci5jb21tb25iBnByb3RvMw==")); + "GVN0dWJFeHRGbGFzaFdyaXRlUmVzcG9uc2UQJBIeChpTdHViRlBHQVJlYWRC", + "YWNrUmVnUmVxdWVzdBAlEh8KG1N0dWJGUEdBUmVhZEJhY2tSZWdSZXNwb25z", + "ZRAmEh4KGlN0dWJGUEdBUmVhZFZlcnNpb25SZXF1ZXN0ECcSHwobU3R1YkZQ", + "R0FSZWFkVmVyc2lvblJlc3BvbnNlECgSGgoWU3R1Ykw2NDcwRHJpdmVyUmVx", + "dWVzdBApEhsKF1N0dWJMNjQ3MERyaXZlclJlc3BvbnNlECoSGAoUU3R1Yk1v", + "dG9ySW5pdFJlcXVlc3QQKxIZChVTdHViTW90b3JJbml0UmVzcG9uc2UQLBIX", + "ChNTdHViTW90b3JSdW5SZXF1ZXN0EC0SGAoUU3R1Yk1vdG9yUnVuUmVzcG9u", + "c2UQLhIYChRTdHViTW90b3JTdG9wUmVxdWVzdBAvEhkKFVN0dWJNb3RvclN0", + "b3BSZXNwb25zZRAwEhoKFlN0dWJNb3RvclN0YXR1c1JlcXVlc3QQMRIbChdT", + "dHViTW90b3JTdGF0dXNSZXNwb25zZRAyEhcKE1N0dWJNb3Rvck1vdlJlcXVl", + "c3QQMxIYChRTdHViTW90b3JNb3ZSZXNwb25zZRA0EhkKFVN0dWJNb3RvclNw", + "ZWVkUmVxdWVzdBA1EhoKFlN0dWJNb3RvclNwZWVkUmVzcG9uc2UQNhIcChhT", + "dHViTW90b3JQb3NpdGlvblJlcXVlc3QQNxIdChlTdHViTW90b3JQb3NpdGlv", + "blJlc3BvbnNlEDgSJQogRXh0ZXJuYWxCcmlkZ2VVZHBEaXNjb3ZlcnlQYWNr", + "ZXQQ6AcSHwoaRXh0ZXJuYWxDbGllbnRMb2dpblJlcXVlc3QQ6QcSIAobRXh0", + "ZXJuYWxDbGllbnRMb2dpblJlc3BvbnNlEOoHEiEKHERpcmVjdFN5bmNocm9u", + "aXphdGlvblJlcXVlc3QQ6wcSIgodRGlyZWN0U3luY2hyb25pemF0aW9uUmVz", + "cG9uc2UQ7AcSHAoXT3ZlcnJpZGVEYXRhQmFzZVJlcXVlc3QQ7QcSHQoYT3Zl", + "cnJpZGVEYXRhQmFzZVJlc3BvbnNlEO4HEhUKEEtlZXBBbGl2ZVJlcXVlc3QQ", + "7wcSFgoRS2VlcEFsaXZlUmVzcG9uc2UQ8AcSGwoWUHVzaERpYWdub3N0aWNz", + "UmVxdWVzdBDQDxIcChdQdXNoRGlhZ25vc3RpY3NSZXNwb25zZRDRDxIcChdN", + "b3RvckFib3J0SG9taW5nUmVxdWVzdBDSDxIdChhNb3RvckFib3J0SG9taW5n", + "UmVzcG9uc2UQ0w8SFwoSTW90b3JIb21pbmdSZXF1ZXN0ENQPEhgKE01vdG9y", + "SG9taW5nUmVzcG9uc2UQ1Q8SGAoTTW90b3JKb2dnaW5nUmVxdWVzdBDWDxIZ", + "ChRNb3RvckpvZ2dpbmdSZXNwb25zZRDXDxIdChhNb3RvckFib3J0Sm9nZ2lu", + "Z1JlcXVlc3QQ2A8SHgoZTW90b3JBYm9ydEpvZ2dpbmdSZXNwb25zZRDZDxIg", + "ChtEaXNwZW5zZXJBYm9ydEhvbWluZ1JlcXVlc3QQ2g8SIQocRGlzcGVuc2Vy", + "QWJvcnRIb21pbmdSZXNwb25zZRDbDxIbChZEaXNwZW5zZXJIb21pbmdSZXF1", + "ZXN0ENwPEhwKF0Rpc3BlbnNlckhvbWluZ1Jlc3BvbnNlEN0PEhwKF0Rpc3Bl", + "bnNlckpvZ2dpbmdSZXF1ZXN0EN4PEh0KGERpc3BlbnNlckpvZ2dpbmdSZXNw", + "b25zZRDfDxIhChxEaXNwZW5zZXJBYm9ydEpvZ2dpbmdSZXF1ZXN0EOAPEiIK", + "HURpc3BlbnNlckFib3J0Sm9nZ2luZ1Jlc3BvbnNlEOEPEhkKFFNldERpZ2l0", + "YWxPdXRSZXF1ZXN0EOIPEhoKFVNldERpZ2l0YWxPdXRSZXNwb25zZRDjDxIZ", + "ChRUaHJlYWRKb2dnaW5nUmVxdWVzdBDkDxIaChVUaHJlYWRKb2dnaW5nUmVz", + "cG9uc2UQ5Q8SHgoZVGhyZWFkQWJvcnRKb2dnaW5nUmVxdWVzdBDmDxIfChpU", + "aHJlYWRBYm9ydEpvZ2dpbmdSZXNwb25zZRDnDxIPCgpKb2JSZXF1ZXN0ELgX", + "EhAKC0pvYlJlc3BvbnNlELkXEhQKD0Fib3J0Sm9iUmVxdWVzdBC6FxIVChBB", + "Ym9ydEpvYlJlc3BvbnNlELsXQhwKGmNvbS50d2luZS50YW5nby5wbXIuY29t", + "bW9uYgZwcm90bzM=")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.Common.MessageType), }, null)); @@ -120,6 +133,26 @@ namespace Tango.PMR.Common { [pbr::OriginalName("StubExtFlashReadResponse")] StubExtFlashReadResponse = 34, [pbr::OriginalName("StubExtFlashWriteRequest")] StubExtFlashWriteRequest = 35, [pbr::OriginalName("StubExtFlashWriteResponse")] StubExtFlashWriteResponse = 36, + [pbr::OriginalName("StubFPGAReadBackRegRequest")] StubFpgareadBackRegRequest = 37, + [pbr::OriginalName("StubFPGAReadBackRegResponse")] StubFpgareadBackRegResponse = 38, + [pbr::OriginalName("StubFPGAReadVersionRequest")] StubFpgareadVersionRequest = 39, + [pbr::OriginalName("StubFPGAReadVersionResponse")] StubFpgareadVersionResponse = 40, + [pbr::OriginalName("StubL6470DriverRequest")] StubL6470DriverRequest = 41, + [pbr::OriginalName("StubL6470DriverResponse")] StubL6470DriverResponse = 42, + [pbr::OriginalName("StubMotorInitRequest")] StubMotorInitRequest = 43, + [pbr::OriginalName("StubMotorInitResponse")] StubMotorInitResponse = 44, + [pbr::OriginalName("StubMotorRunRequest")] StubMotorRunRequest = 45, + [pbr::OriginalName("StubMotorRunResponse")] StubMotorRunResponse = 46, + [pbr::OriginalName("StubMotorStopRequest")] StubMotorStopRequest = 47, + [pbr::OriginalName("StubMotorStopResponse")] StubMotorStopResponse = 48, + [pbr::OriginalName("StubMotorStatusRequest")] StubMotorStatusRequest = 49, + [pbr::OriginalName("StubMotorStatusResponse")] StubMotorStatusResponse = 50, + [pbr::OriginalName("StubMotorMovRequest")] StubMotorMovRequest = 51, + [pbr::OriginalName("StubMotorMovResponse")] StubMotorMovResponse = 52, + [pbr::OriginalName("StubMotorSpeedRequest")] StubMotorSpeedRequest = 53, + [pbr::OriginalName("StubMotorSpeedResponse")] StubMotorSpeedResponse = 54, + [pbr::OriginalName("StubMotorPositionRequest")] StubMotorPositionRequest = 55, + [pbr::OriginalName("StubMotorPositionResponse")] StubMotorPositionResponse = 56, /// ///Integration /// diff --git a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj index 3674c3e73..9e1f2dd76 100644 --- a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj +++ b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj @@ -24,8 +24,8 @@ pdbonly - true - bin\Release\ + false + ..\Build\Release\ TRACE prompt 4 diff --git a/Software/Visual_Studio/Tango.Settings/MachineStudioSettings/MachineStudio.cs b/Software/Visual_Studio/Tango.Settings/MachineStudioSettings/MachineStudio.cs index 0cb35199f..111c959f7 100644 --- a/Software/Visual_Studio/Tango.Settings/MachineStudioSettings/MachineStudio.cs +++ b/Software/Visual_Studio/Tango.Settings/MachineStudioSettings/MachineStudio.cs @@ -28,6 +28,11 @@ namespace Tango.Settings.MachineStudioSettings /// public bool RememberMe { get; set; } + /// + /// Gets or sets the update service address. + /// + public String UpdateServiceAddress { get; set; } + /// /// Gets or sets the logging categories. /// @@ -69,6 +74,7 @@ namespace Tango.Settings.MachineStudioSettings StubsModule = new StubsModule(); TechnicianModule = new TechnicianModule(); DeveloperModule = new DeveloperModule(); + UpdateServiceAddress = "http://localhost/MachineStudioUpdateService/MachineStudioUpdateService.svc"; } } } diff --git a/Software/Visual_Studio/Tango.Video/Tango.Video.csproj b/Software/Visual_Studio/Tango.Video/Tango.Video.csproj index f24d3a625..cb08ec0f9 100644 --- a/Software/Visual_Studio/Tango.Video/Tango.Video.csproj +++ b/Software/Visual_Studio/Tango.Video/Tango.Video.csproj @@ -24,18 +24,20 @@ DEBUG;TRACE prompt 4 - x86 + AnyCPU true pdbonly - true - bin\Release\ + false + ..\Build\Release\ TRACE prompt 4 + true + x86 diff --git a/Software/Visual_Studio/Tango.sln b/Software/Visual_Studio/Tango.sln index f5fe8c1c0..ec84fa212 100644 --- a/Software/Visual_Studio/Tango.sln +++ b/Software/Visual_Studio/Tango.sln @@ -127,6 +127,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.Visuals", "Tango.Visu EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.MachineStudio.DataCapture", "MachineStudio\Modules\Tango.MachineStudio.DataCapture\Tango.MachineStudio.DataCapture.csproj", "{FC337A7F-1214-41D8-9992-78092A3B961E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.MachineStudio.UpdateService", "MachineStudio\Tango.MachineStudio.UpdateService\Tango.MachineStudio.UpdateService.csproj", "{CC6D62E9-C300-42F3-B452-79966E902B10}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1657,6 +1659,36 @@ Global {FC337A7F-1214-41D8-9992-78092A3B961E}.Release|x64.Build.0 = Release|Any CPU {FC337A7F-1214-41D8-9992-78092A3B961E}.Release|x86.ActiveCfg = Release|Any CPU {FC337A7F-1214-41D8-9992-78092A3B961E}.Release|x86.Build.0 = Release|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Debug|ARM.ActiveCfg = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Debug|ARM.Build.0 = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Debug|ARM64.Build.0 = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Debug|x64.ActiveCfg = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Debug|x64.Build.0 = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Debug|x86.ActiveCfg = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Debug|x86.Build.0 = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.DefaultBuild|ARM.ActiveCfg = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.DefaultBuild|ARM.Build.0 = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.DefaultBuild|ARM64.ActiveCfg = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.DefaultBuild|ARM64.Build.0 = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.DefaultBuild|x64.Build.0 = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Release|Any CPU.Build.0 = Release|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Release|ARM.ActiveCfg = Release|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Release|ARM.Build.0 = Release|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Release|ARM64.ActiveCfg = Release|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Release|ARM64.Build.0 = Release|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Release|x64.ActiveCfg = Release|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Release|x64.Build.0 = Release|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Release|x86.ActiveCfg = Release|Any CPU + {CC6D62E9-C300-42F3-B452-79966E902B10}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1692,5 +1724,6 @@ Global {37E4CEAB-B54B-451F-B535-04CF7DA9C459} = {EC62BC9C-F2FE-4333-B7E4-110E38D43958} {5B954D98-4020-4AC6-939F-C52B5646E8E6} = {5F6BBAA8-EAD0-4B18-97E5-55B4F56DD760} {FC337A7F-1214-41D8-9992-78092A3B961E} = {B2AF4F3F-2828-47C3-8F3E-A0EA0BD66FF8} + {CC6D62E9-C300-42F3-B452-79966E902B10} = {57DF2A95-5DDD-4830-A4AF-B484B59C7C2B} EndGlobalSection EndGlobal -- cgit v1.3.1