use std::path::PathBuf; use onelauncher::cluster::content::package; use onelauncher::data::{Loader, ManagedPackage, ManagedUser, ManagedVersion, PackageType}; use onelauncher::package::content::Providers; use onelauncher::package::import::ImportType; use onelauncher::store::{ Author, ClusterPath, Package, PackageBody, PackagePath, ProviderSearchResults, }; use onelauncher::utils::pagination::Pagination; use uuid::Uuid; #[specta::specta] #[tauri::command] pub async fn get_launcher_instances( launcher: ImportType, path: Option, ) -> Result<(String, Vec), String> { let (dir, instances) = onelauncher::api::package::import::get_launcher_instances(launcher, path).await?; Ok(( dir.to_str().ok_or("could not convert pathbuf to string")?.to_string(), instances )) } #[specta::specta] #[tauri::command] pub async fn import_instances( launcher: ImportType, base_path: PathBuf, instances: Vec, ) -> Result<(), String> { onelauncher::api::package::import::import_instances(launcher, base_path, instances).await?; Ok(()) } #[specta::specta] #[tauri::command] pub async fn get_provider_package( provider: Providers, project_id: String, ) -> Result { Ok(provider.get(&project_id).await?) } #[specta::specta] #[tauri::command] pub async fn get_provider_packages( provider: Providers, project_ids: Vec, ) -> Result, String> { Ok(provider.get_multiple(&project_ids).await?) } #[specta::specta] #[tauri::command] pub async fn get_all_provider_package_versions( provider: Providers, project_id: String, game_versions: Option>, loaders: Option>, page: Option, page_size: Option, ) -> Result<(Vec, Pagination), String> { Ok(provider .get_all_versions(&project_id, game_versions, loaders, page, page_size) .await?) } #[specta::specta] #[tauri::command] pub async fn get_provider_package_versions( provider: Providers, versions: Vec, ) -> Result, String> { Ok(provider.get_versions(versions).await?) } #[derive(specta::Type, serde::Deserialize, serde::Serialize)] pub struct ProviderSearchQuery { query: Option, limit: Option, offset: Option, game_versions: Option>, categories: Option>, loaders: Option>, package_types: Option>, open_source: Option, } #[specta::specta] #[tauri::command] pub async fn search_provider_packages( provider: Providers, query: ProviderSearchQuery, ) -> Result { Ok(provider .search( query.query, query.limit, query.offset, query.game_versions, query.categories, query.loaders, query.package_types, query.open_source, ) .await?) } #[specta::specta] #[tauri::command] pub async fn get_provider_authors( provider: Providers, author: Author, ) -> Result, String> { Ok(provider.get_authors(&author).await?) } #[specta::specta] #[tauri::command] pub async fn get_package_body(provider: Providers, body: PackageBody) -> Result { Ok(provider.get_package_body(&body).await?) } #[specta::specta] #[tauri::command] pub async fn download_provider_package( provider: Providers, package_id: String, cluster_id: Uuid, game_version: Option, loader: Option, package_version: Option, ) -> Result<(), String> { let mut cluster = onelauncher::cluster::get_by_uuid(cluster_id) .await? .ok_or("cluster not found")?; let mgd_pkg = provider.get(&package_id).await?; let (pkg_path, pkg) = package::download_package( &mgd_pkg, &mut cluster, game_version, loader, package_version, ) .await?; package::add_package( &cluster.cluster_path(), pkg_path, pkg, ) .await?; Ok(()) } #[specta::specta] #[tauri::command] pub async fn get_cluster_package( cluster_path: ClusterPath, package_path: PackagePath, package_type: PackageType, ) -> Result { Ok(package::get_package(&cluster_path, &package_path, package_type).await?) } #[specta::specta] #[tauri::command] pub async fn get_cluster_packages( cluster_path: ClusterPath, package_type: PackageType, ) -> Result, String> { Ok(package::get_packages(&cluster_path, package_type).await?) } #[specta::specta] #[tauri::command] pub async fn add_cluster_package( cluster_path: ClusterPath, file_name: String, package_type: PackageType, pkg: Package, ) -> Result<(), String> { let package_path = PackagePath::new(package_type, file_name)?; package::add_package(&cluster_path, package_path, pkg).await?; Ok(()) } #[specta::specta] #[tauri::command] pub async fn remove_cluster_package( cluster_path: ClusterPath, file_name: String, package_type: PackageType, ) -> Result<(), String> { let package_path = PackagePath::new(package_type, file_name)?; package::remove_package(&cluster_path, &package_path).await?; Ok(()) } #[specta::specta] #[tauri::command] pub async fn set_cluster_package_enabled( cluster_path: ClusterPath, file_name: String, package_type: PackageType, enabled: bool, ) -> Result<(), String> { let package_path = PackagePath::new(package_type, file_name)?; package::set_package_enabled(&cluster_path, &package_path, enabled).await?; Ok(()) } #[specta::specta] #[tauri::command] pub async fn sync_cluster_packages(cluster_path: ClusterPath) -> Result<(), String> { package::sync_packages(&cluster_path).await?; Ok(()) } #[specta::specta] #[tauri::command] pub async fn sync_cluster_packages_by_type( cluster_path: ClusterPath, package_type: PackageType, clear: Option, ) -> Result<(), String> { package::sync_packages_by_type(&cluster_path, package_type, clear).await?; Ok(()) }