public static Task <BeatMods> CreateSession(bool useCachedOldMods = true) { return(Task.Run(async() => { // Delete old files... if (File.Exists("cachedMods.json")) { File.Delete("cachedMods.json"); } if (File.Exists("cachedModsUnapproved.json")) { File.Delete("cachedModsUnapproved.json"); } BeatMods session = new BeatMods(); await session.RefreshMods(useCachedOldMods); return session; })); }
public BeatSaberInstallation(string beatSaberDirectory, BeatMods beatModsConnection) { BeatSaberDirectory = beatSaberDirectory; beatMods = beatModsConnection; if (!Directory.Exists(beatSaberDirectory)) { throw new FileNotFoundException("The given Beat Saber root directory does not exist."); } BeatSaberDotExe = Path.Combine(beatSaberDirectory, "Beat Saber.exe"); BeatSaberPluginDir = Path.Combine(beatSaberDirectory, "Plugins"); ConfigFileName = Path.Combine(beatSaberDirectory, "beatModderConfig.json"); // Detecting Beat Saber version. // Current Beat Saber version is located in 'globalgamemanagers' file at byte offset 0x00001200 try { string versionFile = Path.Combine(BeatSaberDirectory, "Beat Saber_Data", "globalgamemanagers"); using (FileStream streamReader = new FileStream(versionFile, FileMode.Open)) { streamReader.Position = 0x1200; byte[] asciiByteVersion = new byte[12]; streamReader.Read(asciiByteVersion, 0, asciiByteVersion.Length); BeatSaberVersionString = Encoding.ASCII.GetString(asciiByteVersion).Trim('\0'); //BeatSaberVersion = SemVersion.Parse(BeatSaberVersionString.FixOddVersion()); } } catch (Exception e) { throw new FileLoadException("Could not grab Beat Saber's version, is the game running?", e); } if (!File.Exists(BeatSaberDotExe)) { throw new FileNotFoundException("'Beat Saber.exe' was not found in the given root directory."); } if (!File.Exists(ConfigFileName)) { config = new Config { ogFiles = new List <string>(OriginalBeatSaberFiles.Select((e) => Path.Combine(BeatSaberDirectory, e))), beatSaberType = BeatSaberDirectory.ToLower().Contains("steam") ? BeatSaberInstalledType.Steam : BeatSaberInstalledType.Oculus, installedMods = new List <InstalledMod>() }; } else { try { config = JsonConvert.DeserializeObject <Config>(File.ReadAllText(ConfigFileName)); } catch (JsonException e1) { throw new Exception("Could not parse config file, was it modified?", e1); } catch (IOException e2) { throw new Exception("Could not read config file.", e2); } } //DidBeatSaberUpdate = BeatSaberVersion > (config.lastBeatSaberVersion?.FixOddVersion() ?? "0.0"); PreviousBeatSaberVersionString = config.lastBeatSaberVersion; DidBeatSaberUpdate = config.lastBeatSaberVersion != BeatSaberVersionString; config.lastBeatSaberVersion = BeatSaberVersionString; FixPluginBinaries(); SaveConfig(); }