diff src/player.rs @ 3:18f743c980fa

make this a bit more sane
author Paper <paper@tflc.us>
date Sat, 04 Apr 2026 17:03:22 -0400
parents 594c0f9d7972
children 26f695129c86
line wrap: on
line diff
--- a/src/player.rs	Sat Apr 04 16:04:31 2026 -0400
+++ b/src/player.rs	Sat Apr 04 17:03:22 2026 -0400
@@ -281,7 +281,7 @@
 
 		let p = pl.unwrap();
 
-		let playlist_items_result = self.bw.playlist_items(p.active_item.playlist_id.as_str(), p.active_item.index, 1, ["%title%", "%artist%", "%album%", "%discnumber%", "%tracknumber%", "%album artist%", "%path%"].to_vec()).await;
+		let playlist_items_result = self.bw.playlist_item(p.active_item.playlist_id.as_str(), p.active_item.index, &["%title%", "%artist%", "%album%", "%discnumber%", "%tracknumber%", "%album artist%", "%path%", "%bpm%", "%composer%", "%comment%", "%date%", "%genre%", "%lyricist%"].to_vec()).await;
 
 		match playlist_items_result {
 			Err(_) => return Err(fdo::Error::Failed("uhoh".to_string())),
@@ -296,14 +296,34 @@
 		let artwork = self.get_artwork(p.active_item.playlist_id.as_str(), p.active_item.index, track.columns.get(6).unwrap());
 */
 
-		let builder = mpris_server::Metadata::builder()
-			.length(secs_to_time(p.active_item.duration))
-			.album(track.columns.get(2).unwrap())
-			.artist([track.columns.get(1).unwrap()])
-			.disc_number(track.columns.get(3).unwrap().parse::<i32>().unwrap())
-			.track_number(track.columns.get(4).unwrap().parse::<i32>().unwrap())
-			.title(track.columns.get(0).unwrap())
-			.album_artist([track.columns.get(5).unwrap()]);
+		let mut x = mpris_server::Metadata::new();
+
+		x.set_length(Some(secs_to_time(p.active_item.duration)));
+		if track.columns.len() >= 13 {
+			x.set_title(Some(track.columns.get(0).unwrap()));
+			/* XXX musicbrainz has %artists% we can use for a proper list */
+			x.set_artist(Some([track.columns.get(1).unwrap()]));
+			x.set_album(Some(track.columns.get(2).unwrap()));
+			match track.columns.get(3).unwrap().parse::<i32>() {
+				Ok(v) => { x.set_disc_number(Some(v)); },
+				_ => (),
+			};
+			match track.columns.get(4).unwrap().parse::<i32>() {
+				Ok(v) => { x.set_track_number(Some(v)); },
+				_ => (),
+			};
+			x.set_album_artist(Some([track.columns.get(5).unwrap()]));
+			/* Why is this an i32 ??? It would make more sense as f32 or f64 */
+			match track.columns.get(7).unwrap().parse::<i32>() {
+				Ok(v) => { x.set_audio_bpm(Some(v)) },
+				_ => (),
+			};
+			x.set_composer(Some([track.columns.get(8).unwrap()]));
+			x.set_comment(Some([track.columns.get(9).unwrap()]));
+			x.set_content_created(Some(track.columns.get(10).unwrap()));
+			x.set_genre(Some(track.columns.get(11).unwrap().split(";")));
+			x.set_lyricist(Some([track.columns.get(12).unwrap()]));
+		}
 
 /*
 		return match artwork.await {
@@ -311,7 +331,7 @@
 			_     => Ok(builder.build()),
 		};
 */
-		return Ok(builder.build());
+		return Ok(x);
 	}
 
 	async fn volume(&self) -> fdo::Result<mpris_server::Volume>