diff --git a/src/tui/app/machine/fetch_state.rs b/src/tui/app/machine/fetch_state.rs index 7004204..bc9893d 100644 --- a/src/tui/app/machine/fetch_state.rs +++ b/src/tui/app/machine/fetch_state.rs @@ -10,7 +10,7 @@ use crate::tui::{ machine::{match_state::MatchState, App, AppInner, AppMachine}, AppPublicState, AppState, IAppEventFetch, IAppInteractFetch, }, - lib::external::musicbrainz::daemon::{ + lib::interface::musicbrainz::daemon::{ Error as DaemonError, IMbJobSender, MbApiResult, MbParams, ResultSender, }, }; diff --git a/src/tui/app/machine/mod.rs b/src/tui/app/machine/mod.rs index 0f1853b..86bfbb6 100644 --- a/src/tui/app/machine/mod.rs +++ b/src/tui/app/machine/mod.rs @@ -13,7 +13,7 @@ use crate::tui::{ selection::Selection, AppMode, AppPublic, AppPublicInner, AppPublicState, AppState, IApp, IAppAccess, IAppBase, IAppState, }, - lib::{external::musicbrainz::daemon::IMbJobSender, IMusicHoard}, + lib::{interface::musicbrainz::daemon::IMbJobSender, IMusicHoard}, }; use browse_state::BrowseState; diff --git a/src/tui/lib/external/musicbrainz/daemon/mod.rs b/src/tui/lib/external/musicbrainz/daemon/mod.rs index 4c7bc9b..9188870 100644 --- a/src/tui/lib/external/musicbrainz/daemon/mod.rs +++ b/src/tui/lib/external/musicbrainz/daemon/mod.rs @@ -1,25 +1,17 @@ -use std::{collections::VecDeque, fmt, sync::mpsc, thread, time}; - -use musichoard::collection::{album::AlbumMeta, artist::ArtistMeta, musicbrainz::Mbid}; +use std::{collections::VecDeque, sync::mpsc, thread, time}; use crate::tui::{ app::MatchStateInfo, event::IFetchCompleteEventSender, - lib::interface::musicbrainz::api::{Error as ApiError, IMusicBrainz}, + lib::interface::musicbrainz::{ + api::{Error as ApiError, IMusicBrainz}, + daemon::{Error, IMbJobSender, MbParams, ResultSender, SearchParams}, + }, }; -pub enum Error { +enum JobError { + JobQueueEmpty, EventChannelDisconnected, - JobChannelDisconnected, -} - -impl fmt::Display for Error { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - Error::EventChannelDisconnected => write!(f, "the event channel is disconnected"), - Error::JobChannelDisconnected => write!(f, "the job channel is disconnected"), - } - } } pub struct MusicBrainzDaemon { @@ -29,11 +21,6 @@ pub struct MusicBrainzDaemon { event_sender: Box, } -enum JobError { - JobQueueEmpty, - EventChannelDisconnected, -} - struct JobQueue { foreground_queue: VecDeque, background_queue: VecDeque, @@ -55,8 +42,6 @@ enum JobPriority { Background, } -pub type MbApiResult = Result; -pub type ResultSender = mpsc::Sender; struct JobInstance { result_sender: ResultSender, requests: VecDeque, @@ -81,37 +66,6 @@ impl JobInstance { } } -pub enum MbParams { - Search(SearchParams), -} - -impl MbParams { - pub fn search_artist(artist: ArtistMeta) -> Self { - MbParams::Search(SearchParams::Artist(SearchArtistParams { artist })) - } - - pub fn search_release_group(arid: Mbid, album: AlbumMeta) -> Self { - MbParams::Search(SearchParams::ReleaseGroup(SearchReleaseGroupParams { - arid, - album, - })) - } -} - -pub enum SearchParams { - Artist(SearchArtistParams), - ReleaseGroup(SearchReleaseGroupParams), -} - -pub struct SearchArtistParams { - artist: ArtistMeta, -} - -pub struct SearchReleaseGroupParams { - arid: Mbid, - album: AlbumMeta, -} - pub struct JobChannel { sender: mpsc::Sender, receiver: mpsc::Receiver, @@ -144,14 +98,6 @@ impl JobChannel { } } -pub trait IMbJobSender { - fn submit_background_job( - &self, - result_sender: ResultSender, - requests: VecDeque, - ) -> Result<(), Error>; -} - impl IMbJobSender for JobSender { fn submit_background_job( &self, diff --git a/src/tui/lib/interface/musicbrainz/daemon/mod.rs b/src/tui/lib/interface/musicbrainz/daemon/mod.rs new file mode 100644 index 0000000..91199ee --- /dev/null +++ b/src/tui/lib/interface/musicbrainz/daemon/mod.rs @@ -0,0 +1,61 @@ +use std::{collections::VecDeque, fmt, sync::mpsc}; + +use musichoard::collection::{album::AlbumMeta, artist::ArtistMeta, musicbrainz::Mbid}; + +use crate::tui::{app::MatchStateInfo, lib::interface::musicbrainz::api::Error as MbApiError}; + +pub enum Error { + EventChannelDisconnected, + JobChannelDisconnected, +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + Error::EventChannelDisconnected => write!(f, "the event channel is disconnected"), + Error::JobChannelDisconnected => write!(f, "the job channel is disconnected"), + } + } +} + +pub type MbApiResult = Result; +pub type ResultSender = mpsc::Sender; + +pub trait IMbJobSender { + fn submit_background_job( + &self, + result_sender: ResultSender, + requests: VecDeque, + ) -> Result<(), Error>; +} + +pub enum MbParams { + Search(SearchParams), +} + +pub enum SearchParams { + Artist(SearchArtistParams), + ReleaseGroup(SearchReleaseGroupParams), +} + +pub struct SearchArtistParams { + pub artist: ArtistMeta, +} + +pub struct SearchReleaseGroupParams { + pub arid: Mbid, + pub album: AlbumMeta, +} + +impl MbParams { + pub fn search_artist(artist: ArtistMeta) -> Self { + MbParams::Search(SearchParams::Artist(SearchArtistParams { artist })) + } + + pub fn search_release_group(arid: Mbid, album: AlbumMeta) -> Self { + MbParams::Search(SearchParams::ReleaseGroup(SearchReleaseGroupParams { + arid, + album, + })) + } +} diff --git a/src/tui/lib/interface/musicbrainz/mod.rs b/src/tui/lib/interface/musicbrainz/mod.rs index e5fdf85..de2c343 100644 --- a/src/tui/lib/interface/musicbrainz/mod.rs +++ b/src/tui/lib/interface/musicbrainz/mod.rs @@ -1 +1,2 @@ pub mod api; +pub mod daemon;