OneLauncher-Cracked/apps/desktop/src/api/commands/package.rs
2025-01-16 13:51:41 +01:00

234 lines
5.6 KiB
Rust

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<PathBuf>,
) -> Result<(String, Vec<String>), 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<String>,
) -> 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<ManagedPackage, String> {
Ok(provider.get(&project_id).await?)
}
#[specta::specta]
#[tauri::command]
pub async fn get_provider_packages(
provider: Providers,
project_ids: Vec<String>,
) -> Result<Vec<ManagedPackage>, 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<Vec<String>>,
loaders: Option<Vec<Loader>>,
page: Option<u32>,
page_size: Option<u16>,
) -> Result<(Vec<ManagedVersion>, 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<String>,
) -> Result<Vec<ManagedVersion>, String> {
Ok(provider.get_versions(versions).await?)
}
#[derive(specta::Type, serde::Deserialize, serde::Serialize)]
pub struct ProviderSearchQuery {
query: Option<String>,
limit: Option<u8>,
offset: Option<u32>,
game_versions: Option<Vec<String>>,
categories: Option<Vec<String>>,
loaders: Option<Vec<Loader>>,
package_types: Option<Vec<PackageType>>,
open_source: Option<bool>,
}
#[specta::specta]
#[tauri::command]
pub async fn search_provider_packages(
provider: Providers,
query: ProviderSearchQuery,
) -> Result<ProviderSearchResults, String> {
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<Vec<ManagedUser>, String> {
Ok(provider.get_authors(&author).await?)
}
#[specta::specta]
#[tauri::command]
pub async fn get_package_body(provider: Providers, body: PackageBody) -> Result<String, String> {
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<String>,
loader: Option<Loader>,
package_version: Option<String>,
) -> 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<Package, String> {
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<Vec<Package>, 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<bool>,
) -> Result<(), String> {
package::sync_packages_by_type(&cluster_path, package_type, clear).await?;
Ok(())
}