diff --git a/src/cli/commands/add.rs b/src/cli/commands/add.rs index 625a6cb..1ea653e 100644 --- a/src/cli/commands/add.rs +++ b/src/cli/commands/add.rs @@ -13,18 +13,15 @@ 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_owned(), platform); + if let Ok(platform) = create_platform("modrinth", None) { + platforms.insert("modrinth".to_string(), 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_owned(), platform); + platforms.insert("curseforge".to_string(), platform); } Ok(platforms) diff --git a/src/model/enums.rs b/src/model/enums.rs index e56c5da..2544c97 100644 --- a/src/model/enums.rs +++ b/src/model/enums.rs @@ -103,13 +103,9 @@ impl std::fmt::Display for UpdateStrategy { } } -#[derive( - Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, -)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, 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, diff --git a/src/model/lockfile.rs b/src/model/lockfile.rs index cdb3a97..bc80cee 100644 --- a/src/model/lockfile.rs +++ b/src/model/lockfile.rs @@ -20,15 +20,13 @@ 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: slug_map, - name: name_map, + slug: name_map.clone(), + name: name_map.clone(), id: id_map, update_strategy: UpdateStrategy::Latest, redistributable: true, diff --git a/src/model/project.rs b/src/model/project.rs index 2f0620c..dd3acdc 100644 --- a/src/model/project.rs +++ b/src/model/project.rs @@ -261,11 +261,20 @@ impl Project { ))); } - // Sort by release type (Release < Beta < Alpha) and date (newest first) - let mut sorted_files = compatible_files.to_vec(); + // Sort by release type (release > beta > alpha) and date + let mut sorted_files = compatible_files.clone(); sorted_files.sort_by(|a, b| { - a.release_type - .cmp(&b.release_type) + 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)) .then_with(|| b.date_published.cmp(&a.date_published)) });