From 53724caedc8d3d3783bb701f615afd3eb8298ebb Mon Sep 17 00:00:00 2001 From: A Farzat Date: Sat, 22 Nov 2025 10:06:02 +0300 Subject: Add an order argument --- src/lib.rs | 20 ++++++++++++-------- src/main.rs | 17 +++++++++++++---- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 74e37b2..bb9ebee 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,14 +13,18 @@ pub fn parse_feed(xml: &str) -> Result { } /// Extract the audio URLs from the given channel -pub fn get_audio_urls(channel: &Channel) -> Vec<(usize, &str)> { - channel - .items() - .iter() - .rev() - .enumerate() - .filter_map(|(i, item)| item.enclosure().map(|e| (i + 1, e.url()))) - .collect() +pub fn get_audio_urls(channel: &Channel, newest_first: bool) -> Vec<(usize, &str)> { + let iter = channel.items().iter(); + if newest_first { + iter.enumerate() + .filter_map(|(i, item)| item.enclosure().map(|e| (i + 1, e.url()))) + .collect() + } else { + iter.rev() + .enumerate() + .filter_map(|(i, item)| item.enclosure().map(|e| (i + 1, e.url()))) + .collect() + } } /// Download the given audio file to the supplied directory diff --git a/src/main.rs b/src/main.rs index 50c59e3..ab8e299 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,12 @@ -use clap::Parser; +use clap::{Parser, ValueEnum}; use simple_rss_podcast_downloader::*; +#[derive(ValueEnum, Clone, Debug)] +enum Order { + Newest, + Oldest, +} + #[derive(Parser, Debug)] #[command(author, version, about)] struct Cli { @@ -8,18 +14,21 @@ struct Cli { #[arg(default_value = ".")] output_dir: String, #[arg(short, long)] - numbered: bool, + numbered: bool, // Whether to prefix the episode number + #[arg(long, value_enum, default_value_t = Order::Oldest)] + order: Order, // Order of download and numbering } fn main() -> Result<(), Box> { let args = Cli::parse(); - println!("Feed RSS feed from: {}", args.feed_url); + println!("Fetching RSS feed from: {}", args.feed_url); let xml = fetch_feed(&args.feed_url)?; let channel = parse_feed(&xml)?; let pad = channel.items().len().to_string().len(); - for (i, url) in get_audio_urls(&channel) { + let newest_first = matches!(args.order, Order::Newest); + for (i, url) in get_audio_urls(&channel, newest_first) { let prefix = if args.numbered { Some(format!("{:0width$}", i, width = pad)) } else { -- cgit v1.2.3-70-g09d2