Skip to content

Commit 622d75c

Browse files
committed
Keep playing available tracks if no specific track selected
1 parent 24c0498 commit 622d75c

File tree

3 files changed

+20
-8
lines changed

3 files changed

+20
-8
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "mfp"
33
description = "A command-line utility for playing music mixes for programming & focus (from musicforprogramming.net), unlocking the flow state!"
4-
version = "0.1.0"
4+
version = "0.2.0"
55
authors = ["Rohit Gupta"]
66
edition = "2021"
77
readme = "README.md"

src/main.rs

+18-6
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,25 @@ use rodio::Source;
1313
use utils::parse_duration;
1414
use utils::play_audio_from_url;
1515

16-
fn play_random_episode(rss_feed: &Mfp, volume: u8) {
16+
fn play_random_episodes(rss_feed: &mut Mfp, volume: u8) {
1717
let mut rng = thread_rng();
1818

19-
if let Some(random_episode) = rss_feed.items.choose(&mut rng) {
20-
play_episode(random_episode, volume);
21-
} else {
19+
if rss_feed.items.is_empty() {
2220
eprintln!("No Tracks found");
21+
return;
22+
}
23+
24+
loop {
25+
if let Some(random_episode) = rss_feed.items.choose_mut(&mut rng) {
26+
play_episode(random_episode, volume);
27+
let played_title = random_episode.title.clone();
28+
rss_feed
29+
.items
30+
.retain(|episode| episode.title != played_title);
31+
} else {
32+
println!("All tracks have been played 🎶");
33+
return;
34+
}
2335
}
2436
}
2537

@@ -43,7 +55,7 @@ fn main() {
4355
return eprintln!("Volume must be between 0 and 9");
4456
}
4557

46-
let rss_feed = Mfp::new().expect("Failed to fetch RSS data");
58+
let mut rss_feed = Mfp::new().expect("Failed to fetch RSS data");
4759
let total_tracks = rss_feed.items.len();
4860

4961
if let Some(requested_track_number) = args.track_number {
@@ -56,6 +68,6 @@ fn main() {
5668
play_episode(episode, args.volume);
5769
}
5870
} else {
59-
play_random_episode(&rss_feed, args.volume);
71+
play_random_episodes(&mut rss_feed, args.volume);
6072
}
6173
}

0 commit comments

Comments
 (0)