1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
use crate::{mod_management::{set_mod_enabled_status, rebuild_enabled_mods_json}, northstar::CORE_MODS};
use anyhow::anyhow;
/// Contains various functions to repair common issues and verifying installation
use app::{get_enabled_mods, GameInstall};
/// Verifies Titanfall2 game files
#[tauri::command]
pub fn verify_game_files(game_install: GameInstall) -> Result<String, String> {
dbg!(game_install);
Err("TODO, not yet implemented".to_string())
}
/// Disables all mods except core ones
/// Enables core mods if disabled
#[tauri::command]
pub fn disable_all_but_core(game_install: GameInstall) -> Result<(), String> {
// Rebuild `enabledmods.json` first to ensure all mods are added
rebuild_enabled_mods_json(game_install.clone())?;
let current_mods = get_enabled_mods(game_install.clone())?;
// Disable all mods, set core mods to enabled
for (key, _value) in current_mods.as_object().unwrap() {
if CORE_MODS.contains(&key.as_str()) {
// This is a core mod, we do not want to disable it
set_mod_enabled_status(game_install.clone(), key.to_string(), true)?;
} else {
// Not a core mod
set_mod_enabled_status(game_install.clone(), key.to_string(), false)?;
}
}
Ok(())
}
/// Deletes download folder
/// If `force` is FALSE, bails on non-empty folder
/// If `force` is TRUE, deletes folder even if non-empty
pub fn clean_up_download_folder(
game_install: GameInstall,
force: bool,
) -> Result<(), anyhow::Error> {
// Get download directory
let download_directory = format!(
"{}/___flightcore-temp-download-dir/",
game_install.game_path
);
// Check if files in folder
let download_dir_contents = std::fs::read_dir(download_directory.clone())?;
// dbg!(download_dir_contents);
let mut count = 0;
download_dir_contents.inspect(|_| count += 1).for_each(drop);
if count > 0 && !force {
return Err(anyhow!("Folder not empty, not deleting"));
}
// Delete folder
std::fs::remove_dir_all(download_directory)?;
Ok(())
}
/// Get list of Northstar logs
#[tauri::command]
pub fn get_log_list(game_install: GameInstall) -> Result<Vec<std::path::PathBuf>, String> {
let ns_log_folder = format!("{}/R2Northstar/logs", game_install.game_path);
// Check if logs folder exists
if !std::path::Path::new(&ns_log_folder).exists() {
return Err("No logs folder found".to_string());
}
// List files in logs folder
let paths = std::fs::read_dir(ns_log_folder).unwrap();
// Stores paths of log files
let mut log_files: Vec<std::path::PathBuf> = Vec::new();
for path in paths {
let path = path.unwrap().path();
if path.display().to_string().contains("nslog") {
log_files.push(path);
}
}
if log_files.len() > 0 {
Ok(log_files)
} else {
Err("No logs found".to_string())
}
}
|