using IPA.Utilities;
|
|
using System;
|
|
using System.IO;
|
|
using static IPA.Logging.Logger;
|
|
|
|
namespace IPA.Injector
|
|
{
|
|
internal static class Updates
|
|
{
|
|
private const string DeleteFileName = Updating.ModSaber.Updater.SpecialDeletionsFile;
|
|
public static void InstallPendingUpdates()
|
|
{
|
|
var pendingDir = Path.Combine(BeatSaber.InstallPath, "IPA", "Pending");
|
|
if (!Directory.Exists(pendingDir)) return;
|
|
|
|
// there are pending updates, install
|
|
updater.Info("Installing pending updates");
|
|
|
|
var toDelete = new string[0];
|
|
var delFn = Path.Combine(pendingDir, DeleteFileName);
|
|
if (File.Exists(delFn))
|
|
{
|
|
toDelete = File.ReadAllLines(delFn);
|
|
File.Delete(delFn);
|
|
}
|
|
|
|
foreach (var file in toDelete)
|
|
{
|
|
try
|
|
{
|
|
File.Delete(Path.Combine(BeatSaber.InstallPath, file));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
updater.Error("While trying to install pending updates: Error deleting file marked for deletion");
|
|
updater.Error(e);
|
|
}
|
|
}
|
|
|
|
#region Self Protection
|
|
if (Directory.Exists(Path.Combine(pendingDir, "IPA")))
|
|
Directory.Delete(Path.Combine(pendingDir, "IPA"), true);
|
|
if (File.Exists(Path.Combine(pendingDir, "IPA.exe")))
|
|
{
|
|
File.Delete(Path.Combine(pendingDir, "IPA.exe"));
|
|
if (File.Exists(Path.Combine(pendingDir, "Mono.Cecil.dll")))
|
|
File.Delete(Path.Combine(pendingDir, "Mono.Cecil.dll"));
|
|
}
|
|
|
|
#endregion
|
|
|
|
try
|
|
{
|
|
LoneFunctions.CopyAll(new DirectoryInfo(pendingDir), new DirectoryInfo(BeatSaber.InstallPath));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
updater.Error("While trying to install pending updates: Error copying files in");
|
|
updater.Error(e);
|
|
}
|
|
|
|
Directory.Delete(pendingDir, true);
|
|
}
|
|
}
|
|
}
|