aboutsummaryrefslogtreecommitdiff
path: root/src-tauri/src/thunderstore
diff options
context:
space:
mode:
authorGeckoEidechse <gecko.eidechse+git@pm.me>2023-03-02 23:58:08 +0100
committerGeckoEidechse <gecko.eidechse+git@pm.me>2023-03-02 23:58:08 +0100
commitc800dd31355064be8d3de8a74326b1c2b974c78e (patch)
treec22d9c1a83fafe009f16483bc88a96bbdd49dba0 /src-tauri/src/thunderstore
parentc60b7b606dd0b4bc7108f9a768a4545f0781730c (diff)
parent441b81ef0f46062713f618a57e0d297c8a7a70d3 (diff)
downloadFlightCore-c800dd31355064be8d3de8a74326b1c2b974c78e.tar.gz
FlightCore-c800dd31355064be8d3de8a74326b1c2b974c78e.zip
Merge branch 'main' into feat/basic-log-parsingfeat/basic-log-parsing
Diffstat (limited to 'src-tauri/src/thunderstore')
-rw-r--r--src-tauri/src/thunderstore/mod.rs76
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)
+}