mirror of
https://github.com/YGGverse/aquatic-crawler.git
synced 2026-03-31 17:15:35 +00:00
add comments, apply minor optimizations
This commit is contained in:
parent
88dfc45ea7
commit
8bb02e5670
1 changed files with 13 additions and 5 deletions
|
|
@ -18,14 +18,15 @@ impl Preload {
|
||||||
max_filecount: Option<usize>,
|
max_filecount: Option<usize>,
|
||||||
max_filesize: Option<u64>,
|
max_filesize: Option<u64>,
|
||||||
) -> Result<Self> {
|
) -> Result<Self> {
|
||||||
if !root.is_dir() {
|
// make sure given path is valid and exist
|
||||||
|
if !root.canonicalize()?.is_dir() {
|
||||||
bail!("Preload root is not directory")
|
bail!("Preload root is not directory")
|
||||||
}
|
}
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
max_filecount,
|
max_filecount,
|
||||||
max_filesize,
|
max_filesize,
|
||||||
regex,
|
regex,
|
||||||
root: root.canonicalize()?,
|
root,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -94,11 +95,12 @@ impl Preload {
|
||||||
|
|
||||||
// Getters
|
// Getters
|
||||||
|
|
||||||
/// * creates new temporary directory if not exists
|
/// Get absolute path to the temporary directory
|
||||||
|
/// * optionally creates directory if not exists
|
||||||
pub fn tmp(&self, info_hash: &str, is_create: bool) -> Result<PathBuf> {
|
pub fn tmp(&self, info_hash: &str, is_create: bool) -> Result<PathBuf> {
|
||||||
validate_info_hash(info_hash)?;
|
validate_info_hash(info_hash)?;
|
||||||
let mut p = PathBuf::from(&self.root);
|
let mut p = PathBuf::from(&self.root);
|
||||||
p.push(tmp(info_hash));
|
p.push(tmp_component(info_hash));
|
||||||
if p.is_file() {
|
if p.is_file() {
|
||||||
bail!("Output directory `{}` is file", p.to_string_lossy())
|
bail!("Output directory `{}` is file", p.to_string_lossy())
|
||||||
}
|
}
|
||||||
|
|
@ -108,15 +110,18 @@ impl Preload {
|
||||||
Ok(p)
|
Ok(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get root location for `Self`
|
||||||
pub fn root(&self) -> &PathBuf {
|
pub fn root(&self) -> &PathBuf {
|
||||||
&self.root
|
&self.root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Check the given hash is contain resolved torrent file
|
||||||
pub fn contains_torrent(&self, info_hash: &str) -> Result<bool> {
|
pub fn contains_torrent(&self, info_hash: &str) -> Result<bool> {
|
||||||
validate_info_hash(info_hash)?;
|
validate_info_hash(info_hash)?;
|
||||||
Ok(fs::exists(self.torrent(info_hash))?)
|
Ok(fs::exists(self.torrent(info_hash))?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get absolute path to the torrent file
|
||||||
fn torrent(&self, info_hash: &str) -> PathBuf {
|
fn torrent(&self, info_hash: &str) -> PathBuf {
|
||||||
let mut p = PathBuf::from(&self.root);
|
let mut p = PathBuf::from(&self.root);
|
||||||
p.push(format!("{info_hash}.torrent"));
|
p.push(format!("{info_hash}.torrent"));
|
||||||
|
|
@ -124,6 +129,8 @@ impl Preload {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Non-expensive method to make sure the given string is safe to use in path builders
|
||||||
|
/// @TODO implement custom type?
|
||||||
fn validate_info_hash(value: &str) -> Result<()> {
|
fn validate_info_hash(value: &str) -> Result<()> {
|
||||||
if value.len() == 40 && value.chars().all(|c| c.is_ascii_hexdigit()) {
|
if value.len() == 40 && value.chars().all(|c| c.is_ascii_hexdigit()) {
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
@ -132,6 +139,7 @@ fn validate_info_hash(value: &str) -> Result<()> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tmp(info_hash: &str) -> String {
|
/// Build constant path component
|
||||||
|
fn tmp_component(info_hash: &str) -> String {
|
||||||
format!(".{info_hash}")
|
format!(".{info_hash}")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue