mirror of
https://github.com/elkowar/dots-of-war.git
synced 2024-12-25 21:52:23 +00:00
123 lines
3.1 KiB
Python
Executable file
123 lines
3.1 KiB
Python
Executable file
#!/bin/python
|
|
|
|
import sys
|
|
import dbus
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
'-t',
|
|
'--trunclen',
|
|
type=int,
|
|
metavar='trunclen'
|
|
)
|
|
parser.add_argument(
|
|
'-f',
|
|
'--format',
|
|
type=str,
|
|
metavar='custom format',
|
|
dest='custom_format'
|
|
)
|
|
parser.add_argument(
|
|
'-p',
|
|
'--playpause',
|
|
type=str,
|
|
metavar='play-pause indicator',
|
|
dest='play_pause'
|
|
)
|
|
parser.add_argument(
|
|
'--font',
|
|
type=str,
|
|
metavar='the index of the font to use for the main label',
|
|
dest='font'
|
|
)
|
|
parser.add_argument(
|
|
'--playpause-font',
|
|
type=str,
|
|
metavar='the index of the font to use to display the playpause indicator',
|
|
dest='play_pause_font'
|
|
)
|
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
def fix_string(string):
|
|
# corrects encoding for the python version used
|
|
if sys.version_info.major == 3:
|
|
return string
|
|
else:
|
|
return string.encode('utf-8')
|
|
|
|
# Default parameters
|
|
output = fix_string(u'{play_pause} {artist}: {song}')
|
|
trunclen = 25
|
|
play_pause = fix_string(u'\u25B6,\u23F8') # first character is play, second is paused
|
|
|
|
label_with_font = '%{{T{font}}}{label}%{{T-}}'
|
|
font = args.font
|
|
play_pause_font = args.play_pause_font
|
|
|
|
# parameters can be overwritten by args
|
|
if args.trunclen is not None:
|
|
trunclen = args.trunclen
|
|
if args.custom_format is not None:
|
|
output = args.custom_format
|
|
if args.play_pause is not None:
|
|
play_pause = args.play_pause
|
|
|
|
try:
|
|
session_bus = dbus.SessionBus()
|
|
spotify_bus = session_bus.get_object(
|
|
'org.mpris.MediaPlayer2.spotify',
|
|
'/org/mpris/MediaPlayer2'
|
|
)
|
|
|
|
spotify_properties = dbus.Interface(
|
|
spotify_bus,
|
|
'org.freedesktop.DBus.Properties'
|
|
)
|
|
|
|
metadata = spotify_properties.Get('org.mpris.MediaPlayer2.Player', 'Metadata')
|
|
status = spotify_properties.Get('org.mpris.MediaPlayer2.Player', 'PlaybackStatus')
|
|
|
|
# Handle play/pause label
|
|
|
|
play_pause = play_pause.split(',')
|
|
|
|
if status == 'Playing':
|
|
play_pause = play_pause[0]
|
|
elif status == 'Paused':
|
|
play_pause = play_pause[1]
|
|
else:
|
|
play_pause = str()
|
|
|
|
if play_pause_font:
|
|
play_pause = label_with_font.format(font=play_pause_font, label=play_pause)
|
|
|
|
# Handle main label
|
|
|
|
artist = fix_string(metadata['xesam:artist'][0]) if metadata['xesam:artist'] else ''
|
|
song = fix_string(metadata['xesam:title']) if metadata['xesam:title'] else ''
|
|
album = fix_string(metadata['xesam:album']) if metadata['xesam:album'] else ''
|
|
|
|
if not artist and not song and not album:
|
|
print('')
|
|
else:
|
|
if len(song) > trunclen:
|
|
song = song[0:trunclen]
|
|
song += '...'
|
|
if ('(' in song) and (')' not in song):
|
|
song += ')'
|
|
|
|
if font:
|
|
artist = label_with_font.format(font=font, label=artist)
|
|
song = label_with_font.format(font=font, label=song)
|
|
album = label_with_font.format(font=font, label=album)
|
|
|
|
print(output.format(artist=artist, song=song, play_pause=play_pause, album=album))
|
|
|
|
except Exception as e:
|
|
if isinstance(e, dbus.exceptions.DBusException):
|
|
print('')
|
|
else:
|
|
print(e)
|