diff options
author | GeckoEidechse <gecko.eidechse+git@pm.me> | 2023-03-02 23:58:08 +0100 |
---|---|---|
committer | GeckoEidechse <gecko.eidechse+git@pm.me> | 2023-03-02 23:58:08 +0100 |
commit | c800dd31355064be8d3de8a74326b1c2b974c78e (patch) | |
tree | c22d9c1a83fafe009f16483bc88a96bbdd49dba0 /src-tauri/src/thunderstore/mod.rs | |
parent | c60b7b606dd0b4bc7108f9a768a4545f0781730c (diff) | |
parent | 441b81ef0f46062713f618a57e0d297c8a7a70d3 (diff) | |
download | FlightCore-c800dd31355064be8d3de8a74326b1c2b974c78e.tar.gz FlightCore-c800dd31355064be8d3de8a74326b1c2b974c78e.zip |
Merge branch 'main' into feat/basic-log-parsingfeat/basic-log-parsing
Diffstat (limited to 'src-tauri/src/thunderstore/mod.rs')
-rw-r--r-- | src-tauri/src/thunderstore/mod.rs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src-tauri/src/thunderstore/mod.rs b/src-tauri/src/thunderstore/mod.rs new file mode 100644 index 00000000..9151ba7c --- /dev/null +++ b/src-tauri/src/thunderstore/mod.rs @@ -0,0 +1,76 @@ +//! For interacting with Thunderstore API +use app::constants::{APP_USER_AGENT, BLACKLISTED_MODS}; +use serde::{Deserialize, Serialize}; +use std::collections::HashSet; +use ts_rs::TS; + +#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, TS)] +#[ts(export)] +pub struct ThunderstoreMod { + pub name: String, + pub full_name: String, + pub owner: String, + pub package_url: String, + pub date_created: String, + pub date_updated: String, + pub uuid4: String, + pub rating_score: i32, + pub is_pinned: bool, + pub is_deprecated: bool, + pub has_nsfw_content: bool, + pub categories: Vec<String>, + pub versions: Vec<ThunderstoreModVersion>, +} + +#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, TS)] +#[ts(export)] +pub struct ThunderstoreModVersion { + pub name: String, + pub full_name: String, + pub description: String, + pub icon: String, + pub version_number: String, + pub dependencies: Vec<String>, + pub download_url: String, + pub downloads: i32, + pub date_created: String, + pub website_url: String, + pub is_active: bool, + pub uuid4: String, + pub file_size: i64, +} + +/// Queries Thunderstore packages API +#[tauri::command] +pub async fn query_thunderstore_packages_api() -> Result<Vec<ThunderstoreMod>, String> { + println!("Fetching Thunderstore API"); + + // Fetches + let url = "https://northstar.thunderstore.io/api/v1/package/"; + + let client = reqwest::Client::new(); + let res = client + .get(url) + .header(reqwest::header::USER_AGENT, APP_USER_AGENT) + .send() + .await + .unwrap() + .text() + .await + .unwrap(); + + // Parse response + let parsed_json: Vec<ThunderstoreMod> = match serde_json::from_str(&res) { + Ok(res) => res, + Err(err) => return Err(err.to_string()), + }; + + // Remove some mods from listing + let to_remove_set: HashSet<&str> = BLACKLISTED_MODS.iter().map(|s| s.as_ref()).collect(); + let filtered_packages = parsed_json + .into_iter() + .filter(|package| !to_remove_set.contains(&package.full_name.as_ref())) + .collect::<Vec<ThunderstoreMod>>(); + + Ok(filtered_packages) +} |