diff options
| author | Mirta <mirta@twine-s.com> | 2020-12-30 14:27:05 +0200 |
|---|---|---|
| committer | Mirta <mirta@twine-s.com> | 2020-12-30 14:27:05 +0200 |
| commit | 1344a54c37f7cbba7a294674b4b733d72ee257ea (patch) | |
| tree | 4b24c6fa78d7648f4bb7cefafa464bb0b063fec4 /Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages | |
| parent | 124ad4150f80c6846fdee41dbbda9848c105f6e5 (diff) | |
| parent | 281610ac56799f6870c587a942495d91cd55b227 (diff) | |
| download | Tango-1344a54c.tar.gz Tango-1344a54c.zip | |
Hope it is fine
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages')
9 files changed, 0 insertions, 512 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/DefaultPackageRunner.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/DefaultPackageRunner.cs deleted file mode 100644 index 68b31da4e..000000000 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/DefaultPackageRunner.cs +++ /dev/null @@ -1,362 +0,0 @@ -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Tango.Core; -using Tango.Core.DI; -using Tango.Core.Helpers; -using Tango.PPC.Common.Application; -using Tango.PPC.Common.Connection; -using Tango.PPC.Common.Notifications; -using Tango.PPC.Shared.Updates; - -namespace Tango.PPC.Common.UpdatePackages -{ - public class DefaultPackageRunner : ExtendedObject, IPackageRunner - { - private JsonSerializerSettings _jsonSettings; - private String _configFile; - private PackagesFile _packagesFile; - - public event EventHandler<PackageStateChangedEventArgs> PackageStateChanged; - public event EventHandler<PackageProgressEventArgs> PackageProgress; - - public DefaultPackageRunner() - { - _jsonSettings = new JsonSerializerSettings - { - Formatting = Formatting.Indented, - Error = (sender, args) => - { - args.ErrorContext.Handled = true; - LogManager.Log(args.ErrorContext.Error.Message); - } - }; - - _jsonSettings.Converters.Add(new StringEnumConverter(false)); - - _configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Twine", "Tango", "Packages", "packages.json"); - } - - public Task<PackagesFile> GetPackagesFile() - { - return Task.Factory.StartNew<PackagesFile>(() => - { - if (_packagesFile != null) - { - return _packagesFile; - } - else - { - Directory.CreateDirectory(Path.GetDirectoryName(_configFile)); - - _packagesFile = new PackagesFile(); - - try - { - if (File.Exists(_configFile)) - { - LogManager.Log("Loading packages config from " + _configFile + "..."); - _packagesFile = JsonConvert.DeserializeObject<PackagesFile>(File.ReadAllText(_configFile), _jsonSettings); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading packages file."); - } - - return _packagesFile; - } - }); - } - - private void SavePackagesConfig() - { - Directory.CreateDirectory(Path.GetDirectoryName(_configFile)); - - String json = String.Empty; - - if (_packagesFile != null) - { - json = JsonConvert.SerializeObject(_packagesFile, _jsonSettings); - } - else - { - json = JsonConvert.SerializeObject(new PackagesFile(), _jsonSettings); - } - - File.WriteAllText(_configFile, json); - } - - public Task<PackageRunnerResult> Run(PackageType type, Version deltaVersion, String packagesFolder) - { - return Task.Factory.StartNew<PackageRunnerResult>(() => - { - PackageRunnerResult result = new PackageRunnerResult(); - - PackageContext context = new PackageContext(); - context.ApplicationManager = TangoIOC.Default.GetInstance<IPPCApplicationManager>(); - context.MachineProvider = TangoIOC.Default.GetInstance<IMachineProvider>(); - context.NotificationProvider = TangoIOC.Default.GetInstance<INotificationProvider>(); - context.InstalledVersion = context.ApplicationManager.Version; - context.DeltaVersion = deltaVersion; - - LogManager.Log($"Running {type}-update packages..."); - - //Get installed packages. - _packagesFile = GetPackagesFile().Result; - - LogManager.Log($"Installed packages file:\n{_packagesFile}"); - - if (Debugger.IsAttached) - { - LogManager.Log("Debugger attached detected. switching packages folder to main application path..."); - - //TO DEBUG PACKAGES -- - // - //On DEBUG build the packages assemblies are copied to the main application output folder using post-build events. - //Then, if a debugger is attached, we change the packages folder to the main output folder so they can be debugged easily. - packagesFolder = AssemblyHelper.GetCurrentAssemblyFolder(); - } - - LogManager.Log($"Scanning for packages on '{packagesFolder}'..."); - - //Get all packages in folder. - foreach (var packageFile in Directory.GetFiles(packagesFolder, "*.dll")) - { - LogManager.Log($"Loading assembly '{Path.GetFileName(packageFile)}'..."); - - Assembly asm; - - //Load assembly and investigate for types based on package type. - try - { - asm = Assembly.LoadFile(packageFile); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading assembly!"); - continue; - } - - try - { - foreach (var packageType in asm.GetTypes().Where( - x => typeof(IPPCPackage).IsAssignableFrom(x) && - x.GetCustomAttribute<PPCPackageAttribute>() != null && - x.GetCustomAttribute<PPCPackageAttribute>().Type == type)) - { - LogManager.Log($"Checking package '{packageType.FullName}'..."); - - try - { - //Getting installed package from file. - var installedPackage = _packagesFile.PackageInstallations.SingleOrDefault(x => x.PackageName == packageType.FullName); - - //Check if requires installation. - if (installedPackage == null || installedPackage.State != PackageInstallationState.Installed) - { - if (installedPackage == null) - { - LogManager.Log("Package was never installed."); - - installedPackage = new PackageInstallation(); - installedPackage.State = PackageInstallationState.NotInstalled; - installedPackage.PackageName = packageType.FullName; - installedPackage.Type = type; - _packagesFile.PackageInstallations.Add(installedPackage); - } - else - { - LogManager.Log($"Package installation state is '{installedPackage.State}' due to {installedPackage.FailedReason}"); - } - - LogManager.Log("Installing package..."); - - //Install package... - var att = packageType.GetCustomAttribute<PPCPackageAttribute>(); - - var packageInstance = Activator.CreateInstance(packageType) as IPPCPackage; - - if (packageInstance != null) - { - try - { - OnPackageRuns(att.Name, installedPackage.State, installedPackage.Type); - installedPackage.InstallationDate = DateTime.Now; - context.ProgressAction = (message, isIntermediate, progress, total) => - { - PackageProgress?.Invoke(this, new PackageProgressEventArgs() - { - PackageName = att.Name, - Message = message, - IsIntermediate = isIntermediate, - Progress = progress, - Total = total - }); - }; - - PackageProgress?.Invoke(this, new PackageProgressEventArgs() - { - PackageName = type == PackageType.Pre ? "Preparing" : "Finalizing", - Message = att.Name, - IsIntermediate = true, - Progress = 0, - Total = 100 - }); - - packageInstance.Run(context).GetAwaiter().GetResult(); - installedPackage.State = PackageInstallationState.Installed; - installedPackage.FailedReason = null; - OnPackageRuns(att.Name, installedPackage.State, installedPackage.Type); - LogManager.Log("Package installed successfully."); - - if (att.RequiresRestart) - { - result.RestartRequired = true; - } - - Thread.Sleep(2000); - } - catch (Exception ex) - { - LogManager.Log(ex, "Package installation failed."); - installedPackage.State = PackageInstallationState.Failed; - installedPackage.FailedReason = ex.FlattenMessage(); - OnPackageRuns(att.Name, installedPackage.State, installedPackage.Type); - continue; - } - } - } - else - { - LogManager.Log("Package is already installed."); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error in handling the package!"); - continue; - } - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error investigating assembly!"); - continue; - } - } - - //Save package file. - LogManager.Log("Running packages has completed. Saving packages config file."); - - try - { - SavePackagesConfig(); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error saving packages file!"); - } - - return result; - }); - } - - public Task<bool> IsPackageInstallationRequired(PackageType type, String packagesFolder) - { - return Task.Factory.StartNew<bool>(() => - { - LogManager.Log("Checking if any package installation is required..."); - - _packagesFile = GetPackagesFile().Result; - - //Get all packages in folder. - foreach (var packageFile in Directory.GetFiles(packagesFolder, "*.dll")) - { - LogManager.Log($"Loading assembly '{Path.GetFileName(packageFile)}'..."); - - Assembly asm; - - //Load assembly and investigate for types based on package type. - try - { - asm = Assembly.LoadFile(packageFile); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading assembly!"); - continue; - } - - try - { - foreach (var packageType in asm.GetTypes().Where( - x => typeof(IPPCPackage).IsAssignableFrom(x) && - x.GetCustomAttribute<PPCPackageAttribute>() != null && - x.GetCustomAttribute<PPCPackageAttribute>().Type == type)) - { - LogManager.Log($"Checking package '{packageType.FullName}'..."); - - try - { - //Getting installed package from file. - var installedPackage = _packagesFile.PackageInstallations.SingleOrDefault(x => x.PackageName == packageType.FullName); - - //Check if requires installation. - if (installedPackage == null || installedPackage.State != PackageInstallationState.Installed) - { - if (installedPackage == null) - { - LogManager.Log("Package was never installed."); - return true; - } - else - { - LogManager.Log($"Package installation state is '{installedPackage.State}' due to {installedPackage.FailedReason}"); - return true; - } - } - else - { - LogManager.Log("Package is already installed."); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error in handling the package!"); - continue; - } - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error investigating assembly!"); - continue; - } - } - - LogManager.Log("No packages to install."); - - return false; - }); - } - - protected virtual void OnPackageRuns(String packageName, PackageInstallationState state, PackageType type) - { - PackageStateChanged?.Invoke(this, new PackageStateChangedEventArgs() - { - PackageName = packageName, - State = state, - PackageType = type, - }); - } - } -} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/IPPCPackage.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/IPPCPackage.cs deleted file mode 100644 index d9dc70135..000000000 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/IPPCPackage.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.PPC.Common.UpdatePackages -{ - public interface IPPCPackage - { - Task Run(PackageContext context); - } -} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/IPackageRunner.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/IPackageRunner.cs deleted file mode 100644 index cdffd1ddc..000000000 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/IPackageRunner.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.PPC.Shared.Updates; - -namespace Tango.PPC.Common.UpdatePackages -{ - public interface IPackageRunner - { - event EventHandler<PackageStateChangedEventArgs> PackageStateChanged; - event EventHandler<PackageProgressEventArgs> PackageProgress; - Task<PackagesFile> GetPackagesFile(); - Task<PackageRunnerResult> Run(PackageType type, Version deltaVersion, String packagesFolder); - Task<bool> IsPackageInstallationRequired(PackageType type, String packagesFolder); - } -} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PPCPackageAttribute.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PPCPackageAttribute.cs deleted file mode 100644 index 6067b0c18..000000000 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PPCPackageAttribute.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.PPC.Shared.Updates; - -namespace Tango.PPC.Common.UpdatePackages -{ - [AttributeUsage(AttributeTargets.Class)] - public class PPCPackageAttribute : Attribute - { - public String Name { get; set; } - - public PackageType Type { get; set; } - - public bool RequiresRestart { get; set; } - - public PPCPackageAttribute(PackageType type, String name, bool requiresRestart) - { - Type = type; - Name = name; - RequiresRestart = requiresRestart; - } - } -} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageContext.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageContext.cs deleted file mode 100644 index 7c8736112..000000000 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageContext.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.PPC.Common.Application; -using Tango.PPC.Common.Connection; -using Tango.PPC.Common.Notifications; - -namespace Tango.PPC.Common.UpdatePackages -{ - public class PackageContext - { - public delegate void PackageProgressDelegate(String message, bool isIntermediate = true, double progress = 0, double maximum = 100); - - public IPPCApplicationManager ApplicationManager { get; set; } - public IMachineProvider MachineProvider { get; set; } - public INotificationProvider NotificationProvider { get; set; } - public Version InstalledVersion { get; set; } - public Version DeltaVersion { get; set; } - internal PackageProgressDelegate ProgressAction { get; set; } - - public void ReportProgress(String message, bool isIntermediate = true, double progress = 0, double maximum = 100) - { - ProgressAction?.Invoke(message, isIntermediate, progress, maximum); - } - } -} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageProgressEventArgs.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageProgressEventArgs.cs deleted file mode 100644 index ebf0b23a6..000000000 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageProgressEventArgs.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.PPC.Common.UpdatePackages -{ - public class PackageProgressEventArgs : EventArgs - { - public String PackageName { get; set; } - public String Message { get; set; } - public bool IsIntermediate { get; set; } - public double Progress { get; set; } - public double Total { get; set; } - } -} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageRunnerResult.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageRunnerResult.cs deleted file mode 100644 index 55f3a490a..000000000 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageRunnerResult.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.PPC.Common.UpdatePackages -{ - public class PackageRunnerResult - { - public bool RestartRequired { get; set; } - } -} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageStateChangedEventArgs.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageStateChangedEventArgs.cs deleted file mode 100644 index cadba4c72..000000000 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackageStateChangedEventArgs.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.PPC.Shared.Updates; - -namespace Tango.PPC.Common.UpdatePackages -{ - public class PackageStateChangedEventArgs : EventArgs - { - public PackageInstallationState State { get; set; } - public String PackageName { get; set; } - public PackageType PackageType { get; set; } - } -} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackagesFile.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackagesFile.cs deleted file mode 100644 index 7af30d2ec..000000000 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UpdatePackages/PackagesFile.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.PPC.Shared.Updates; - -namespace Tango.PPC.Common.UpdatePackages -{ - public class PackagesFile - { - public List<PackageInstallation> PackageInstallations { get; set; } - - public PackagesFile() - { - PackageInstallations = new List<PackageInstallation>(); - } - } -} |
