Skip to content

Commit

Permalink
Autodetect multiple installs
Browse files Browse the repository at this point in the history
  • Loading branch information
AviiNL committed Mar 17, 2024
1 parent 722c2a4 commit 15e255d
Show file tree
Hide file tree
Showing 4 changed files with 204 additions and 52 deletions.
98 changes: 69 additions & 29 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ edition.workspace = true
members = [".", "bms-briefing-parser"]

[workspace.package]
version = "0.1.0"
version = "0.1.2"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
Expand All @@ -27,6 +27,7 @@ notify = "6.1.1"
encoding_rs = "0.8.33"
encoding_rs_io = "0.1.7"
clap = { version = "4.5.2", features = ["derive"] }
bms-sm = "0.1.1"

[build-dependencies]
yarte = { version = "0.15", features = ["bytes-buf", "json"] }
37 changes: 28 additions & 9 deletions src/gameinfo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,48 @@ pub struct GameInfo {
}

impl GameInfo {
pub fn new() -> Option<GameInfo> {
pub fn new(version: &str) -> Result<GameInfo, Box<dyn std::error::Error>> {
let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
let cur_ver = hklm
.open_subkey("SOFTWARE\\WOW6432Node\\Benchmark Sims\\Falcon BMS 4.37")
.ok()?;
let base_dir: String = cur_ver.get_value("baseDir").ok()?;
let theater: String = cur_ver.get_value("curTheater").ok()?;
let callsign: Vec<u8> = cur_ver.get_raw_value("PilotCallsign").ok()?.bytes;
let versions = hklm.open_subkey("SOFTWARE\\WOW6432Node\\Benchmark Sims")?;

let cur_ver = versions.open_subkey(version)?;
let base_dir: String = cur_ver.get_value("baseDir")?;
let theater: String = cur_ver.get_value("curTheater")?;
let callsign: Vec<u8> = cur_ver.get_raw_value("PilotCallsign")?.bytes;
let callsign = String::from_utf8_lossy(&callsign)
.replace('\0', " ")
.trim()
.to_string();
let name: Vec<u8> = cur_ver.get_raw_value("PilotName").ok()?.bytes;
let name: Vec<u8> = cur_ver.get_raw_value("PilotName")?.bytes;
let name = String::from_utf8_lossy(&name)
.replace('\0', " ")
.trim()
.to_string();

Some(GameInfo {
Ok(GameInfo {
base_dir: base_dir.into(),
theater,
callsign,
name,
})
}

pub fn versions() -> Vec<GameInfo> {
let mut infos = vec![];

let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
let Ok(versions) = hklm.open_subkey("SOFTWARE\\WOW6432Node\\Benchmark Sims") else {
return vec![];
};

for cur_ver in versions.enum_keys().flatten() {
let Ok(gi) = Self::new(&cur_ver) else {
continue;
};

infos.push(gi);
}

infos
}
}
Loading

0 comments on commit 15e255d

Please sign in to comment.