aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-02-22 13:23:49 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-02-22 13:23:49 +0200
commit042b4d3e7b0af729792ca20e086756c36d2f5768 (patch)
tree90fe664895ae143c25f1afb15b8ccbbcad94837e /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs
parentf991f37a95a854e9b2aada52982d83ddaa0ca1b0 (diff)
downloadTango-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.cs201
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();
+ }
+ }
+}