put text on buttons

This commit is contained in:
LtPeriwinkle 2020-06-24 12:14:26 -07:00
parent ca62f68906
commit 2eee4c390c

View file

@ -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 = ""