diff --git a/.gitignore b/.gitignore index 70c6a74..9b1348c 100644 --- a/.gitignore +++ b/.gitignore @@ -78,3 +78,5 @@ fabric.properties # Android studio 3.1+ serialized cache file .idea/caches/build_file_checksums.ser + +.junie/ diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 2bc9322..16072ca 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -17,14 +17,10 @@ + - - - - - - + - @@ -58,6 +54,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { "associatedIndex": 2 } @@ -66,48 +125,51 @@ - { + "keyToString": { + "Cargo.Run.executor": "Run", + "RunOnceActivity.MCP Project settings loaded": "true", + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true", + "RunOnceActivity.cidr.known.project.marker": "true", + "RunOnceActivity.git.unshallow": "true", + "RunOnceActivity.rust.reset.selective.auto.import": "true", + "RunOnceActivity.typescript.service.memoryLimit.init": "true", + "WebServerToolWindowFactoryState": "false", + "cf.first.check.clang-format": "false", + "cidr.known.project.marker": "true", + "codeWithMe.voiceChat.enabledByDefault": "false", + "com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true", + "git-widget-placeholder": "master", + "junie.onboarding.icon.badge.shown": "true", + "last_opened_file_path": "/home/jude/Documents/navidrome-playlists", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "org.rust.cargo.project.model.PROJECT_DISCOVERY": "true", + "org.rust.cargo.project.model.impl.CargoExternalSystemProjectAware.subscribe.first.balloon": "", + "org.rust.disableDetachedFileInspection/home/jude/navidrome-playlists/navidrome/src/client/mod.rs": "true", + "org.rust.disableDetachedFileInspection/home/jude/navidrome-playlists/navidrome/src/client/playlists.rs": "true", + "org.rust.disableDetachedFileInspection/home/jude/navidrome-playlists/navidrome/src/lib.rs": "true", + "org.rust.disableDetachedFileInspection/home/jude/navidrome-playlists/navidrome/src/models.rs": "true", + "org.rust.first.attach.projects": "true", + "settings.editor.selected.configurable": "language.rust.cargo.check", + "to.speed.mode.migration.done": "true", + "ts.external.directory.path": "/home/jude/Documents/navidrome-playlists/app/node_modules/typescript/lib", + "vue.rearranger.settings.migration": "true" }, - "keyToStringList": { - "DatabaseDriversLRU": [ - "postgresql" + "keyToStringList": { + "DatabaseDriversLRU": [ + "postgresql" ], - "com.intellij.ide.scratch.LRUPopupBuilder$1/SQL Dialect": [ - "PostgreSQL" + "com.intellij.ide.scratch.LRUPopupBuilder$1/SQL Dialect": [ + "PostgreSQL" ] } -}]]> +} @@ -189,7 +251,11 @@ - + + + + + 1692008860369 diff --git a/src/daemon/update_playlists.rs b/src/daemon/update_playlists.rs index 904c0a0..c4f052c 100644 --- a/src/daemon/update_playlists.rs +++ b/src/daemon/update_playlists.rs @@ -79,12 +79,25 @@ async fn update_playlist( continue; } + // Try to find track by MusicBrainz ID first + if let Some(mbid) = &recording.recording_mbid { + let mbid_results = media_client.as_ref().song_search(mbid.clone()).await?; + + if mbid_results.len() == 1 { + if let Some(track) = mbid_results.first() { + tracks.push(track.id.clone()); + continue; + } + } + } + + // Fall back to lookup by name/artist let search_results = media_client .as_ref() .song_search(format!( "{} {}", recording.track_name, - recording.artists.unwrap_or(vec![])[0].artist_credit_name + recording.artists.clone().unwrap_or(vec![])[0].artist_credit_name )) .await?; diff --git a/src/listenbrainz.rs b/src/listenbrainz.rs index 4aa921e..3617d91 100644 --- a/src/listenbrainz.rs +++ b/src/listenbrainz.rs @@ -85,6 +85,7 @@ pub struct RecordingsEntry { pub release_name: Option, pub artist_name: String, pub artists: Option>, + pub recording_mbid: Option, } pub async fn recordings(