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) 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, 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, 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)) });