diff --git a/sdgb-cli/src/commands.rs b/sdgb-cli/src/commands.rs index c3cd87f..10fbf63 100644 --- a/sdgb-cli/src/commands.rs +++ b/sdgb-cli/src/commands.rs @@ -85,6 +85,11 @@ pub enum Commands { concurrency: usize, }, #[cfg(feature = "fetchall")] + ScrapeAllB50 { + #[arg(short, long, default_value_t = 5)] + concurrency: usize, + }, + #[cfg(feature = "fetchall")] ListAllUserDump {}, Logout { diff --git a/sdgb-cli/src/main.rs b/sdgb-cli/src/main.rs index aba1b8f..80143e5 100644 --- a/sdgb-cli/src/main.rs +++ b/sdgb-cli/src/main.rs @@ -232,10 +232,28 @@ async fn main() -> Result<(), Box> { #[cfg(feature = "fetchall")] Commands::ListAllUser { concurrency } => { - use sdgb_api::title::methods::GetUserPreviewApi; - use crate::{cache::PLAYERS, utils::helpers::cached_concurrent_fetch}; - cached_concurrent_fetch::(&client, concurrency, PLAYERS).await?; + use sdgb_api::title::methods::GetUserPreviewApi; + use std::io::BufRead as _; + + let mut user_ids = Vec::new(); + { + let mut stdin = std::io::stdin().lock(); + let mut buf = String::new(); + + while stdin.read_line(&mut buf).is_ok_and(|size| size != 0) { + if buf.is_empty() { + continue; + } + + let user_id: u32 = buf.trim().parse()?; + buf.clear(); + user_ids.push(user_id); + } + } + + cached_concurrent_fetch::(user_ids, &client, concurrency, PLAYERS) + .await?; } #[cfg(feature = "fetchall")] Commands::ListAllUserDump {} => { @@ -244,6 +262,14 @@ async fn main() -> Result<(), Box> { dump_cache::("players.json", PLAYERS)?; } + #[cfg(feature = "fetchall")] + Commands::ScrapeAllB50 { concurrency } => { + use crate::{ + cache::PLAYERS, + utils::helpers::{cached_concurrent_fetch, read_cache}, + }; + } + Commands::Userdata { user_id } => { let action = async |_| match Sdgb1_50::request::<_, GetUserDataApiResp>( &client, diff --git a/sdgb-cli/src/utils/helpers/mod.rs b/sdgb-cli/src/utils/helpers/mod.rs index f84b7c4..138cd98 100644 --- a/sdgb-cli/src/utils/helpers/mod.rs +++ b/sdgb-cli/src/utils/helpers/mod.rs @@ -1,9 +1,5 @@ use std::{fs::OpenOptions, io::BufWriter}; -use std::{ - io::{self, BufRead}, - path::Path, - sync::atomic::Ordering, -}; +use std::{path::Path, sync::atomic::Ordering}; use futures_util::StreamExt; use nyquest_preset::nyquest::AsyncClient; @@ -70,6 +66,7 @@ where } pub async fn cached_concurrent_fetch( + user_ids: impl Into>, client: &AsyncClient, concurrency: usize, definition: TableDefinition<'_, u32, Vec>, @@ -78,22 +75,7 @@ where A::Payload: From, A::Response: Encode + for<'a> BorrowDecode<'a, ()> + HasUid, { - let mut user_ids = Vec::new(); - { - let mut stdin = io::stdin().lock(); - let mut buf = String::new(); - - while stdin.read_line(&mut buf).is_ok_and(|size| size != 0) { - if buf.is_empty() { - continue; - } - - let user_id: u32 = buf.trim().parse()?; - buf.clear(); - user_ids.push(user_id); - } - } - + let user_ids = user_ids.into(); let _ = cache::init_db(); let read = cache::read_txn()?; let write = cache::write_txn()?;