From b0ac9bf2c1125f76bc134aae7e54d433be238f80 Mon Sep 17 00:00:00 2001 From: Wojciech Kozlowski Date: Sat, 28 Sep 2024 12:05:16 +0200 Subject: [PATCH] Simplify fetch --- src/tui/app/machine/fetch_state.rs | 38 ++++++++++++++++++------------ 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/tui/app/machine/fetch_state.rs b/src/tui/app/machine/fetch_state.rs index 559b353..2993958 100644 --- a/src/tui/app/machine/fetch_state.rs +++ b/src/tui/app/machine/fetch_state.rs @@ -4,9 +4,9 @@ use std::{ }; use musichoard::collection::{ - album::AlbumMeta, + album::{Album, AlbumMeta}, artist::{Artist, ArtistId, ArtistMeta}, - musicbrainz::{IMusicBrainzRef, MbRefOption, Mbid}, + musicbrainz::{IMusicBrainzRef, MbArtistRef, MbRefOption, Mbid}, }; use crate::tui::{ @@ -158,21 +158,10 @@ impl AppMachine { ) -> Result<(), FetchError> { let requests = match artist.meta.info.musicbrainz { MbRefOption::Some(ref arid) => { - let arid = arid.mbid(); - let albums = artist.albums.iter(); - albums - .filter(|album| matches!(album.meta.info.musicbrainz, MbRefOption::None)) - .map(|album| { - MbParams::search_release_group( - artist.meta.id.clone(), - arid.clone(), - album.meta.clone(), - ) - }) - .collect() + Self::fetch_albums_requests(&artist.meta.id, &arid, &artist.albums) } MbRefOption::CannotHaveMbid => VecDeque::new(), - MbRefOption::None => VecDeque::from([MbParams::search_artist(artist.meta.clone())]), + MbRefOption::None => Self::fetch_artist_request(&artist.meta), }; if requests.is_empty() { return Err(FetchError::NothingToFetch); @@ -180,6 +169,25 @@ impl AppMachine { Ok(musicbrainz.submit_background_job(result_sender, requests)?) } + fn fetch_albums_requests( + artist: &ArtistId, + arid: &MbArtistRef, + albums: &[Album], + ) -> VecDeque { + let arid = arid.mbid(); + albums + .iter() + .filter(|album| matches!(album.meta.info.musicbrainz, MbRefOption::None)) + .map(|album| { + MbParams::search_release_group(artist.clone(), arid.clone(), album.meta.clone()) + }) + .collect() + } + + fn fetch_artist_request(meta: &ArtistMeta) -> VecDeque { + VecDeque::from([MbParams::search_artist(meta.clone())]) + } + fn submit_lookup_artist_job( musicbrainz: &dyn IMbJobSender, result_sender: ResultSender,