From 646d8dc14c67afb8c3ed07aa55ea6093789a25e3 Mon Sep 17 00:00:00 2001 From: Pauline Date: Thu, 25 Jul 2024 13:22:13 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A8=20chore:=20format?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 1 - apps/desktop/package.json | 8 +- apps/desktop/src-tauri/build.rs | 8 +- apps/desktop/src-tauri/src/api/commands.rs | 53 +-- .../overlay/cluster/ClusterCreationModal.tsx | 29 +- .../src/ui/pages/browser/BrowserMain.tsx | 8 +- .../src/ui/pages/browser/BrowserMod.tsx | 8 +- .../src/ui/pages/cluster/ClusterLogs.tsx | 4 +- .../src/ui/pages/cluster/ClusterMods.tsx | 4 +- .../src/ui/pages/cluster/ClusterOverview.tsx | 4 +- .../pages/settings/game/SettingsAccounts.tsx | 4 +- crates/core/src/api/package/content/mod.rs | 124 +++--- .../core/src/api/package/content/modrinth.rs | 409 +++++++++--------- crates/core/src/api/package/mod.rs | 2 +- crates/core/src/game/mod.rs | 2 +- crates/core/src/store/flags.rs | 1 - crates/core/src/store/mod.rs | 2 - crates/core/src/store/package.rs | 31 +- crates/testing/Cargo.toml | 4 +- crates/testing/src/main.rs | 41 +- eslint.config.js | 4 - package.json | 1 + packages/client/package.json | 1 + packages/scripts/package.json | 2 +- pnpm-lock.yaml | 11 +- 25 files changed, 394 insertions(+), 372 deletions(-) delete mode 100644 crates/core/src/store/flags.rs diff --git a/Cargo.toml b/Cargo.toml index 2128c7b0..1dd59d6b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -139,7 +139,6 @@ sys-info = { version = "0.9" } whoami = { version = "1.5" } cocoa = { version = "0.25" } objc = { version = "0.2" } - webbrowser = { version = "1.0" } url = { version = "2.5.2" } diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 9d975501..34c0bb36 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -10,9 +10,9 @@ "directory": "apps/desktop" }, "scripts": { - "tauri": "tauri", - "dev": "vite dev", - "build": "vite build" + "tauri": "pnpm tauri", + "dev": "pnpm vite dev", + "build": "pnpm vite build" }, "dependencies": { "@fontsource/poppins": "^5.0.14", @@ -27,7 +27,7 @@ "@solidjs/router": "^0.14.1", "@tanstack/solid-query": "^5.51.9", "@tauri-apps/api": "^2.0.0-beta.13", - "@tauri-apps/plugin-clipboard-manager": "2.1.0-beta.5", + "@tauri-apps/plugin-clipboard-manager": "github:tauri-apps/tauri-plugin-clipboard-manager#v2", "@tauri-apps/plugin-shell": "github:tauri-apps/tauri-plugin-shell#v2", "@thisbeyond/solid-dnd": "^0.7.5", "@thisbeyond/solid-select": "^0.15.0", diff --git a/apps/desktop/src-tauri/build.rs b/apps/desktop/src-tauri/build.rs index 2f9caabf..05964c47 100644 --- a/apps/desktop/src-tauri/build.rs +++ b/apps/desktop/src-tauri/build.rs @@ -26,10 +26,10 @@ fn main() { "set_settings", // Metadata "get_minecraft_versions", - // Package - "random_mods", - "get_mod", - "download_mod", + // Package + "random_mods", + "get_mod", + "download_mod", // Other "get_program_info", ]), diff --git a/apps/desktop/src-tauri/src/api/commands.rs b/apps/desktop/src-tauri/src/api/commands.rs index 186ed495..5c1fa18c 100644 --- a/apps/desktop/src-tauri/src/api/commands.rs +++ b/apps/desktop/src-tauri/src/api/commands.rs @@ -41,10 +41,10 @@ macro_rules! collect_commands { set_settings, // Metadata get_minecraft_versions, - // Package - random_mods, - get_mod, - download_mod, + // Package + random_mods, + get_mod, + download_mod, // Other get_program_info, ]) @@ -110,14 +110,14 @@ pub async fn run_cluster(uuid: Uuid) -> Result<(Uuid, u32), String> { .id() .unwrap_or(0); - // tokio::task::spawn(async move { - // let mut proc = c_lock.write().await; + // tokio::task::spawn(async move { + // let mut proc = c_lock.write().await; // if let Err(err) = processor::wait_for(&mut proc).await { - // tracing::error!("Error waiting for process: {:?}", err); - // }; - // }); + // tracing::error!("Error waiting for process: {:?}", err); + // }; + // }); - // let mut proc = c_lock.write().await; + // let mut proc = c_lock.write().await; // processor::wait_for(&mut proc).await?; Ok((p_uuid, p_pid)) @@ -252,31 +252,34 @@ pub async fn remove_user(uuid: Uuid) -> Result<(), String> { #[specta::specta] #[tauri::command] pub async fn random_mods() -> Result, String> { - let provider = content::Providers::Modrinth; - Ok(provider.list().await?) + let provider = content::Providers::Modrinth; + Ok(provider.list().await?) } #[specta::specta] #[tauri::command] pub async fn get_mod(project_id: String) -> Result { - let provider = content::Providers::Modrinth; - Ok(provider.get(&project_id).await?) + let provider = content::Providers::Modrinth; + Ok(provider.get(&project_id).await?) } #[specta::specta] #[tauri::command] pub async fn download_mod(cluster_id: Uuid, version_id: String) -> Result<(), String> { - let cluster = cluster::get_by_uuid(cluster_id, None).await?.ok_or("cluster not found")?; - let provider = content::Providers::Modrinth; - let game_version = cluster.meta.mc_version.clone(); + let cluster = cluster::get_by_uuid(cluster_id, None) + .await? + .ok_or("cluster not found")?; + let provider = content::Providers::Modrinth; + let game_version = cluster.meta.mc_version.clone(); - provider.get_version_for_game_version(&version_id, &game_version) - .await? - .files - .first() - .ok_or("no files found")? - .download_to_cluster(&cluster) - .await?; + provider + .get_version_for_game_version(&version_id, &game_version) + .await? + .files + .first() + .ok_or("no files found")? + .download_to_cluster(&cluster) + .await?; - Ok(()) + Ok(()) } diff --git a/apps/desktop/src/ui/components/overlay/cluster/ClusterCreationModal.tsx b/apps/desktop/src/ui/components/overlay/cluster/ClusterCreationModal.tsx index 7efbd4e7..f4e0657e 100644 --- a/apps/desktop/src/ui/components/overlay/cluster/ClusterCreationModal.tsx +++ b/apps/desktop/src/ui/components/overlay/cluster/ClusterCreationModal.tsx @@ -79,23 +79,18 @@ export function ClusterModalController(props: ParentProps) { setVisible(false); - try { - await bridge.commands.createCluster({ - name: untracked.name!, - mod_loader: untracked.mod_loader!, - mc_version: untracked.mc_version!, - // TODO: Implement the rest of the fields - icon: null, - icon_url: null, - loader_version: null, - package_data: null, - skip: null, - skip_watch: null, - }); - } - catch (err) { - console.log(err); - } + await bridge.commands.createCluster({ + name: untracked.name!, + mod_loader: untracked.mod_loader!, + mc_version: untracked.mc_version!, + // TODO: Implement the rest of the fields + icon: null, + icon_url: null, + loader_version: null, + package_data: null, + skip: null, + skip_watch: null, + }); setInProgress(false); }; diff --git a/apps/desktop/src/ui/pages/browser/BrowserMain.tsx b/apps/desktop/src/ui/pages/browser/BrowserMain.tsx index 3d94bd72..f1bb01f4 100644 --- a/apps/desktop/src/ui/pages/browser/BrowserMain.tsx +++ b/apps/desktop/src/ui/pages/browser/BrowserMain.tsx @@ -1,13 +1,13 @@ import { A } from '@solidjs/router'; import { Download01Icon, FileCode01Icon, FilterLinesIcon, SearchMdIcon } from '@untitled-theme/icons-solid'; -import { For, createEffect, createSignal, onMount } from 'solid-js'; +import { For, createSignal, onMount } from 'solid-js'; import type { ManagedPackage } from '~bindings'; import { bridge } from '~imports'; import Button from '~ui/components/base/Button'; import Dropdown from '~ui/components/base/Dropdown'; import TextField from '~ui/components/base/TextField'; import ModCard, { Provider } from '~ui/components/content/ModCard'; -import useCommand, { tryResult } from '~ui/hooks/useCommand'; +import { tryResult } from '~ui/hooks/useCommand'; import createSortable from '~utils/sorting'; interface CardProps { @@ -23,7 +23,7 @@ interface BrowserFilters { } function BrowserMain() { - const [filters, setFilters] = createSignal({ + const [_filters, _setFilters] = createSignal({ provider: [Provider.Curseforge], }); @@ -35,7 +35,7 @@ function BrowserMain() { tryResult(bridge.commands.getMod, 'oneconfig'), tryResult(bridge.commands.getMod, 'chatting'), tryResult(bridge.commands.getMod, 'patcher'), - ]).then((res) => { + ]).then((res: ManagedPackage[]) => { const list: ModsRowProps[] = [ { header: 'Polyfrost', diff --git a/apps/desktop/src/ui/pages/browser/BrowserMod.tsx b/apps/desktop/src/ui/pages/browser/BrowserMod.tsx index 5c8a4484..a724e785 100644 --- a/apps/desktop/src/ui/pages/browser/BrowserMod.tsx +++ b/apps/desktop/src/ui/pages/browser/BrowserMod.tsx @@ -1,6 +1,6 @@ import { type Params, useSearchParams } from '@solidjs/router'; import { Download01Icon } from '@untitled-theme/icons-solid'; -import { For, Match, Switch, createSignal, onMount } from 'solid-js'; +import { For, createSignal, onMount } from 'solid-js'; import { bridge } from '~imports'; import Button from '~ui/components/base/Button'; import Dropdown from '~ui/components/base/Dropdown'; @@ -16,7 +16,7 @@ interface BrowserModParams extends Params { // TODO: Refactor the entire browser page and subpages function BrowserMod() { const [params] = useSearchParams(); - const isInvalid = !params.id || !params.provider; + const _isInvalid = !params.id || !params.provider; const [visible, setVisible] = createSignal(false); const [cluster, setCluster] = createSignal(); const [clusters, setClusters] = createSignal<[string, string][]>(); @@ -28,9 +28,7 @@ function BrowserMod() { function download() { setVisible(false); - tryResult(bridge.commands.downloadMod, cluster()!, params.id!).then((res) => { - console.log('finished'); - }).catch(err => console.error(err)); + tryResult(bridge.commands.downloadMod, cluster()!, params.id!).then().catch(err => console.error(err)); } function onChange(selected: number) { diff --git a/apps/desktop/src/ui/pages/cluster/ClusterLogs.tsx b/apps/desktop/src/ui/pages/cluster/ClusterLogs.tsx index ba7af04e..1e450585 100644 --- a/apps/desktop/src/ui/pages/cluster/ClusterLogs.tsx +++ b/apps/desktop/src/ui/pages/cluster/ClusterLogs.tsx @@ -4,12 +4,12 @@ import { OverlayScrollbarsComponent } from 'overlayscrollbars-solid'; function ClusterLogs() { const [params] = useSearchParams(); - const [logs] = createResource(params.id, async (uuid: string) => { + const [logs] = createResource(params.id, async (_uuid: string) => { return [] as string[]; }); const [activeLogFile, setActiveLogFile] = createSignal(null); - const [log, setLog] = createSignal(null); + const [log, _setLog] = createSignal(null); // createEffect(() => { // const log = logs()?.[0]; diff --git a/apps/desktop/src/ui/pages/cluster/ClusterMods.tsx b/apps/desktop/src/ui/pages/cluster/ClusterMods.tsx index 1f2ae3f3..b0d79ce4 100644 --- a/apps/desktop/src/ui/pages/cluster/ClusterMods.tsx +++ b/apps/desktop/src/ui/pages/cluster/ClusterMods.tsx @@ -1,7 +1,7 @@ import { ArrowRightIcon, ChevronDownIcon, ChevronUpIcon, Edit02Icon, SearchMdIcon, Trash03Icon } from '@untitled-theme/icons-solid'; import { For, Match, Switch, createSignal, onMount } from 'solid-js'; import * as uuid from 'uuid'; -import uFuzzy from '@leeoniya/ufuzzy'; +import UFuzzy from '@leeoniya/ufuzzy'; import Button from '~ui/components/base/Button'; import TextField from '~ui/components/base/TextField'; import ScrollableContainer from '~ui/components/ScrollableContainer'; @@ -40,7 +40,7 @@ function ClusterMods() { // true - `A to Z` & false - `Z to A` const [sortingAtoZ, setSortingAtoZ] = createSignal(true); - const uf = new uFuzzy(); + const uf = new UFuzzy(); const [modsSearchable] = createSignal(() => mods().map(mod => mod.name)); function search(value: string) { diff --git a/apps/desktop/src/ui/pages/cluster/ClusterOverview.tsx b/apps/desktop/src/ui/pages/cluster/ClusterOverview.tsx index a920faf0..2f7bdcdc 100644 --- a/apps/desktop/src/ui/pages/cluster/ClusterOverview.tsx +++ b/apps/desktop/src/ui/pages/cluster/ClusterOverview.tsx @@ -102,9 +102,9 @@ function DeleteModal(props: DeleteModalProps) { function Banner(props: Cluster & { showDeletePrompt: () => void }) { async function launch() { - const [uuid, pid] = await tryResult(bridge.commands.runCluster, props.uuid); + const [_uuid, _pid] = await tryResult(bridge.commands.runCluster, props.uuid); - console.log(uuid, pid); + // console.log(uuid, pid); } return ( diff --git a/apps/desktop/src/ui/pages/settings/game/SettingsAccounts.tsx b/apps/desktop/src/ui/pages/settings/game/SettingsAccounts.tsx index e4f9d629..c1d1e457 100644 --- a/apps/desktop/src/ui/pages/settings/game/SettingsAccounts.tsx +++ b/apps/desktop/src/ui/pages/settings/game/SettingsAccounts.tsx @@ -61,10 +61,10 @@ function SettingsAccounts() { if (data.status === 'ok') { // @ts-expect-error -- aa window.tempData = data.data; - console.log('set'); + // console.log('set'); } else { - console.log(data.error); + // console.log(data.error); } }); }} diff --git a/crates/core/src/api/package/content/mod.rs b/crates/core/src/api/package/content/mod.rs index f65a3e7d..c03b231c 100644 --- a/crates/core/src/api/package/content/mod.rs +++ b/crates/core/src/api/package/content/mod.rs @@ -5,7 +5,8 @@ use anyhow::anyhow; use serde::{Deserialize, Serialize}; -use crate::{data::{ManagedPackage, ManagedVersion}, Result}; +use crate::data::{ManagedPackage, ManagedVersion}; +use crate::Result; mod modrinth; @@ -13,64 +14,83 @@ mod modrinth; #[cfg_attr(feature = "tauri", derive(specta::Type))] #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone)] pub enum Providers { - // Curseforge, - Modrinth, + // Curseforge, + Modrinth, } impl Providers { - /// Get the name of the provider - pub fn name(&self) -> &str { - match self { - // Providers::Curseforge => "Curseforge", - Providers::Modrinth => "Modrinth", - } - } + /// Get the name of the provider + pub fn name(&self) -> &str { + match self { + // Providers::Curseforge => "Curseforge", + Providers::Modrinth => "Modrinth", + } + } - /// Get the URL of the provider - pub fn url(&self) -> &str { - match self { - // Providers::Curseforge => "https://curseforge.com/", - Providers::Modrinth => "https://modrinth.com", - } - } + /// Get the URL of the provider + pub fn url(&self) -> &str { + match self { + // Providers::Curseforge => "https://curseforge.com/", + Providers::Modrinth => "https://modrinth.com", + } + } - pub async fn list(&self) -> Result> { - Ok(match self { - // Providers::Curseforge => curseforge::list(), - Providers::Modrinth => modrinth::list(), - }.await?.into_iter().map(|p| p.into()).collect()) - } + pub async fn list(&self) -> Result> { + Ok(match self { + // Providers::Curseforge => curseforge::list(), + Providers::Modrinth => modrinth::list(), + } + .await? + .into_iter() + .map(|p| p.into()) + .collect()) + } - pub async fn get(&self, slug_or_id: &str) -> Result { - Ok(match self { - // Providers::Curseforge => curseforge::get(slug), - Providers::Modrinth => modrinth::get(slug_or_id), - }.await?.into()) - } + pub async fn get(&self, slug_or_id: &str) -> Result { + Ok(match self { + // Providers::Curseforge => curseforge::get(slug), + Providers::Modrinth => modrinth::get(slug_or_id), + } + .await? + .into()) + } - pub async fn get_versions(&self, project_id: &str) -> Result> { - Ok(match self { - // Providers::Curseforge => curseforge::get_versions(slug), - Providers::Modrinth => modrinth::get_versions(project_id), - }.await?.into_iter().map(|p| p.into()).collect()) - } + pub async fn get_versions(&self, project_id: &str) -> Result> { + Ok(match self { + // Providers::Curseforge => curseforge::get_versions(slug), + Providers::Modrinth => modrinth::get_versions(project_id), + } + .await? + .into_iter() + .map(|p| p.into()) + .collect()) + } - pub async fn get_version(&self, version_id: &str) -> Result { - Ok(match self { - // Providers::Curseforge => curseforge::get_version(slug, version), - Providers::Modrinth => modrinth::get_version(version_id), - }.await?.into()) - } + pub async fn get_version(&self, version_id: &str) -> Result { + Ok(match self { + // Providers::Curseforge => curseforge::get_version(slug, version), + Providers::Modrinth => modrinth::get_version(version_id), + } + .await? + .into()) + } - pub async fn get_version_for_game_version(&self, id: &str, game_version: &str) -> Result { - let versions = self.get_versions(id).await?; - Ok(versions.into_iter().find(|v| v.game_versions.contains(&game_version.to_string())).ok_or(anyhow!("no game version found"))?) // TODO: error handling - } + pub async fn get_version_for_game_version( + &self, + id: &str, + game_version: &str, + ) -> Result { + let versions = self.get_versions(id).await?; + Ok(versions + .into_iter() + .find(|v| v.game_versions.contains(&game_version.to_string())) + .ok_or(anyhow!("no game version found"))?) // TODO: error handling + } - // pub async fn search(&self, query: &str) -> Result> { - // match self { - // // Providers::Curseforge => curseforge::search(query), - // Providers::Modrinth => modrinth::search(query), - // }.await - // } -} \ No newline at end of file + // pub async fn search(&self, query: &str) -> Result> { + // match self { + // // Providers::Curseforge => curseforge::search(query), + // Providers::Modrinth => modrinth::search(query), + // }.await + // } +} diff --git a/crates/core/src/api/package/content/modrinth.rs b/crates/core/src/api/package/content/modrinth.rs index 9796f0b1..2b334e7e 100644 --- a/crates/core/src/api/package/content/modrinth.rs +++ b/crates/core/src/api/package/content/modrinth.rs @@ -1,8 +1,8 @@ +use crate::data::{ManagedPackage, ManagedVersion, PackageType}; use crate::package::from::MODRINTH_API_URL; use crate::store::{ManagedVersionFile, PackageFile, PackageSide}; use crate::utils::http::fetch; -use crate::{State, Result}; -use crate::data::{ManagedPackage, ManagedVersion, PackageType}; +use crate::{Result, State}; use anyhow::anyhow; use chrono::{DateTime, Utc}; @@ -12,118 +12,118 @@ use serde_json::Value; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ModrinthPackage { - pub slug: String, - pub title: String, - #[serde(default)] - pub description: String, - #[serde(default)] - pub categories: Vec, - #[serde(rename = "client_side")] - pub client_side: PackageSide, - #[serde(rename = "server_side")] - pub server_side: PackageSide, - // #[serde(default)] - // pub body: String, - // #[serde(default)] - // pub status: String, - // #[serde(default)] - // #[serde(rename = "requested_status")] - // pub requested_status: String, - #[serde(default)] - #[serde(rename = "additional_categories")] - pub additional_categories: Vec, - // #[serde(rename = "issues_url")] - // pub issues_url: String, - // #[serde(rename = "source_url")] - // pub source_url: String, - // #[serde(rename = "wiki_url")] - // pub wiki_url: String, - // #[serde(rename = "discord_url")] - // pub discord_url: String, - // #[serde(rename = "donation_urls")] - // pub donation_urls: Vec, - // #[serde(rename = "project_type")] - // pub project_type: String, - pub downloads: u32, - #[serde(rename = "icon_url")] - #[serde(default)] - pub icon_url: String, - // pub color: i64, - // #[serde(rename = "thread_id")] - // pub thread_id: String, - // #[serde(rename = "monetization_status")] - // pub monetization_status: String, - pub id: String, - // pub team: String, - // #[serde(rename = "body_url")] - // pub body_url: Value, - // #[serde(rename = "moderator_message")] - // pub moderator_message: Value, - pub published: DateTime, - pub updated: DateTime, - // pub approved: DateTime, - // pub queued: String, - pub followers: u32, - // pub license: License, - #[serde(default)] - pub versions: Vec, - #[serde(rename = "game_versions")] - pub game_versions: Vec, - #[serde(default)] - pub loaders: Vec, - // pub gallery: Vec, + pub slug: String, + pub title: String, + #[serde(default)] + pub description: String, + #[serde(default)] + pub categories: Vec, + #[serde(rename = "client_side")] + pub client_side: PackageSide, + #[serde(rename = "server_side")] + pub server_side: PackageSide, + // #[serde(default)] + // pub body: String, + // #[serde(default)] + // pub status: String, + // #[serde(default)] + // #[serde(rename = "requested_status")] + // pub requested_status: String, + #[serde(default)] + #[serde(rename = "additional_categories")] + pub additional_categories: Vec, + // #[serde(rename = "issues_url")] + // pub issues_url: String, + // #[serde(rename = "source_url")] + // pub source_url: String, + // #[serde(rename = "wiki_url")] + // pub wiki_url: String, + // #[serde(rename = "discord_url")] + // pub discord_url: String, + // #[serde(rename = "donation_urls")] + // pub donation_urls: Vec, + // #[serde(rename = "project_type")] + // pub project_type: String, + pub downloads: u32, + #[serde(rename = "icon_url")] + #[serde(default)] + pub icon_url: String, + // pub color: i64, + // #[serde(rename = "thread_id")] + // pub thread_id: String, + // #[serde(rename = "monetization_status")] + // pub monetization_status: String, + pub id: String, + // pub team: String, + // #[serde(rename = "body_url")] + // pub body_url: Value, + // #[serde(rename = "moderator_message")] + // pub moderator_message: Value, + pub published: DateTime, + pub updated: DateTime, + // pub approved: DateTime, + // pub queued: String, + pub followers: u32, + // pub license: License, + #[serde(default)] + pub versions: Vec, + #[serde(rename = "game_versions")] + pub game_versions: Vec, + #[serde(default)] + pub loaders: Vec, + // pub gallery: Vec, } impl From for ManagedPackage { - fn from(value: ModrinthPackage) -> ManagedPackage { - ManagedPackage { - id: value.id, - title: value.title, - description: value.description, - main: value.slug, - versions: value.versions, - game_versions: value.game_versions, - loaders: value.loaders, - icon_url: Some(value.icon_url), - created: value.published, - updated: value.updated, - client: value.client_side, - server: value.server_side, - downloads: value.downloads, - followers: value.followers, - categories: value.categories, - optional_categories: Some(value.additional_categories), - uid: None, - package_type: PackageType::Mod, - } - } + fn from(value: ModrinthPackage) -> ManagedPackage { + ManagedPackage { + id: value.id, + title: value.title, + description: value.description, + main: value.slug, + versions: value.versions, + game_versions: value.game_versions, + loaders: value.loaders, + icon_url: Some(value.icon_url), + created: value.published, + updated: value.updated, + client: value.client_side, + server: value.server_side, + downloads: value.downloads, + followers: value.followers, + categories: value.categories, + optional_categories: Some(value.additional_categories), + uid: None, + package_type: PackageType::Mod, + } + } } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DonationUrl { - pub id: String, - pub platform: String, - pub url: String, + pub id: String, + pub platform: String, + pub url: String, } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct License { - pub id: String, - pub name: String, - pub url: String, + pub id: String, + pub name: String, + pub url: String, } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Gallery { - pub url: String, - pub featured: bool, - pub title: String, - pub description: String, - pub created: String, - pub ordering: i64, + pub url: String, + pub featured: bool, + pub title: String, + pub description: String, + pub created: String, + pub ordering: i64, } macro_rules! format_url { @@ -133,144 +133,143 @@ macro_rules! format_url { } pub async fn list() -> Result> { - Ok(serde_json::from_slice( - &fetch( - format_url!("/projects_random?count=10").as_str(), - None, - &State::get().await?.fetch_semaphore - ).await? - )?) + Ok(serde_json::from_slice( + &fetch( + format_url!("/projects_random?count=10").as_str(), + None, + &State::get().await?.fetch_semaphore, + ) + .await?, + )?) } pub async fn get(id: &str) -> Result { - Ok(serde_json::from_slice( - &fetch( - format_url!("/project/{}", id).as_str(), - None, - &State::get().await?.fetch_semaphore - ).await? - )?) + Ok(serde_json::from_slice( + &fetch( + format_url!("/project/{}", id).as_str(), + None, + &State::get().await?.fetch_semaphore, + ) + .await?, + )?) } #[derive(Serialize, Deserialize)] struct SearchResults { - hits: Vec, + hits: Vec, } -pub async fn search( - query: &str, -) -> Result> { - // TODO: Fix date_created and date_updated inconsistency (published and updated) - let response: SearchResults = serde_json::from_slice( +pub async fn search(query: &str) -> Result> { + // TODO: Fix date_created and date_updated inconsistency (published and updated) + let response: SearchResults = serde_json::from_slice( &fetch( - format_url!("/search?query={}", query).as_str(), - None, - &State::get().await?.fetch_semaphore - ).await?, + format_url!("/search?query={}", query).as_str(), + None, + &State::get().await?.fetch_semaphore, + ) + .await?, )?; - Ok(response.hits) + Ok(response.hits) } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ModrinthVersion { - #[serde(rename = "game_versions")] - pub game_versions: Vec, - pub loaders: Vec, - pub id: String, - #[serde(rename = "project_id")] - pub project_id: String, - #[serde(rename = "author_id")] - pub author_id: String, - pub featured: bool, - pub name: String, - #[serde(rename = "version_number")] - pub version_number: String, - pub changelog: String, - #[serde(rename = "changelog_url")] - pub changelog_url: Option, - #[serde(rename = "date_published")] - pub date_published: DateTime, - pub downloads: u32, - #[serde(rename = "version_type")] - pub version_type: String, - pub status: String, - #[serde(rename = "requested_status")] - pub requested_status: Value, - pub files: Vec, - pub dependencies: Vec, + #[serde(rename = "game_versions")] + pub game_versions: Vec, + pub loaders: Vec, + pub id: String, + #[serde(rename = "project_id")] + pub project_id: String, + #[serde(rename = "author_id")] + pub author_id: String, + pub featured: bool, + pub name: String, + #[serde(rename = "version_number")] + pub version_number: String, + pub changelog: String, + #[serde(rename = "changelog_url")] + pub changelog_url: Option, + #[serde(rename = "date_published")] + pub date_published: DateTime, + pub downloads: u32, + #[serde(rename = "version_type")] + pub version_type: String, + pub status: String, + #[serde(rename = "requested_status")] + pub requested_status: Value, + pub files: Vec, + pub dependencies: Vec, } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct File { - pub url: String, - pub filename: String, - pub primary: bool, - pub size: u32, - #[serde(rename = "file_type")] - pub file_type: Option, + pub url: String, + pub filename: String, + pub primary: bool, + pub size: u32, + #[serde(rename = "file_type")] + pub file_type: Option, } impl From for ManagedVersionFile { - fn from(value: File) -> Self { - ManagedVersionFile { - url: value.url, - file_name: value.filename, - primary: value.primary, - size: value.size, - file_type: value.file_type, - hashes: Default::default(), // TODO - } - } + fn from(value: File) -> Self { + ManagedVersionFile { + url: value.url, + file_name: value.filename, + primary: value.primary, + size: value.size, + file_type: value.file_type, + hashes: Default::default(), // TODO + } + } } impl From for ManagedVersion { - fn from(value: ModrinthVersion) -> Self { - ManagedVersion { - id: value.id, - package_id: value.project_id, - author: value.author_id, - name: value.name, - - featured: value.featured, - version_id: value.version_number, - changelog: value.changelog, - changelog_url: value.changelog_url, - - published: value.date_published, - downloads: value.downloads, - version_type: value.version_type, - - files: value.files.into_iter().map(|f| f.into()).collect(), - deps: vec![], // TODO [`ManagedDependency`]? - game_versions: value.game_versions, - loaders: value.loaders, - } - } + fn from(value: ModrinthVersion) -> Self { + ManagedVersion { + id: value.id, + package_id: value.project_id, + author: value.author_id, + name: value.name, + + featured: value.featured, + version_id: value.version_number, + changelog: value.changelog, + changelog_url: value.changelog_url, + + published: value.date_published, + downloads: value.downloads, + version_type: value.version_type, + + files: value.files.into_iter().map(|f| f.into()).collect(), + deps: vec![], // TODO [`ManagedDependency`]? + game_versions: value.game_versions, + loaders: value.loaders, + } + } } -pub async fn get_versions( - project_id: &str, -) -> Result> { - Ok(serde_json::from_slice( - &fetch( - format_url!("/project/{}/version", project_id).as_str(), - None, - &State::get().await?.fetch_semaphore - ).await? - )?) +pub async fn get_versions(project_id: &str) -> Result> { + Ok(serde_json::from_slice( + &fetch( + format_url!("/project/{}/version", project_id).as_str(), + None, + &State::get().await?.fetch_semaphore, + ) + .await?, + )?) } -pub async fn get_version( - version_id: &str, -) -> Result { - Ok(serde_json::from_slice( - &fetch( - format_url!("/version/{}", version_id).as_str(), - None, - &State::get().await?.fetch_semaphore - ).await? - )?) -} \ No newline at end of file +pub async fn get_version(version_id: &str) -> Result { + Ok(serde_json::from_slice( + &fetch( + format_url!("/version/{}", version_id).as_str(), + None, + &State::get().await?.fetch_semaphore, + ) + .await?, + )?) +} diff --git a/crates/core/src/api/package/mod.rs b/crates/core/src/api/package/mod.rs index cb9ddd2d..e6afb2de 100644 --- a/crates/core/src/api/package/mod.rs +++ b/crates/core/src/api/package/mod.rs @@ -2,8 +2,8 @@ //! //! Utilities for importing packages from and to OneLauncher. +pub mod content; pub mod from; pub mod import; pub mod mrpack; pub mod zip; -pub mod content; \ No newline at end of file diff --git a/crates/core/src/game/mod.rs b/crates/core/src/game/mod.rs index 2a96aceb..7d319d8c 100644 --- a/crates/core/src/game/mod.rs +++ b/crates/core/src/game/mod.rs @@ -366,7 +366,7 @@ pub async fn launch_minecraft( ) .current_dir(instance_path.clone()); - println!("command: {:#?}", command); + println!("command: {:#?}", command); // when cargo makes the DYLD_LIBRARY_PATH it breaks Minecraft #[cfg(target_os = "macos")] diff --git a/crates/core/src/store/flags.rs b/crates/core/src/store/flags.rs deleted file mode 100644 index c3b2029b..00000000 --- a/crates/core/src/store/flags.rs +++ /dev/null @@ -1 +0,0 @@ -//! Global Package Metadata management. diff --git a/crates/core/src/store/mod.rs b/crates/core/src/store/mod.rs index 40797868..538b3e0b 100644 --- a/crates/core/src/store/mod.rs +++ b/crates/core/src/store/mod.rs @@ -46,8 +46,6 @@ pub use self::package::*; mod oneconfig; pub use self::oneconfig::*; -mod flags; - /// The static [`OnceCell>`] for storing the global runtime launcher state. static LAUNCHER_STATE: OnceCell> = OnceCell::const_new(); diff --git a/crates/core/src/store/package.rs b/crates/core/src/store/package.rs index 846d9ec9..36c0ba46 100644 --- a/crates/core/src/store/package.rs +++ b/crates/core/src/store/package.rs @@ -246,21 +246,26 @@ pub struct ManagedVersionFile { } impl ManagedVersionFile { - #[tracing::instrument] - pub async fn download_to_cluster( - &self, - cluster: &Cluster, - ) -> crate::Result<()> { - tracing::info!("downloading mod '{}' to cluster '{}'", self.file_name, cluster.meta.name); - let path = cluster.get_full_path().await?.join("mods").join(&self.file_name); - let state = State::get().await?; + #[tracing::instrument] + pub async fn download_to_cluster(&self, cluster: &Cluster) -> crate::Result<()> { + tracing::info!( + "downloading mod '{}' to cluster '{}'", + self.file_name, + cluster.meta.name + ); + let path = cluster + .get_full_path() + .await? + .join("mods") + .join(&self.file_name); + let state = State::get().await?; - // TODO: Implement hashes - let bytes = http::fetch(&self.url, None, &state.fetch_semaphore).await?; - http::write(&path, &bytes, &state.io_semaphore).await?; + // TODO: Implement hashes + let bytes = http::fetch(&self.url, None, &state.fetch_semaphore).await?; + http::write(&path, &bytes, &state.io_semaphore).await?; - Ok(()) - } + Ok(()) + } } /// Universal interface for managed package dependencies. diff --git a/crates/testing/Cargo.toml b/crates/testing/Cargo.toml index 5c3fce65..0f87ae7b 100644 --- a/crates/testing/Cargo.toml +++ b/crates/testing/Cargo.toml @@ -14,5 +14,5 @@ authors = { workspace = true } onelauncher = { path = "../core", features = [ "cli" ] } tokio = { workspace = true } -webbrowser = { version = "0.8" } -url = { version = "2.5.2" } +webbrowser = { workspace = true } +url = { workspace = true } diff --git a/crates/testing/src/main.rs b/crates/testing/src/main.rs index dd98567b..38ca240b 100644 --- a/crates/testing/src/main.rs +++ b/crates/testing/src/main.rs @@ -46,19 +46,19 @@ async fn main() -> onelauncher::Result<()> { } async fn modrinth() -> onelauncher::Result<()> { - let state = State::get().await?; - - let provider = Providers::Modrinth; + let state = State::get().await?; + let provider = Providers::Modrinth; + let result = provider.get("oneconfig").await?; + println!("{:#?}", result); - let result = provider.get("oneconfig").await?; - println!("{:#?}", result); + let managed_version = provider + .get_version_for_game_version(&result.id, "1.8.9") + .await?; + println!("{:#?}", result); - let managed_version = provider.get_version_for_game_version(&result.id, "1.8.9").await?; - println!("{:#?}", result); - - let name = "forge 1.8.9 oneconfig".to_string(); - let game = "1.8.9".to_string(); - let loader = Loader::Forge; + let name = "Example".to_string(); + let game = "1.21".to_string(); + let loader = Loader::Fabric; let cluster_path = create_cluster( name.clone(), @@ -73,16 +73,23 @@ async fn modrinth() -> onelauncher::Result<()> { ) .await?; - let cluster = cluster::get(&cluster_path, None).await?.expect("couldnt get cluster"); - managed_version.files.first().expect("no files found").download_to_cluster(&cluster).await?; + let cluster = cluster::get(&cluster_path, None) + .await? + .expect("couldnt get cluster"); + managed_version + .files + .first() + .expect("no files found") + .download_to_cluster(&cluster) + .await?; - Ok(()) + Ok(()) } async fn launch_and_authenticate() -> onelauncher::Result<()> { - let state = State::get().await?; + let state = State::get().await?; - if minecraft::users().await?.is_empty() { + if minecraft::users().await?.is_empty() { println!("authenticating"); authenticate_mc().await?; } @@ -137,5 +144,5 @@ async fn launch_and_authenticate() -> onelauncher::Result<()> { let mut proc = c_lock.write().await; processor::wait_for(&mut proc).await?; - Ok(()) + Ok(()) } diff --git a/eslint.config.js b/eslint.config.js index 0b34181d..c4dfbb7a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -28,10 +28,6 @@ export default petal({ { rules: { 'petal/consistent-list-newline': 'off', - 'no-console': 'off', - 'new-cap': 'off', - // temporarily off - 'unused-imports/no-unused-vars': 'off', }, }, ]); diff --git a/package.json b/package.json index 27d7de08..47ebc28a 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "gui": "pnpm --filter @onelauncher/gui -- ", "client": "pnpm --filter @onelauncher/client --", "tauri": "pnpm gui tauri", + "format": "pnpm lint:fix && cargo +nightly fmt", "lint": "pnpm eslint . --cache", "lint:fix": "pnpm lint --fix", "release:node": "pnpm bumpp -r", diff --git a/packages/client/package.json b/packages/client/package.json index c5343317..1dc907fe 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -13,6 +13,7 @@ "sideEffects": false, "main": "./src/index.ts", "types": "./src/index.ts", + "scripts": {}, "dependencies": { "@rspc/client": "^0.2.3", "@rspc/solid-query": "^0.2.3", diff --git a/packages/scripts/package.json b/packages/scripts/package.json index f2c5d165..807bb0f0 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -14,7 +14,7 @@ "main": "./src/index.ts", "types": "./src/index.ts", "scripts": { - "tauri": "tsx tauri.ts" + "tauri": "pnpm tsx tauri.ts" }, "dependencies": { "@flowr/utils": "^3.10.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a4ce73af..5a31dec7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -81,8 +81,8 @@ importers: specifier: ^2.0.0-beta.13 version: 2.0.0-beta.14 '@tauri-apps/plugin-clipboard-manager': - specifier: 2.1.0-beta.5 - version: 2.1.0-beta.5 + specifier: github:tauri-apps/tauri-plugin-clipboard-manager#v2 + version: https://codeload.github.com/tauri-apps/tauri-plugin-clipboard-manager/tar.gz/d503abbce40595d0af6b36c10439b85c640b4c53 '@tauri-apps/plugin-shell': specifier: github:tauri-apps/tauri-plugin-shell#v2 version: https://codeload.github.com/tauri-apps/tauri-plugin-shell/tar.gz/adb938ddf434547ae35f74dc1a080908da03ea96 @@ -1079,8 +1079,9 @@ packages: engines: {node: '>= 10'} hasBin: true - '@tauri-apps/plugin-clipboard-manager@2.1.0-beta.5': - resolution: {integrity: sha512-7YQEXRHXn5dIr/YcE7RtkoAhc6XwpqI7Qz0I3FcHn5vMbVvQ5OxKnGqEa8ZGRud6R3G9pNdnEKglLXLgUXK8tA==} + '@tauri-apps/plugin-clipboard-manager@https://codeload.github.com/tauri-apps/tauri-plugin-clipboard-manager/tar.gz/d503abbce40595d0af6b36c10439b85c640b4c53': + resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-clipboard-manager/tar.gz/d503abbce40595d0af6b36c10439b85c640b4c53} + version: 2.1.0-beta.5 '@tauri-apps/plugin-shell@https://codeload.github.com/tauri-apps/tauri-plugin-shell/tar.gz/adb938ddf434547ae35f74dc1a080908da03ea96': resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-shell/tar.gz/adb938ddf434547ae35f74dc1a080908da03ea96} @@ -4213,7 +4214,7 @@ snapshots: '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-beta.20 '@tauri-apps/cli-win32-x64-msvc': 2.0.0-beta.20 - '@tauri-apps/plugin-clipboard-manager@2.1.0-beta.5': + '@tauri-apps/plugin-clipboard-manager@https://codeload.github.com/tauri-apps/tauri-plugin-clipboard-manager/tar.gz/d503abbce40595d0af6b36c10439b85c640b4c53': dependencies: '@tauri-apps/api': 2.0.0-beta.15