diff --git a/scripts/mpd-notifications.py b/scripts/mpd-notifications.py new file mode 100644 index 0000000..add75e9 --- /dev/null +++ b/scripts/mpd-notifications.py @@ -0,0 +1,78 @@ +"""Use dr.botzo's Dispatch to send mpd notifications.""" + +from __future__ import unicode_literals + +import argparse +import getpass +import logging +from select import select +import sys + +import mpd +import requests +from requests.auth import HTTPBasicAuth + +# set up some basic logging +logger = logging.getLogger() +handler = logging.StreamHandler(sys.stdout) +logger.addHandler(handler) +logger.setLevel(logging.DEBUG) + +# set up config flags +parser = argparse.ArgumentParser() +parser.add_argument('-l', '--location') +parser.add_argument('-u', '--user') +parser.add_argument('-m', '--mpd-host', default='localhost') +parser.add_argument('-p', '--mpd-port', default=6600) +args = parser.parse_args() + +if args.user is None or args.location is None: + print("script needs " + "-l/--location (url to connect to) -u/--user (user to authenticate to XML-RPC as)") + sys.exit(2) + +password = getpass.getpass("password for {0:s}: ".format(args.user)) + +auth = HTTPBasicAuth(args.user, password) + +client = mpd.MPDClient(use_unicode=True) +client.connect(args.mpd_host, args.mpd_port) + +last_np = '' + + +def notify_song(): + global last_np + status = client.status() + logger.debug(status) + + state = status.get('state', None) + + if state == 'play': + current = client.currentsong() + logger.debug(current) + + filename = current.get('file', None) + + if filename: + artist = current.get('artist', "Unknown") + title = current.get('title', "Unknown") + album = current.get('album', "Unknown") + + np = "{0:s} - [{1:s}] {2:s}".format(artist, album, title) + if np != last_np: + last_np = np + logger.debug("notifying: {0:s}".format(np)) + payload = {'message': np} + r = requests.post(args.location, verify=False, auth=auth, data=payload) + print(r.json()) + +notify_song() +# loop forever on mpd events +while True: + client.send_idle() + select([client], [], []) + changed = client.fetch_idle() + for change in changed: + if change == 'player': + notify_song() diff --git a/scripts/mpd-notifications.requirements.txt b/scripts/mpd-notifications.requirements.txt new file mode 100644 index 0000000..6c60f1d --- /dev/null +++ b/scripts/mpd-notifications.requirements.txt @@ -0,0 +1 @@ +python-mpd2==0.5.4