aboutsummaryrefslogtreecommitdiff
path: root/src-tauri
diff options
context:
space:
mode:
Diffstat (limited to 'src-tauri')
-rw-r--r--src-tauri/bindings/ParsedLogResults.ts3
-rw-r--r--src-tauri/bindings/ParsedModFromLog.ts3
-rw-r--r--src-tauri/src/repair_and_verify/log_handling.rs60
3 files changed, 57 insertions, 9 deletions
diff --git a/src-tauri/bindings/ParsedLogResults.ts b/src-tauri/bindings/ParsedLogResults.ts
index 5352fc7e..7bc3239e 100644
--- a/src-tauri/bindings/ParsedLogResults.ts
+++ b/src-tauri/bindings/ParsedLogResults.ts
@@ -1,3 +1,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
+import type { ParsedModFromLog } from "./ParsedModFromLog";
-export interface ParsedLogResults { northstar_launcher_version: string, installed_mods: Array<string>, } \ No newline at end of file
+export interface ParsedLogResults { northstar_launcher_version: string, installed_mods: Array<ParsedModFromLog>, } \ No newline at end of file
diff --git a/src-tauri/bindings/ParsedModFromLog.ts b/src-tauri/bindings/ParsedModFromLog.ts
new file mode 100644
index 00000000..f71ed83d
--- /dev/null
+++ b/src-tauri/bindings/ParsedModFromLog.ts
@@ -0,0 +1,3 @@
+// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
+
+export interface ParsedModFromLog { mod_name: string, enabled: boolean, } \ No newline at end of file
diff --git a/src-tauri/src/repair_and_verify/log_handling.rs b/src-tauri/src/repair_and_verify/log_handling.rs
index e272d056..33e634cb 100644
--- a/src-tauri/src/repair_and_verify/log_handling.rs
+++ b/src-tauri/src/repair_and_verify/log_handling.rs
@@ -4,15 +4,24 @@ use ts_rs::TS;
#[derive(Serialize, Deserialize, Debug, Clone, TS)]
#[ts(export)]
+pub struct ParsedModFromLog {
+ mod_name: String,
+ enabled: bool,
+}
+
+#[derive(Serialize, Deserialize, Debug, Clone, TS)]
+#[ts(export)]
pub struct ParsedLogResults {
northstar_launcher_version: String,
- installed_mods: Vec<String>,
+ installed_mods: Vec<ParsedModFromLog>,
}
/// Parse logs for installed mods
-fn parse_given_log_text_for_installed_mods(log_text: String) -> Result<Vec<String>, String> {
- // Regex to capture mod loading
- let regex = Regex::new(r"(?m)Loaded mod (.*) successfully\n").unwrap();
+fn parse_given_log_text_for_installed_mods(
+ log_text: String,
+) -> Result<Vec<ParsedModFromLog>, String> {
+ // Regex to capture mod loading and whether enabled/disabled
+ let regex = Regex::new(r"(?m)Loaded mod (.*) successfully\n.*\[NORTHSTAR\] \[info\] Mod (.*) is (enabled|disabled)\n").unwrap();
// Run regex, result will be an iterator over tuples containing the start and end indices for each match in the string
let result = regex.captures_iter(&log_text);
@@ -20,12 +29,47 @@ fn parse_given_log_text_for_installed_mods(log_text: String) -> Result<Vec<Strin
let mut mods = Vec::new();
for mat in result {
// Get the captured string, which is the first and only capturing group in the regex
- match mat.get(1) {
- Some(mod_name) => {
- mods.push(mod_name.as_str().to_string());
+ let mod_name = match mat.get(1) {
+ Some(mod_name) => mod_name.as_str().to_string(),
+ None => {
+ println!("Failed parsing {:?}", mat); // log on failure
+ continue;
+ }
+ };
+ let mod_name_copy = match mat.get(2) {
+ Some(mod_name) => mod_name.as_str().to_string(),
+ None => {
+ println!("Failed parsing {:?}", mat); // log on failure
+ continue;
}
- None => println!("Failed parsing {:?}", mat), // log on failure
};
+ let enabled_disabled = match mat.get(3) {
+ Some(mod_name) => mod_name.as_str().to_string(),
+ None => {
+ println!("Failed parsing {:?}", mat); // log on failure
+ continue;
+ }
+ };
+ println!("{}, {}, {}", mod_name, mod_name_copy, enabled_disabled);
+ if mod_name != mod_name_copy {
+ return Err("Mod names don't match up".to_string());
+ }
+
+ // TODO improve checking
+ let mod_enabled;
+ if enabled_disabled == "enabled" {
+ mod_enabled = true;
+ } else {
+ mod_enabled = false;
+ }
+
+ let parsed_mod_from_log = ParsedModFromLog {
+ mod_name,
+ enabled: mod_enabled,
+ };
+
+ // Add mod to list
+ mods.push(parsed_mod_from_log);
}
// Return the captured mod names