From 2be782ede476c2232bf7e10aeaf9f3d297966078 Mon Sep 17 00:00:00 2001 From: Ovyerus Date: Tue, 6 Aug 2024 23:50:08 +1000 Subject: [PATCH] fix: skip releases with no downloads Fixes #14 --- CHANGELOG.md | 6 ++++++ src/api/mod.rs | 8 +++++++- src/api/structs/digital_item.rs | 2 +- src/cmds/run.rs | 8 +++++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce96c90..8f8c6ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Fixed + +- Skip over releases that don't have any downloads. + ## [0.3.2] - 2024-07-16 ### Fixed diff --git a/src/api/mod.rs b/src/api/mod.rs index 0a029cc..ca93b5a 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -256,7 +256,13 @@ impl Api { audio_format: &str, m: &indicatif::MultiProgress, ) -> Result<(), Box> { - let download_url = &item.downloads.get(audio_format).unwrap().url; + let download_url = &item + .downloads + .as_ref() + .expect("cannot download a release with no downloads") + .get(audio_format) + .unwrap() + .url; let res = self.request(Method::GET, download_url)?; let len = res.content_length().unwrap(); diff --git a/src/api/structs/digital_item.rs b/src/api/structs/digital_item.rs index bfe4879..4110f99 100644 --- a/src/api/structs/digital_item.rs +++ b/src/api/structs/digital_item.rs @@ -15,7 +15,7 @@ const FORMAT: &str = "%d %b %Y %T %Z"; #[derive(Clone, Deserialize, Debug)] pub struct DigitalItem { - pub downloads: HashMap, + pub downloads: Option>, pub package_release_date: Option, pub title: String, pub artist: String, diff --git a/src/cmds/run.rs b/src/cmds/run.rs index efd1d72..5493872 100644 --- a/src/cmds/run.rs +++ b/src/cmds/run.rs @@ -160,7 +160,6 @@ pub fn command( Ok(Some(item)) => item, Ok(None) => { let cache = cache.lock().unwrap(); - // warn that item doesnt exist warn!("Could not find digital item for {id}"); skip_err!(cache.add(&id, "UNKNOWN")); continue; @@ -168,6 +167,13 @@ pub fn command( Err(_) => continue, }; + if let None = item.downloads { + let cache = cache.lock().unwrap(); + warn!("Skipping {id}, does not have any downloads"); + skip_err!(cache.add(&id, "No downloads")); + continue; + } + if dry_run { let results_lock = dry_run_results.lock(); if let Ok(mut results) = results_lock {