feat: add get_beatmapsets_count command and utility to retrieve osu! user config
This commit is contained in:
parent
c93ace3158
commit
892f2cea07
@ -2,11 +2,13 @@
|
|||||||
use hardware_id::get_id;
|
use hardware_id::get_id;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use tauri::Manager;
|
use tauri::Manager;
|
||||||
use winreg::enums::*;
|
|
||||||
use winreg::RegKey;
|
use winreg::RegKey;
|
||||||
|
use winreg::enums::*;
|
||||||
|
|
||||||
use crate::utils::check_folder_completeness;
|
|
||||||
mod utils;
|
mod utils;
|
||||||
|
use crate::utils::check_folder_completeness;
|
||||||
|
use crate::utils::get_osu_user_config;
|
||||||
|
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
fn get_hwid() -> String {
|
fn get_hwid() -> String {
|
||||||
@ -135,6 +137,38 @@ fn find_osu_installation() -> Option<String> {
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tauri::command]
|
||||||
|
fn get_beatmapsets_count(folder: String) -> Option<u64> {
|
||||||
|
let path = PathBuf::from(folder);
|
||||||
|
let osu_config = get_osu_user_config(path.clone());
|
||||||
|
let songs_path = osu_config
|
||||||
|
.and_then(|config| config.get("Songs").cloned())
|
||||||
|
.unwrap_or_else(|| path.join("Songs").to_string_lossy().into_owned());
|
||||||
|
let songs_folder = PathBuf::from(songs_path);
|
||||||
|
|
||||||
|
if !songs_folder.exists() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut count = 0;
|
||||||
|
if let Ok(entries) = std::fs::read_dir(songs_folder) {
|
||||||
|
for entry in entries.flatten() {
|
||||||
|
if entry.file_type().map_or(false, |ft| ft.is_dir()) {
|
||||||
|
let dir_path = entry.path();
|
||||||
|
if let Ok(files) = std::fs::read_dir(&dir_path) {
|
||||||
|
for file in files.flatten() {
|
||||||
|
if file.path().extension().map_or(false, |ext| ext == "osu") {
|
||||||
|
count += 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Some(count);
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||||
pub fn run() {
|
pub fn run() {
|
||||||
let mut builder = tauri::Builder::default();
|
let mut builder = tauri::Builder::default();
|
||||||
@ -153,7 +187,8 @@ pub fn run() {
|
|||||||
.invoke_handler(tauri::generate_handler![
|
.invoke_handler(tauri::generate_handler![
|
||||||
get_hwid,
|
get_hwid,
|
||||||
find_osu_installation,
|
find_osu_installation,
|
||||||
valid_osu_folder
|
valid_osu_folder,
|
||||||
|
get_beatmapsets_count
|
||||||
])
|
])
|
||||||
.plugin(tauri_plugin_fs::init())
|
.plugin(tauri_plugin_fs::init())
|
||||||
.plugin(tauri_plugin_dialog::init())
|
.plugin(tauri_plugin_dialog::init())
|
||||||
|
@ -21,4 +21,34 @@ pub fn check_folder_completeness<P: AsRef<Path>>(folder_path: P, required_files:
|
|||||||
} else {
|
} else {
|
||||||
(found as f32 / required_files.len() as f32) * 100.0
|
(found as f32 / required_files.len() as f32) * 100.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_osu_user_config<P: AsRef<Path>>(
|
||||||
|
osu_folder_path: P,
|
||||||
|
) -> Option<std::collections::HashMap<String, String>> {
|
||||||
|
// Ensure the osu! folder path is valid
|
||||||
|
if !osu_folder_path.as_ref().exists() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the osu!{username}.cfg file from the osu! folder
|
||||||
|
let current_user = std::env::var("USERNAME").unwrap_or_else(|_| "Admin".to_string());
|
||||||
|
let osu_config_path = osu_folder_path
|
||||||
|
.as_ref()
|
||||||
|
.join(format!("osu!.{}.cfg", current_user));
|
||||||
|
if !osu_config_path.exists() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
// read the osu config and return it as a map, key and value are separated by ' = '
|
||||||
|
let mut config_map = std::collections::HashMap::new();
|
||||||
|
if let Ok(contents) = std::fs::read_to_string(osu_config_path) {
|
||||||
|
for line in contents.lines() {
|
||||||
|
if let Some((key, value)) = line.split_once(" = ") {
|
||||||
|
config_map.insert(key.trim().to_string(), value.trim().to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Some(config_map);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user