diff --git a/sdgb-api/src/all_net/mod.rs b/sdgb-api/src/all_net/mod.rs index 76ed079..184fa56 100644 --- a/sdgb-api/src/all_net/mod.rs +++ b/sdgb-api/src/all_net/mod.rs @@ -4,12 +4,13 @@ use nyquest::{AsyncClient, Body, Request, header::USER_AGENT}; mod model; use model::{GetResponse, GetUserId}; +use serde::Serialize; pub struct QRCode<'a> { pub qrcode_content: &'a str, } -#[derive(Debug, snafu::Snafu)] +#[derive(Debug, snafu::Snafu, Serialize)] pub enum QRLoginError { #[snafu(display("QRCode expired [10mins]"))] QRCodeExpired10, @@ -23,13 +24,17 @@ pub enum QRLoginError { #[snafu(context(false))] #[snafu(display("request error: {source}"))] NyquestError { + #[serde(skip)] source: nyquest::Error, + #[serde(skip)] backtrace: Backtrace, }, #[snafu(context(false))] JSONError { + #[serde(skip)] source: serde_json::error::Error, + #[serde(skip)] backtrace: Backtrace, }, } diff --git a/sdgb-api/src/helper/music_db/mod.rs b/sdgb-api/src/helper/music_db/mod.rs index c21d5c5..b009c63 100644 --- a/sdgb-api/src/helper/music_db/mod.rs +++ b/sdgb-api/src/helper/music_db/mod.rs @@ -1,4 +1,4 @@ -use std::{fs::OpenOptions, sync::LazyLock}; +use std::{fs::OpenOptions, io::BufReader, sync::LazyLock, time::SystemTime}; use rust_decimal::{Decimal, dec, serde::DecimalFromString}; use rustc_hash::FxHashMap; @@ -26,6 +26,7 @@ pub struct Level { type MusicDB = FxHashMap; pub static MUSIC_DB: LazyLock> = LazyLock::new(|| { + let time = SystemTime::now(); info!("loading musicDB..."); let json = OpenOptions::new() @@ -34,11 +35,17 @@ pub static MUSIC_DB: LazyLock> = LazyLock::new(|| { .open("musicDB.json") .inspect_err(|e| warn!("failed to load musicDB: {e}")) .ok()?; + let buf_reader = BufReader::new(json); - let db: Vec = serde_json::from_reader(json) + let db: Vec = serde_json::from_reader(buf_reader) .inspect_err(|e| warn!("failed to load musicDB: {e}")) .ok()?; + info!( + "loaded musicDB, cost {}ms", + time.elapsed().unwrap_or_default().as_millis() + ); + Some(db.into_iter().map(|entry| (entry.id, entry)).collect()) }); diff --git a/sdgb-cli/src/main.rs b/sdgb-cli/src/main.rs index 3cb8e22..c44a129 100644 --- a/sdgb-cli/src/main.rs +++ b/sdgb-cli/src/main.rs @@ -1,4 +1,7 @@ -use std::sync::atomic::{AtomicBool, Ordering}; +use std::{ + io::stdout, + sync::atomic::{AtomicBool, Ordering}, +}; use nyquest_preset::nyquest::ClientBuilder; use palc::Parser; @@ -116,10 +119,17 @@ async fn main() -> Result<(), Box> { } commands::Commands::QRLogin { ref qrcode_content } => { let qrcode = QRCode { qrcode_content }; - match qrcode.login(&client).await { + let resp = qrcode.login(&client).await; + + match &resp { Ok(user_id) => info!("login succeed: {user_id}"), Err(e) => error!("login failed: {e}"), } + + if !human_readable { + let lock = stdout().lock(); + serde_json::to_writer_pretty(lock, &resp)?; + } } commands::Commands::AuthLite { title_ver, variant } => {