aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/RemoteJob/LiquidOutputModel.cs
blob: 113d11ddcf01db21d16968d7491ead00b5b76590 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.BL.Entities;
using Tango.Core;

namespace Tango.PPC.Common.RemoteJob
{
    public class LiquidOutputModel : ExtendedObject
    {
        private LiquidType _liquidType;
        public LiquidType LiquidType
        {
            get { return _liquidType; }
            set { _liquidType = value; RaisePropertyChangedAuto(); }
        }

        private double _volume;
        public double Volume
        {
            get { return _volume; }
            set { _volume = value; RaisePropertyChangedAuto(); }
        }
    }
}
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
using FluentFTP;
using Ionic.Zip;
using System;
using System.Collections.Generic;
using System.Diagnostics;
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.Core.Helpers;
using Tango.Core.IO;
using Tango.MachineStudio.Common;
using Tango.MachineStudio.Common.Update;
using Tango.Settings;
using Tango.SharedUI;

namespace Tango.MachineStudio.Publisher
{
    public class MainWindowVM : ViewModel
    {
        private BasicHashGenerator _hashGenerator;
        private String _appPath = AppDomain.CurrentDomain.BaseDirectory + "..\\Release";
        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 bool _forcesUpdate;

        public bool ForcedUpdate
        {
            get { return _forcesUpdate; }
            set { _forcesUpdate = 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;

            _hashGenerator = new BasicHashGenerator();

            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();

            var settings = SettingsManager.Default.GetOrCreate<MachineStudioSettings>();

            Email = settings.LastLoginEmail;

            var cryptographer = new Rfc2898Cryptographer();
            Password = cryptographer.Decrypt(settings.LastLoginPassword);
        }

        private void UpdateVersions()
        {
            CurrentVersion = FileVersionInfo.GetVersionInfo(_appPath + "\\Tango.MachineStudio.UI.exe").ProductVersion;
            LatestVersion = _client.GetLatestVersion();
        }

        private void Publish()
        {
            if (!ShowQuestion("Did you remember to synchronize production database ?"))
            {
                return;
            }

            MaxProgress = 100;
            Progress = 0;

            Task.Factory.StartNew(() =>
            {
                IsUpdating = true;
                String tempFile = String.Empty;

                try
                {
                    var response = _client.UploadVersion(new UploadVersionRequest()
                    {
                        Email = Email,
                        Password = _hashGenerator.Encrypt(Password),
                        Version = CurrentVersion.ToString(),
                        Comments = Comments,
                        ForcedUpdate = ForcedUpdate,
                    });

                    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();
                        }
                    }

                    _client.NotifyUploadCompleted(new UploadCompletedRequest()
                    {
                        Token = response.Token,
                    });

                    Progress = 0;
                    UpdateVersions();
                    ShowInfo("Version published successfully!");
                }
                catch (Exception ex)
                {
                    ShowError(ex.Message.ToString());
                }
                finally
                {
                    IsUpdating = false;
                    PathHelper.TryDeleteFile(tempFile);
                }
            });
        }

        private void ShowError(String error)
        {
            MessageBox.Show(error, "Machine Studio Publisher", MessageBoxButton.OK, MessageBoxImage.Error);
        }

        private void ShowInfo(String message)
        {
            MessageBox.Show(message, "Machine Studio Publisher", MessageBoxButton.OK, MessageBoxImage.Information);
        }

        private bool ShowQuestion(String message)
        {
            return MessageBox.Show(message, "Machine Studio Publisher", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes;
        }

        protected override void RaisePropertyChangedAuto([CallerMemberName] string caller = null)
        {
            base.RaisePropertyChangedAuto(caller);
            InvalidateRelayCommands();
        }
    }
}