From 10040bbef63ba16966a74e94ea5401f53f28c25a Mon Sep 17 00:00:00 2001 From: Philip Kristoffersen Date: Sun, 5 Sep 2021 13:38:05 +0200 Subject: [PATCH] Handle multiple users --- src/main.rs | 65 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 18 deletions(-) diff --git a/src/main.rs b/src/main.rs index 9fd7ef2..144601e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,10 +12,25 @@ fn main() -> Result<(), Box> { let egs_manifests = get_egs_manifests()?; println!("Found {} installed EGS Games", egs_manifests.len()); - let shortcut_content = get_shortcuts_content()?; - let shortcuts = parse_shortcuts(shortcut_content.as_slice())?; + let userinfo_shortcuts = get_shortcuts_paths()?; + println!("Found {} user(s)", userinfo_shortcuts.len()); + + userinfo_shortcuts.iter().for_each(|user| { + let mut shortcuts = vec![]; + if let Some(shortcut_path) = &user.shortcut_path { + //TODO remove unwrap + let content = std::fs::read(shortcut_path).unwrap(); + shortcuts = parse_shortcuts(content.as_slice()).unwrap(); + println!("Found {} shortcuts , for user: {}", shortcuts.len(),user.steam_user_data_folder); + } else { + println!( + "Did not find a shortcut file for user {}, createing a new", + user.steam_user_data_folder + ); + } + + }); - println!("Shortcuts found {}", shortcuts.len()); Ok(()) } @@ -61,7 +76,13 @@ impl Error for SteamUsersDataEmpty { } } -fn get_shortcuts_content() -> Result, Box> { +struct SteamUsersInfo { + pub steam_user_data_folder: String, + pub shortcut_path: Option, +} + +/// Get the paths to the steam users shortcuts (one for each user) +fn get_shortcuts_paths() -> Result, Box> { let key = "PROGRAMFILES(X86)"; let program_files = env::var(key)?; let path_string = format!( @@ -74,18 +95,26 @@ fn get_shortcuts_content() -> Result, Box> { location_tried: path_string, })); } - let mut user_folders = std::fs::read_dir(&user_data_path)?; - if let Some(Ok(folder)) = user_folders.next() { - let path = folder.path(); - let shortcuts_folder = format!( - "{}//config//shortcuts.vdf", - path.to_str().expect("We just checked that this was there") - ); - let content = std::fs::read(shortcuts_folder)?; - Ok(content) - } else { - Err(Box::new(SteamUsersDataEmpty { - location_tried: path_string, - })) - } + let user_folders = std::fs::read_dir(&user_data_path)?; + let users_info = user_folders + .filter_map(|f| f.ok()) + .map(|folder| { + let folder_path = folder + .path(); + let folder_str = + folder_path.to_str() + .expect("We just checked that this was there"); + let path = format!("{}//config//shortcuts.vdf", folder_str); + let shortcuts_path = Path::new(path.as_str()); + let mut shortcuts_path_op = None; + if shortcuts_path.exists() { + shortcuts_path_op = Some(shortcuts_path.to_str().unwrap().to_string()); + } + SteamUsersInfo { + steam_user_data_folder: folder_str.to_string(), + shortcut_path: shortcuts_path_op, + } + }) + .collect(); + Ok(users_info) }