diff options
Diffstat (limited to '.config')
-rw-r--r-- | .config/qtile/spotify_widget.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/.config/qtile/spotify_widget.py b/.config/qtile/spotify_widget.py new file mode 100644 index 0000000..a34e962 --- /dev/null +++ b/.config/qtile/spotify_widget.py @@ -0,0 +1,68 @@ +# Copyright (C) 2022, ThanosApollo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import dbus +import dbus_next +import subprocess +from functools import partial +from libqtile.widget import base + + +class Spotify(base.ThreadPoolText): + """A simple Spotify widget. + Show the song and artist of now listening song and allow basic mouse + control from the bar using spotify-control: + - toggle pause (or play if stopped) on left click; + - skip forward in playlist on scroll up; + - skip backward in playlist on scroll down. + """ + + defaults = [ + ("play_color", "00ff00", "Text colour when playing."), + ("noplay_color", "cecece", "Text colour when not playing."), + ("update_interval", 0.5, "Update Time in seconds."), + ] + + def __init__(self, **config): + base.ThreadPoolText.__init__(self, "", **config) + self.add_defaults(Spotify.defaults) + self.status = "PLAY" + self.local = None + self.add_callbacks( + { + "Button1": partial(subprocess.Popen, ["spotify-control", "play-pause"]), + "Button2": partial(subprocess.Popen, ["spotify-control", "previous"]), + "Button3": partial(subprocess.Popen, ["spotify-control", "next"]), + } + ) + + def now_playing(self): + """Return current song""" + session_bus = dbus.SessionBus() + bus_data = ("org.mpris.MediaPlayer2.spotify", "/org/mpris/MediaPlayer2") + spotify_bus = session_bus.get_object(*bus_data) + interface = dbus.Interface(spotify_bus, "org.freedesktop.DBus.Properties") + metadata = interface.Get("org.mpris.MediaPlayer2.Player", "Metadata") + data = { + "artist" : next(iter(metadata.get("xesam:albumArtist"))), + "song" : metadata.get("xesam:title") + } + song = data["song"] + " | " + data["artist"] + self.layout.colour = self.play_color + return song + + def poll(self): + """Poll content for the text box.""" + return self.now_playing() |