Fix loadfile for mpv v0.38.0

mpv v0.38.0 added an argument to the loadfile command. Unfortunately the
parsing logic isn't very smart, and now mis-interprets the old argument
format, and breaks literally everything written against older versions
that used the `options` kv dict.

This commit adds a kludge that uses the right variant depending on the
mpv version.
This commit is contained in:
jaseg 2024-04-20 12:48:58 +02:00
parent d26f801cec
commit d96eaf7e64

13
mpv.py
View file

@ -893,6 +893,8 @@ class MPV(object):
self._event_thread.start() self._event_thread.start()
else: else:
self._event_thread = None self._event_thread = None
if (m := re.search(r'(\d+)\.(\d+)\.(\d+)', self.mpv_version)):
self.mpv_version_tuple = tuple(map(int, m.groups()))
@contextmanager @contextmanager
def _enqueue_exceptions(self): def _enqueue_exceptions(self):
@ -1324,9 +1326,16 @@ class MPV(object):
def _encode_options(options): def _encode_options(options):
return ','.join('{}={}'.format(_py_to_mpv(str(key)), str(val)) for key, val in options.items()) return ','.join('{}={}'.format(_py_to_mpv(str(key)), str(val)) for key, val in options.items())
def loadfile(self, filename, mode='replace', **options): def loadfile(self, filename, mode='replace', index=None, **options):
"""Mapped mpv loadfile command, see man mpv(1).""" """Mapped mpv loadfile command, see man mpv(1)."""
self.command('loadfile', filename.encode(fs_enc), mode, MPV._encode_options(options)) if self.mpv_version_tuple >= (0, 38, 0):
if index is None:
index = -1
self.command('loadfile', filename.encode(fs_enc), mode, index, MPV._encode_options(options))
else:
if index is not None:
warn(f'The index argument to the loadfile command is only supported on mpv >= 0.38.0')
self.command('loadfile', filename.encode(fs_enc), mode, MPV._encode_options(options))
def loadlist(self, playlist, mode='replace'): def loadlist(self, playlist, mode='replace'):
"""Mapped mpv loadlist command, see man mpv(1).""" """Mapped mpv loadlist command, see man mpv(1)."""