From f67ef9d64a5d71c4cbad5cb5a28471e943814bc4 Mon Sep 17 00:00:00 2001 From: LtPeriwinkle Date: Sun, 21 Jun 2020 10:28:37 -0700 Subject: [PATCH] add spotify-buttons --- .../modules/contrib/spotify-buttons.py | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 bumblebee_status/modules/contrib/spotify-buttons.py diff --git a/bumblebee_status/modules/contrib/spotify-buttons.py b/bumblebee_status/modules/contrib/spotify-buttons.py new file mode 100644 index 0000000..46c5e7a --- /dev/null +++ b/bumblebee_status/modules/contrib/spotify-buttons.py @@ -0,0 +1,93 @@ +import sys +import dbus + +import core.module +import core.widget +import core.input +import core.decorators +"""Displays the current song being played + +Requires the following library: + * python-dbus + +Parameters: + * spotify-buttons.format: Format string (defaults to '{artist} - {title}') + Available values are: {album}, {title}, {artist}, {trackNumber}, {playbackStatus} + * spotify-buttons.layout: +""" + +class Module(core.module.Module): + def __init__(self, config, theme): + super().__init__(config, theme, core.widget.Widget(self.spotify)) + + self.__layout = self.parameter("layout", "spotify-buttons.prev spotify-buttons.pause spotify-buttons.next") + + self.__song = "" + self.__format = self.parameter("format", "{artist} - {title}") + prev_button = self.parameter("previous", "LEFT_CLICK") + next_button = self.parameter("next", "RIGHT_CLICK") + pause_button = self.parameter("pause", "MIDDLE_CLICK") + + cmd = "dbus-send --session --type=method_call --dest=org.mpris.MediaPlayer2.spotify \ + /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player." + #core.input.register(self, button=buttons[prev_button], cmd=cmd + "Previous") + #core.input.register(self, button=buttons[next_button], cmd=cmd + "Next") + #core.input.register(self, button=buttons[pause_button], cmd=cmd + "PlayPause") + + widget_map = {} + for widget in self.__layout.split(): + widget = self.add_widget(name = widget_name) + if widget_name = "spotify-buttons.prev": + widget_map[widget] = { + "button": core.input.LEFT_MOUSE, + "cmd": cmd + "Previous", + } + elif widget_name = "spotify-buttons.pause": + widget_map[widget] = { + "button": core.input.LEFT_MOUSE, + "cmd": cmd + "PlayPause", + } + elif widget_name = "spotify-buttons.next": + widget_map[widget] = { + "button": core.input.LEFT_MOUSE, + "cmd": cmd + "Next", + } + + @core.decorators.scrollable + def spotify(self, widget): + return self.string_song + + def hidden(self): + return self.string_song == "" + + def update(self): + try: + bus = dbus.SessionBus() + spotify = bus.get_object( + "org.mpris.MediaPlayer2.spotify", "/org/mpris/MediaPlayer2" + ) + spotify_iface = dbus.Interface(spotify, "org.freedesktop.DBus.Properties") + props = spotify_iface.Get("org.mpris.MediaPlayer2.Player", "Metadata") + playback_status = str( + spotify_iface.Get("org.mpris.MediaPlayer2.Player", "PlaybackStatus") + ) + self.__song = self.__format.format( + album=str(props.get("xesam:album")), + title=str(props.get("xesam:title")), + artist=",".join(props.get("xesam:artist")), + trackNumber=str(props.get("xesam:trackNumber")), + playbackStatus="\u25B6" + if playback_status == "Playing" + else "\u258D\u258D" + if playback_status == "Paused" + else "", + ) + + except Exception: + self.__song = "" + + @property + def string_song(self): + if sys.version_info.major < 3: + return unicode(self.__song) + return str(self.__song)