diff --git a/src/main.rs b/src/main.rs index 0cbdd75..b22c008 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,15 +24,34 @@ const BOT_NAME: &str = "Update Bot"; const LAST_OFFERED_KEY: &str = "profile.last_version_offered"; +#[derive(Debug, Clone)] +struct Version { + major: u8, + minor: u8, + fix: u8, + path: PathBuf, +} + struct UpdateBot { - versions_dirs: Vec, + versions_dirs: Vec, latest_version: PathBuf, version: String, } +impl Version { + pub fn new(path: PathBuf) -> Self { + let vs = path.to_str().unwrap().strip_prefix(DIST_DIR).unwrap().trim_start_matches("/v"); + let parts: Vec<&str> = vs.split(".").collect(); + if parts.len() != 3 { + return Version{ major: 0, minor: 0, fix: 0, path: PathBuf::new()} + } + return Version{ major: parts[0].parse::().unwrap(), minor: parts[1].parse::().unwrap(), fix: parts[2].parse::().unwrap(), path: path} + } +} + impl UpdateBot { pub fn new() -> Self { - let mut versions_dirs = vec![]; + let mut versions_dirs: Vec = vec![]; for entry in read_dir(Path::new(DIST_DIR)).expect(&format!("could not open '{}' dir", DIST_DIR)) { @@ -40,16 +59,19 @@ impl UpdateBot { let path: PathBuf = entry.path(); if path.is_dir() { println!("version: {}", path.to_str().unwrap()); - versions_dirs.push(path); + //versions_dirs.push(path.clone()); + let v = Version::new(path); + println!("{:?}", v); + versions_dirs.push(v); } } if versions_dirs.len() == 0 { panic!("no cwtch versions detected in {}!", DIST_DIR) } - versions_dirs.sort(); + versions_dirs.sort_unstable_by_key(|item| (item.major, item.minor, item.fix)); println!("sorted vd: {:?}", versions_dirs); let latest_version = versions_dirs[versions_dirs.len() - 1].clone(); - let version: String = latest_version + let version: String = latest_version.path .strip_prefix(DIST_DIR) .unwrap() .to_str() @@ -57,7 +79,7 @@ impl UpdateBot { .to_string(); let bot = UpdateBot { versions_dirs: versions_dirs, - latest_version: latest_version, + latest_version: latest_version.path, version: version, }; println!("versions: {:?}\n", bot.versions_dirs);