master
hheik 2024-09-04 18:35:06 +03:00
parent 44778f91c3
commit 57b351403e
1 changed files with 51 additions and 2 deletions

View File

@ -80,6 +80,54 @@ impl ModInfo {
pub fn version_string(&self) -> String { pub fn version_string(&self) -> String {
format!("{}.{}.{}", self.version.0, self.version.1, self.version.2) format!("{}.{}.{}", self.version.0, self.version.1, self.version.2)
} }
/// Does the mod satisfy a dependency string?
pub fn satisfies(&self, dependency_string: &str) -> bool {
let version_str_index = match dependency_string.rfind('-') {
Some(index) => index,
None => return false,
};
if &dependency_string[0..version_str_index] != format!("{}-{}", self.author, self.name) {
return false;
}
let version_string = &dependency_string[version_str_index + 1..];
let mut iter = version_string.split('.');
let major = iter
.next()
.and_then(|str| i64::from_str_radix(str, 10).ok());
let minor = iter
.next()
.and_then(|str| i64::from_str_radix(str, 10).ok());
let patch = iter
.next()
.and_then(|str| i64::from_str_radix(str, 10).ok());
if iter.count() > 0 {
return false;
}
let version = match (major, minor, patch) {
(Some(major), Some(minor), Some(patch)) => (major, minor, patch),
_ => return false,
};
// Mods probably don't follow semantic versioning that closely, so just assume that bigger
// is better.
match self.version.0.cmp(&version.0) {
Greater => return true,
Less => return false,
Equal => (),
};
match self.version.1.cmp(&version.1) {
Greater => return true,
Less => return false,
Equal => (),
};
match self.version.2.cmp(&version.2) {
Greater => true,
Less => false,
Equal => true,
}
}
} }
pub struct FetchExtractor { pub struct FetchExtractor {
@ -226,7 +274,8 @@ pub fn data_dir() -> PathBuf {
pub fn game_dir() -> PathBuf { pub fn game_dir() -> PathBuf {
match var("GAME_DIR").ok() { match var("GAME_DIR").ok() {
Some(game_dir) => game_dir.into(), Some(game_dir) => game_dir.into(),
None => PathBuf::from(var("HOME").unwrap()) None => {
.join("steam/SteamLibrary/steamapps/common/Lethal Company"), PathBuf::from(var("HOME").unwrap()).join(".steam/steam/steamapps/common/Lethal Company")
}
} }
} }