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.
 
 
 
 

65 lines
2.1 KiB

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