diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-02-22 13:23:49 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-02-22 13:23:49 +0200 |
| commit | 042b4d3e7b0af729792ca20e086756c36d2f5768 (patch) | |
| tree | 90fe664895ae143c25f1afb15b8ccbbcad94837e /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs | |
| parent | f991f37a95a854e9b2aada52982d83ddaa0ca1b0 (diff) | |
| download | Tango-042b4d3e7b0af729792ca20e086756c36d2f5768.tar.gz Tango-042b4d3e7b0af729792ca20e086756c36d2f5768.zip | |
Working on machine studio update center !
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs')
| -rw-r--r-- | Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs new file mode 100644 index 000000000..2ceb36994 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs @@ -0,0 +1,201 @@ +using FluentFTP; +using Ionic.Zip; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.ServiceModel; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using Tango.Core.Commands; +using Tango.Core.Cryptography; +using Tango.MachineStudio.Common.Update; +using Tango.Settings; +using Tango.SharedUI; + +namespace Tango.MachineStudio.Publisher +{ + public class MainWindowVM : ViewModel + { + private String _appPath = AppDomain.CurrentDomain.BaseDirectory; + private ChannelFactory<IMachineStudioUpdateService> _service; + private IMachineStudioUpdateService _client; + + private String _email; + + public String Email + { + get { return _email; } + set { _email = value; RaisePropertyChangedAuto(); } + } + + private String _password; + + public String Password + { + get { return _password; } + set { _password = value; RaisePropertyChangedAuto(); } + } + + private String _comments; + + public String Comments + { + get { return _comments; } + set { _comments = value; RaisePropertyChangedAuto(); } + } + + private String _currentVersion; + + public String CurrentVersion + { + get { return _currentVersion; } + set { _currentVersion = value; RaisePropertyChangedAuto(); } + } + + private String _latestVersion; + + public String LatestVersion + { + get { return _latestVersion; } + set { _latestVersion = value; RaisePropertyChangedAuto(); } + } + + private double _maxProgress; + + public double MaxProgress + { + get { return _maxProgress; } + set { _maxProgress = value; RaisePropertyChangedAuto(); } + } + + private double _progress; + + public double Progress + { + get { return _progress; } + set { _progress = value; RaisePropertyChangedAuto(); } + } + + private bool _isUpdating; + + public bool IsUpdating + { + get { return _isUpdating; } + set { _isUpdating = value; RaisePropertyChangedAuto(); } + } + + public RelayCommand PublishCommand { get; set; } + + public MainWindowVM() + { + MaxProgress = 100; + + PublishCommand = new RelayCommand(Publish, () => Email != null && Password != null && Comments != null && CurrentVersion != null && LatestVersion != null && !IsUpdating && Version.Parse(CurrentVersion) > Version.Parse(LatestVersion)); + + _service = UpdateServiceHelper.GetUpdateServiceChannel(); + _client = _service.CreateChannel(); + + UpdateVersions(); + + Email = SettingsManager.Default.MachineStudio.LastLoginEmail; + + var cryptographer = new Rfc2898Cryptographer(); + Password = cryptographer.Decrypt(SettingsManager.Default.MachineStudio.LastLoginPassword); + } + + private void UpdateVersions() + { + CurrentVersion = typeof(MainWindowVM).Assembly.GetName().Version.ToString(); + LatestVersion = _client.GetLatestVersion(); + } + + private void Publish() + { + MaxProgress = 100; + Progress = 0; + + Task.Factory.StartNew(() => + { + IsUpdating = true; + + try + { + var response = _client.UploadVersion(new UploadVersionRequest() + { + Email = Email, + Password = Password, + Version = CurrentVersion.ToString(), + Comments = Comments, + }); + + String tempFile = Path.Combine(Path.GetTempPath(), response.FileName); + + using (ZipFile zip = new ZipFile()) + { + zip.AddDirectory(Path.Combine(_appPath, "x86"), "/x86"); + zip.AddDirectory(Path.Combine(_appPath, "x64"), "/x64"); + + foreach (var file in Directory.GetFiles(_appPath, "*.*", SearchOption.TopDirectoryOnly)) + { + zip.AddFile(file, "/"); + } + + zip.SaveProgress += (x, e) => + { + MaxProgress = e.TotalBytesToTransfer; + Progress = e.BytesTransferred; + }; + + zip.Save(tempFile); + } + + Progress = 0; + MaxProgress = 100; + + FileStreamWrapper fs = null; + + using (fs = new FileStreamWrapper(tempFile, FileMode.Open, (current) => + { + InvokeUINow(() => + { + Thread.Sleep(10); + Progress = ((double)current / (double)fs.Length) * 100d; + }); + })) + { + using (FtpClient ftp = new FtpClient(response.FtpHost, response.UserName, response.Password)) + { + ftp.ConnectAsync().Wait(); + ftp.UploadAsync(fs, response.FilePath, FtpExists.Overwrite, true).Wait(); + } + } + + UpdateVersions(); + } + catch (Exception ex) + { + ShowError(ex.Message.ToString()); + } + finally + { + IsUpdating = false; + } + }); + } + + private void ShowError(String error) + { + MessageBox.Show(error, "Machine Studio Publisher", MessageBoxButton.OK, MessageBoxImage.Error); + } + + protected override void RaisePropertyChangedAuto([CallerMemberName] string caller = null) + { + base.RaisePropertyChangedAuto(caller); + InvalidateRelayCommands(); + } + } +} |
