Support password-protected MPD servers
This commit is contained in:
parent
f99830847d
commit
a792299f04
1 changed files with 28 additions and 4 deletions
32
mmmpd
32
mmmpd
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import datetime
|
import datetime
|
||||||
import time
|
import time
|
||||||
|
@ -77,6 +78,30 @@ def formatted_status(mpd_client):
|
||||||
return (emoji, song_str, expire)
|
return (emoji, song_str, expire)
|
||||||
|
|
||||||
|
|
||||||
|
def host_and_pass_from_MPD_HOST(mpd_host_string):
|
||||||
|
"""
|
||||||
|
mpc accepts passwords by setting MPD_HOST to pass@host. For compatibility, we do the same.
|
||||||
|
"""
|
||||||
|
m = re.match(r"""
|
||||||
|
(?: # Optional password, followed by @, but cannot
|
||||||
|
(?P<pass> [^@]+?) @ # start with @ (that's for abstract sockets on Linux).
|
||||||
|
)? # If present, after the password there'll be an @.
|
||||||
|
(?P<host> .*)
|
||||||
|
""", mpd_host_string, re.VERBOSE)
|
||||||
|
if not m:
|
||||||
|
return None
|
||||||
|
return (m.group("host"), m.group("pass") or None)
|
||||||
|
|
||||||
|
|
||||||
|
def create_mpd_client(mpd_host, mpd_port, mpd_pass):
|
||||||
|
mpd_client = mpd.MPDClient()
|
||||||
|
mpd_client.connect(mpd_host, port=mpd_port)
|
||||||
|
if mpd_pass:
|
||||||
|
mpd_client.password(mpd_pass)
|
||||||
|
LOGGER.info("Connected")
|
||||||
|
return mpd_client
|
||||||
|
|
||||||
|
|
||||||
# Driving stuff {{{1
|
# Driving stuff {{{1
|
||||||
# -------------
|
# -------------
|
||||||
|
|
||||||
|
@ -97,7 +122,7 @@ def loop(mpd_client, on_status_change):
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
def main(mpd_host, mpd_port):
|
def main(mpd_host_string, mpd_port):
|
||||||
if "-v" in sys.argv[1:]:
|
if "-v" in sys.argv[1:]:
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
LOGGER.info("Log level INFO")
|
LOGGER.info("Log level INFO")
|
||||||
|
@ -105,9 +130,8 @@ def main(mpd_host, mpd_port):
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
LOGGER.info("Log level DEBUG")
|
LOGGER.info("Log level DEBUG")
|
||||||
|
|
||||||
mpd_client = mpd.MPDClient()
|
mpd_host, mpd_pass = host_and_pass_from_MPD_HOST(mpd_host_string)
|
||||||
mpd_client.connect(mpd_host, port=mpd_port)
|
mpd_client = create_mpd_client(mpd_host, mpd_port, mpd_pass)
|
||||||
LOGGER.info("Connected")
|
|
||||||
|
|
||||||
set_status_from_mpd(mpd_client)
|
set_status_from_mpd(mpd_client)
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in a new issue