OneLauncher-Cracked/packages/core/examples/packages.rs
2025-08-07 18:39:59 +02:00

71 lines
2.1 KiB
Rust

use onelauncher_core::api::cluster;
use onelauncher_core::api::packages::data::{SearchQuery, Sort};
use onelauncher_core::api::packages::provider::ProviderExt;
use onelauncher_core::api::packages::{self, download_package};
use onelauncher_core::api::proxy::ProxyDynamic;
use onelauncher_core::error::LauncherResult;
use onelauncher_core::initialize_core;
use onelauncher_core::store::{CoreOptions, Dirs};
use onelauncher_entity::loader::GameLoader;
use onelauncher_entity::package::Provider;
#[tokio::main]
pub async fn main() -> LauncherResult<()> {
initialize_core(CoreOptions::default(), ProxyDynamic::default()).await?;
let dirs = Dirs::get().await?;
// Here we create the cluster
let cluster_name = "Chatting Profile";
let path = dirs.clusters_dir().join(cluster_name);
let cluster = if let Some(cluster) = cluster::dao::get_cluster_by_folder_name(&path).await? {
cluster
} else {
cluster::create_cluster(cluster_name, "1.8.9", GameLoader::Forge, None, None).await?
};
// Fetch our package and its versions
let provider = Provider::Modrinth;
println!(
"search results: {:#?}",
provider
.search(&SearchQuery {
query: Some("chatting".to_string()),
offset: Some(0),
limit: Some(10),
sort: Some(Sort::Newest),
filters: None,
})
.await?
);
let package = &provider.get("chatting").await?;
let versions = provider
.get_versions(package.version_ids.as_slice())
.await?;
let version = versions
.iter()
.find(|v| v.mc_versions.contains(&"1.8.9".to_string()))
.expect("Version supporting 1.8.9 not found");
// We can now download the package
let model = download_package(package, version, Some(true), None).await?;
// Link the package to the cluster
packages::link_package(&model, &cluster, None).await?;
// Check if the package is hard linked
let cluster_dir = dirs.clusters_dir().join(cluster.folder_name.clone());
let pkg_path = cluster_dir
.join(model.package_type.folder_name())
.join(model.file_name.as_str());
assert!(
tokio::fs::metadata(&pkg_path).await.is_ok(),
"Package not found in cluster directory"
);
Ok(())
}