fixes: post content tab release issues (#5566)

* fix: migrate old cache entries for CachedFileUpdate

* feat: toggle goofy fix + switch version reimpl in app and panel

* fix: multimc detection

* fix: add tie breaker for sorting

* feat: toggle hover state

* fix: lint
This commit is contained in:
Calum H.
2026-03-14 22:43:59 +00:00
committed by GitHub
parent 8a2125ef16
commit 989f282de3
12 changed files with 293 additions and 32 deletions

View File

@@ -252,7 +252,7 @@ pub struct SearchResultV3 {
pub total_hits: u32,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[derive(Serialize, Clone, Debug)]
pub struct CachedFileUpdate {
pub hash: String,
pub game_version: String,
@@ -260,6 +260,39 @@ pub struct CachedFileUpdate {
pub update_version_id: String,
}
/// Migrates old cache entries that stored `"loader": "forge"` (singular string)
/// to the current `"loaders": ["forge"]` (array) format.
/// SEE: https://github.com/modrinth/code/issues/5562
impl<'de> serde::Deserialize<'de> for CachedFileUpdate {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
#[derive(Deserialize)]
struct Helper {
hash: String,
game_version: String,
#[serde(default)]
loaders: Option<Vec<String>>,
#[serde(default)]
loader: Option<String>,
update_version_id: String,
}
let helper = Helper::deserialize(deserializer)?;
let loaders = helper.loaders.unwrap_or_else(|| {
helper.loader.map(|l| vec![l]).unwrap_or_default()
});
Ok(CachedFileUpdate {
hash: helper.hash,
game_version: helper.game_version,
loaders,
update_version_id: helper.update_version_id,
})
}
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct CachedFileHash {
pub path: String,

View File

@@ -577,7 +577,10 @@ async fn profile_files_to_content_items(
.as_ref()
.map(|p| p.title.as_str())
.unwrap_or(&b.file_name);
name_a.to_lowercase().cmp(&name_b.to_lowercase())
name_a
.to_lowercase()
.cmp(&name_b.to_lowercase())
.then_with(|| a.file_name.cmp(&b.file_name))
});
Ok(items)
@@ -765,7 +768,10 @@ pub async fn dependencies_to_content_items(
.as_ref()
.map(|p| p.title.as_str())
.unwrap_or(&b.file_name);
name_a.to_lowercase().cmp(&name_b.to_lowercase())
name_a
.to_lowercase()
.cmp(&name_b.to_lowercase())
.then_with(|| a.file_name.cmp(&b.file_name))
});
Ok(items)