AFGKYLKUV6QBTL7JYDNOUCO2BVUR6CUB5MAKA3V3C76XGCWJULQAC
3TU6FAXGIE5K34LWVKCLI6DPH74VUV4BMEADXKA2PMSR6KMKDX6AC
FBQOBNZ6JJQXSHYQK7MCFA4U7NBNB47FXED7Y7HPRTOQVXJFIAGAC
XIHPYOWDLQY2MVMVUQPH23O3TBALRG4G2CHSLWSCAYMY5NVJ32WQC
IFBRAMVLQ4Z6BAEMWDIXD2V5HSZK4DHRWYZNB32IBY7ZRTNZJVCQC
MQKD76RYJOC3SJ4EPKQRQFV7A2BRJAHAI4VMMLR4EKV4B3EV5YTQC
T4OJ6Z4HDM4RW3HOTJZHSH5MGF6NWGZ63GUOD3JFVQOKH6N4AVRQC
NUYITHNW2PMOOUBX2ZT3JHSK3MQUFP4W3GEZ5HFJFDOMT56R4QSAC
L7S4333LAJBFHRBEI5KB27CQJ3VVWSFZ6HOJ4FPFDDNAE4PUH6GAC
O3VZ5J3LIYD3KBZLZA6HOJI7MVOV5DEODDPCPOMIBTPCO3CZW4YQC
ADXMUSFXOKBPCHW4XS3T4KLWMPGQPYDMZW6YFFSHZPAQKEGIKCBQC
UIMZBURR7KOWSREO4GDH5C2LZDUTEZBKQNYWBYSFGUTRYJ4GKSNQC
3YR56Y65UIAL3J7PUXWVJMOOHYZYDIX4V54OT2TJPZ25WQ6MXHCQC
JYSIHNS67XTGAR4HN7ZHWFMGGYSK5IY6J6EHO4YUZOR7UMMWAORQC
476KTQSS5NXVCTVLVZQRGSYD5OAFBYG75VTSWBN26Q45RSMRT5YQC
5JMYBRF3UYX4LFH7JK6S4BEDKRVKDFIL4YKTCWKMKP4TMNNGQFKQC
DP6ASS5FJGSZUG2B4SQOKZVHFAVZLEHFVEWBNFG3BHMC6FZAJNHQC
XCBCUDQRCNEEFIKGSHA52D53I5HGZSYB4W4JINRFKZKWHKEG3V6QC
BIZPSJDFFGGDYGVC5UJSJJ7YOBEPC27FPKMSHWJDI2DNMXHWRXSAC
J64KBLKALQ3HQCY4HJU5H6WBXTATS7TKBYNNUUSNJE7JLWLYO66QC
ZYS43ILR4OXI7S2AYNGYSTK3IU2UVELIWVCCWDS7RVZQDSNJMDHQC
6FJACP6KUOZ4HWK4PSS5PFPGDYXZSCAWSKIARWBDGCZTPJWXA62AC
M4FCDZ745GHHL3OLH64EVYOEOEGGGVIBCVFGX5JUJDJRE5OLCXLQC
O53GR2OQHGRKAVJT2RVPRHYFB54W5LM4DQYT7EYVGKU7HDK5CJJQC
LG3NDQDEZ65QP564QKTTYC3XI4ZN3NVW4B5T36QJEBHMJAEH4VEAC
XJXE6M6QRV4WRSY7D4T2QK35RUVD5YW3UP2RDUNFMXIGK2ZI6D2AC
T3FLM3YBDF7KUVZTODHJTHU7ZI3HR6X2ZDDMTTY26F3XAJBU6EMQC
USEXBPODUNF4Y7KLGC7SFQZAARXFMTAHK4OKO6HR7G3UPZY4C42QC
76TBVFPIFU3LSMXY5NAHZBH6HRJLSLK43PGOPL6QQ2YYVBJ64QAQC
JPN37V6Q35ZAW7A2DTGX2WJ3IJ66BAGHXHWXOGHQRHGFAOETFQ7AC
HSDBPX2AMUS4NRA52EHIYOR7H37ABNGJWBJKPQABFMFDU7EITSIAC
EEJ6CBJRTXLPQP44I2RLWVLJBX565DXXAWU4JIWNA3MMNE7WB5LQC
UCVMP2BZ7IIJTWG5ZA3ETJKEBFXTB7J5J25XE4T74RFTGSMZX4AAC
lazy_static = "1.3"
rayon = "1.1"
regex = "1.2"
reqwest = "0.9"
lazy_static = "1.4"
futures = "0.3.1"
rayon = "1.3"
regex = "1.3"
reqwest = { version = "0.10", features = ["default-tls", "json"] }
podcast.episodes()[..podcast.episodes().len() - sub.num_episodes]
.par_iter()
.map(|ep| download::download(podcast.title(), ep))
.flat_map(std::result::Result::err)
.for_each(|err| eprintln!("Error: {}", err));
let mut d_vec = vec![];
let subscription_limit = config.unwrap_or_else(|| Config::default()).download_subscription_limit.unwrap_or(-1);
let mut episodes = podcast.episodes()[..podcast.episodes().len() - sub.num_episodes].to_vec();
episodes.reverse();
if 0 < subscription_limit {
for ep in episodes.iter().take(subscription_limit as usize) {
d_vec.push(download::download(podcast.title().into(), ep.clone()));
}
} else {
for ep in episodes.iter() {
d_vec.push(download::download(podcast.title().into(), ep.clone()));
}
}
for c in futures::future::join_all(d_vec).await.iter() {
if let Err(err) = c {
println!("Error: {}", err);
}
}
let _result: Vec<Result<()>> = state
.subscriptions_mut()
.par_iter_mut()
.map(|sub: &mut Subscription| update_subscription(sub))
.collect();
let mut d_vec = vec![];
for sub in state.subscriptions_mut() {
d_vec.push(update_subscription(sub, config));
}
for c in futures::future::join_all(d_vec).await.iter() {
if let Err(err) = c {
println!("Error: {}", err);
}
}
fn sub(state: &mut State, config: Config, url: &str) -> Result<()> {
state.subscribe(url)?;
download::download_rss(config, url)?;
async fn sub(state: &mut State, config: Config, url: &str) -> Result<()> {
state.subscribe(url).await?;
download::download_rss(config, url).await?;
episodes_to_download
.par_iter()
.map(|ep_num| &episodes[episodes.len() - ep_num])
.map(|ep| download(podcast.title(), ep))
.flat_map(std::result::Result::err)
.for_each(|err| println!("Error: {}", err));
for ep_num in episodes_to_download {
let d = download(podcast.title().into(), episodes[episodes.len() - ep_num].clone());
d_vec.push(d);
}
}
}
for c in futures::future::join_all(d_vec).await.iter() {
if let Err(err) = c {
println!("Error: {}", err);
download(podcast.title(), &episodes[episodes.len() - ep_num])?;
d_vec.push(download(podcast.title().into(), episodes[episodes.len() - ep_num].clone()));
}
}
for c in futures::future::join_all(d_vec).await.iter() {
if let Err(err) = c {
println!("Error: {}", err);
filtered_episodes
.map(|ep| download(podcast.title(), ep))
.flat_map(std::result::Result::err)
.for_each(|err| eprintln!("Error: {}", err));
for ep in filtered_episodes {
let d = download(podcast.title().into(), ep.clone());
d_vec.push(d);
}
filtered_episodes
.take(1)
.map(|ep| download(podcast.title(), ep))
.flat_map(std::result::Result::err)
.for_each(|err| eprintln!("Error: {}", err));
for ep in filtered_episodes.take(1) {
let d = download(podcast.title().into(), ep.clone());
d_vec.push(d);
}
utils::already_downloaded(podcast.title()).map(|downloaded| {
podcast
.episodes()
.par_iter()
for downloaded in utils::already_downloaded(podcast.title()) {
let episodes = podcast.episodes();
for e in episodes
.iter()
.map(|e| download(podcast.title(), e))
.flat_map(std::result::Result::err)
.for_each(|err| eprintln!("Error: {}", err))
})?;
.cloned()
{
let d = download(podcast.title().into(), e);
d_vec.push(d);
}
}
}
}
for c in futures::future::join_all(d_vec).await.iter() {
if let Err(err) = c {
println!("Error: {}", err);
pub fn download_rss(config: Config, url: &str) -> Result<(), Error> {
let channel = utils::download_rss_feed(url)?;
let mut download_limit = config.auto_download_limit as usize;
pub async fn download_rss(config: Config, url: &str) -> Result<(), Error> {
let channel = utils::download_rss_feed(url).await?;
let mut download_limit = config.auto_download_limit.unwrap_or(1) as usize;
episodes[..download_limit]
.par_iter()
.map(|ep| download(podcast.title(), ep))
.flat_map(std::result::Result::err)
.for_each(|err| eprintln!("Error downloading {}: {}", podcast.title(), err));
let mut d_vec = vec![];
for ep in episodes[..download_limit].iter() {
d_vec.push(download(podcast.title().into(), ep.clone()));
}
for c in futures::future::join_all(d_vec).await.iter() {
if let Err(err) = c {
eprintln!("Error downloading {}: {}", podcast.title(), err)
}
}
let mut resp = reqwest::get(url)?;
let mut content: Vec<u8> = Vec::new();
resp.read_to_end(&mut content)?;
let channel = Channel::read_from(BufReader::new(&content[..]))?;
let resp = reqwest::get(url).await?.bytes().await?;
let channel = Channel::read_from(BufReader::new(&resp[..]))?;