Fix some mods not downloading

This commit is contained in:
Julian Chang 2026-07-06 04:12:02 -04:00
parent 41801010a4
commit 700b45dd6b
No known key found for this signature in database
7 changed files with 41 additions and 5 deletions

View file

@ -4,7 +4,11 @@ use freya::query::QueryStateData;
use freya::router::RouterContext;
use crate::components::{Button, Icon, IconType};
use crate::hooks::{use_active_cluster_id, use_clusters, use_dispatch, use_game_snapshot};
use oneclient_core::parse_mc_version;
use crate::hooks::{
use_active_cluster_id, use_clusters, use_dispatch, use_game_snapshot, use_version_metadata,
};
use crate::routes::Route;
use crate::theme::colors;
use crate::utils::sort_clusters_for_home;
@ -56,6 +60,13 @@ impl Component for ActiveClusterPanel {
let p = intro.get().value();
let slide_x = (p - 1.0) * 48.0;
let parsed = active.as_ref().and_then(|c| parse_mc_version(&c.mc_version));
let metadata = use_version_metadata(
parsed.as_ref().map(|p| p.major),
parsed.and_then(|p| p.minor),
active.as_ref().map(|c| c.mc_loader),
);
let Some(cluster) = active else {
return rect()
.vertical()
@ -70,7 +81,9 @@ impl Component for ActiveClusterPanel {
};
let title = format!("{} {}", cluster.mc_version, cluster.mc_loader);
let subtitle = cluster.name.clone();
let subtitle = metadata
.map(|m| m.name)
.unwrap_or_else(|| cluster.name.clone());
let cluster_id = cluster.id;
rect()

View file

@ -15,6 +15,11 @@ impl QueryCapability for VersionsMetadataQuery {
async fn run(&self, _keys: &Self::Keys) -> Result<Self::Ok, Self::Err> {
let state = LauncherState::get()?;
let metadata = state.versions.metadata().await;
if !metadata.is_empty() {
return Ok(metadata);
}
state.versions.sync(&state.services).await?;
Ok(state.versions.metadata().await)
}
}

View file

@ -17,6 +17,10 @@ use crate::packages::store::{PackageStore, unlink_cluster_file};
use crate::packages::types::ExternalFile;
use crate::state::LauncherServices;
fn is_base62(s: &str) -> bool {
!s.is_empty() && s.chars().all(|c| c.is_ascii_alphanumeric())
}
pub async fn install_package_from_bundle(
file: &BundleFile,
cluster_id: i64,
@ -30,6 +34,7 @@ pub async fn install_package_from_bundle(
provider,
project_id,
version_id,
sha1,
} => {
let project = crate::packages::cached_project_detail(
services,
@ -39,10 +44,18 @@ pub async fn install_package_from_bundle(
)
.await;
let version =
let version = if is_base62(version_id) {
crate::packages::get_version_cached(services, *provider, project_id, version_id)
.await?;
.await?
} else if let Ok(Some((_, version))) =
services.packages.lookup_version(sha1, services).await
{
version
} else {
crate::packages::get_version_cached(services, *provider, project_id, version_id)
.await?
};
let artifact = PackageStore::install_to_cluster(
*provider,
&project,

View file

@ -142,6 +142,7 @@ fn parse_bundle_file(file: &PolyMrpackFile) -> Option<BundleFile> {
provider: ProviderId::Modrinth,
project_id: paths[0].to_string(),
version_id: paths[2].to_string(),
sha1: file.hashes.sha1.to_ascii_lowercase(),
},
});
}

View file

@ -59,6 +59,7 @@ pub enum BundleFileKind {
provider: ProviderId,
project_id: String,
version_id: String,
sha1: String,
},
External(ExternalFile),
}

View file

@ -101,6 +101,7 @@ async fn check_bundle_updates_inner(
provider,
project_id,
version_id,
..
} => {
let key = managed_bundle_key(*provider, project_id);
files_map.insert(key.clone(), (version_id.clone(), file.clone()));
@ -538,6 +539,7 @@ pub async fn get_bundles_with_update_status(
provider,
project_id,
version_id,
..
} => {
let key = managed_bundle_key(*provider, project_id);
if let Some(installed) = installed_map.get(&key) {

View file

@ -312,6 +312,7 @@ pub async fn restore_bundle_tracking(state: &LauncherState) -> LauncherResult<()
provider,
project_id,
version_id,
..
} = &file.kind
else {
continue;