diff --git a/src-tauri/src/musicbrainz/genre_normalization.rs b/crates/qbz-integrations/src/musicbrainz/genre.rs similarity index 99% rename from src-tauri/src/musicbrainz/genre_normalization.rs rename to crates/qbz-integrations/src/musicbrainz/genre.rs index 141898742..30c84a603 100644 --- a/src-tauri/src/musicbrainz/genre_normalization.rs +++ b/crates/qbz-integrations/src/musicbrainz/genre.rs @@ -5,7 +5,7 @@ use std::collections::HashSet; -use qbz_integrations::musicbrainz::{AffinitySeeds, Tag}; +use super::{AffinitySeeds, Tag}; /// Tags that provide no useful genre/scene signal const NOISY_TAGS: &[&str] = &[ diff --git a/src-tauri/src/musicbrainz/location_discovery.rs b/crates/qbz-integrations/src/musicbrainz/location.rs similarity index 97% rename from src-tauri/src/musicbrainz/location_discovery.rs rename to crates/qbz-integrations/src/musicbrainz/location.rs index 5e18d2f46..a73817326 100644 --- a/src-tauri/src/musicbrainz/location_discovery.rs +++ b/crates/qbz-integrations/src/musicbrainz/location.rs @@ -7,8 +7,11 @@ use std::collections::HashSet; -use super::genre_normalization::{extract_affinity_seeds, normalize_genre}; -use qbz_integrations::musicbrainz::*; +use super::genre::{extract_affinity_seeds, normalize_genre}; +use super::{ + AffinitySeeds, Area, ArtistFullResponse, ArtistLocation, ArtistMetadata, ArtistType, LifeSpan, + LocationPrecision, +}; /// Extract artist metadata from the full MB response pub fn extract_metadata(response: &ArtistFullResponse) -> ArtistMetadata { diff --git a/crates/qbz-integrations/src/musicbrainz/mod.rs b/crates/qbz-integrations/src/musicbrainz/mod.rs index 574646eb1..4fdd20379 100644 --- a/crates/qbz-integrations/src/musicbrainz/mod.rs +++ b/crates/qbz-integrations/src/musicbrainz/mod.rs @@ -31,5 +31,8 @@ mod models; #[cfg(feature = "cache")] pub mod cache; +pub mod genre; +pub mod location; + pub use client::{MusicBrainzClient, MusicBrainzConfig}; pub use models::*; diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 5d11744c4..5eecb9763 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -5121,6 +5121,7 @@ dependencies = [ "qbz-models", "qbz-player", "qbz-qobuz", + "serde", "serde_json", "thiserror 2.0.18", "tokio", diff --git a/src-tauri/src/commands_v2/integrations.rs b/src-tauri/src/commands_v2/integrations.rs index 223bfe6ee..84cae85e1 100644 --- a/src-tauri/src/commands_v2/integrations.rs +++ b/src-tauri/src/commands_v2/integrations.rs @@ -552,7 +552,7 @@ pub async fn v2_musicbrainz_get_artist_metadata( drop(client); // Extract metadata using the location discovery module (now uses V2 types) - let mut metadata = crate::musicbrainz::location_discovery::extract_metadata(&artist); + let mut metadata = qbz_integrations::musicbrainz::location::extract_metadata(&artist); // Resolve real country from begin_area hierarchy (MB's "country" field is // where the artist is active, not where they were born/formed) @@ -606,10 +606,10 @@ pub async fn v2_discover_artists_by_location( runtime: State<'_, RuntimeManagerState>, app: tauri::AppHandle, ) -> Result { - use crate::musicbrainz::genre_normalization::{ + use qbz_integrations::musicbrainz::genre::{ extract_affinity_seeds, genre_summary, is_broad_genre, }; - use crate::musicbrainz::location_discovery::{build_scene_cache_key, compute_affinity_score}; + use qbz_integrations::musicbrainz::location::{build_scene_cache_key, compute_affinity_score}; use qbz_integrations::musicbrainz::{ AffinitySeeds, LocationCandidate, LocationDiscoveryResponse, Tag, }; diff --git a/src-tauri/src/musicbrainz/mod.rs b/src-tauri/src/musicbrainz/mod.rs index 1e7a0c534..a96b70a66 100644 --- a/src-tauri/src/musicbrainz/mod.rs +++ b/src-tauri/src/musicbrainz/mod.rs @@ -21,8 +21,6 @@ pub mod smart_playlists; pub use cache::{CacheStats, MusicBrainzCache, MusicBrainzCacheState}; pub use client::{MusicBrainzClient, MusicBrainzConfig}; -pub mod genre_normalization; -pub mod location_discovery; pub use models::{ AffinitySeeds, AlbumAppearance, Area, AreaResult, AreaSearchResponse, ArtistBrowseResponse,