From 81e1a4a09ec6ec3ab0b9d67ea3a22a52ee5181c3 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Thu, 2 Jan 2025 02:13:51 -0500 Subject: [PATCH 1/6] --Duplicate mpDris2.service.in history into mpDris2-remote.service.in --- src/{mpDris2.service.in => mpDris2-remote.service.in} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{mpDris2.service.in => mpDris2-remote.service.in} (100%) diff --git a/src/mpDris2.service.in b/src/mpDris2-remote.service.in similarity index 100% rename from src/mpDris2.service.in rename to src/mpDris2-remote.service.in From 9c6513a0e5cce642163c333f784039fbd14b98d0 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Thu, 2 Jan 2025 02:13:51 -0500 Subject: [PATCH 2/6] --Restore mpDris2.service.in --- src/mpDris2.service.in | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/mpDris2.service.in diff --git a/src/mpDris2.service.in b/src/mpDris2.service.in new file mode 100644 index 0000000..b302b46 --- /dev/null +++ b/src/mpDris2.service.in @@ -0,0 +1,12 @@ +[Unit] +Description=mpDris2 - Music Player Daemon D-Bus bridge +After=mpd.service +BindsTo=mpd.service + +[Service] +Restart=on-failure +ExecStart=@bindir@/mpDris2 --use-journal --no-reconnect +BusName=org.mpris.MediaPlayer2.mpd + +[Install] +WantedBy=mpd.service From 931ade1158b60afbcb991272d994b507d8f67126 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Thu, 2 Jan 2025 02:35:56 -0500 Subject: [PATCH 3/6] Add --abort-on-disconnect and -remote.service --- src/mpDris2-remote.service.in | 10 ++++++---- src/mpDris2.in.py | 25 +++++++++++++++++-------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/mpDris2-remote.service.in b/src/mpDris2-remote.service.in index b302b46..044b694 100644 --- a/src/mpDris2-remote.service.in +++ b/src/mpDris2-remote.service.in @@ -1,12 +1,14 @@ [Unit] Description=mpDris2 - Music Player Daemon D-Bus bridge -After=mpd.service -BindsTo=mpd.service +Conflicts=mpDris2.service [Service] Restart=on-failure -ExecStart=@bindir@/mpDris2 --use-journal --no-reconnect +RestartSec=5 +RestartMaxDelaySec=15min +RestartSteps=20 +ExecStart=@bindir@/mpDris2 --use-journal --no-reconnect --abort-on-disconnect BusName=org.mpris.MediaPlayer2.mpd [Install] -WantedBy=mpd.service +WantedBy=default.target diff --git a/src/mpDris2.in.py b/src/mpDris2.in.py index 51256c6..535e075 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 @@ -447,6 +449,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 +1382,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 +1419,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 +1448,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__: From fdb8acd2e2e8ca36a59904109e0dabae721b8824 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Thu, 2 Jan 2025 02:36:22 -0500 Subject: [PATCH 4/6] Make: Automate .service.in => .service production Use an implicit pattern rule to convert any `.service.in` file into a `.service` file. --- src/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 $@ From 471f58f8e6d069732faea38b740e0cf881e5af32 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Fri, 17 Jan 2025 04:32:49 -0500 Subject: [PATCH 5/6] Add Conflicts=mpDris2-remote to mpDris2.service --- src/mpDris2.service.in | 1 + 1 file changed, 1 insertion(+) 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 From 39a159d94b626a9622865b7e50302a4fb0353c3b Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Fri, 17 Jan 2025 04:54:55 -0500 Subject: [PATCH 6/6] Exit on initial connect failure, with --no-reconnect --- src/mpDris2.in.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/mpDris2.in.py b/src/mpDris2.in.py index 535e075..1b4a6a9 100755 --- a/src/mpDris2.in.py +++ b/src/mpDris2.in.py @@ -273,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