diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-02 16:37:25 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-02 16:37:25 +0200 |
| commit | a2d959a7777bf2387d0f50dbc1ecf69f53e2253d (patch) | |
| tree | 8c6367189294d96ae074f386cdb4139dfeacb84a /Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs | |
| parent | ae614a63f593122cd28c644625db179f298dd640 (diff) | |
| download | Tango-a2d959a7777bf2387d0f50dbc1ecf69f53e2253d.tar.gz Tango-a2d959a7777bf2387d0f50dbc1ecf69f53e2253d.zip | |
Implemented machine studio storage module. firmware upgrade version/validate/activate.
Implemented firmware package generator utility.
Diffstat (limited to 'Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs')
| -rw-r--r-- | Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs b/Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs new file mode 100644 index 000000000..718aa3aac --- /dev/null +++ b/Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs @@ -0,0 +1,103 @@ +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core.Commands; +using Tango.PMR.IO; +using Tango.SharedUI; +using Google.Protobuf; +using Ionic.Zip; +using System.Windows; + +namespace Tango.FirmwarePackageGenerator +{ + public class MainWindowVM : ViewModel + { + private ObservableCollection<VersionFileModel> _versionFiles; + public ObservableCollection<VersionFileModel> VersionFiles + { + get { return _versionFiles; } + set { _versionFiles = value; RaisePropertyChangedAuto(); } + } + + public RelayCommand GenerateCommand { get; set; } + + public MainWindowVM() + { + VersionFiles = new ObservableCollection<VersionFileModel>(); + GenerateCommand = new RelayCommand(Generate); + } + + private void Generate() + { + SaveFileDialog dlg = new SaveFileDialog(); + dlg.Title = "Save Firmware Package File"; + dlg.Filter = "Tango Firmware Package|*.tfp"; + dlg.DefaultExt = ".tfp"; + dlg.FileName = "firmware_package.tfp"; + if (dlg.ShowDialog().Value) + { + try + { + VersionPackageDescriptor descriptor = new VersionPackageDescriptor(); + foreach (var item in VersionFiles) + { + descriptor.FileDescriptors.Add(new VersionFileDescriptor() + { + Destination = item.Destination, + FileName = item.FileName, + Version = item.Version, + }); + } + + using (MemoryStream ms = new MemoryStream()) + { + descriptor.WriteTo(ms); + + using (var zip = new ZipFile()) + { + zip.AddEntry("package.cfg", ms.ToArray()); + foreach (var item in VersionFiles) + { + zip.AddFile(item.Path, "/"); + } + + zip.Save(dlg.FileName); + } + } + + //Validate + using (ZipFile zip = ZipFile.Read(dlg.FileName)) + { + var reader = zip.Entries.SingleOrDefault(x => x.FileName == "package.cfg").OpenReader(); + var descriptor2 = VersionPackageDescriptor.Parser.ParseFrom(reader); + if (descriptor.ToString() != descriptor2.ToString()) + { + throw new IOException("The generated package does not match the source package."); + } + } + + ShowInfo("Package generated successfully."); + } + catch (Exception ex) + { + ShowError($"Error while trying to generate the package.\n{ex.Message}"); + } + } + } + + 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); + } + } +} |
