From f70e3b86902fe021a3a837f4ddcec101818ab407 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 27 Feb 2026 21:55:56 +0300 Subject: [PATCH 1/4] cli/commands: use constants for repeated platform names Signed-off-by: NotAShelf Change-Id: I33c2cb59c73791a16f322e8544161a496a6a6964 --- src/cli/commands/add.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/cli/commands/add.rs b/src/cli/commands/add.rs index 1ea653e..625a6cb 100644 --- a/src/cli/commands/add.rs +++ b/src/cli/commands/add.rs @@ -13,15 +13,18 @@ fn get_loaders(lockfile: &LockFile) -> Vec { pub fn create_all_platforms() -> Result>> { + const MODRINTH: &str = "modrinth"; + const CURSEFORGE: &str = "curseforge"; + let mut platforms = HashMap::new(); - if let Ok(platform) = create_platform("modrinth", None) { - platforms.insert("modrinth".to_string(), platform); + if let Ok(platform) = create_platform(MODRINTH, None) { + platforms.insert(MODRINTH.to_owned(), platform); } if let Ok(platform) = - create_platform("curseforge", std::env::var("CURSEFORGE_API_KEY").ok()) + create_platform(CURSEFORGE, std::env::var("CURSEFORGE_API_KEY").ok()) { - platforms.insert("curseforge".to_string(), platform); + platforms.insert(CURSEFORGE.to_owned(), platform); } Ok(platforms) From 14264931dd2f59a4a6452ebfb0ec043fca7c0e0b Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 27 Feb 2026 22:23:28 +0300 Subject: [PATCH 2/4] model/enums: derive `Ord` for `ReleaseType` to simplify comparisons Signed-off-by: NotAShelf Change-Id: Id47e4e40e015b1212815addbbca238456a6a6964 --- src/model/enums.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/model/enums.rs b/src/model/enums.rs index 2544c97..e56c5da 100644 --- a/src/model/enums.rs +++ b/src/model/enums.rs @@ -103,9 +103,13 @@ impl std::fmt::Display for UpdateStrategy { } } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +#[derive( + Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, +)] #[serde(rename_all = "lowercase")] pub enum ReleaseType { + // Order matters: Release < Beta < Alpha for sorting (we want Release first) + // But we want reverse order, so we'll use reverse() or handle in comparison Release, Beta, Alpha, From 4eb2d8d0928ade737ceba562d6d8d4c13bf30d2a Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 27 Feb 2026 22:26:14 +0300 Subject: [PATCH 3/4] model/lockfile. one less clone! Signed-off-by: NotAShelf Change-Id: I8dbfc511fc07273a69953b03404efc656a6a6964 --- src/model/lockfile.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/model/lockfile.rs b/src/model/lockfile.rs index bc80cee..cdb3a97 100644 --- a/src/model/lockfile.rs +++ b/src/model/lockfile.rs @@ -20,13 +20,15 @@ mod tests { let mut id_map = HashMap::new(); id_map.insert("modrinth".to_string(), pakku_id.to_string()); + let slug_map = name_map.clone(); + Project { pakku_id: Some(pakku_id.to_string()), pakku_links: HashSet::new(), r#type: ProjectType::Mod, side: ProjectSide::Both, - slug: name_map.clone(), - name: name_map.clone(), + slug: slug_map, + name: name_map, id: id_map, update_strategy: UpdateStrategy::Latest, redistributable: true, From 344dc0c7e7f074b3dc5176210c3703532fdc4130 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 27 Feb 2026 22:26:25 +0300 Subject: [PATCH 4/4] model/project: simplify file selection sorting logic Signed-off-by: NotAShelf Change-Id: I0acf8e690157f1926a2658165592199d6a6a6964 --- src/model/project.rs | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/model/project.rs b/src/model/project.rs index dd3acdc..2f0620c 100644 --- a/src/model/project.rs +++ b/src/model/project.rs @@ -261,20 +261,11 @@ impl Project { ))); } - // Sort by release type (release > beta > alpha) and date - let mut sorted_files = compatible_files.clone(); + // Sort by release type (Release < Beta < Alpha) and date (newest first) + let mut sorted_files = compatible_files.to_vec(); sorted_files.sort_by(|a, b| { - use super::enums::ReleaseType; - let type_order = |rt: &ReleaseType| { - match rt { - ReleaseType::Release => 0, - ReleaseType::Beta => 1, - ReleaseType::Alpha => 2, - } - }; - - type_order(&a.release_type) - .cmp(&type_order(&b.release_type)) + a.release_type + .cmp(&b.release_type) .then_with(|| b.date_published.cmp(&a.date_published)) });