use std::error::Error;
use std::num::ParseIntError;
use std::path::{Path, PathBuf};
use std::str::FromStr;
use chrono::{DateTime, Local};
use dirs::data_local_dir;
use log::trace;
#[derive(PartialEq, Eq, PartialOrd, Ord, Debug)]
pub struct LogId {
pub num: u64,
}
impl From<u64> for LogId {
fn from(value: u64) -> Self {
LogId { num: value }
}
}
impl FromStr for LogId {
type Err = ParseIntError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.trim().parse() {
Ok(id) => Ok(LogId { num: id }),
Err(e) => Err(e),
}
}
}
pub fn trash_dir() -> PathBuf {
let trash_dir = data_local_dir()
.expect("Failed to get local data directory")
.join("Trash/files");
trace!("trash_dir: {}", &trash_dir.display());
trash_dir
}
pub fn current_time() -> DateTime<Local> {
let c_time = Local::now();
trace!("{}", &c_time);
c_time
}
pub fn split_path_and_file(path: &Path) -> Result<(String, String), Box<dyn Error>> {
match path.to_str().unwrap().rsplit_once("/") {
Some((prefix, suffix)) => {
trace!("Prefix: {}", prefix);
trace!("Sufix: {}", suffix);
Ok((prefix.to_string(), suffix.to_string()))
}
None => {
log::info!("Delimiter '/' not found in the string.");
Err("Delimiter '/' not found in the path".into())
}
}
}
#[cfg(test)]
mod tests {
use std::fs;
use std::path::PathBuf;
use dirs::data_dir;
use crate::core::remove_files;
use super::trash_dir;
#[test]
fn github_test() {
if !data_dir().expect("Cant get data dir").join("rid").exists() {
panic!("data dir exists {}", data_dir().unwrap().join("rid").display());
}
if trash_dir().exists() {
let v0 = PathBuf::from("temp_file_for_single_file_text01.txt");
let v1 = PathBuf::from("temp_file_for_single_file_text02.txt");
let v2 = PathBuf::from("temp_file_for_single_file_text03.txt");
let v3 = PathBuf::from("temp_file_for_single_file_text04.txt");
let single_files = vec![v0, v1, v2, v3];
for i in &single_files {
fs::write(i, "some contents for the files").expect("Cant create files");
assert!(fs::exists(i).expect("Can't check existence of file tmp_file.txt"));
if !i.exists() {
panic!("{} doesnt exists", i.display());
}
}
remove_files(single_files, false, true).expect("Test failed");
} else {
panic!("trash dir doesn't exists");
}
}
}