diff --git a/src/Makefile.am b/src/Makefile.am index e32cbc4..9c0eb44 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -8,16 +8,18 @@ dist_desktop_DATA = mpdris2.desktop autostart_DATA = mpdris2.desktop dist_doc_DATA = mpDris2.conf nodist_dbus_DATA = org.mpris.MediaPlayer2.mpd.service -nodist_systemd_user_DATA = mpDris2.service +nodist_systemd_user_DATA = mpDris2.service mpDris2-remote.service EXTRA_DIST = \ org.mpris.MediaPlayer2.mpd.service.in \ mpDris2.service.in \ + mpDris2-remote.service.in \ mpDris2.in.py CLEANFILES = \ org.mpris.MediaPlayer2.mpd.service \ mpDris2.service \ + mpDris2-remote.service \ mpDris2 edit = sed -e 's|@bindir[@]|$(bindir)|g' \ @@ -29,8 +31,6 @@ mpDris2: mpDris2.in.py Makefile $(AM_V_GEN) $(edit) $< > $@.tmp && mv $@.tmp $@ $(AM_V_at) chmod a+x $@ -org.mpris.MediaPlayer2.mpd.service: org.mpris.MediaPlayer2.mpd.service.in Makefile +%.service: %.service.in Makefile $(AM_V_GEN) $(edit) $< > $@.tmp && mv $@.tmp $@ -mpDris2.service: mpDris2.service.in Makefile - $(AM_V_GEN) $(edit) $< > $@.tmp && mv $@.tmp $@ diff --git a/src/mpDris2-remote.service.in b/src/mpDris2-remote.service.in new file mode 100644 index 0000000..044b694 --- /dev/null +++ b/src/mpDris2-remote.service.in @@ -0,0 +1,14 @@ +[Unit] +Description=mpDris2 - Music Player Daemon D-Bus bridge +Conflicts=mpDris2.service + +[Service] +Restart=on-failure +RestartSec=5 +RestartMaxDelaySec=15min +RestartSteps=20 +ExecStart=@bindir@/mpDris2 --use-journal --no-reconnect --abort-on-disconnect +BusName=org.mpris.MediaPlayer2.mpd + +[Install] +WantedBy=default.target diff --git a/src/mpDris2.in.py b/src/mpDris2.in.py index 51256c6..1b4a6a9 100755 --- a/src/mpDris2.in.py +++ b/src/mpDris2.in.py @@ -65,6 +65,7 @@ 'password': None, 'bus_name': None, 'reconnect': True, + 'clean_exit': True, # Library 'music_dir': '', 'cover_regex': None, @@ -244,6 +245,7 @@ def __init__(self, params): self._params = params self._dbus_service = None self._should_reconnect = params['reconnect'] + self._disconnect_exit_code = 0 if params['clean_exit'] else 1 self._can_single = False self._can_idle = False @@ -271,11 +273,16 @@ def __init__(self, params): def run(self): """ - Try to connect to MPD; retry every 5 seconds on failure. + Try to connect to MPD """ if self.my_connect(): - GLib.timeout_add_seconds(5, self.my_connect) - return False + if self._should_reconnect: + GLib.timeout_add_seconds(5, self.my_connect) + return False + else: + logger.debug("Initial connect failed. Not retrying.") + loop.quit() + sys.exit(self._disconnect_exit_code) else: return True @@ -447,6 +454,7 @@ def handle_disconnect(): else: logger.debug("Not reconnecting, quitting main loop") loop.quit() + sys.exit(self._disconnect_exit_code) return True if event & GLib.IO_HUP: @@ -1379,15 +1387,19 @@ def usage(params): print("""\ Usage: %(progname)s [OPTION]... - -c, --config=PATH Read a custom configuration file + -c, --config=PATH Read a custom configuration file - -h, --host=ADDR Set the mpd server address - --port=PORT Set the TCP port - --music-dir=PATH Set the music library path + -h, --host=ADDR Set the mpd server address + --port=PORT Set the TCP port + --music-dir=PATH Set the music library path - -d, --debug Run in debug mode - -j, --use-journal Log to systemd journal instead of stderr - -v, --version mpDris2 version + -d, --debug Run in debug mode + -j, --use-journal Log to systemd journal instead of stderr + --no-reconnect Don't attempt to reconnect automatically, + just exit on disconnect. + --abort-on-disconnect Exit abnormally when disconnected. Use + with --no-reconnect. + -v, --version mpDris2 version Environment variables MPD_HOST and MPD_PORT can be used. @@ -1412,7 +1424,7 @@ def usage(params): ['help', 'bus-name=', 'config=', 'debug', 'host=', 'music-dir=', 'use-journal', 'path=', 'port=', - 'no-reconnect', + 'no-reconnect', 'abort-on-disconnect', 'version']) except getopt.GetoptError as ex: (msg, opt) = ex.args @@ -1441,6 +1453,8 @@ def usage(params): params['port'] = int(arg) elif opt in ['--no-reconnect']: params['reconnect'] = False + elif opt in ['--abort-on-disconnect']: + params['clean_exit'] = False elif opt in ['-v', '--version']: v = __version__ if __git_version__: diff --git a/src/mpDris2.service.in b/src/mpDris2.service.in index b302b46..e2eb60d 100644 --- a/src/mpDris2.service.in +++ b/src/mpDris2.service.in @@ -2,6 +2,7 @@ Description=mpDris2 - Music Player Daemon D-Bus bridge After=mpd.service BindsTo=mpd.service +Conflicts=mpDris2-remote.service [Service] Restart=on-failure