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