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(()) }