diff --git a/Cargo.lock b/Cargo.lock index 7acffbf..3901714 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -79,9 +79,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -94,33 +94,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -391,9 +391,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.10" +version = "4.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6b81fb3c84f5563d509c59b5a48d935f689e993afa90fe39047f05adef9142" +checksum = "35723e6a11662c2afb578bcf0b88bf6ea8e21282a953428f240574fcc3a2b5b3" dependencies = [ "clap_builder", "clap_derive", @@ -401,9 +401,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.10" +version = "4.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca6706fd5224857d9ac5eb9355f6683563cc0541c7cd9d014043b57cbec78ac" +checksum = "49eb96cbfa7cfa35017b7cd548c75b14c3118c98b423041d70562665e07fb0fa" dependencies = [ "anstream", "anstyle", @@ -413,9 +413,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.8" +version = "4.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +checksum = "5d029b67f89d30bbb547c89fd5161293c0aec155fc691d7924b64550662db93e" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -425,15 +425,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "colored" @@ -1085,9 +1085,9 @@ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" @@ -1335,9 +1335,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.1" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" dependencies = [ "memchr", ] @@ -2188,9 +2188,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -2745,9 +2745,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.0" +version = "1.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3318c4fc7126c339a40fbc025927d0328ca32259f68bfe4321660644c1f626" +checksum = "d040ac2b29ab03b09d4129c2f5bbd012a3ac2f79d38ff506a4bf8dd34b0eac8a" dependencies = [ "backtrace", "bytes", @@ -2819,21 +2819,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2caab0bf757388c6c0ae23b3293fdb463fee59434529014f85e3263b995c28" +checksum = "81967dd0dd2c1ab0bc3468bd7caecc32b8a4aa47d0c8c695d8c2b2108168d62c" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.16", + "toml_edit 0.22.17", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "f8fb9f64314842840f1d940ac544da178732128f1c78c21772e876579e0da1db" dependencies = [ "serde", ] @@ -2851,15 +2851,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.16" +version = "0.22.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788" +checksum = "8d9f8729f5aea9562aac1cc0441f5d6de3cff1ee0c5d67293eeca5eb36ee7c16" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.15", + "winnow 0.6.16", ] [[package]] @@ -3055,9 +3055,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "want" @@ -3353,9 +3353,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.15" +version = "0.6.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557404e450152cd6795bb558bca69e43c585055f4606e3bcae5894fc6dac9ba0" +checksum = "b480ae9340fc261e6be3e95a1ba86d54ae3f9171132a73ce8d4bbaf68339507c" dependencies = [ "memchr", ] diff --git a/config_template.toml b/config_template.toml index 55254cd..c7a30aa 100644 --- a/config_template.toml +++ b/config_template.toml @@ -7,10 +7,9 @@ sqlx_logging = false [sync] max_timeout = 1.0 serve_wait_time = 10.0 -start_id = 76859 [sync.fast] start_id = 76859 -end_id = 1321469 +end_id = 1321698 worker_count = 10 worker_size = 10 diff --git a/sr_download/Cargo.toml b/sr_download/Cargo.toml index e55aa68..c3636e3 100644 --- a/sr_download/Cargo.toml +++ b/sr_download/Cargo.toml @@ -10,7 +10,7 @@ path = "./src/get-save.rs" [dependencies] reqwest = "0.12.5" -tokio = { version = "1.38.1", features = ["full"] } +tokio = { version = "1.38", features = ["full"] } tracing = "0.1.40" tracing-subscriber = { version = "0.3.18", features = ["local-time"] } anyhow = { version = "1.0.86", features = ["backtrace"] } @@ -23,7 +23,7 @@ sea-orm = { version = "0.12.15", features = [ migration = { path = "../migration" } serde = { version = "1.0.204", features = ["serde_derive"] } -toml = "0.8.15" +toml = "0.8" blake3 = "1.5.3" futures = "0.3.30" colored = "2.1.0" diff --git a/sr_download/src/config.rs b/sr_download/src/config.rs index 8c97a32..84b47cd 100644 --- a/sr_download/src/config.rs +++ b/sr_download/src/config.rs @@ -38,7 +38,7 @@ impl Default for FastSyncConfig { fn default() -> Self { Self { start_id: 76859, - end_id: 1321469, + end_id: 1321698, worker_count: 10, worker_size: 10, } @@ -90,9 +90,11 @@ impl ConfigFile { std::time::Duration::from_secs_f32(self.sync.max_timeout) } - pub fn read_or_panic() -> Self { + /// 自动帮你骂用户了 + /// 你直接 ? 就行 + pub fn try_read() -> anyhow::Result { match Self::read_from_file(Path::new("config.toml")) { - Ok(conf) => conf, + Ok(conf) => Ok(conf), Err(e) => { let _ = tracing_subscriber::fmt::try_init(); event!(Level::ERROR, "{}", "Please Fix the config.toml file".red()); @@ -104,9 +106,15 @@ impl ConfigFile { "template file like this: {}", toml::to_string(&Self::default()).unwrap() ); - }; - panic!("Please Fix the config.toml file"); + } + Err(e) } } } + + /// 同理, 也帮你骂好了 + /// 甚至不需要你 ? + pub fn read_or_panic() -> Self { + Self::try_read().expect("Please Fix the config.toml file") + } } diff --git a/sr_download/src/main.rs b/sr_download/src/main.rs index 1f0f0e0..0ffb15c 100644 --- a/sr_download/src/main.rs +++ b/sr_download/src/main.rs @@ -77,7 +77,7 @@ async fn big_worker( } async fn serve_mode(mut stop_receiver: Receiver<()>) -> anyhow::Result<()> { - let conf = config::ConfigFile::read_or_panic(); + let conf = config::ConfigFile::try_read()?; let db_connect = db_part::connect(&conf).await?; db_part::migrate(&db_connect).await?; @@ -166,7 +166,7 @@ async fn serve_mode(mut stop_receiver: Receiver<()>) -> anyhow::Result<()> { } async fn fast_mode(mut stop_receiver: Receiver<()>) -> anyhow::Result<()> { - let conf = config::ConfigFile::read_or_panic(); + let conf = config::ConfigFile::try_read()?; let db_connect = db_part::connect(&conf).await?; db_part::migrate(&db_connect).await?; @@ -236,36 +236,30 @@ async fn main() -> anyhow::Result<()> { // 判断是否有 -f / -s 参数 let args: Vec = std::env::args().collect(); let (stop_sender, stop_receiver) = tokio::sync::oneshot::channel::<()>(); + let stop_waiter = tokio::spawn(async move { + tokio::signal::ctrl_c() + .await + .expect("Failed to listen for Ctrl+C event"); + event!(Level::INFO, "{}", "Ctrl-C received".red()); + stop_sender.send(()).unwrap(); + }); + let job_waiter; if args.contains(&"-s".to_string()) { - let job_waiter = tokio::spawn(serve_mode(stop_receiver)); - // serve 模式的任务不会结束, 所以需要等待 ctrl-c - tokio::signal::ctrl_c().await?; - let _ = stop_sender.send(()); // 反正不需要管, 发过去了就行 - job_waiter.await??; - event!(Level::INFO, "{}", "ctrl-c 收到啦! 停止下载".green()); - return Ok(()); + job_waiter = tokio::spawn(serve_mode(stop_receiver)); } else if args.contains(&"-f".to_string()) { - let stop_waiter = tokio::spawn(async move { - tokio::signal::ctrl_c() - .await - .expect("Failed to listen for Ctrl+C event"); - event!(Level::INFO, "{}", "Ctrl-C received".red()); - stop_sender.send(()).unwrap(); - }); - let job_waiter = tokio::spawn(fast_mode(stop_receiver)); - // fast 模式的任务会结束, 所以需要等待任务结束 - job_waiter.await??; - let _ = stop_waiter.await; + job_waiter = tokio::spawn(fast_mode(stop_receiver)); + } else { + event!( + Level::ERROR, + "{}", + "Please use -s or -f to start the program".red() + ); + event!(Level::ERROR, "{}", "Use -s to start serve mode".red()); + event!(Level::ERROR, "{}", "Use -f to start fast mode".red()); return Ok(()); } - - event!( - Level::ERROR, - "{}", - "Please use -s or -f to start the program".red() - ); - event!(Level::ERROR, "{}", "Use -s to start serve mode".red()); - event!(Level::ERROR, "{}", "Use -f to start fast mode".red()); + job_waiter.await??; + let _ = stop_waiter.await; Ok(()) } diff --git a/sr_download/src/net.rs b/sr_download/src/net.rs index 962f01f..b532344 100644 --- a/sr_download/src/net.rs +++ b/sr_download/src/net.rs @@ -1,4 +1,4 @@ -use reqwest::Client; +use reqwest::{Client, ClientBuilder}; use std::time::Duration; use crate::{model::sea_orm_active_enums::SaveType, SaveId}; @@ -67,10 +67,13 @@ impl From<&DownloadFile> for SaveType { impl Downloader { pub fn new(timeout: Duration) -> Self { - Self { - client: Client::new(), - timeout, - } + let ua = format!("sr_download/{}", env!("CARGO_PKG_VERSION")); + let client = ClientBuilder::new() + .timeout(timeout) + .user_agent(ua) + .build() + .unwrap(); + Self { client, timeout } } pub fn as_ship_url(id: SaveId) -> String {