From a5a42bffb8dbb1ae585758c85117a78f8b0c98dc Mon Sep 17 00:00:00 2001 From: Guillaume Dott Date: Fri, 4 Sep 2026 11:10:56 +0200 Subject: [PATCH] i3blocks: use ruby for strawberry current song When using shellscript for dbus properties, I parsed the output manually. It was not really good and special characters were not displayed correctly. --- i3blocks/multi/blocks/strawberry-current.rb | 32 +++++++++++++++++++++ i3blocks/multi/left-config | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100755 i3blocks/multi/blocks/strawberry-current.rb diff --git a/i3blocks/multi/blocks/strawberry-current.rb b/i3blocks/multi/blocks/strawberry-current.rb new file mode 100755 index 0000000..e4c797e --- /dev/null +++ b/i3blocks/multi/blocks/strawberry-current.rb @@ -0,0 +1,32 @@ +#!/usr/bin/env ruby + +require "dbus" + +def seconds_to_ms(sec) + sec /= 1000000 + "%02d:%02d" % [sec / 60, sec % 60] +end + +service = DBus.session_bus["org.mpris.MediaPlayer2.strawberry"] +unless service.exists? + puts 'Strawberry not running' + exit 1 +end + +object = service["/org/mpris/MediaPlayer2"] +interface = object["org.mpris.MediaPlayer2.Player"] + +metadata = interface["Metadata"] + +if metadata.empty? + puts 'No song in playlist' + exit 2 +end + +position = interface["Position"] +playback_status = interface["PlaybackStatus"] + + +printf "(#{playback_status}) " if playback_status != 'Playing' +puts "#{metadata['xesam:albumArtist'].join(', ')} - #{metadata['xesam:album']} - #{metadata['xesam:title']} " \ + "(#{metadata['xesam:trackNumber']}) [#{seconds_to_ms(position)} / #{seconds_to_ms(metadata['mpris:length'])}]" diff --git a/i3blocks/multi/left-config b/i3blocks/multi/left-config index da5eeca..5fbd106 100644 --- a/i3blocks/multi/left-config +++ b/i3blocks/multi/left-config @@ -3,7 +3,7 @@ separator_block_width=10 markup=none [mpc] -command=./blocks/strawberry.sh +command=./blocks/strawberry-current.rb interval=5 signal=12