diff --git a/src-tauri/src/gamebanana.rs b/src-tauri/src/gamebanana.rs index f0aeef9..e9764ff 100644 --- a/src-tauri/src/gamebanana.rs +++ b/src-tauri/src/gamebanana.rs @@ -13,15 +13,26 @@ pub async fn get_download_links(mod_id: String) -> String { } #[tauri::command] -pub async fn list_submissions(mode: String, page: String) -> String { - web::query( - format!( - "{}/apiv9/Util/Game/Submissions?_idGameRow=8552&_nPage={}&_nPerpage=50&_sMode={}", - SITE_URL, page, mode +pub async fn list_submissions(mode: String, page: String, search: String) -> String { + if search.is_empty() { + web::query( + format!( + "{}/apiv9/Util/Game/Submissions?_idGameRow=8552&_nPage={}&_nPerpage=50&_sMode={}", + SITE_URL, page, mode + ) + .as_str(), ) - .as_str(), - ) - .await + .await + } else { + web::query( + format!( + "{}/apiv11/Util/Search/Results?_nPage={}&_sOrder=best_match&_idGameRow=8552&_sSearchString={}&_csvFields=name,description,article,attribs,studio,owner,credits", + SITE_URL, page, search + ) + .as_str() + ) + .await + } } #[tauri::command] diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index ccfcd5d..3fb6aa8 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -341,7 +341,13 @@ fn restart_grasscutter(window: tauri::Window) -> bool { #[cfg(unix)] #[tauri::command] -fn restart_grasscutter(window: tauri::Window) {} +fn restart_grasscutter(window: tauri::Window) { + // Placeholder text for imports + let s = System::new(); + if let Some(process) = s.process(Pid::from(1337)) { + println!("{}", process.name()); + } +} #[cfg(windows)] #[tauri::command] diff --git a/src-tauri/src/system_helpers.rs b/src-tauri/src/system_helpers.rs index c1a65a0..305856a 100644 --- a/src-tauri/src/system_helpers.rs +++ b/src-tauri/src/system_helpers.rs @@ -1,7 +1,7 @@ use duct::cmd; use ini::Ini; -use std::path::PathBuf; use std::ffi::OsStr; +use std::path::PathBuf; #[cfg(windows)] use { @@ -245,6 +245,10 @@ pub fn service_status(service: String) -> bool { } } +#[cfg(unix)] +#[tauri::command] +pub fn service_status(service: String) {} + #[cfg(windows)] #[tauri::command] pub fn start_service(service: String) -> bool { diff --git a/src/ui/components/mods/ModList.tsx b/src/ui/components/mods/ModList.tsx index 91552f7..d975b2f 100644 --- a/src/ui/components/mods/ModList.tsx +++ b/src/ui/components/mods/ModList.tsx @@ -1,6 +1,6 @@ import React from 'react' import { getConfigOption } from '../../../utils/configuration' -import { getAllMods, getInstalledMods, getMods, ModData, PartialModData } from '../../../utils/gamebanana' +import { getInstalledMods, getMods, ModData, PartialModData } from '../../../utils/gamebanana' import { LoadingCircle } from './LoadingCircle' import './ModList.css' @@ -64,16 +64,7 @@ export class ModList extends React.Component { return } - let mods: ModData[] - - if (!(this.props.search == '')) { - // idk the api so just filter all mods to search - mods = (await getAllMods(this.props.mode)).filter((mod) => - mod.name.toLowerCase().includes(this.props.search.toLowerCase()) - ) - } else { - mods = await getMods(this.props.mode, this.props.page) - } + const mods = await getMods(this.props.mode, this.props.page, this.props.search) const horny = await getConfigOption('horny_mode') diff --git a/src/utils/gamebanana.ts b/src/utils/gamebanana.ts index 642dc07..a8bb676 100644 --- a/src/utils/gamebanana.ts +++ b/src/utils/gamebanana.ts @@ -117,13 +117,38 @@ interface ModDownload { containsExe: boolean } -export async function getMods(mode: string, page: number) { +export async function getMods(mode: string, page: number, search: string) { let modList: GamebananaResponse[] = [] + if (search.length > 0) { + let hadMods = true + let page = 1 + + while (hadMods) { + const resp = JSON.parse( + await invoke('list_submissions', { + mode, + page: '' + page, + search: search, + }) + ) + + const total = resp._aMetadata._nRecordCount + + if (page > total / 15) hadMods = false + + modList = [...modList, ...resp._aRecords] + page++ + } + + return formatGamebananaData(modList) + } + const resp = JSON.parse( await invoke('list_submissions', { mode, page: '' + page, + search: '', }) ) @@ -132,28 +157,6 @@ export async function getMods(mode: string, page: number) { return formatGamebananaData(modList) } -export async function getAllMods(mode: string) { - let modList: GamebananaResponse[] = [] - let hadMods = true - let page = 1 - - while (hadMods) { - const resp = JSON.parse( - await invoke('list_submissions', { - mode, - page: '' + page, - }) - ) - - if (resp.length === 0) hadMods = false - - modList = [...modList, ...resp] - page++ - } - - return formatGamebananaData(modList) -} - export async function formatGamebananaData(obj: GamebananaResponse[]) { if (!obj) return []