aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Publisher.UI/MainWindowVM.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Publisher.UI/MainWindowVM.cs')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Publisher.UI/MainWindowVM.cs256
1 files changed, 256 insertions, 0 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Publisher.UI/MainWindowVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.Publisher.UI/MainWindowVM.cs
new file mode 100644
index 000000000..6c7e1d005
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Publisher.UI/MainWindowVM.cs
@@ -0,0 +1,256 @@
+using FluentFTP;
+using Ionic.Zip;
+using Microsoft.Win32;
+using Microsoft.WindowsAzure.Storage.Blob;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Data;
+using Tango.BL;
+using Tango.BL.Entities;
+using Tango.Core;
+using Tango.Core.Commands;
+using Tango.Core.Cryptography;
+using Tango.Core.Helpers;
+using Tango.Core.IO;
+using Tango.PPC.Common;
+using Tango.PPC.Common.Publish;
+using Tango.PPC.Common.Web;
+using Tango.Settings;
+using Tango.SharedUI;
+using Tango.SQLExaminer;
+using Tango.Transport.Web;
+using Tango.Web;
+
+namespace Tango.PPC.Publisher.UI
+{
+ public class MainWindowVM : ViewModel
+ {
+ private IPPCWebService _client;
+ private PPCPublisher _publisher;
+
+ private PublishOptions _options;
+ public PublishOptions Options
+ {
+ get { return _options; }
+ set { _options = value; RaisePropertyChangedAuto(); }
+ }
+
+ private List<MachineVersion> _machineVersions;
+ public List<MachineVersion> MachineVersions
+ {
+ get { return _machineVersions; }
+ set { _machineVersions = value; RaisePropertyChangedAuto(); }
+ }
+
+ private MachineVersion _selectedMachineVersion;
+ public MachineVersion SelectedMachineVersion
+ {
+ get { return _selectedMachineVersion; }
+ set { _selectedMachineVersion = value; RaisePropertyChangedAuto(); OnSelectedMachineVersionChanged(); }
+ }
+
+ 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 ICollectionView _provisionSequenceItemsView;
+ public ICollectionView ProvisionSequenceItemsView
+ {
+ get { return _provisionSequenceItemsView; }
+ set { _provisionSequenceItemsView = value; RaisePropertyChangedAuto(); }
+ }
+
+ private ICollectionView _updateSequenceItemsView;
+ public ICollectionView UpdateSequenceItemsView
+ {
+ get { return _updateSequenceItemsView; }
+ set { _updateSequenceItemsView = value; RaisePropertyChangedAuto(); }
+ }
+
+ private PublishProgressEventArgs _publishArgs;
+ public PublishProgressEventArgs PublishArgs
+ {
+ get { return _publishArgs; }
+ set { _publishArgs = value; RaisePropertyChangedAuto(); }
+ }
+
+ public RelayCommand PublishCommand { get; set; }
+
+ public RelayCommand CreateTupCommand { get; set; }
+
+ public RelayCommand FirmwareUpgradePackageBrowseCommand { get; set; }
+
+ public MainWindowVM()
+ {
+ _client = new PPCWebService();
+
+ var settings = SettingsManager.Default.GetOrCreate<PublisherSettings>();
+ Options = settings.Options;
+
+ _publisher = new PPCPublisher(Options);
+ _publisher.PublishProgress += _publisher_PublishProgress;
+
+ ProvisionSequenceItemsView = CollectionViewSource.GetDefaultView(Options.Synchronization.ProvisionSequenceItems);
+ ProvisionSequenceItemsView.SortDescriptions.Add(new SortDescription(nameof(SequenceItem.Index), ListSortDirection.Ascending));
+
+ UpdateSequenceItemsView = CollectionViewSource.GetDefaultView(Options.Synchronization.UpdateSequenceItems);
+ UpdateSequenceItemsView.SortDescriptions.Add(new SortDescription(nameof(SequenceItem.Index), ListSortDirection.Ascending));
+
+ SettingsManager.Default.GetOrCreate<CoreSettings>();
+ SettingsManager.Default.Save();
+
+ PublishCommand = new RelayCommand(Publish, () => Options.Email != null && Options.Password != null && Options.Comments != null && LocalVersion != null && RemoteVersion != null && IsFree);
+ CreateTupCommand = new RelayCommand(PublishTupFile);
+ FirmwareUpgradePackageBrowseCommand = new RelayCommand(BrowseFirmwareUpgradePackage);
+
+ Options.BasicInfoChanged += (_, __) => InvalidateRelayCommands();
+ Options.EnvironmentChanged += async (_, __) => await OnEnvironmentChanged();
+ Options.BuidConfigChanged += async (_, __) => await UpdateVersions();
+
+ Init();
+ }
+
+ private void _publisher_PublishProgress(object sender, PublishProgressEventArgs e)
+ {
+ PublishArgs = e;
+ }
+
+ private async void Init()
+ {
+ await UpdateAvailableMachineVersions();
+ }
+
+ private async Task OnEnvironmentChanged()
+ {
+ IsFree = false;
+ _client.Environment = Options.Environment;
+ await UpdateAvailableMachineVersions();
+ await UpdateVersions();
+ IsFree = true;
+ }
+
+ private async Task UpdateAvailableMachineVersions()
+ {
+ IsFree = false;
+ _machineVersions = (await _client.GetMachineVersions()).MachineVersions;
+ _selectedMachineVersion = MachineVersions.OrderBy(x => x.Version).LastOrDefault();
+ RaisePropertyChanged(nameof(MachineVersions));
+ RaisePropertyChanged(nameof(SelectedMachineVersion));
+ await OnSelectedMachineVersionChanged();
+ IsFree = true;
+ }
+
+ private async Task UpdateVersions()
+ {
+ IsFree = false;
+ LocalVersion = _publisher.GetLocalVersion();
+ if (SelectedMachineVersion != null)
+ {
+ RemoteVersion = await _publisher.GetRemoteVersion(SelectedMachineVersion.Guid);
+ }
+ InvalidateRelayCommands();
+ IsFree = true;
+ }
+
+ private async Task OnSelectedMachineVersionChanged()
+ {
+ if (SelectedMachineVersion != null) Options.MachineVersionGuid = SelectedMachineVersion.Guid;
+ await UpdateVersions();
+ }
+
+ private async void Publish()
+ {
+ try
+ {
+ IsFree = false;
+ SettingsManager.Default.Save();
+ await _publisher.Publish();
+ ShowInfo("Version published successfully.");
+ }
+ catch (Exception ex)
+ {
+ ShowError(ex.FlattenMessage());
+ }
+ finally
+ {
+ IsFree = true;
+ }
+ }
+
+ private async void PublishTupFile()
+ {
+ SaveFileDialog dlg = new SaveFileDialog();
+ dlg.Filter = "Tango Update Package|*.tup";
+ dlg.DefaultExt = ".tup";
+ if (dlg.ShowDialog().Value)
+ {
+ try
+ {
+ IsFree = false;
+ await _publisher.CreateTupPackage(dlg.FileName);
+ ShowInfo("Package file created successfully!");
+ }
+ catch (Exception ex)
+ {
+ ShowError(ex.Message);
+ }
+ finally
+ {
+ IsFree = true;
+ }
+ }
+ }
+
+ private void BrowseFirmwareUpgradePackage()
+ {
+ OpenFileDialog dlg = new OpenFileDialog();
+ dlg.Title = "Select Tango Firmware Package";
+ dlg.Filter = "Tango Firmware Package Files|*.tfp";
+ if (dlg.ShowDialog().Value)
+ {
+ Options.TfpPath = dlg.FileName;
+ }
+ }
+
+ private void ShowError(String error)
+ {
+ MessageBox.Show(error, "PPC Publisher", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+
+ private void ShowInfo(String message)
+ {
+ MessageBox.Show(message, "PPC Publisher", MessageBoxButton.OK, MessageBoxImage.Information);
+ }
+
+ private bool ShowQuestion(String message)
+ {
+ return MessageBox.Show(message, "PPC Publisher", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes;
+ }
+
+ protected override void RaisePropertyChangedAuto([CallerMemberName] string caller = null)
+ {
+ base.RaisePropertyChangedAuto(caller);
+ InvalidateRelayCommands();
+ }
+ }
+}