mirror of
https://github.com/ALEZ-DEV/Babylonia-terminal.git
synced 2025-12-16 01:18:50 +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 kuro_prod_api;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user