i13-cli-history-file #14

Merged
kemitix merged 4 commits from i13-cli-history-file into main 2023-08-06 15:07:56 +01:00
6 changed files with 26 additions and 24 deletions
Showing only changes of commit 0d8cfb8414 - Show all commits

View file

@ -13,7 +13,7 @@ pub struct FileEnv {
pub append_line: FileAppendLineFn, pub append_line: FileAppendLineFn,
} }
impl FileEnv { impl FileEnv {
pub fn create(a: Args) -> Self { pub fn create(a: &Args) -> Self {
let open_dir = a.downloads.clone(); let open_dir = a.downloads.clone();
let append_dir = a.downloads.clone(); let append_dir = a.downloads.clone();
Self { Self {

View file

@ -30,7 +30,7 @@ mod tests {
file_name, file_name,
include_bytes!("../../test/data/subscriptions.txt"), include_bytes!("../../test/data/subscriptions.txt"),
)?; )?;
let file_env = FileEnv::create(Args { let file_env = FileEnv::create(&Args {
downloads: dir.path().to_string_lossy().to_string(), downloads: dir.path().to_string_lossy().to_string(),
history: "downloaded.txt".to_string(), history: "downloaded.txt".to_string(),
}); });
@ -52,7 +52,7 @@ mod tests {
file_name, file_name,
include_bytes!("../../test/data/subscriptions-blank-line.txt"), include_bytes!("../../test/data/subscriptions-blank-line.txt"),
)?; )?;
let file_env = FileEnv::create(Args { let file_env = FileEnv::create(&Args {
downloads: dir.path().to_string_lossy().to_string(), downloads: dir.path().to_string_lossy().to_string(),
history: "downloaded.txt".to_string(), history: "downloaded.txt".to_string(),
}); });
@ -74,7 +74,7 @@ mod tests {
file_name, file_name,
include_bytes!("../../test/data/subscriptions-comment.txt"), include_bytes!("../../test/data/subscriptions-comment.txt"),
)?; )?;
let file_env = FileEnv::create(Args { let file_env = FileEnv::create(&Args {
downloads: dir.path().to_string_lossy().to_string(), downloads: dir.path().to_string_lossy().to_string(),
history: "downloaded.txt".to_string(), history: "downloaded.txt".to_string(),
}); });

View file

@ -39,7 +39,7 @@ mod tests {
add( add(
&link, &link,
file_name, file_name,
&FileEnv::create(Args { &FileEnv::create(&Args {
downloads: dir.path().to_string_lossy().to_string(), downloads: dir.path().to_string_lossy().to_string(),
history: "downloaded.txt".to_string(), history: "downloaded.txt".to_string(),
}), }),
@ -73,7 +73,7 @@ mod tests {
add( add(
&link, &link,
file_name, file_name,
&FileEnv::create(Args { &FileEnv::create(&Args {
downloads: dir.path().to_string_lossy().to_string(), downloads: dir.path().to_string_lossy().to_string(),
history: "downloaded.txt".to_string(), history: "downloaded.txt".to_string(),
}), }),

View file

@ -38,7 +38,7 @@ mod test {
let result = find( let result = find(
&link, &link,
file_name, file_name,
&FileEnv::create(Args { &FileEnv::create(&Args {
downloads: dir.path().to_string_lossy().to_string(), downloads: dir.path().to_string_lossy().to_string(),
history: "downloaded.txt".to_string(), history: "downloaded.txt".to_string(),
}), }),
@ -73,7 +73,7 @@ mod test {
let result = find( let result = find(
&link, &link,
file_name, file_name,
&FileEnv::create(Args { &FileEnv::create(&Args {
downloads: dir.path().to_string_lossy().to_string(), downloads: dir.path().to_string_lossy().to_string(),
history: "downloaded.txt".to_string(), history: "downloaded.txt".to_string(),
}), }),
@ -108,7 +108,7 @@ mod test {
let result = find( let result = find(
&link, &link,
file_name, file_name,
&FileEnv::create(Args { &FileEnv::create(&Args {
downloads: dir.path().to_string_lossy().to_string(), downloads: dir.path().to_string_lossy().to_string(),
history: "downloaded.txt".to_string(), history: "downloaded.txt".to_string(),
}), }),

View file

@ -1,3 +1,4 @@
use params::Args;
use prelude::*; use prelude::*;
mod errors; mod errors;
@ -19,16 +20,16 @@ pub struct Env {
pub file: FileEnv, pub file: FileEnv,
} }
pub fn run(subscriptions: &str, history: &str, site: &str, e: Env) -> Result<()> { pub fn run(subscriptions: &str, site: &str, a: &Args, e: Env) -> Result<()> {
for channel_name in file::read::lines_from(subscriptions, &e.file)? { for channel_name in file::read::lines_from(subscriptions, &e.file)? {
println!("Channel: {}", channel_name); println!("Channel: {}", channel_name);
let feed_url = feed::find(site, &channel_name, &e.network)?; let feed_url = feed::find(site, &channel_name, &e.network)?;
for entry in feed::get(&feed_url, &e.network)?.entries() { for entry in feed::get(&feed_url, &e.network)?.entries() {
if let Some(link) = entry.links().get(0).cloned() { if let Some(link) = entry.links().get(0).cloned() {
if !history::find(&link, history, &e.file)? { if !history::find(&link, &a.history, &e.file)? {
println!("Downloading {}: {}", &channel_name, entry.title().as_str()); println!("Downloading {}: {}", &channel_name, entry.title().as_str());
(e.network.download_as_mp3)(&link.href)?; (e.network.download_as_mp3)(&link.href)?;
history::add(&link, history, &e.file)?; history::add(&link, &a.history, &e.file)?;
} }
} }
} }
@ -65,6 +66,15 @@ mod tests {
let history_file_name = "history"; let history_file_name = "history";
let history_dir = create_text_file(history_file_name, "c1-f2\nc2-f3".as_bytes())?; let history_dir = create_text_file(history_file_name, "c1-f2\nc2-f3".as_bytes())?;
let history_file_name = format!(
"{}/{}",
history_dir.path().to_string_lossy(),
history_file_name.to_string()
);
let args = Args {
downloads: subs_dir.path().to_string_lossy().to_string(),
history: history_file_name.clone(),
};
let env = Env { let env = Env {
network: NetworkEnv { network: NetworkEnv {
fetch_as_text: mock_fetch_as_text_with_rss_url(HashMap::from([ fetch_as_text: mock_fetch_as_text_with_rss_url(HashMap::from([
@ -89,21 +99,14 @@ mod tests {
subs_file_name.to_string(), subs_file_name.to_string(),
format!("{}/{}", subs_dir.path().to_string_lossy(), subs_file_name), format!("{}/{}", subs_dir.path().to_string_lossy(), subs_file_name),
), ),
( (history_file_name.to_string(), history_file_name),
history_file_name.to_string(),
format!(
"{}/{}",
history_dir.path().to_string_lossy(),
history_file_name
),
),
])), ])),
append_line: mock_file_append_line(), append_line: mock_file_append_line(),
}, },
}; };
//when //when
run(subs_file_name, history_file_name, site, env)?; run(subs_file_name, site, &args, env)?;
//then //then
drop(subs_dir); drop(subs_dir);
drop(history_dir); drop(history_dir);

View file

@ -7,18 +7,17 @@ use podal::prelude::*;
fn main() -> Result<()> { fn main() -> Result<()> {
println!("Podal"); println!("Podal");
let subscriptions = "subscriptions.txt"; let subscriptions = "subscriptions.txt";
let history = "downloaded.txt";
let site = "https://www.youtube.com/"; let site = "https://www.youtube.com/";
let args = Args::parse(); let args = Args::parse();
podal::run( podal::run(
subscriptions, subscriptions,
history,
site, site,
&args,
podal::Env { podal::Env {
network: NetworkEnv::default(), network: NetworkEnv::default(),
file: FileEnv::create(args), file: FileEnv::create(&args),
}, },
)?; )?;