CLI tool for running Playbooks
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

102 lines
4.3 KiB

#nullable enable
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using Microsoft.Win32;
using TrustedUninstaller.Shared.Actions;
using TrustedUninstaller.Shared.Tasks;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization.TypeResolvers;
namespace TrustedUninstaller.Shared.Parser
{
public class TaskComparer : IComparer<UninstallTask> {
public int Compare(UninstallTask x, UninstallTask y)
{
return ReferenceEquals(x, y) ? 0 : x.Priority.CompareTo(y.Priority);
}
}
public class ConfigParser
{
public List<UninstallTask> Tasks { get; set; }
private IDeserializer Deserializer { get; }
private ISerializer Serializer { get; }
public ConfigParser()
{
Tasks = new List<UninstallTask>();
Deserializer = new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithTagMapping("!file", typeof(FileAction))
.WithTagMapping("!service", typeof(ServiceAction))
.WithTagMapping("!registryKey", typeof(RegistryKeyAction))
.WithTagMapping("!registryValue", typeof(RegistryValueAction))
.WithTagMapping("!appx", typeof(AppxAction))
.WithTagMapping("!systemPackage", typeof(SystemPackageAction))
.WithTagMapping("!lineInFile", typeof(LineInFileAction))
.WithTagMapping("!scheduledTask", typeof(ScheduledTaskAction))
.WithTagMapping("!user", typeof(UserAction))
.WithTagMapping("!run", typeof(RunAction))
.WithTagMapping("!powerShell", typeof(PowerShellAction))
.WithTagMapping("!shortcut", typeof(ShortcutAction))
.WithTagMapping("!cmd", typeof(CmdAction))
.WithTagMapping("!uninstallTask", typeof(UninstallTask))
.WithTagMapping("!taskKill", typeof(TaskKillAction))
.WithTagMapping("!update", typeof(UpdateAction))
.WithTagMapping("!writeStatus", typeof(WriteStatusAction))
.WithNodeTypeResolver(new TaskActionResolver())
.Build();
Serializer = new SerializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithTagMapping("!file", typeof(FileAction))
.WithTagMapping("!service", typeof(ServiceAction))
.WithTagMapping("!registryKey", typeof(RegistryKeyAction))
.WithTagMapping("!registryValue", typeof(RegistryValueAction))
.WithTagMapping("!appx", typeof(AppxAction))
.WithTagMapping("!systemPackage", typeof(SystemPackageAction))
.WithTagMapping("!lineInFile", typeof(LineInFileAction))
.WithTagMapping("!scheduledTask", typeof(ScheduledTaskAction))
.WithTagMapping("!user", typeof(UserAction))
.WithTagMapping("!run", typeof(RunAction))
.WithTagMapping("!powerShell", typeof(PowerShellAction))
.WithTagMapping("!shortcut", typeof(ShortcutAction))
.WithTagMapping("!cmd", typeof(CmdAction))
.WithTagMapping("!uninstallTask", typeof(UninstallTask))
.WithTagMapping("!taskKill", typeof(TaskKillAction))
.WithTagMapping("!update", typeof(UpdateAction))
.WithTagMapping("!writeStatus", typeof(WriteStatusAction))
.WithTypeResolver(new DynamicTypeResolver())
.EnsureRoundtrip()
.Build();
}
public void SerializeItem(TextWriter tw, object item)
{
Serializer.Serialize(tw, item);
}
public bool Add(string filename)
{
var configData = File.ReadAllText(filename);
var taskData = Deserializer.Deserialize<UninstallTask>(configData);
if (taskData.SupportedBuilds != null && !taskData.SupportedBuilds.Contains(Globals.WinVer.ToString()))
{
return false;
}
taskData.Update();
Tasks.Add(taskData);
return true;
}
}
}