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 @@
+
-
-
-
-
-
-
+
@@ -35,7 +31,7 @@
-
+
@@ -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(