all the data
This commit is contained in:
133
src/main.rs
133
src/main.rs
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user