use std::path::{Path, PathBuf};
use crate::config::UBLX_NAMES;
fn tmp_from_db_path(db_path: &Path) -> Option<PathBuf> {
let parent = db_path.parent()?;
let file_name = db_path.file_name()?.to_str()?;
if let Some(stem) = file_name.strip_suffix(UBLX_NAMES.index_db_file_ext) {
Some(parent.join(format!("{stem}_tmp{}", UBLX_NAMES.index_db_file_ext)))
} else {
Some(parent.join(format!("{file_name}_tmp")))
}
}
#[derive(Clone, Copy)]
pub enum SnapshotReaderPreference {
PreferUblx,
PreferTmp,
}
#[must_use]
pub fn snapshot_reader_path_with(
db_path: &Path,
preference: SnapshotReaderPreference,
) -> Option<PathBuf> {
let db = db_path.to_path_buf();
let tmp = tmp_from_db_path(db_path)?;
let (first, second) = match preference {
SnapshotReaderPreference::PreferUblx => (db, tmp),
SnapshotReaderPreference::PreferTmp => (tmp, db),
};
if first.exists() {
Some(first)
} else if second.exists() {
Some(second)
} else {
None
}
}
#[must_use]
pub fn snapshot_read_path_for_tui(db_path: &Path, prefer_tmp: bool) -> PathBuf {
let preference = if prefer_tmp {
SnapshotReaderPreference::PreferTmp
} else {
SnapshotReaderPreference::PreferUblx
};
snapshot_reader_path_with(db_path, preference).unwrap_or_else(|| db_path.to_path_buf())
}