Compare commits
2 Commits
3.1.0
..
d9dd21d3be
| Author | SHA1 | Date | |
|---|---|---|---|
| d9dd21d3be | |||
| 0df31178f4 |
+34
-57
@@ -56,17 +56,11 @@ pub fn valid_osu_folder(folder: String) -> bool {
|
|||||||
"scores.db",
|
"scores.db",
|
||||||
];
|
];
|
||||||
|
|
||||||
let folder_files: Vec<&str> = osu_folder_files.iter().map(|&s| s).collect();
|
let path = PathBuf::from(folder);
|
||||||
if folder_files.iter().any(|&file| file == "osu!.exe") == false {
|
if !path.join("osu!.exe").exists() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
check_folder_completeness(path, &osu_folder_files) >= 70.0
|
||||||
let path = PathBuf::from(folder);
|
|
||||||
let match_percentage = check_folder_completeness(path, &osu_folder_files) >= 70.0;
|
|
||||||
if match_percentage {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
@@ -160,7 +154,7 @@ pub fn find_osu_installation() -> Option<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn get_beatmapsets_count(folder: String) -> Option<u64> {
|
pub async fn get_beatmapsets_count(folder: String) -> Option<u64> {
|
||||||
let path = PathBuf::from(folder);
|
let path = PathBuf::from(folder);
|
||||||
let osu_user_config = get_osu_user_config(path.clone());
|
let osu_user_config = get_osu_user_config(path.clone());
|
||||||
let songs_path = osu_user_config
|
let songs_path = osu_user_config
|
||||||
@@ -173,12 +167,12 @@ pub fn get_beatmapsets_count(folder: String) -> Option<u64> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut count = 0;
|
let mut count = 0;
|
||||||
if let Ok(entries) = std::fs::read_dir(songs_folder) {
|
if let Ok(mut entries) = fs::read_dir(songs_folder).await {
|
||||||
for entry in entries.flatten() {
|
while let Ok(Some(entry)) = entries.next_entry().await {
|
||||||
if entry.file_type().map_or(false, |ft| ft.is_dir()) {
|
if entry.file_type().await.map_or(false, |ft| ft.is_dir()) {
|
||||||
let dir_path = entry.path();
|
let dir_path = entry.path();
|
||||||
if let Ok(files) = std::fs::read_dir(&dir_path) {
|
if let Ok(mut files) = fs::read_dir(&dir_path).await {
|
||||||
for file in files.flatten() {
|
while let Ok(Some(file)) = files.next_entry().await {
|
||||||
if file.path().extension().map_or(false, |ext| ext == "osu") {
|
if file.path().extension().map_or(false, |ext| ext == "osu") {
|
||||||
count += 1;
|
count += 1;
|
||||||
break;
|
break;
|
||||||
@@ -192,7 +186,7 @@ pub fn get_beatmapsets_count(folder: String) -> Option<u64> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn get_skins_count(folder: String) -> Option<u64> {
|
pub async fn get_skins_count(folder: String) -> Option<u64> {
|
||||||
let path = PathBuf::from(folder);
|
let path = PathBuf::from(folder);
|
||||||
let skins_folder = path.join("Skins");
|
let skins_folder = path.join("Skins");
|
||||||
|
|
||||||
@@ -201,12 +195,12 @@ pub fn get_skins_count(folder: String) -> Option<u64> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut count = 0;
|
let mut count = 0;
|
||||||
if let Ok(entries) = std::fs::read_dir(skins_folder) {
|
if let Ok(mut entries) = fs::read_dir(skins_folder).await {
|
||||||
for entry in entries.flatten() {
|
while let Ok(Some(entry)) = entries.next_entry().await {
|
||||||
if entry.file_type().map_or(false, |ft| ft.is_dir()) {
|
if entry.file_type().await.map_or(false, |ft| ft.is_dir()) {
|
||||||
let dir_path = entry.path();
|
let dir_path = entry.path();
|
||||||
if let Ok(files) = std::fs::read_dir(&dir_path) {
|
if let Ok(mut files) = fs::read_dir(&dir_path).await {
|
||||||
for file in files.flatten() {
|
while let Ok(Some(file)) = files.next_entry().await {
|
||||||
if file.path().extension().map_or(false, |ext| ext == "ini") {
|
if file.path().extension().map_or(false, |ext| ext == "ini") {
|
||||||
count += 1;
|
count += 1;
|
||||||
break;
|
break;
|
||||||
@@ -222,28 +216,28 @@ pub fn get_skins_count(folder: String) -> Option<u64> {
|
|||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn get_osu_skin(folder: String) -> String {
|
pub fn get_osu_skin(folder: String) -> String {
|
||||||
let path = PathBuf::from(folder);
|
let path = PathBuf::from(folder);
|
||||||
let osu_user_config = get_osu_user_config(path.clone());
|
let osu_user_config = get_osu_user_config(path);
|
||||||
return osu_user_config
|
osu_user_config
|
||||||
.and_then(|config| config.get("Skin").cloned())
|
.and_then(|config| config.get("Skin").cloned())
|
||||||
.unwrap_or_else(|| "Default".to_string());
|
.unwrap_or_else(|| "Default".to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn get_osu_version(folder: String) -> String {
|
pub fn get_osu_version(folder: String) -> String {
|
||||||
let path = PathBuf::from(folder);
|
let path = PathBuf::from(folder);
|
||||||
let osu_user_config = get_osu_user_config(path.clone());
|
let osu_user_config = get_osu_user_config(path);
|
||||||
return osu_user_config
|
osu_user_config
|
||||||
.and_then(|config| config.get("LastVersion").cloned())
|
.and_then(|config| config.get("LastVersion").cloned())
|
||||||
.unwrap_or_else(|| "failed".to_string());
|
.unwrap_or_else(|| "failed".to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn get_osu_release_stream(folder: String) -> String {
|
pub fn get_osu_release_stream(folder: String) -> String {
|
||||||
let path = PathBuf::from(folder);
|
let path = PathBuf::from(folder);
|
||||||
let osu_config = get_osu_config(path.clone());
|
let osu_config = get_osu_config(path);
|
||||||
return osu_config
|
osu_config
|
||||||
.and_then(|config| config.get("_ReleaseStream").cloned())
|
.and_then(|config| config.get("_ReleaseStream").cloned())
|
||||||
.unwrap_or_else(|| "Stable40".to_string());
|
.unwrap_or_else(|| "Stable40".to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(serde::Deserialize)]
|
#[derive(serde::Deserialize)]
|
||||||
@@ -261,10 +255,7 @@ pub fn set_osu_user_config_values(
|
|||||||
.iter()
|
.iter()
|
||||||
.map(|entry| (entry.key.as_str(), Some(entry.value.as_str())))
|
.map(|entry| (entry.key.as_str(), Some(entry.value.as_str())))
|
||||||
.collect();
|
.collect();
|
||||||
match set_osu_user_config_vals(&osu_folder_path, &converted) {
|
Ok(set_osu_user_config_vals(&osu_folder_path, &converted).is_ok())
|
||||||
Ok(_) => Ok(true),
|
|
||||||
Err(_) => Ok(false),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
@@ -276,22 +267,16 @@ pub fn set_osu_config_values(
|
|||||||
.iter()
|
.iter()
|
||||||
.map(|entry| (entry.key.as_str(), Some(entry.value.as_str())))
|
.map(|entry| (entry.key.as_str(), Some(entry.value.as_str())))
|
||||||
.collect();
|
.collect();
|
||||||
match set_osu_config_vals(&osu_folder_path, &converted) {
|
Ok(set_osu_config_vals(&osu_folder_path, &converted).is_ok())
|
||||||
Ok(_) => Ok(true),
|
|
||||||
Err(_) => Ok(false),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub async fn run_osu_updater(folder: String) -> Result<(), String> {
|
pub async fn run_osu_updater(folder: String) -> Result<(), String> {
|
||||||
#[cfg(windows)]
|
|
||||||
const DETACHED_PROCESS: u32 = 0x00000008;
|
|
||||||
#[cfg(windows)]
|
|
||||||
const CREATE_NEW_PROCESS_GROUP: u32 = 0x00000200;
|
|
||||||
|
|
||||||
let mut updater_process = {
|
let mut updater_process = {
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
{
|
{
|
||||||
|
const DETACHED_PROCESS: u32 = 0x00000008;
|
||||||
|
const CREATE_NEW_PROCESS_GROUP: u32 = 0x00000200;
|
||||||
let osu_exe_path = PathBuf::from(&folder).join("osu!.exe");
|
let osu_exe_path = PathBuf::from(&folder).join("osu!.exe");
|
||||||
Command::new(&osu_exe_path)
|
Command::new(&osu_exe_path)
|
||||||
.arg("-repair")
|
.arg("-repair")
|
||||||
@@ -368,9 +353,6 @@ pub async fn run_osu_updater(folder: String) -> Result<(), String> {
|
|||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub async fn run_osu(folder: String, patch: bool) -> Result<(), String> {
|
pub async fn run_osu(folder: String, patch: bool) -> Result<(), String> {
|
||||||
/* #[cfg(windows)]
|
|
||||||
use std::os::windows::process::CommandExt; */
|
|
||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
const DETACHED_PROCESS: u32 = 0x00000008;
|
const DETACHED_PROCESS: u32 = 0x00000008;
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
@@ -385,7 +367,7 @@ pub async fn run_osu(folder: String, patch: bool) -> Result<(), String> {
|
|||||||
.arg("ez-pp.farm")
|
.arg("ez-pp.farm")
|
||||||
.creation_flags(DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP)
|
.creation_flags(DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP)
|
||||||
.spawn()
|
.spawn()
|
||||||
.map_err(|e| format!("Failed to spawn updater: {}", e))?
|
.map_err(|e| format!("Failed to spawn osu: {}", e))?
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
@@ -394,7 +376,7 @@ pub async fn run_osu(folder: String, patch: bool) -> Result<(), String> {
|
|||||||
.arg("--devserver")
|
.arg("--devserver")
|
||||||
.arg("ez-pp.farm")
|
.arg("ez-pp.farm")
|
||||||
.spawn()
|
.spawn()
|
||||||
.map_err(|e| format!("Failed to spawn updater: {}", e))?
|
.map_err(|e| format!("Failed to spawn osu: {}", e))?
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -593,7 +575,7 @@ pub fn replace_ui_files(folder: String, revert: bool) -> Result<(), ReplaceUIErr
|
|||||||
if !revert {
|
if !revert {
|
||||||
try_rename(&osu_ui, &osu_ui_bak)?;
|
try_rename(&osu_ui, &osu_ui_bak)?;
|
||||||
try_rename(&ezpp_ui, &osu_ui)?;
|
try_rename(&ezpp_ui, &osu_ui)?;
|
||||||
|
|
||||||
try_rename(&osu_seasonal, &osu_seasonal_bak)?;
|
try_rename(&osu_seasonal, &osu_seasonal_bak)?;
|
||||||
try_rename(&ezpp_seasonal, &osu_seasonal)?;
|
try_rename(&ezpp_seasonal, &osu_seasonal)?;
|
||||||
|
|
||||||
@@ -602,7 +584,7 @@ pub fn replace_ui_files(folder: String, revert: bool) -> Result<(), ReplaceUIErr
|
|||||||
} else {
|
} else {
|
||||||
try_rename(&osu_ui, &ezpp_ui)?;
|
try_rename(&osu_ui, &ezpp_ui)?;
|
||||||
try_rename(&osu_ui_bak, &osu_ui)?;
|
try_rename(&osu_ui_bak, &osu_ui)?;
|
||||||
|
|
||||||
try_rename(&osu_seasonal, &ezpp_seasonal)?;
|
try_rename(&osu_seasonal, &ezpp_seasonal)?;
|
||||||
try_rename(&osu_seasonal_bak, &osu_seasonal)?;
|
try_rename(&osu_seasonal_bak, &osu_seasonal)?;
|
||||||
|
|
||||||
@@ -732,12 +714,7 @@ pub async fn has_net8() -> bool {
|
|||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn encrypt_string(string: String, entropy: String) -> String {
|
pub fn encrypt_string(string: String, entropy: String) -> String {
|
||||||
let encrypted = encrypt_password(&string, &entropy);
|
encrypt_password(&string, &entropy).unwrap_or(string)
|
||||||
|
|
||||||
match encrypted {
|
|
||||||
Ok(encrypted_vec) => encrypted_vec,
|
|
||||||
Err(_) => string,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
@@ -773,7 +750,7 @@ pub async fn download_ezpp_launcher_update(app: AppHandle, url: String) -> Resul
|
|||||||
UpdateStatus {
|
UpdateStatus {
|
||||||
file_name: "Update".to_string(),
|
file_name: "Update".to_string(),
|
||||||
downloaded,
|
downloaded,
|
||||||
size: size,
|
size,
|
||||||
progress: ((downloaded as f64 / size as f64 * 100.0) * 100.0).trunc() / 100.0,
|
progress: ((downloaded as f64 / size as f64 * 100.0) * 100.0).trunc() / 100.0,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user