From 72fc39f873de467c1431d928bce4d39442205691 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Sun, 19 Oct 2025 16:20:01 +0300 Subject: MS LITE --- .../MachineStudio/Tango.MachineStudio.UI/App.xaml | 4 ++ .../DefaultAuthenticationProvider.cs | 48 +++++++++++-- .../Build/DefaultBuildProvider.cs | 21 ++++++ .../Images/machine-trans.png | Bin 45618 -> 230871 bytes .../Tango.MachineStudio.UI/MainWindow.xaml.cs | 12 +--- .../Properties/AssemblyInfo.cs | 2 +- .../TFS/TeamFoundationServiceExtendedClient.cs | 6 +- .../Tango.MachineStudio.UI.csproj | 74 +++++++++++++++++++-- .../Tango.MachineStudio.UI/ViewModelLocator.cs | 16 ++++- .../ViewModels/LoadingViewVM.cs | 24 ++++--- .../ViewModels/LoginViewVM.cs | 49 ++++++++++++-- .../ViewModels/MachineConnectionViewVM.cs | 18 ++++- .../ViewModels/MainViewVM.cs | 41 +++++++++--- .../Tango.MachineStudio.UI/Views/LoadingView.xaml | 4 ++ .../Tango.MachineStudio.UI/Views/LoginView.xaml | 32 ++++++--- .../Views/MachineConnectionView.xaml | 2 + .../Tango.MachineStudio.UI/Views/MainView.xaml | 20 ++++-- .../Tango.MachineStudio.UI/Views/MainView.xaml.cs | 13 ++-- .../MachineStudio/Tango.MachineStudio.UI/lite.ico | Bin 0 -> 126856 bytes .../Tango.MachineStudio.UI/procedures_dde.ico | Bin 0 -> 126856 bytes 20 files changed, 318 insertions(+), 68 deletions(-) create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Build/DefaultBuildProvider.cs create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/lite.ico create mode 100644 Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/procedures_dde.ico (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI') diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.xaml index 618035112..0a3db2103 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.xaml @@ -3,6 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Tango.MachineStudio.UI" xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz" + xmlns:commonConverters="clr-namespace:Tango.MachineStudio.Common.Converters;assembly=Tango.MachineStudio.Common" StartupUri="MainWindow.xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" d1p1:Ignorable="d" xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:resources="clr-namespace:Tango.MachineStudio.Common.Resources;assembly=Tango.MachineStudio.Common"> @@ -25,6 +26,9 @@ + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs index 26938b203..3b8e29bc8 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs @@ -19,6 +19,7 @@ using Tango.MachineStudio.Common.Web; using Tango.BL.Builders; using System.Data.Entity.Core; using System.Windows.Threading; +using Tango.MachineStudio.Common.Buid; namespace Tango.MachineStudio.UI.Authentication { @@ -31,6 +32,7 @@ namespace Tango.MachineStudio.UI.Authentication { private MachineStudioWebClient _client; private DispatcherTimer _refreshTokenTimer; + private IBuildProvider _buildProvider; private User _currentUser; /// @@ -47,6 +49,13 @@ namespace Tango.MachineStudio.UI.Authentication } } + private Machine _machine; + public Machine Machine + { + get { return _machine; } + set { _machine = value; RaisePropertyChangedAuto(); } + } + /// /// Occurs when the current logged-in user has changed. /// @@ -56,9 +65,10 @@ namespace Tango.MachineStudio.UI.Authentication /// Initializes a new instance of the class. /// /// The machine studio web client. - public DefaultAuthenticationProvider(MachineStudioWebClient machineStudioWebClient) + public DefaultAuthenticationProvider(MachineStudioWebClient machineStudioWebClient, IBuildProvider buildProvider) { _client = machineStudioWebClient; + _buildProvider = buildProvider; _refreshTokenTimer = new DispatcherTimer(); _refreshTokenTimer.Interval = TimeSpan.FromMinutes(30); @@ -90,7 +100,7 @@ namespace Tango.MachineStudio.UI.Authentication /// The password. /// /// Login failed for user " + email - public AuthenticationLoginResult Login(string email, string password, LoginMethod method, bool bypassVersionCheck = false, Action logAction = null) + public AuthenticationLoginResult Login(string email, string password, LoginMethod method, bool bypassVersionCheck = false, Action logAction = null, String serialNumber = null) { _refreshTokenTimer.Stop(); @@ -157,10 +167,20 @@ namespace Tango.MachineStudio.UI.Authentication try { - ObservablesStaticCollections.Instance.Initialize((x) => + if (_buildProvider.BuildType == MSBuildType.Default) { - logAction.Invoke(x); - }); + ObservablesStaticCollections.Instance.Initialize((x) => + { + logAction.Invoke(x); + }); + } + else + { + ObservablesStaticCollections.Instance.InitializeLite((x) => + { + logAction.Invoke(x); + }); + } } catch (Exception ex) { @@ -179,6 +199,24 @@ namespace Tango.MachineStudio.UI.Authentication CurrentUser = user; + if (_buildProvider.BuildType == MSBuildType.Lite) + { + var machine = new MachineBuilder(db).Set(x => x.SerialNumber.ToLower() == serialNumber.ToLower()).WithOrganization().Build(); + + if (machine == null) + { + throw new AuthenticationException($"Machine with serial number '{serialNumber}' could not be found."); + } + + if (machine.Organization.Guid != user.Organization.Guid) + { + throw new AuthenticationException($"You are not authorized to access the specified machine."); + } + + Machine = machine; + + } + _refreshTokenTimer.Start(); logAction.Invoke("Starting application..."); diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Build/DefaultBuildProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Build/DefaultBuildProvider.cs new file mode 100644 index 000000000..0e1df88c8 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Build/DefaultBuildProvider.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.MachineStudio.Common.Buid; + +namespace Tango.MachineStudio.UI.Build +{ + public class DefaultBuildProvider : IBuildProvider + { + public MSBuildType BuildType { get; } + + public DefaultBuildProvider() + { +#if LITE + BuildType = MSBuildType.Lite; +#endif + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/machine-trans.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/machine-trans.png index a7cf65852..9b4d8c798 100644 Binary files a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/machine-trans.png and b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/machine-trans.png differ diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs index 2e201b6af..4dc1bb713 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs @@ -21,6 +21,7 @@ using Tango.Core.DI; using Tango.Core.Helpers; using Tango.Logging; using Tango.MachineStudio.Common; +using Tango.MachineStudio.Common.Buid; using Tango.MachineStudio.Common.StudioApplication; using Tango.Settings; @@ -43,15 +44,6 @@ namespace Tango.MachineStudio.UI { InitializeComponent(); - try - { - _is_testing = TestHelper.IsRunningUnderTestStudio(); - } - catch (Exception ex) - { - LogManager.Log(ex, LogCategory.Warning, "An error occurred while trying to get the parent process of machine studio."); - } - if (!_is_testing) { Viewbox box = new Viewbox(); @@ -89,7 +81,7 @@ namespace Tango.MachineStudio.UI { WindowState = WindowState.Maximized; - Title = "MACHINE STUDIO " + TangoIOC.Default.GetInstance().Version.ToString(3); + Title = "MACHINE STUDIO " + (TangoIOC.Default.GetInstance().BuildType == MSBuildType.Lite ? "LITE " : "") + TangoIOC.Default.GetInstance().Version.ToString(3); } private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e) diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs index b2c5cc8dc..6f2e8e3fb 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs @@ -4,5 +4,5 @@ using System.Runtime.InteropServices; [assembly: System.Windows.ThemeInfo(System.Windows.ResourceDictionaryLocation.None, System.Windows.ResourceDictionaryLocation.SourceAssembly)] [assembly: AssemblyTitle("Tango - Machine Studio")] -[assembly: AssemblyVersion("6.0.4.0")] +[assembly: AssemblyVersion("6.1.0.0")] [assembly: ComVisible(false)] \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs index 7a0a9414c..addf4f941 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs @@ -17,6 +17,7 @@ using Tango.Integration.Operation; using Tango.Logging; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.Authentication; +using Tango.MachineStudio.Common.Buid; using Tango.MachineStudio.Common.StudioApplication; using Tango.Settings; using Tango.SharedUI.Helpers; @@ -28,6 +29,7 @@ namespace Tango.MachineStudio.UI.TFS { private TemporaryFolder _tempFolder; private String user_email; + private IBuildProvider _buildProvider; public Project Project { get; private set; } @@ -48,14 +50,14 @@ namespace Tango.MachineStudio.UI.TFS public TeamFoundationServiceExtendedClient(string collectionURL, string userName, string personalToken) : base(collectionURL, userName, personalToken) { _tempFolder = TemporaryManager.CreateFolder(); - + _buildProvider = TangoIOC.Default.GetInstance(); ResolvedWorkItems = new ObservableCollection(); TangoIOC.Default.GetInstance().CurrentUserChanged += TeamFoundationServiceExtendedClient_CurrentUserChanged; } private void TeamFoundationServiceExtendedClient_CurrentUserChanged(object sender, User user) { - if (user != null) + if (user != null && _buildProvider.BuildType == MSBuildType.Default) { user_email = user.Email; 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 e7ae4f1de..906dc6bbd 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 @@ -22,7 +22,17 @@ full false ..\..\Build\Machine Studio\Debug\ - DEBUG;TRACE + TRACE;DEBUG + prompt + 4 + + + AnyCPU + true + full + false + ..\..\Build\Machine Studio Lite\Debug\ + TRACE;DEBUG;LITE prompt 4 @@ -35,6 +45,15 @@ prompt 4 + + AnyCPU + pdbonly + true + ..\..\Build\Machine Studio Lite\Release\ + TRACE;LITE + prompt + 4 + machine_new_small.ico @@ -69,7 +88,9 @@ ..\..\packages\MaterialDesignThemes.2.3.1.953\lib\net45\MaterialDesignThemes.Wpf.dll - + + False + ..\..\packages\SimpleValidator.0.6.1.0\lib\net40\SimpleValidator.dll @@ -146,6 +167,7 @@ GlobalVersionInfo.cs + @@ -360,6 +382,12 @@ TCC\template.bmp Always + + PreserveNewest + + + Always + @@ -408,6 +436,10 @@ {f441feee-322a-4943-b566-110e12fd3b72} Tango.BL + + {6efd5895-177b-4bbb-af52-29f4d53b3fbd} + Tango.CircularGauge + {caedae94-11ed-473c-888a-268a6d38cd20} Tango.CodeGeneration @@ -428,6 +460,10 @@ {99081c0e-065c-4d68-bf60-f82330cca02d} Tango.Git + + {942134ac-6ea2-4500-8f22-0f739b70a05f} + Tango.Hive + {4206ac58-3b57-4699-8835-90bf6db01a61} Tango.Integration @@ -712,7 +748,37 @@ copy /Y "$(SolutionDir)Referenced Assemblies\Microsoft.WITDataStore32.dll" "$(Ta if $(ConfigurationName) == Release del *.xml if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)ProtoCompilers\" if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)Roslyn\" -if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)lib\" +if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)lib\" + +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.ActionLogs.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.Catalogs.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.DataCapture.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.Dispensers.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.HardwareDesigner.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.Logging.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.MachineDesigner.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.MachineManager.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.Sites.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.Statistics.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.Storage.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.Stubs.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.ThreadExtensions.dll" +if $(ConfigurationName) == MS_LITE_Debug del "$(TargetDir)Tango.MachineStudio.UsersAndRoles.dll" + +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.ActionLogs.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.Catalogs.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.DataCapture.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.Dispensers.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.HardwareDesigner.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.Logging.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.MachineDesigner.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.MachineManager.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.Sites.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.Statistics.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.Storage.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.Stubs.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.ThreadExtensions.dll" +if $(ConfigurationName) == MS_LITE del "$(TargetDir)Tango.MachineStudio.UsersAndRoles.dll" @@ -723,7 +789,7 @@ if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)lib\" - + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs index 9f4787004..3aaf3fac5 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs @@ -6,6 +6,7 @@ using Tango.Core.DI; using Tango.Integration.ExternalBridge; using Tango.Logging; using Tango.MachineStudio.Common.Authentication; +using Tango.MachineStudio.Common.Buid; using Tango.MachineStudio.Common.Diagnostics; using Tango.MachineStudio.Common.EventLogging; using Tango.MachineStudio.Common.FirmwareUpgrade; @@ -18,6 +19,7 @@ using Tango.MachineStudio.Common.Threading; using Tango.MachineStudio.Common.Video; using Tango.MachineStudio.Common.Web; using Tango.MachineStudio.UI.Authentication; +using Tango.MachineStudio.UI.Build; using Tango.MachineStudio.UI.Console; using Tango.MachineStudio.UI.FirmwareUpgrade; using Tango.MachineStudio.UI.Modules; @@ -72,6 +74,7 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Unregister(); TangoIOC.Default.Unregister(); TangoIOC.Default.Unregister(); + TangoIOC.Default.Unregister(); @@ -84,6 +87,7 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Register(new MachineStudioWebClient()); } + TangoIOC.Default.Register(); TangoIOC.Default.Register(new DefaultDispatcherProvider(Application.Current.Dispatcher)); TangoIOC.Default.Register(); TangoIOC.Default.Register(); @@ -93,7 +97,17 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Register(); TangoIOC.Default.Register(); TangoIOC.Default.Register(); - TangoIOC.Default.Register(); + + + if (TangoIOC.Default.GetInstance().BuildType == MSBuildType.Lite) + { + TangoIOC.Default.Register(); + } + else + { + TangoIOC.Default.Register(); + } + TangoIOC.Default.Register(); TangoIOC.Default.Register(new DefaultActionLogManager() { IsAsync = true }); TangoIOC.Default.Register(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com", String.Empty, "pyulwgs7m3v7pizz3oxusypdkdfw43txggo5mjwu2ouyv2qwprhq")); 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 e55d0534e..05181fd3f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs @@ -21,6 +21,7 @@ using Tango.MachineStudio.Common.Web; using Tango.Core.DI; using Tango.Settings; using Tango.Core; +using Tango.MachineStudio.Common.Buid; namespace Tango.MachineStudio.UI.ViewModels { @@ -35,6 +36,7 @@ namespace Tango.MachineStudio.UI.ViewModels private INavigationManager _navigationManager; private IStudioModuleLoader _studioModuleLoader; private IEventLogger _eventLogger; + private IBuildProvider _buildProvider; private LogManager logManager = LogManager.Default; public IStudioApplicationManager ApplicationManager { get; set; } @@ -58,7 +60,7 @@ namespace Tango.MachineStudio.UI.ViewModels /// The navigation manager. /// The studio module loader. /// The notification provider. - public LoadingViewVM(IStudioApplicationManager applicationManager, INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider, IEventLogger eventLogger, TeamFoundationServiceExtendedClient teamFoundationClient) + public LoadingViewVM(IBuildProvider buildProvider, IStudioApplicationManager applicationManager, INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider, IEventLogger eventLogger, TeamFoundationServiceExtendedClient teamFoundationClient) { Status = "Loading, please wait..."; _tfs = teamFoundationClient; @@ -67,6 +69,7 @@ namespace Tango.MachineStudio.UI.ViewModels _navigationManager = navigationManager; _studioModuleLoader = studioModuleLoader; _notificationProvider = notificationProvider; + _buildProvider = buildProvider; } /// @@ -89,15 +92,18 @@ namespace Tango.MachineStudio.UI.ViewModels { try { - try + if (_buildProvider.BuildType == MSBuildType.Default) { - Status = "Connecting to Team Foundation Services..."; - _tfs.Initialize(); - Thread.Sleep(500); - } - catch (Exception ex) - { - LogManager.Log(ex, "Could not initialize Team Foundation Service client."); + try + { + Status = "Connecting to Team Foundation Services..."; + _tfs.Initialize(); + Thread.Sleep(500); + } + catch (Exception ex) + { + LogManager.Log(ex, "Could not initialize Team Foundation Service client."); + } } Status = "Loading, please wait..."; diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs index 7fa79984b..e7a32d107 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs @@ -25,6 +25,8 @@ using Tango.Web; using SimpleValidator.Extensions; using Tango.BL.Entities; using System.Data.Entity; +using Tango.MachineStudio.Common.Buid; +using System.Diagnostics; namespace Tango.MachineStudio.UI.ViewModels { @@ -42,6 +44,7 @@ namespace Tango.MachineStudio.UI.ViewModels private MachineStudioSettings _settings; private MachineStudioWebClient _machineStudioWebClient; private TaskCompletionSource _updatePasswordCompletionSource; + private IBuildProvider _buildProvider; private String _email; /// @@ -66,6 +69,17 @@ namespace Tango.MachineStudio.UI.ViewModels set { _password = value; RaisePropertyChangedAuto(); } } + private String _serialNumber; + /// + /// Gets or sets the password. + /// + [Required(ErrorMessage = "Serial Number is required")] + public String SerialNumber + { + get { return _serialNumber; } + set { _serialNumber = value; RaisePropertyChangedAuto(); } + } + private DeploymentSlot _deploymentSlot; /// /// Gets or sets the deployment slot. @@ -156,6 +170,8 @@ namespace Tango.MachineStudio.UI.ViewModels set { _newPassword2 = value; RaisePropertyChangedAuto(); } } + public List Environments { get; set; } + /// /// Gets or sets the login command. /// @@ -172,24 +188,42 @@ namespace Tango.MachineStudio.UI.ViewModels /// The authentication provider. /// The navigation manager. /// The notification provider. - public LoginViewVM(MachineStudioWebClient machineStudioWebClient, IAuthenticationProvider authenticationProvider, INavigationManager navigationManager, INotificationProvider notificationProvider, IEventLogger eventLogger) + public LoginViewVM(IBuildProvider buildProvider, MachineStudioWebClient machineStudioWebClient, IAuthenticationProvider authenticationProvider, INavigationManager navigationManager, INotificationProvider notificationProvider, IEventLogger eventLogger) { EnableSlotSelection = true; ShowLoggingDetails = true; _machineStudioWebClient = machineStudioWebClient; + _buildProvider = buildProvider; _settings = SettingsManager.Default.GetOrCreate(); + if (_buildProvider.BuildType == MSBuildType.Default) + { + Environments = Enum.GetValues(typeof(DeploymentSlot)).Cast().ToList(); + } + else + { + Environments = new List(); + + Environments.Add(DeploymentSlot.DEV); + Environments.Add(DeploymentSlot.TEST); + Environments.Add(DeploymentSlot.BETA); + Environments.Add(DeploymentSlot.PROD); + } + _notificationProvider = notificationProvider; _navigationManager = navigationManager; _authenticationProvider = authenticationProvider; + _buildProvider = buildProvider; _eventLogger = eventLogger; LoginCommand = new RelayCommand(Login, () => !IsLogging); UpdatePasswordCommand = new RelayCommand(UpdatePassword, () => IsChangingPassword); cryptographer = new Rfc2898Cryptographer(); Email = _settings.LastLoginEmail; + SerialNumber = _settings.LastLoginSerialNumber; DeploymentSlot = _settings.DeploymentSlot; + RememberMe = _settings.RememberMe; if (_settings.LastLoginMethod == LoginMethod.ActiveDirectory) @@ -201,6 +235,12 @@ namespace Tango.MachineStudio.UI.ViewModels IsStandardUser = true; } + if (_buildProvider.BuildType == MSBuildType.Lite) + { + IsStandardUser = true; + } + + try { Password = cryptographer.Decrypt(_settings.LastLoginPassword); @@ -236,7 +276,7 @@ namespace Tango.MachineStudio.UI.ViewModels LoginResponse result = _authenticationProvider.Login(Email, Password, loginMethod, _settings.ByPassEnvironmentVersionCheck, (progress) => { ProgressLog = progress; - }).Response; + }, SerialNumber).Response; if (result.VersionChangeRequired && !_settings.ByPassEnvironmentVersionCheck) { @@ -271,6 +311,7 @@ namespace Tango.MachineStudio.UI.ViewModels _settings.RememberMe = RememberMe; _settings.LastLoginMethod = loginMethod; _settings.LastLoginPassword = RememberMe ? cryptographer.Encrypt(Password) : null; + _settings.LastLoginSerialNumber = SerialNumber; _settings.Save(); EnableSlotSelection = false; @@ -280,11 +321,11 @@ namespace Tango.MachineStudio.UI.ViewModels IsChangingPassword = false; InvalidateRelayCommands(); - InvokeUI(() => + InvokeUI(() => { MainWindow.Instance.Title += $" - {_settings.DeploymentSlot}"; }); - + }); } catch (Exception ex) diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs index 511733984..04e645afd 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs @@ -9,6 +9,7 @@ using Tango.Emulations.ExternalBridge; using Tango.Integration.ExternalBridge; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.Authentication; +using Tango.MachineStudio.Common.Buid; using Tango.MachineStudio.Common.Notifications; using Tango.Settings; using Tango.SharedUI; @@ -67,7 +68,18 @@ namespace Tango.MachineStudio.UI.ViewModels { var settings = SettingsManager.Default.GetOrCreate(); _scanner = new ExternalBridgeScanner(); + _scanner.SignalRConfiguration.Enabled = settings.EnableExternalBridgeSignalR; + + var buildProvider = TangoIOC.Default.GetInstance(); + + if (buildProvider.BuildType == MSBuildType.Lite) + { + _scanner.SignalRConfiguration.Enabled = false; + var authProvider = TangoIOC.Default.GetInstance(); + _scanner.KnownMachines = new List() { authProvider.Machine }; + } + if (App.StartupArgs.Contains("-webDebug")) { _scanner.SignalRConfiguration.Address = "http://localhost:1111/"; //settings.DeploymentSlot.ToAddress(); @@ -115,10 +127,12 @@ namespace Tango.MachineStudio.UI.ViewModels try { + var buildProvider = TangoIOC.Default.GetInstance(); + _scanner.AvailableMachines.Clear(); - _scanner.SignalRConfiguration.Enabled = !TangoIOC.Default.GetInstance().CurrentUser.PreventRemoteMachineAccess; + _scanner.SignalRConfiguration.Enabled = !TangoIOC.Default.GetInstance().CurrentUser.PreventRemoteMachineAccess && buildProvider.BuildType == MSBuildType.Default; - if (SettingsManager.Default.GetOrCreate().UseExternalBridgeEmulator) + if (SettingsManager.Default.GetOrCreate().UseExternalBridgeEmulator && buildProvider.BuildType == MSBuildType.Default) { if (_emulator != null) { 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 5ba726700..c4ee5a4b1 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs @@ -21,6 +21,7 @@ using Tango.Integration.ExternalBridge; using Tango.Logging; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.Authentication; +using Tango.MachineStudio.Common.Buid; using Tango.MachineStudio.Common.Diagnostics; using Tango.MachineStudio.Common.EventLogging; using Tango.MachineStudio.Common.Messages; @@ -61,6 +62,7 @@ namespace Tango.MachineStudio.UI.ViewModels private IExternalBridgeClient _reconnectionMachine; private MachineLoginViewVM _reconnectionMachineConfig; private bool _lastUploadHardwareConfigLocal; + private IBuildProvider _buildProvider; /// /// Gets or sets the current loaded module. @@ -293,7 +295,8 @@ namespace Tango.MachineStudio.UI.ViewModels IDiagnosticsFrameProvider frameProvider, ISpeechProvider speechProvider, TeamFoundationServiceExtendedClient tfs, - MachineStudioWebClient machineStudioWebClient) : base() + MachineStudioWebClient machineStudioWebClient, + IBuildProvider buildProvider) : base() { _machineStudioWebClient = machineStudioWebClient; TFSClient = tfs; @@ -305,6 +308,7 @@ namespace Tango.MachineStudio.UI.ViewModels ApplicationManager = applicationManager; DiagnosticsFrameProvider = frameProvider; SpeechProvider = speechProvider; + _buildProvider = buildProvider; _settings = SettingsManager.Default.GetOrCreate(); @@ -378,6 +382,8 @@ namespace Tango.MachineStudio.UI.ViewModels private void UpdateCheckThreadMethod() { + if (_buildProvider.BuildType == MSBuildType.Lite) return; //Manual Update: TODO: Implement update through machine service + while (!DisableCheckForUpdates) { Thread.Sleep(TimeSpan.FromMinutes(0.2)); @@ -495,13 +501,20 @@ namespace Tango.MachineStudio.UI.ViewModels } else { - _notificationProvider.ShowModalDialog(async (vm) => + if (_buildProvider.BuildType == MSBuildType.Lite) + { + await ConnectToMachineLocal(x.SelectedMachine, AuthenticationProvider.Machine, x.UploadHardwareConfiguration); + } + else { - if (vm.SelectedMachine != null) + _notificationProvider.ShowModalDialog(async (vm) => { - await ConnectToMachineLocal(x.SelectedMachine, vm.SelectedMachine, x.UploadHardwareConfiguration); - } - }); + if (vm.SelectedMachine != null) + { + await ConnectToMachineLocal(x.SelectedMachine, vm.SelectedMachine, x.UploadHardwareConfiguration); + } + }); + } } base.InvalidateRelayCommands(); @@ -979,9 +992,21 @@ namespace Tango.MachineStudio.UI.ViewModels } } - if (settings.LastMainModuleName != null) + if (_buildProvider.BuildType == MSBuildType.Default) + { + if (settings.LastMainModuleName != null) + { + var m = StudioModuleLoader.UserModules.SingleOrDefault(x => x.Name == settings.LastMainModuleName); + + if (m != null) + { + StartModule(m); + } + } + } + else { - var m = StudioModuleLoader.UserModules.SingleOrDefault(x => x.Name == settings.LastMainModuleName); + var m = StudioModuleLoader.UserModules.SingleOrDefault(x => x.Name == "Research"); if (m != null) { 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 14fcc3a37..6643edbb7 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml @@ -5,12 +5,15 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" + xmlns:commonConverters="clr-namespace:Tango.MachineStudio.Common.Converters;assembly=Tango.MachineStudio.Common" xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" mc:Ignorable="d" d:DesignHeight="720" d:DesignWidth="1280" Cursor="Wait" DataContext="{Binding LoadingViewVM, Source={StaticResource Locator}}" Background="Transparent"> + + @@ -19,6 +22,7 @@ Machine Studio + LITE Twine Solutions diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml index 9a3b3405e..c3ee5cf49 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml @@ -10,6 +10,7 @@ xmlns:automation="clr-namespace:Tango.MachineStudio.Common.Automation;assembly=Tango.MachineStudio.Common" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:helpers="clr-namespace:Tango.SharedUI.Helpers;assembly=Tango.SharedUI" + xmlns:commonConverters="clr-namespace:Tango.MachineStudio.Common.Converters;assembly=Tango.MachineStudio.Common" xmlns:common="clr-namespace:Tango.MachineStudio.Common;assembly=Tango.MachineStudio.Common" xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" mc:Ignorable="d" @@ -20,6 +21,8 @@ + + @@ -44,17 +47,20 @@ Machine Studio + LITE - - - - - - - - + + + + + + + + + + @@ -87,7 +93,7 @@ - Login to your account + @@ -97,7 +103,7 @@ - + @@ -108,9 +114,13 @@ + + + + - + Environment selection requires restarting the application Remember me diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml index 59b9fe67f..e4758a311 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml @@ -9,6 +9,7 @@ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:emulations="clr-namespace:Tango.Emulations.ExternalBridge;assembly=Tango.Emulations" xmlns:controls="clr-namespace:Tango.MachineStudio.Common.Controls;assembly=Tango.MachineStudio.Common" + xmlns:commonConverters="clr-namespace:Tango.MachineStudio.Common.Converters;assembly=Tango.MachineStudio.Common" xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" Width="700" Height="500" Background="{StaticResource Dialog.Background}" DataContext="{Binding MachineConnectionViewVM, Source={StaticResource Locator}}" Foreground="{StaticResource MainWindow.Foreground}"> @@ -17,6 +18,7 @@ + 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 ea6e93412..e6bfbcca1 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml @@ -29,6 +29,8 @@ + + @@ -67,7 +69,7 @@ IsChecked="{Binding Source={x:Reference MenuToggleButton}, Path=IsChecked, Mode=TwoWay}" /> - + MODULES @@ -128,7 +130,8 @@ - + + @@ -154,7 +157,7 @@ - + -