#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;
|
|
}
|
|
}
|
|
}
|