diff options
Diffstat (limited to 'Software/Visual_Studio/MachineStudio')
29 files changed, 963 insertions, 3 deletions
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 /// <param name="moduleName">Name of the module.</param> /// <param name="args">The arguments.</param> void RequestModule(String moduleName, Object args); + + /// <summary> + /// Gets the machine studio application version. + /// </summary> + 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 @@ </Reference> <Reference Include="System" /> <Reference Include="System.Data" /> + <Reference Include="System.Runtime.Serialization" /> + <Reference Include="System.ServiceModel" /> <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\..\packages\MahApps.Metro.1.5.0\lib\net45\System.Windows.Interactivity.dll</HintPath> </Reference> @@ -96,6 +98,10 @@ <Compile Include="Messages\IStudioMessage.cs" /> <Compile Include="Notifications\TaskItem.cs" /> <Compile Include="StudioModuleBase.cs" /> + <Compile Include="Update\CheckForUpdatesResponse.cs" /> + <Compile Include="Update\CheckForUpdatesRequest.cs" /> + <Compile Include="Update\IMachineStudioUpdateService.cs" /> + <Compile Include="Update\UpdateServiceHelper.cs" /> <Compile Include="ValidationRules\Required.cs" /> <Compile Include="Video\DefaultVideoCaptureProvider.cs" /> <Compile Include="Video\IVideoCaptureProvider.cs" /> @@ -218,5 +224,6 @@ <Name>Tango.Video</Name> </ProjectReference> </ItemGroup> + <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> </Project>
\ 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<IMachineStudioUpdateService> 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<IMachineStudioUpdateService>(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 @@ <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /> </startup> + + <entityFramework> - <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> + <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> 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 Binary files differnew file mode 100644 index 000000000..eab60ef03 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/new-version.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/update.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/update.png Binary files differnew file mode 100644 index 000000000..a82777414 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/update.png 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 @@ <ContentControl Tag="ShutdownView"> <views:ShutdownView></views:ShutdownView> </ContentControl> + <ContentControl Tag="UpdateView"> + <views:UpdateView></views:UpdateView> + </ContentControl> </sharedControls:MultiTransitionControl.Controls> </sharedControls:MultiTransitionControl> 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 @@ -112,6 +112,17 @@ namespace Tango.MachineStudio.UI.StudioApplication } /// <summary> + /// Gets the machine studio application version. + /// </summary> + public string Version + { + get + { + return typeof(DefaultStudioApplicationManager).Assembly.GetName().Version.ToString(); + } + } + + /// <summary> /// Shutdown the application. /// </summary> public async void ShutDown() 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 @@ <Reference Include="System.Reactive.Windows.Threading, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL"> <HintPath>..\..\packages\System.Reactive.Windows.Threading.3.1.1\lib\net45\System.Reactive.Windows.Threading.dll</HintPath> </Reference> + <Reference Include="System.ServiceModel" /> <Reference Include="System.Windows" /> <Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> @@ -153,6 +154,7 @@ <Compile Include="ViewModelLocator.cs" /> <Compile Include="ViewModels\ModuleWindowVM.cs" /> <Compile Include="ViewModels\ShutdownViewVM.cs" /> + <Compile Include="ViewModels\UpdateViewVM.cs" /> <Compile Include="Views\LoadingView.xaml.cs"> <DependentUpon>LoadingView.xaml</DependentUpon> </Compile> @@ -174,6 +176,9 @@ <Compile Include="Views\ShutdownView.xaml.cs"> <DependentUpon>ShutdownView.xaml</DependentUpon> </Compile> + <Compile Include="Views\UpdateView.xaml.cs"> + <DependentUpon>UpdateView.xaml</DependentUpon> + </Compile> <Compile Include="Windows\ExceptionResolutions.cs" /> <Compile Include="Windows\ExceptionWindow.xaml.cs"> <DependentUpon>ExceptionWindow.xaml</DependentUpon> @@ -236,6 +241,10 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Views\UpdateView.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Windows\ExceptionWindow.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -365,6 +374,12 @@ <ItemGroup> <Resource Include="Images\exception.png" /> </ItemGroup> + <ItemGroup> + <Resource Include="Images\update.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\new-version.png" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <PostBuildEvent>$(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<LoginViewVM>(); SimpleIoc.Default.Register<MachineConnectionViewVM>(); SimpleIoc.Default.Register<MachineLoginViewVM>(); + SimpleIoc.Default.Register<UpdateViewVM>(); //Register View (Supervising Controller Pattern). if (!ViewModelBase.IsInDesignModeStatic) @@ -127,5 +128,13 @@ namespace Tango.MachineStudio.UI return ServiceLocator.Current.GetInstance<MachineLoginViewVM>(); } } + + public UpdateViewVM UpdateViewVM + { + get + { + return ServiceLocator.Current.GetInstance<UpdateViewVM>(); + } + } } }
\ 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; } + /// <summary> /// Initializes a new instance of the <see cref="LoadingViewVM"/> class. /// </summary> /// <param name="navigationManager">The navigation manager.</param> /// <param name="studioModuleLoader">The studio module loader.</param> /// <param name="notificationProvider">The notification provider.</param> - 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 /// </summary> public RelayCommand SignoutCommand { get; set; } + /// <summary> + /// Gets or sets the exit command. + /// </summary> + public RelayCommand ExitCommand { get; set; } + + /// <summary> + /// Gets or sets the update center command. + /// </summary> + public RelayCommand UpdateCenterCommand { get; set; } + private IAuthenticationProvider _authenticationProvider; /// <summary> /// 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<IStudioModule>(OpenModuleInWindow); + ExitCommand = new RelayCommand(ExitApplication); + UpdateCenterCommand = new RelayCommand(NavigateToUpdateCenter); } /// <summary> @@ -315,6 +327,10 @@ namespace Tango.MachineStudio.UI.ViewModels base.OnViewAttached(); } + /// <summary> + /// Opens the module in a new window. + /// </summary> + /// <param name="module">The module.</param> 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); } } + + /// <summary> + /// Navigates to update center. + /// </summary> + private void NavigateToUpdateCenter() + { + _navigation.NavigateTo(NavigationView.UpdateView); + } + + /// <summary> + /// Exits the application. + /// </summary> + 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 @@ <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant" Width="100"></Image> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="70" Foreground="{StaticResource AccentColorBrush}">Machine Studio</TextBlock> + <TextBlock Foreground="Gray" VerticalAlignment="Bottom" Margin="10 0 0 5" FontSize="16" FontWeight="SemiBold" FontStyle="Italic"> + <Run>v</Run> + <Run Text="{Binding ApplicationManager.Version,Mode=OneWay}"></Run> + </TextBlock> </StackPanel> <TextBlock HorizontalAlignment="Right" FontSize="18" Margin="0 0 -50 0" Foreground="{StaticResource AccentColorBrush}">Twine Solutions</TextBlock> <mahapps:ProgressRing Margin="20 60 20 40" Width="80" Height="80"></mahapps:ProgressRing> 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 @@ <Separator/> <Button Content="Open Module In New Window" IsEnabled="{Binding IsModuleLoaded}" Command="{Binding OpenModuleInWindowCommand}" CommandParameter="{Binding CurrentModule}" /> <Separator/> - <Button Content="Exit" /> + <Button Content="Update Center" Command="{Binding UpdateCenterCommand}" /> + <Separator/> + <Button Content="Exit" Command="{Binding ExitCommand}" /> </StackPanel> </materialDesign:PopupBox> <Grid> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml new file mode 100644 index 000000000..5b09d3381 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml @@ -0,0 +1,188 @@ +<UserControl x:Class="Tango.MachineStudio.UI.Views.UpdateView" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" + xmlns:vm="clr-namespace:Tango.MachineStudio.UI.ViewModels" + xmlns:mahApps="http://metro.mahapps.com/winfx/xaml/controls" + xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" + mc:Ignorable="d" + d:DesignHeight="1080" d:DesignWidth="1920" DataContext="{Binding UpdateViewVM, Source={StaticResource Locator}}" Background="White" FontSize="20"> + <Grid> + <Grid.Background> + <ImageBrush ImageSource="/Images/White-Abstract.png" /> + </Grid.Background> + <Grid MaxWidth="1200" MaxHeight="700"> + <DockPanel> + <Grid DockPanel.Dock="Top" HorizontalAlignment="Center"> + <Grid.Effect> + <DropShadowEffect BlurRadius="100" ShadowDepth="0" Opacity="0.7" /> + </Grid.Effect> + <StackPanel Orientation="Horizontal"> + <Image Source="/Images/update.png" Width="100" /> + <TextBlock Margin="10 0 0 0" VerticalAlignment="Center" FontSize="70">Update Center</TextBlock> + </StackPanel> + </Grid> + + <Grid DockPanel.Dock="Bottom"> + <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> + <Button MinWidth="140" Height="40" Style="{StaticResource MaterialDesignFlatButton}" Command="{Binding BackCommand}"> + <StackPanel Orientation="Horizontal"> + <materialDesign:PackIcon Kind="KeyboardBackspace" Width="24" Height="24" /> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">BACK TO APPLICATION</TextBlock> + </StackPanel> + </Button> + </StackPanel> + </Grid> + + <Grid> + <Border Margin="0 10 0 10" BorderThickness="0 0 0 2" BorderBrush="DimGray"> + <ContentControl> + <ContentControl.Style> + <Style TargetType="ContentControl"> + <Setter Property="Content"> + <Setter.Value> + <Grid> + + </Grid> + </Setter.Value> + </Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding Status}" Value="{x:Static vm:UpdateStatus.CheckingForUpdate}"> + <Setter Property="Content"> + <Setter.Value> + <Grid> + <StackPanel VerticalAlignment="Center"> + <mahApps:ProgressRing Width="120" Height="120" Foreground="DimGray" /> + <TextBlock HorizontalAlignment="Center" Margin="0 30 0 0">Checking for updates...</TextBlock> + </StackPanel> + </Grid> + </Setter.Value> + </Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static vm:UpdateStatus.UpdateAvailable}"> + <Setter Property="Content"> + <Setter.Value> + <Grid> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <Image Source="/Images/new-version.png" Width="64"></Image> + <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> + <TextBlock VerticalAlignment="Center" Margin="0 20 0 0">New version is available!</TextBlock> + </StackPanel> + <TextBlock FontSize="12" TextAlignment="Center" Padding="20" Margin="0 0 0 40"> + <Run>A new version of Machine Studio is available to download</Run> + <LineBreak/> + <Run>Click 'Update' to start the update process.</Run> + </TextBlock> + <Button MinWidth="140" Height="40" Margin="0 0 0 0" Width="200" Command="{Binding UpdateCommand}"> + <StackPanel Orientation="Horizontal"> + <materialDesign:PackIcon Kind="Download" Width="24" Height="24" /> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">UPDATE</TextBlock> + </StackPanel> + </Button> + </StackPanel> + </Grid> + </Setter.Value> + </Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static vm:UpdateStatus.Downloading}"> + <Setter Property="Content"> + <Setter.Value> + <Grid> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock HorizontalAlignment="Center"> + <Run>Downloading version</Run> + <Run Text="{Binding LatestVersion,FallbackValue='0.0.0.0'}"></Run> + <Run>, please wait...</Run> + </TextBlock> + <ProgressBar Height="10" Foreground="DimGray" Margin="0 20 0 0" Maximum="100" Value="{Binding DownloadProgress}"></ProgressBar> + </StackPanel> + </Grid> + </Setter.Value> + </Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static vm:UpdateStatus.Updating}"> + <Setter Property="Content"> + <Setter.Value> + <Grid> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock HorizontalAlignment="Center"> + <Run>Updating Machine Studio, please wait...</Run> + </TextBlock> + <ProgressBar Height="10" Foreground="DimGray" Margin="0 20 0 0" Maximum="100" Value="{Binding DownloadProgress}"></ProgressBar> + </StackPanel> + </Grid> + </Setter.Value> + </Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static vm:UpdateStatus.UpdateCompleted}"> + <Setter Property="Content"> + <Setter.Value> + <Grid> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <materialDesign:PackIcon Kind="Check" Width="100" Height="100" Foreground="#1CBB1C" HorizontalAlignment="Center" /> + <StackPanel Orientation="Horizontal"> + <TextBlock VerticalAlignment="Center" Margin="0 20 0 0">Your version of Machine Studio is up to date!</TextBlock> + </StackPanel> + + <TextBlock HorizontalAlignment="Center" Margin="0 10 0 0" FontSize="12">Please restart Machine Studio in order to apply the changes.</TextBlock> + + <Button MinWidth="140" Height="40" Margin="0 50 0 0" Width="200" Command="{Binding RestartCommand}"> + <StackPanel Orientation="Horizontal"> + <materialDesign:PackIcon Kind="BackupRestore" Width="24" Height="24" /> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">RESTART</TextBlock> + </StackPanel> + </Button> + </StackPanel> + </Grid> + </Setter.Value> + </Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static vm:UpdateStatus.UpToDate}"> + <Setter Property="Content"> + <Setter.Value> + <Grid> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <materialDesign:PackIcon Kind="Check" Width="100" Height="100" Foreground="#1CBB1C" HorizontalAlignment="Center" /> + <StackPanel Orientation="Horizontal"> + <TextBlock VerticalAlignment="Center" Margin="0 20 0 0">Your version of Machine Studio is up to date!</TextBlock> + </StackPanel> + </StackPanel> + </Grid> + </Setter.Value> + </Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static vm:UpdateStatus.Error}"> + <Setter Property="Content"> + <Setter.Value> + <Grid> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <materialDesign:PackIcon Kind="Alert" Width="100" Height="100" Foreground="#FF5F5F" HorizontalAlignment="Center" /> + <TextBlock VerticalAlignment="Center" Margin="0 20 0 0" HorizontalAlignment="Center">Error updating machine studio</TextBlock> + <TextBlock HorizontalAlignment="Center" Margin="0 10 0 0" FontSize="12" TextAlignment="Center"> + <Run>An error occurred while updating your software.</Run> + <LineBreak/> + <Run>press 'Try Again' to give it another try.</Run> + </TextBlock> + <Button MinWidth="140" Height="40" Margin="0 50 0 0" Width="200" Command="{Binding TryAgainCommand}"> + <StackPanel Orientation="Horizontal"> + <materialDesign:PackIcon Kind="BackupRestore" Width="24" Height="24" /> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">TRY AGAIN</TextBlock> + </StackPanel> + </Button> + </StackPanel> + </Grid> + </Setter.Value> + </Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </ContentControl.Style> + </ContentControl> + </Border> + </Grid> + </DockPanel> + </Grid> + </Grid> +</UserControl> 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 +{ + /// <summary> + /// Interaction logic for UpdateView.xaml + /// </summary> + 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 @@ +<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion> + </ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{CC6D62E9-C300-42F3-B452-79966E902B10}</ProjectGuid> + <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Tango.MachineStudio.UpdateService</RootNamespace> + <AssemblyName>Tango.MachineStudio.UpdateService</AssemblyName> + <TargetFrameworkVersion>v4.6</TargetFrameworkVersion> + <WcfConfigValidationEnabled>True</WcfConfigValidationEnabled> + <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> + <UseIISExpress>true</UseIISExpress> + <IISExpressSSLPort /> + <IISExpressAnonymousAuthentication /> + <IISExpressWindowsAuthentication /> + <IISExpressUseClassicPipelineMode /> + <UseGlobalApplicationHostFile /> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>..\..\Build\Debug\Web\Machine Studio Update Service\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> + <HintPath>..\..\packages\EntityFramework.6.0.0\lib\net45\EntityFramework.dll</HintPath> + </Reference> + <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> + <HintPath>..\..\packages\EntityFramework.6.0.0\lib\net45\EntityFramework.SqlServer.dll</HintPath> + </Reference> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.ComponentModel.DataAnnotations" /> + <Reference Include="System.Web.DynamicData" /> + <Reference Include="System.Web.Entity" /> + <Reference Include="System.Web.ApplicationServices" /> + <Reference Include="System" /> + <Reference Include="System.Configuration" /> + <Reference Include="System.Core" /> + <Reference Include="System.Data" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.EnterpriseServices" /> + <Reference Include="System.Runtime.Serialization" /> + <Reference Include="System.ServiceModel" /> + <Reference Include="System.ServiceModel.Web" /> + <Reference Include="System.Web" /> + <Reference Include="System.Web.Extensions" /> + <Reference Include="System.Web.Services" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Content Include="MachineStudioUpdateService.svc" /> + <Content Include="Web.config" /> + </ItemGroup> + <ItemGroup> + <Compile Include="MachineStudioUpdateService.svc.cs"> + <DependentUpon>MachineStudioUpdateService.svc</DependentUpon> + </Compile> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <Folder Include="App_Data\" /> + </ItemGroup> + <ItemGroup> + <Content Include="packages.config" /> + <None Include="Properties\PublishProfiles\FolderProfile.pubxml" /> + <None Include="Web.Debug.config"> + <DependentUpon>Web.config</DependentUpon> + </None> + <None Include="Web.Release.config"> + <DependentUpon>Web.config</DependentUpon> + </None> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\Tango.Core\Tango.Core.csproj"> + <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project> + <Name>Tango.Core</Name> + </ProjectReference> + <ProjectReference Include="..\..\Tango.Integration\Tango.Integration.csproj"> + <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project> + <Name>Tango.Integration</Name> + </ProjectReference> + <ProjectReference Include="..\..\Tango.Logging\Tango.Logging.csproj"> + <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project> + <Name>Tango.Logging</Name> + </ProjectReference> + <ProjectReference Include="..\Tango.MachineStudio.Common\Tango.MachineStudio.Common.csproj"> + <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project> + <Name>Tango.MachineStudio.Common</Name> + </ProjectReference> + </ItemGroup> + <PropertyGroup> + <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> + <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> + </PropertyGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> + <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" /> + <ProjectExtensions> + <VisualStudio> + <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}"> + <WebProjectProperties> + <UseIIS>True</UseIIS> + <AutoAssignPort>True</AutoAssignPort> + <DevelopmentServerPort>65206</DevelopmentServerPort> + <DevelopmentServerVPath>/</DevelopmentServerVPath> + <IISUrl>http://localhost:53044/</IISUrl> + <NTLMAuthentication>False</NTLMAuthentication> + <UseCustomServer>False</UseCustomServer> + <CustomServerUrl> + </CustomServerUrl> + <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile> + </WebProjectProperties> + </FlavorProperties> + </VisualStudio> + </ProjectExtensions> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project>
\ 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 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 --> + +<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> + <!-- + In the example below, the "SetAttributes" transform will change the value of + "connectionString" to use "ReleaseSQLServer" only when the "Match" locator + finds an attribute "name" that has a value of "MyDB". + + <connectionStrings> + <add name="MyDB" + connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" + xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> + </connectionStrings> + --> + <system.web> + <!-- + In the example below, the "Replace" transform will replace the entire + <customErrors> section of your web.config file. + Note that because there is only one customErrors section under the + <system.web> node, there is no need to use the "xdt:Locator" attribute. + + <customErrors defaultRedirect="GenericError.htm" + mode="RemoteOnly" xdt:Transform="Replace"> + <error statusCode="500" redirect="InternalError.htm"/> + </customErrors> + --> + </system.web> +</configuration>
\ 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 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 --> + +<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> + <!-- + In the example below, the "SetAttributes" transform will change the value of + "connectionString" to use "ReleaseSQLServer" only when the "Match" locator + finds an attribute "name" that has a value of "MyDB". + + <connectionStrings> + <add name="MyDB" + connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" + xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> + </connectionStrings> + --> + <system.web> + <compilation xdt:Transform="RemoveAttributes(debug)" /> + <!-- + In the example below, the "Replace" transform will replace the entire + <customErrors> section of your web.config file. + Note that because there is only one customErrors section under the + <system.web> node, there is no need to use the "xdt:Locator" attribute. + + <customErrors defaultRedirect="GenericError.htm" + mode="RemoteOnly" xdt:Transform="Replace"> + <error statusCode="500" redirect="InternalError.htm"/> + </customErrors> + --> + </system.web> +</configuration>
\ 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<configuration> + <configSections> + <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> + <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> + </configSections> + <appSettings> + <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> + <add key="FtpHost" value="localhost" /> + <add key="UserName" value="Tango" /> + <add key="Password" value="Aa123456" /> + </appSettings> + <system.web> + <compilation debug="true" targetFramework="4.6" /> + <httpRuntime targetFramework="4.6" /> + </system.web> + <system.serviceModel> + <behaviors> + <serviceBehaviors> + <behavior> + <!-- To avoid disclosing metadata information, set the values below to false before deployment --> + <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> + <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> + <serviceDebug includeExceptionDetailInFaults="false" /> + </behavior> + </serviceBehaviors> + </behaviors> + <protocolMapping> + <add binding="basicHttpsBinding" scheme="https" /> + </protocolMapping> + <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> + </system.serviceModel> + <system.webServer> + <modules runAllManagedModulesForAllRequests="false" /> + <!-- + To browse web app root directory during debugging, set the value below to true. + Set to false before deployment to avoid disclosing web app folder information. + --> + <directoryBrowse enabled="true" /> + </system.webServer> + <entityFramework> + <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> + <providers> + <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> + </providers> + </entityFramework> + <runtime> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" /> + </dependentAssembly> + </assemblyBinding> + </runtime> +</configuration>
\ 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="EntityFramework" version="6.0.0" targetFramework="net46" /> +</packages>
\ No newline at end of file |
