player-mpris-tail: improve tags

This commit is contained in:
Christian Dannie Storgaard 2018-11-27 08:58:05 +02:00 committed by x70b1
parent 6bf8c3d478
commit 31d15af87f

View File

@ -2,6 +2,7 @@
import sys import sys
import dbus import dbus
import os
from operator import itemgetter from operator import itemgetter
import argparse import argparse
import re import re
@ -210,10 +211,12 @@ class Player:
self.metadata['length'] = int(length) self.metadata['length'] = int(length)
else: else:
self.metadata['length'] = 0 self.metadata['length'] = 0
self.metadata['genre'] = _getProperty(self._metadata, 'xesam:genre', '') self.metadata['genre'] = _getProperty(self._metadata, 'xesam:genre', '')
self.metadata['disc'] = _getProperty(self._metadata, 'xesam:discNumber', '') self.metadata['disc'] = _getProperty(self._metadata, 'xesam:discNumber', '')
self.metadata['date'] = re.sub(SAFE_TAG_REGEX, """\1\1""", _getProperty(self._metadata, 'xesam:contentCreated', '')) self.metadata['date'] = re.sub(SAFE_TAG_REGEX, """\1\1""", _getProperty(self._metadata, 'xesam:contentCreated', ''))
self.metadata['year'] = re.sub(SAFE_TAG_REGEX, """\1\1""", self.metadata['date'][0:4]) self.metadata['year'] = re.sub(SAFE_TAG_REGEX, """\1\1""", self.metadata['date'][0:4])
self.metadata['url'] = _getProperty(self._metadata, 'xesam:url', '')
self.metadata['filename'] = os.path.basename(self.metadata['url'])
cover = _getProperty(self._metadata, 'xesam:artUrl', '') cover = _getProperty(self._metadata, 'xesam:artUrl', '')
if not len(cover): if not len(cover):
cover = _getProperty(self._metadata, 'mpris:artUrl', '') cover = _getProperty(self._metadata, 'mpris:artUrl', '')
@ -252,6 +255,12 @@ class Player:
formatlen = match.group('formatlen') formatlen = match.group('formatlen')
text = match.group('text') text = match.group('text')
tag_found = False tag_found = False
reversed_tag = False
if tag.startswith('-'):
tag = tag[1:]
reversed_tag = True
if format is None: if format is None:
tag_is_format_match = re.match(FORMAT_TAG_REGEX, tag) tag_is_format_match = re.match(FORMAT_TAG_REGEX, tag)
if tag_is_format_match: if tag_is_format_match:
@ -270,6 +279,9 @@ class Player:
if tag_found is False and tag in metadata and len(metadata[tag]): if tag_found is False and tag in metadata and len(metadata[tag]):
tag_found = True tag_found = True
if reversed_tag:
tag_found = not tag_found
if tag_found: if tag_found:
return text return text
else: else:
@ -277,16 +289,15 @@ class Player:
def printStatus(self): def printStatus(self):
if self.status in [ 'playing', 'paused' ]: if self.status in [ 'playing', 'paused' ]:
if self.metadata['title']: metadata = { **self.metadata, 'icon': self.icon, 'icon-reversed': self.icon_reversed }
metadata = { **self.metadata, 'icon': self.icon, 'icon-reversed': self.icon_reversed } # replace metadata tags in text
# replace metadata tags in text text = re.sub(FORMAT_REGEX, lambda match: self._statusReplace(match, metadata), FORMAT_STRING)
text = re.sub(FORMAT_REGEX, lambda match: self._statusReplace(match, metadata), FORMAT_STRING) # restore polybar tag formatting and replace any remaining metadata tags after that
# restore polybar tag formatting and replace any remaining metadata tags after that try:
try: text = re.sub(r'􏿿p􏿿(.*?)􏿿p􏿿(.*?)􏿿p􏿿(.*?)􏿿p􏿿', r'%{\1}\2%{\3}', text.format_map(CleanSafeDict(**metadata)))
text = re.sub(r'􏿿p􏿿(.*?)􏿿p􏿿(.*?)􏿿p􏿿(.*?)􏿿p􏿿', r'%{\1}\2%{\3}', text.format_map(CleanSafeDict(**metadata))) except:
except: print("Invalid format string")
print("Invalid format string") _printFlush(text)
_printFlush(text)
return return
_printFlush(ICON_STOPPED) _printFlush(ICON_STOPPED)
@ -360,7 +371,7 @@ parser.add_argument('-b', '--blacklist', help="ignore a player by it's bus name.
action='append', action='append',
metavar="BUS_NAME", metavar="BUS_NAME",
default=[]) default=[])
parser.add_argument('-f', '--format', default='{icon} {artist} - {title}') parser.add_argument('-f', '--format', default='{icon} {:artist:{artist} - :}{:title:{title}:}{:-title:{filename}:}')
parser.add_argument('--truncate-text', default='') parser.add_argument('--truncate-text', default='')
parser.add_argument('--icon-playing', default='') parser.add_argument('--icon-playing', default='')
parser.add_argument('--icon-paused', default='') parser.add_argument('--icon-paused', default='')