diff --git a/bumblebee_status/modules/contrib/spotify-buttons.py b/bumblebee_status/modules/contrib/spotify-buttons.py index 36f126c..95be303 100644 --- a/bumblebee_status/modules/contrib/spotify-buttons.py +++ b/bumblebee_status/modules/contrib/spotify-buttons.py @@ -5,62 +5,35 @@ import core.module import core.widget import core.input import core.decorators -"""Displays the current song being played +"""Displays the current song being played and allows pausing, skipping ahead, and skipping back. 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: + Available values are: {album}, {title}, {artist}, {trackNumber} """ class Module(core.module.Module): def __init__(self, config, theme): - super().__init__(config, theme, core.widget.Widget(self.spotify)) + super().__init__(config, theme, []) - self.__layout = self.parameter("layout", "spotify-buttons.prev spotify-buttons.pause spotify-buttons.next") + self.__layout = self.parameter("layout", "spotify-buttons.song spotify-buttons.prev spotify-buttons.pause spotify-buttons.next") self.__song = "" + self.__pause = "" 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 \ + self.__cmd = "dbus-send --session --type=method_call --dest=org.mpris.MediaPlayer2.spotify \ /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player." - widget_map = {} - for widget_name 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", - } - for widget, callback_options in widget_map.items(): - core.input.register(widget, **callback_options) - - @core.decorators.scrollable - def spotify(self, widget): - return self.string_song - def hidden(self): return self.string_song == "" def update(self): try: + self.clear_widgets() bus = dbus.SessionBus() spotify = bus.get_object( "org.mpris.MediaPlayer2.spotify", "/org/mpris/MediaPlayer2" @@ -70,17 +43,46 @@ class Module(core.module.Module): playback_status = str( spotify_iface.Get("org.mpris.MediaPlayer2.Player", "PlaybackStatus") ) + if playback_status == "Playing": + self.__pause = "\u25B6" + else: + self.__pause = "\u258D\u258D" 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 "", ) + #this feels like a stupid way to do this but its all i can think of + widget_map = {} + for widget_name 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": self.__cmd + "Previous", + } + widget.full_text("\u258F\u25C0") + elif widget_name == "spotify-buttons.pause": + widget_map[widget] = { + "button": core.input.LEFT_MOUSE, + "cmd": self.__cmd + "PlayPause", + } + widget.full_text(self.__pause) + elif widget_name == "spotify-buttons.next": + widget_map[widget] = { + "button": core.input.LEFT_MOUSE, + "cmd": self.__cmd + "Next", + } + widget.full_text("\u25B6\u2595") + elif widget_name == "spotify-buttons.song": + widget.full_text(self.__song) + else: + raise KeyError( + "The spotify-buttons module does not have a {widget_name!r} widget".format(widget_name=widget_name) + ) + for widget, callback_options in widget_map.items(): + core.input.register(widget, **callback_options) except Exception: self.__song = ""