71 lines
2.1 KiB
Rust
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(())
|
|
}
|