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.Publish; using Tango.MachineStudio.Common.Web; using Tango.Settings; using Tango.SharedUI; using Tango.Transport.Web; using Tango.Web; namespace Tango.MachineStudio.Publisher.UI { public class MainWindowVM : ViewModel { private MachineStudioPublisher _publisher; private PublishOptions _options; public PublishOptions Options { get { return _options; } set { _options = value; RaisePropertyChangedAuto(); } } private String _localVersion; public String LocalVersion { get { return _localVersion; } set { _localVersion = value; RaisePropertyChangedAuto(); } } private String _remoteVersion; public String RemoteVersion { get { return _remoteVersion; } set { _remoteVersion = value; RaisePropertyChangedAuto(); } } private PublishProgressEventArgs _publishArgs; public PublishProgressEventArgs PublishArgs { get { return _publishArgs; } set { _publishArgs = value; RaisePropertyChangedAuto(); } } public RelayCommand PublishCommand { get; set; } public MainWindowVM() { PublishCommand = new RelayCommand(Publish, () => Options.Email != null && Options.Password != null && Options.Comments != null && LocalVersion != null && RemoteVersion != null && IsFree); Options = SettingsManager.Default.GetOrCreate().Options; _publisher = new MachineStudioPublisher(Options); _publisher.PublishProgress += _publisher_PublishProgress; Options.BasicInfoChanged += (_, __) => { InvalidateRelayCommands(); }; Options.EnvironmentChanged += (_, __) => UpdateVersions(); Options.BuidConfigChanged += (_, __) => UpdateVersions(); UpdateVersions(); } private void _publisher_PublishProgress(object sender, PublishProgressEventArgs e) { PublishArgs = e; } private async void UpdateVersions() { IsFree = false; LocalVersion = _publisher.GetLocalVersion(); RemoteVersion = await _publisher.GetRemoteVersion(); InvalidateRelayCommands(); IsFree = true; } private async void Publish() { SettingsManager.Default.Save(); if (!ShowQuestion("Did you remember to synchronize production database ?")) { return; } try { IsFree = false; await _publisher.Publish(); ShowInfo("Version published successfully."); UpdateVersions(); } catch (Exception ex) { ShowError(ex.FlattenMessage()); } finally { IsFree = true; } } 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; } } }