Fix some mods not downloading
This commit is contained in:
parent
41801010a4
commit
700b45dd6b
7 changed files with 41 additions and 5 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ pub enum BundleFileKind {
|
|||
provider: ProviderId,
|
||||
project_id: String,
|
||||
version_id: String,
|
||||
sha1: String,
|
||||
},
|
||||
External(ExternalFile),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -312,6 +312,7 @@ pub async fn restore_bundle_tracking(state: &LauncherState) -> LauncherResult<()
|
|||
provider,
|
||||
project_id,
|
||||
version_id,
|
||||
..
|
||||
} = &file.kind
|
||||
else {
|
||||
continue;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue