Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #74 from tsirysndr/fix/missing-current-track-id

rpc: fix current song/playlist songs ids

authored by

Tsiry Sandratraina and committed by
GitHub
9f9a5ab1 db1d5d92

+28 -3
+2 -1
crates/rpc/src/lib.rs
··· 72 72 let album_id = mp3entry.album_id.unwrap_or_default(); 73 73 let artist_id = mp3entry.artist_id.unwrap_or_default(); 74 74 let album_art = mp3entry.album_art; 75 + let id = mp3entry.id.unwrap_or_default(); 75 76 76 77 CurrentTrackResponse { 78 + id, 77 79 title, 78 80 artist, 79 81 album, ··· 98 100 album_id, 99 101 artist_id, 100 102 album_art, 101 - id: "".into(), 102 103 } 103 104 } 104 105 }
+23 -2
crates/server/src/handlers/player.rs
··· 9 9 use local_ip_addr::get_local_ip_address; 10 10 use rand::seq::SliceRandom; 11 11 use rockbox_chromecast::Chromecast; 12 + use rockbox_library::repo; 12 13 use rockbox_sys::{ 13 14 self as rb, 14 15 types::{audio_status::AudioStatus, mp3_entry::Mp3Entry}, ··· 177 178 return Ok(()); 178 179 } 179 180 180 - let track = rb::playback::current_track(); 181 + let mut track = rb::playback::current_track(); 182 + let path: Option<String> = track.as_ref().map(|t| t.path.clone()); 183 + if let Some(path) = path { 184 + let hash = format!("{:x}", md5::compute(path.as_bytes())); 185 + if let Some(metadata) = repo::track::find_by_md5(ctx.pool.clone(), &hash).await? { 186 + track.as_mut().unwrap().id = Some(metadata.id); 187 + track.as_mut().unwrap().album_art = metadata.album_art; 188 + track.as_mut().unwrap().album_id = Some(metadata.album_id); 189 + track.as_mut().unwrap().artist_id = Some(metadata.artist_id); 190 + } 191 + } 181 192 res.json(&track); 182 193 183 194 drop(player_mutex); ··· 193 204 return Ok(()); 194 205 } 195 206 196 - let track = rb::playback::next_track(); 207 + let mut track = rb::playback::next_track(); 208 + let path: Option<String> = track.as_ref().map(|t| t.path.clone()); 209 + if let Some(path) = path { 210 + let hash = format!("{:x}", md5::compute(path.as_bytes())); 211 + if let Some(metadata) = repo::track::find_by_md5(ctx.pool.clone(), &hash).await? { 212 + track.as_mut().unwrap().id = Some(metadata.id); 213 + track.as_mut().unwrap().album_art = metadata.album_art; 214 + track.as_mut().unwrap().album_id = Some(metadata.album_id); 215 + track.as_mut().unwrap().artist_id = Some(metadata.artist_id); 216 + } 217 + } 197 218 res.json(&track); 198 219 199 220 drop(player_mutex);
+2
crates/server/src/handlers/playlists.rs
··· 320 320 entry.album_id = track.as_ref().map(|t| t.album_id.clone()); 321 321 entry.artist_id = track.as_ref().map(|t| t.artist_id.clone()); 322 322 entry.genre_id = track.as_ref().map(|t| t.genre_id.clone()); 323 + entry.id = track.as_ref().map(|t| t.id.clone()); 323 324 324 325 metadata_cache.insert(hash, entry.clone()); 325 326 entries.push(entry); ··· 379 380 entry.album_id = track.as_ref().map(|t| t.album_id.clone()); 380 381 entry.artist_id = track.as_ref().map(|t| t.artist_id.clone()); 381 382 entry.genre_id = track.as_ref().map(|t| t.genre_id.clone()); 383 + entry.id = track.as_ref().map(|t| t.id.clone()); 382 384 383 385 metadata_cache.insert(hash, entry.clone()); 384 386 entries.push(entry);
+1
crates/sys/src/types/mp3_entry.rs
··· 66 66 pub artist_id: Option<String>, 67 67 pub genre_id: Option<String>, 68 68 pub album_art: Option<String>, 69 + pub id: Option<String>, 69 70 } 70 71 71 72 impl From<crate::Mp3Entry> for Mp3Entry {