|
|
- #!/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 = 35
- 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 ''
-
- if not artist and not song:
- 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)
-
- print(output.format(artist=artist, song=song, play_pause=play_pause))
-
- except Exception as e:
- if isinstance(e, dbus.exceptions.DBusException):
- print('')
- else:
- print(e)
|