mirror of
https://github.com/ALEZ-DEV/Babylonia-terminal.git
synced 2025-12-16 17:38:51 +00:00
fetch game api to get necessary resources
This commit is contained in:
parent
5ec8ad6c44
commit
081123ec60
34
babylonia-terminal-sdk/src/components/pgr_component.rs
Normal file
34
babylonia-terminal-sdk/src/components/pgr_component.rs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
use serde::Deserialize;
|
||||||
|
use serde::Serialize;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use super::component_downloader::ComponentDownloader;
|
||||||
|
use crate::utils::github_requester::GithubRequester;
|
||||||
|
|
||||||
|
pub struct PGRComponent {
|
||||||
|
path: PathBuf,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GithubRequester for PGRComponent {}
|
||||||
|
|
||||||
|
impl ComponentDownloader for PGRComponent {
|
||||||
|
async fn install<P: downloader::progress::Reporter + 'static>(
|
||||||
|
&self,
|
||||||
|
progress: Option<std::sync::Arc<P>>,
|
||||||
|
) -> anyhow::Result<()> {
|
||||||
|
Self::download(self.path, progress);
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn download<P: downloader::progress::Reporter + 'static>(
|
||||||
|
output_dir: &std::path::PathBuf,
|
||||||
|
progress: Option<std::sync::Arc<P>>,
|
||||||
|
) -> anyhow::Result<std::path::PathBuf> {
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn uncompress(
|
||||||
|
file: std::path::PathBuf,
|
||||||
|
new_filename: std::path::PathBuf,
|
||||||
|
) -> anyhow::Result<()> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
}
|
||||||
122
babylonia-terminal-sdk/src/utils/kuro_prod_api.rs
Normal file
122
babylonia-terminal-sdk/src/utils/kuro_prod_api.rs
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
use serde::Deserialize;
|
||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
|
// start data ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct Index {
|
||||||
|
pub default: Default,
|
||||||
|
pub hash_cache_check_acc_switch: i64,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct Default {
|
||||||
|
pub cdn_list: Vec<CdnList>,
|
||||||
|
pub changelog: Changelog,
|
||||||
|
pub resources: String,
|
||||||
|
pub resources_base_path: String,
|
||||||
|
pub resources_diff: ResourcesDiff,
|
||||||
|
pub resources_exclude_path: Vec<String>,
|
||||||
|
pub resources_exclude_path_need_update: Vec<String>,
|
||||||
|
pub sample_hash_switch: i64,
|
||||||
|
pub version: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct CdnList {
|
||||||
|
#[serde(rename = "K1")]
|
||||||
|
pub k1: i64,
|
||||||
|
#[serde(rename = "K2")]
|
||||||
|
pub k2: i64,
|
||||||
|
#[serde(rename = "P")]
|
||||||
|
pub p: i64,
|
||||||
|
pub url: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct Changelog {
|
||||||
|
#[serde(rename = "zh-Hans")]
|
||||||
|
pub zh_hans: String,
|
||||||
|
pub en: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct ResourcesDiff {
|
||||||
|
pub current_game_info: CurrentGameInfo,
|
||||||
|
pub previous_game_info: PreviousGameInfo,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct CurrentGameInfo {
|
||||||
|
pub file_name: String,
|
||||||
|
pub md5: String,
|
||||||
|
pub version: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct PreviousGameInfo {
|
||||||
|
pub file_name: String,
|
||||||
|
pub md5: String,
|
||||||
|
pub version: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resources ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct Resources {
|
||||||
|
pub resource: Vec<Resource>,
|
||||||
|
pub sample_hash_info: SampleHashInfo,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct Resource {
|
||||||
|
pub dest: String,
|
||||||
|
pub md5: String,
|
||||||
|
pub sample_hash: String,
|
||||||
|
pub size: i64,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct SampleHashInfo {
|
||||||
|
pub sample_num: i64,
|
||||||
|
pub sample_block_max_size: i64,
|
||||||
|
}
|
||||||
|
|
||||||
|
// end data ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
static URL: &str = concat!(
|
||||||
|
"https://",
|
||||||
|
"prod",
|
||||||
|
"-alicdn",
|
||||||
|
"-gamestarter",
|
||||||
|
".kur",
|
||||||
|
"ogame",
|
||||||
|
".com/pcst",
|
||||||
|
"arter/pro",
|
||||||
|
"d/game/G1",
|
||||||
|
"43/4/index.json"
|
||||||
|
);
|
||||||
|
|
||||||
|
pub async fn fetch_resources() -> anyhow::Result<Resources> {
|
||||||
|
let response = reqwest::get(URL).await?;
|
||||||
|
let body = response.text().await?;
|
||||||
|
let index: Index = serde_json::from_str(&body)?;
|
||||||
|
|
||||||
|
let resources_base_url = index.default.cdn_list.first().unwrap().url.clone();
|
||||||
|
let resources_path_url = index.default.resources;
|
||||||
|
let resources_url = format!("{}{}", resources_base_url, resources_path_url);
|
||||||
|
|
||||||
|
let response = reqwest::get(&resources_url).await?;
|
||||||
|
let body = response.text().await?;
|
||||||
|
Ok(serde_json::from_str::<Resources>(&body)?)
|
||||||
|
}
|
||||||
@ -1 +1,2 @@
|
|||||||
pub mod github_requester;
|
pub mod github_requester;
|
||||||
|
pub mod kuro_prod_api;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user