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