1
0
Fork 0
mirror of https://codeberg.org/icewind/haze.git synced 2026-06-04 17:44:11 +02:00
haze/src/sources.rs

51 lines
1.7 KiB
Rust

use miette::{Context, IntoDiagnostic, Report, Result};
use std::fs::read_to_string;
use std::path::{Path, PathBuf};
pub struct Sources {
#[allow(dead_code)]
base_dir: PathBuf,
server_version: u8,
server_branched_off: bool,
}
impl Sources {
pub fn new<P: AsRef<Path>>(base_dir: P) -> Result<Self> {
let base_dir = base_dir.as_ref();
let versions_source = read_to_string(base_dir.join("version.php"))
.into_diagnostic()
.wrap_err("failed to read version.php")?;
let version_line = versions_source
.lines()
.find(|line| line.starts_with("$OC_Version"))
.ok_or_else(|| Report::msg("failed to find line containing $OC_Version"))?;
let version_str_line = versions_source
.lines()
.find(|line| line.starts_with("$OC_VersionString"))
.ok_or_else(|| Report::msg("failed to find line containing $OC_VersionString"))?;
let (major, _) = version_line
.split_once('[')
.and_then(|(_, line)| line.split_once(','))
.ok_or_else(|| Report::msg("failed to find version number in line"))?;
let server_version = major
.trim()
.parse()
.into_diagnostic()
.wrap_err("failed to parse version number")?;
let server_branched_off = !version_str_line.contains("dev");
Ok(Sources {
base_dir: base_dir.into(),
server_version,
server_branched_off,
})
}
pub fn get_server_version_branch(&self) -> String {
if self.server_branched_off {
format!("stable{}", self.server_version)
} else {
"master".into()
}
}
}