This commit is contained in:
shenjack 2024-07-19 23:44:32 +08:00
parent 556958a38c
commit 54ce34cbf9
Signed by: shenjack
GPG Key ID: 7B1134A979775551
8 changed files with 322 additions and 107 deletions

289
Cargo.lock generated
View File

@ -183,6 +183,12 @@ dependencies = [
"num-traits",
]
[[package]]
name = "atomic-waker"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
[[package]]
name = "autocfg"
version = "1.3.0"
@ -210,6 +216,12 @@ version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
[[package]]
name = "base64"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "base64ct"
version = "1.6.0"
@ -761,15 +773,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "h2"
version = "0.3.26"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab"
dependencies = [
"atomic-waker",
"bytes",
"fnv",
"futures-core",
"futures-sink",
"futures-util",
"http",
"indexmap",
"slab",
@ -862,9 +874,9 @@ dependencies = [
[[package]]
name = "http"
version = "0.2.12"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
dependencies = [
"bytes",
"fnv",
@ -873,12 +885,24 @@ dependencies = [
[[package]]
name = "http-body"
version = "0.4.6"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes",
"http",
]
[[package]]
name = "http-body-util"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
dependencies = [
"bytes",
"futures-util",
"http",
"http-body",
"pin-project-lite",
]
@ -888,47 +912,77 @@ version = "1.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9"
[[package]]
name = "httpdate"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "hyper"
version = "0.14.30"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9"
checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05"
dependencies = [
"bytes",
"futures-channel",
"futures-core",
"futures-util",
"h2",
"http",
"http-body",
"httparse",
"httpdate",
"itoa",
"pin-project-lite",
"socket2",
"smallvec",
"tokio",
"tower-service",
"tracing",
"want",
]
[[package]]
name = "hyper-tls"
version = "0.5.0"
name = "hyper-rustls"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155"
dependencies = [
"futures-util",
"http",
"hyper",
"hyper-util",
"rustls 0.23.11",
"rustls-pki-types",
"tokio",
"tokio-rustls",
"tower-service",
]
[[package]]
name = "hyper-tls"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
dependencies = [
"bytes",
"http-body-util",
"hyper",
"hyper-util",
"native-tls",
"tokio",
"tokio-native-tls",
"tower-service",
]
[[package]]
name = "hyper-util"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956"
dependencies = [
"bytes",
"futures-channel",
"futures-util",
"http",
"http-body",
"hyper",
"pin-project-lite",
"socket2",
"tokio",
"tower",
"tower-service",
"tracing",
]
[[package]]
@ -1367,6 +1421,26 @@ version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pin-project"
version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.71",
]
[[package]]
name = "pin-project-lite"
version = "0.2.14"
@ -1424,7 +1498,7 @@ version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
dependencies = [
"toml_edit",
"toml_edit 0.21.1",
]
[[package]]
@ -1598,11 +1672,11 @@ dependencies = [
[[package]]
name = "reqwest"
version = "0.11.27"
version = "0.12.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62"
checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37"
dependencies = [
"base64",
"base64 0.22.1",
"bytes",
"encoding_rs",
"futures-core",
@ -1610,8 +1684,11 @@ dependencies = [
"h2",
"http",
"http-body",
"http-body-util",
"hyper",
"hyper-rustls",
"hyper-tls",
"hyper-util",
"ipnet",
"js-sys",
"log",
@ -1620,7 +1697,7 @@ dependencies = [
"once_cell",
"percent-encoding",
"pin-project-lite",
"rustls-pemfile",
"rustls-pemfile 2.1.2",
"serde",
"serde_json",
"serde_urlencoded",
@ -1742,19 +1819,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e"
dependencies = [
"ring",
"rustls-webpki",
"rustls-webpki 0.101.7",
"sct",
]
[[package]]
name = "rustls"
version = "0.23.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4828ea528154ae444e5a642dbb7d5623354030dc9822b83fd9bb79683c7399d0"
dependencies = [
"once_cell",
"rustls-pki-types",
"rustls-webpki 0.102.5",
"subtle",
"zeroize",
]
[[package]]
name = "rustls-pemfile"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
dependencies = [
"base64",
"base64 0.21.7",
]
[[package]]
name = "rustls-pemfile"
version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d"
dependencies = [
"base64 0.22.1",
"rustls-pki-types",
]
[[package]]
name = "rustls-pki-types"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d"
[[package]]
name = "rustls-webpki"
version = "0.101.7"
@ -1765,6 +1871,17 @@ dependencies = [
"untrusted",
]
[[package]]
name = "rustls-webpki"
version = "0.102.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9a6fccd794a42c2c105b513a2f62bc3fd8f3ba57a4593677ceb0bd035164d78"
dependencies = [
"ring",
"rustls-pki-types",
"untrusted",
]
[[package]]
name = "ryu"
version = "1.0.18"
@ -2015,6 +2132,15 @@ dependencies = [
"serde",
]
[[package]]
name = "serde_spanned"
version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0"
dependencies = [
"serde",
]
[[package]]
name = "serde_urlencoded"
version = "0.7.1"
@ -2180,8 +2306,8 @@ dependencies = [
"paste",
"percent-encoding",
"rust_decimal",
"rustls",
"rustls-pemfile",
"rustls 0.21.12",
"rustls-pemfile 1.0.4",
"serde",
"serde_json",
"sha2",
@ -2243,7 +2369,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418"
dependencies = [
"atoi",
"base64",
"base64 0.21.7",
"bigdecimal",
"bitflags 2.6.0",
"byteorder",
@ -2290,7 +2416,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e"
dependencies = [
"atoi",
"base64",
"base64 0.21.7",
"bigdecimal",
"bitflags 2.6.0",
"byteorder",
@ -2357,7 +2483,12 @@ dependencies = [
name = "sr_download"
version = "0.1.0"
dependencies = [
"db_part",
"reqwest",
"serde",
"tokio",
"toml",
"tracing",
]
[[package]]
@ -2431,9 +2562,9 @@ dependencies = [
[[package]]
name = "sync_wrapper"
version = "0.1.2"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"
[[package]]
name = "system-configuration"
@ -2474,6 +2605,15 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "tests"
version = "0.1.0"
dependencies = [
"anyhow",
"reqwest",
"tokio",
]
[[package]]
name = "thiserror"
version = "1.0.63"
@ -2590,6 +2730,17 @@ dependencies = [
"tokio",
]
[[package]]
name = "tokio-rustls"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4"
dependencies = [
"rustls 0.23.11",
"rustls-pki-types",
"tokio",
]
[[package]]
name = "tokio-stream"
version = "0.1.15"
@ -2614,11 +2765,26 @@ dependencies = [
"tokio",
]
[[package]]
name = "toml"
version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac2caab0bf757388c6c0ae23b3293fdb463fee59434529014f85e3263b995c28"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit 0.22.16",
]
[[package]]
name = "toml_datetime"
version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
@ -2628,9 +2794,43 @@ checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
dependencies = [
"indexmap",
"toml_datetime",
"winnow",
"winnow 0.5.40",
]
[[package]]
name = "toml_edit"
version = "0.22.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788"
dependencies = [
"indexmap",
"serde",
"serde_spanned",
"toml_datetime",
"winnow 0.6.13",
]
[[package]]
name = "tower"
version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
dependencies = [
"futures-core",
"futures-util",
"pin-project",
"pin-project-lite",
"tokio",
"tower-layer",
"tower-service",
]
[[package]]
name = "tower-layer"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
[[package]]
name = "tower-service"
version = "0.3.2"
@ -3056,10 +3256,19 @@ dependencies = [
]
[[package]]
name = "winreg"
version = "0.50.0"
name = "winnow"
version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1"
dependencies = [
"memchr",
]
[[package]]
name = "winreg"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
dependencies = [
"cfg-if",
"windows-sys 0.48.0",

View File

@ -1,7 +1,3 @@
[workspace]
resolver = "2"
members = [
"sr_download",
"migration",
"db_part"
]
members = ["sr_download", "migration", "db_part", "tests"]

View File

@ -4,10 +4,11 @@ version = "0.1.0"
edition = "2021"
[dependencies]
anyhow = { version = "1.0.86", features = ["backtrace"] }
migration = { path = "../migration" }
sea-orm = {version = "0.12.15", features = [
anyhow = { version = "1.0.86", features = ["backtrace"] }
sea-orm = { version = "0.12.15", features = [
"sqlx-postgres",
"runtime-tokio-rustls"
]}
"runtime-tokio-rustls",
] }
tokio = { version = "1.38.1", features = ["full"] }

View File

@ -1,12 +1,18 @@
use anyhow::Ok;
use sea_orm::{ConnectOptions, Database, DatabaseConnection};
use sea_orm::{ConnectOptions, Database};
use migration::{Migrator, MigratorTrait};
pub async fn init_db() -> anyhow::Result<()> {
let mut opt =
ConnectOptions::new("postgres://srdown:srdown@localhost:5432/srdown?currentSchema=srdown");
opt.max_connections(10).sqlx_logging(true);
opt.max_connections(10)
.sqlx_logging(true)
.set_schema_search_path("srdown");
let db = Database::connect(opt).await?;
Migrator::up(&db, None).await?;
Ok(())
}

View File

@ -3,8 +3,11 @@ name = "sr_download"
version = "0.1.0"
edition = "2021"
[dependencies]
reqwest = "0.12.5"
tokio = { version = "1.38.1", features = ["full"] }
toml = "0.8.15"
tracing = "0.1.40"
db_part = { path = "../db_part" }
serde = { version = "1.0.204", features = ["serde_derive"] }
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies.reqwest]
version = "0.11.18"
features = ["blocking", "json"]

View File

@ -0,0 +1,9 @@
use serde::Deserialize;
#[derive(Deserialize)]
pub struct ConfigFile {
pub db_url: String,
pub max_connections: u32,
pub sqlx_logging: bool,
pub schema_search_path: String,
}

View File

@ -1,51 +1,5 @@
fn list_file_in_dir(dir: &str, file_vec: &mut Vec<u64>) -> Result<(), Box<dyn std::error::Error>> {
let save_paths = std::fs::read_dir(dir)?;
for save_path in save_paths {
if let Ok(save_path) = save_path {
let file_name = save_path.file_name();
let file_name = file_name.to_str().unwrap();
// 判断文件名是否以 .xml 结尾
if file_name.ends_with(".xml") {
let file_id = file_name.trim_end_matches(".xml");
let file_id = file_id.parse::<u64>()?;
file_vec.push(file_id);
}
}
}
file_vec.sort();
Ok(())
}
mod config;
mod net;
enum FileKind {
Ship,
Save,
}
/// 飞船 API http://jundroo.com/service/SimpleRockets/DownloadRocket?id=
/// 存档 API http://jundroo.com/service/SimpleRockets/DownloadSandBox?id=
/// curl http://jundroo.com/service/SimpleRockets/DownloadRocket?id=144444
fn get_file_from_jundroo(id: u64) -> Result<FileKind, Box<dyn std::error::Error>> {
let ship_try = reqwest::blocking::get(format!(
"http://jundroo.com/service/SimpleRockets/DownloadRocket?id={}",
id
))?;
println!("ship_try: {:?}", ship_try);
println!("body: {}", ship_try.text()?);
Ok(FileKind::Ship)
}
fn main() {
let mut ship_vec: Vec<u64> = Vec::with_capacity(82_0000);
let mut save_vec: Vec<u64> = Vec::with_capacity(29_0000);
list_file_in_dir("./ship", &mut ship_vec).unwrap();
list_file_in_dir("./save", &mut save_vec).unwrap();
let _ = get_file_from_jundroo(144444);
for i in 144444..144450 {
let _ = get_file_from_jundroo(i);
}
println!("ship: {}, save: {}", ship_vec.len(), save_vec.len());
}
#[tokio::main]
async fn main() {}

View File

@ -1,13 +1,50 @@
use Request::blocking::Client;
pub struct Downloader {
pub client: Client
pub client: Client,
}
impl Downloader {
pub fn new() -> Self {
Self {
client: Client::new()
client: Client::new(),
}
}
}
fn list_file_in_dir(dir: &str, file_vec: &mut Vec<u64>) -> Result<(), Box<dyn std::error::Error>> {
let save_paths = std::fs::read_dir(dir)?;
for save_path in save_paths {
if let Ok(save_path) = save_path {
let file_name = save_path.file_name();
let file_name = file_name.to_str().unwrap();
// 判断文件名是否以 .xml 结尾
if file_name.ends_with(".xml") {
let file_id = file_name.trim_end_matches(".xml");
let file_id = file_id.parse::<u64>()?;
file_vec.push(file_id);
}
}
}
file_vec.sort();
Ok(())
}
enum FileKind {
Ship,
Save,
}
/// 飞船 API http://jundroo.com/service/SimpleRockets/DownloadRocket?id=
/// 存档 API http://jundroo.com/service/SimpleRockets/DownloadSandBox?id=
/// curl http://jundroo.com/service/SimpleRockets/DownloadRocket?id=144444
fn get_file_from_jundroo(id: u64) -> Result<FileKind, Box<dyn std::error::Error>> {
let ship_try = reqwest::blocking::get(format!(
"http://jundroo.com/service/SimpleRockets/DownloadRocket?id={}",
id
))?;
println!("ship_try: {:?}", ship_try);
println!("body: {}", ship_try.text()?);
Ok(FileKind::Ship)
}