all the data

This commit is contained in:
2025-01-23 16:57:10 +01:00
parent f643fdeafd
commit 31f5d7b2ea

View File

@@ -54,6 +54,7 @@ struct IniGame {
#[derive(Debug)]
struct Game {
app_id: u32,
name: String,
achievements: Vec<Achievement>,
}
@@ -91,7 +92,8 @@ async fn main() {
&game_name_cache_path,
&game_name_list,
dirs,
).await;
)
.await;
println!("games: {:#?}", games);
}
@@ -122,6 +124,43 @@ async fn get_steam_data(client: &Client, key: &str, appid: u32, lang: &str) -> J
serde_json::from_str(&json).unwrap()
}
async fn get_achievement_data(
client: &Client,
api_key: &str,
app_id: u32,
game_name_cache_path: &str,
game_name_list: &Vec<App>,
) -> Game {
let mut game = Game {
name: get_game_name(&client, &game_name_cache_path, &game_name_list, app_id)
.await
.unwrap(),
app_id,
achievements: Vec::new(),
};
let game_data = get_steam_data(&client, api_key, app_id, "en").await;
for json_achievement in &game_data.game.available_game_stats.achievements {
game.achievements.push(Achievement {
achieved: false,
max_progress: 0,
current_progress: 0,
unlock_time: 0,
description: json_achievement.description.clone(),
name: json_achievement.display_name.clone(),
hidden: if json_achievement.hidden == 1 {
true
} else if json_achievement.hidden == 0 {
false
} else {
panic!("Unexpected hidden value")
},
icon: json_achievement.icon.clone(),
icongray: json_achievement.icongray.clone(),
});
}
game
}
async fn get_achievement_data_all(
client: &Client,
api_key: &str,
@@ -135,41 +174,54 @@ async fn get_achievement_data_all(
let mut game = Game {
app_id: ini_game.id,
achievements: Vec::new(),
};
let game_data = get_steam_data(&client, api_key, ini_game.id, "en").await;
println!(
"game: \"{}\", id: {}, total achievements: {}/{}",
get_game_name(&client, &game_name_cache_path, &game_name_list, ini_game.id)
name: get_game_name(&client, &game_name_cache_path, &game_name_list, ini_game.id)
.await
.unwrap(),
ini_game.id,
ini_game.achievements.len(),
game_data.game.available_game_stats.achievements.len(),
);
for ini_achievement in ini_game.achievements {
if ini_achievement.achieved {
for json_achievement in &game_data.game.available_game_stats.achievements {
if json_achievement.name == ini_achievement.name {
game.achievements.push(Achievement {
achieved: ini_achievement.achieved,
max_progress: ini_achievement.max_progress,
current_progress: ini_achievement.current_progress,
description: json_achievement.description.clone(),
name: json_achievement.display_name.clone(),
hidden: if json_achievement.hidden == 1 {
true
} else if json_achievement.hidden == 0 {
false
} else {
panic!("Unexpected hidden value")
},
icon: json_achievement.icon.clone(),
icongray: json_achievement.icongray.clone(),
unlock_time: ini_achievement.unlock_time,
});
}
};
let game_data = get_steam_data(&client, api_key, ini_game.id, "en").await;
for json_achievement in &game_data.game.available_game_stats.achievements {
let mut found_in_ini = false;
for ini_achievement in &ini_game.achievements {
if json_achievement.name == ini_achievement.name {
game.achievements.push(Achievement {
achieved: ini_achievement.achieved,
max_progress: ini_achievement.max_progress,
current_progress: ini_achievement.current_progress,
description: json_achievement.description.clone(),
name: json_achievement.display_name.clone(),
hidden: if json_achievement.hidden == 1 {
true
} else if json_achievement.hidden == 0 {
false
} else {
panic!("Unexpected hidden value")
},
icon: json_achievement.icon.clone(),
icongray: json_achievement.icongray.clone(),
unlock_time: ini_achievement.unlock_time,
});
found_in_ini = true;
}
}
if !found_in_ini {
game.achievements.push(Achievement {
achieved: false,
max_progress: 0,
current_progress: 0,
unlock_time: 0,
description: json_achievement.description.clone(),
name: json_achievement.display_name.clone(),
hidden: if json_achievement.hidden == 1 {
true
} else if json_achievement.hidden == 0 {
false
} else {
panic!("Unexpected hidden value")
},
icon: json_achievement.icon.clone(),
icongray: json_achievement.icongray.clone(),
});
}
}
games.push(game);
}
@@ -295,10 +347,21 @@ mod tests {
async fn check_id_to_name() {
let client = Client::new();
let config_dir = dirs::config_dir().unwrap().to_str().unwrap().to_owned();
let cache_dir = dirs::cache_dir().unwrap().to_str().unwrap().to_owned();
let game_name_cache_path = format!("{cache_dir}/achievement-watcher/game_names.txt");
let game_name_list = get_game_name_file_cache(&game_name_cache_path);
let api_key =
fs::read_to_string(format!("{config_dir}/achievement-watcher/api-key.txt")).unwrap();
let json_game = get_steam_data(&client, &api_key, 570940, "en").await;
println!("game name: {}", json_game.game.game_name);
assert!(json_game.game.game_name.to_lowercase() == "Dark Souls Remastered");
let api_key = api_key.trim();
let game = get_achievement_data(
&client,
api_key,
570940,
&game_name_cache_path,
&game_name_list,
)
.await;
println!("game name: \"{}\"", game.name);
assert_eq!(game.name, "DARK SOULS™: REMASTERED");
}
}