Separate IINA changes from python_mpv_jsonipc
This commit is contained in:
parent
84e6d737cc
commit
0a7dfc5e40
@ -2,11 +2,10 @@ import os
|
|||||||
from syncplay import constants
|
from syncplay import constants
|
||||||
from syncplay.utils import findResourcePath
|
from syncplay.utils import findResourcePath
|
||||||
from syncplay.players.mpv import MpvPlayer
|
from syncplay.players.mpv import MpvPlayer
|
||||||
from syncplay.players.python_mpv_jsonipc.python_mpv_jsonipc import IINA
|
from syncplay.players.ipc_iina import IINA
|
||||||
|
|
||||||
class IinaPlayer(MpvPlayer):
|
class IinaPlayer(MpvPlayer):
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run(client, playerPath, filePath, args):
|
def run(client, playerPath, filePath, args):
|
||||||
constants.MPV_NEW_VERSION = True
|
constants.MPV_NEW_VERSION = True
|
||||||
|
|||||||
55
syncplay/players/ipc_iina.py
Executable file
55
syncplay/players/ipc_iina.py
Executable file
@ -0,0 +1,55 @@
|
|||||||
|
import os.path
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
|
||||||
|
from syncplay.players.python_mpv_jsonipc.python_mpv_jsonipc import log, MPV, MPVError, MPVProcess
|
||||||
|
from syncplay.utils import resourcespath
|
||||||
|
|
||||||
|
class IINA(MPV):
|
||||||
|
"""The main IINA interface class. Use this to control the MPV player instantiated by IINA."""
|
||||||
|
|
||||||
|
def _start_mpv(self, ipc_socket, mpv_location, **kwargs):
|
||||||
|
# Attempt to start IINA 3 times.
|
||||||
|
for i in range(3):
|
||||||
|
try:
|
||||||
|
self.mpv_process = IINAProcess(ipc_socket, mpv_location, **kwargs)
|
||||||
|
break
|
||||||
|
except MPVError:
|
||||||
|
log.warning("IINA start failed.", exc_info=1)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
raise MPVError("IINA process retry limit reached.")
|
||||||
|
|
||||||
|
class IINAProcess(MPVProcess):
|
||||||
|
"""
|
||||||
|
Manages an IINA process, ensuring the socket or pipe is available. (Internal)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def _start_process(self, ipc_socket, args):
|
||||||
|
self.process = subprocess.Popen(args)
|
||||||
|
ipc_exists = False
|
||||||
|
for _ in range(100): # Give IINA 10 seconds to start.
|
||||||
|
time.sleep(0.1)
|
||||||
|
self.process.poll()
|
||||||
|
if os.path.exists(ipc_socket):
|
||||||
|
ipc_exists = True
|
||||||
|
log.debug("Found IINA socket.")
|
||||||
|
break
|
||||||
|
if self.process.returncode != 0: # iina-cli returns immediately after its start
|
||||||
|
log.error("IINA failed with returncode {0}.".format(self.process.returncode))
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.process.terminate()
|
||||||
|
raise MPVError("IINA start timed out.")
|
||||||
|
|
||||||
|
if not ipc_exists or self.process.returncode != 0:
|
||||||
|
self.process.terminate()
|
||||||
|
raise MPVError("IINA not started.")
|
||||||
|
|
||||||
|
def _get_arglist(self, exec_location, **kwargs):
|
||||||
|
args = [exec_location]
|
||||||
|
args.append(resourcespath + 'iina-bkg.png')
|
||||||
|
self._set_default(kwargs, "mpv-input-ipc-server", self.ipc_socket)
|
||||||
|
args.extend("--{0}={1}".format(v[0].replace("_", "-"), self._mpv_fmt(v[1]))
|
||||||
|
for v in kwargs.items())
|
||||||
|
return args
|
||||||
@ -8,8 +8,6 @@ import random
|
|||||||
import queue
|
import queue
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from syncplay.utils import resourcespath
|
|
||||||
|
|
||||||
log = logging.getLogger('mpv-jsonipc')
|
log = logging.getLogger('mpv-jsonipc')
|
||||||
|
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
@ -262,40 +260,6 @@ class MPVProcess:
|
|||||||
if os.name != 'nt' and os.path.exists(self.ipc_socket):
|
if os.name != 'nt' and os.path.exists(self.ipc_socket):
|
||||||
os.remove(self.ipc_socket)
|
os.remove(self.ipc_socket)
|
||||||
|
|
||||||
class IINAProcess(MPVProcess):
|
|
||||||
"""
|
|
||||||
Manages an IINA process, ensuring the socket or pipe is available. (Internal)
|
|
||||||
"""
|
|
||||||
|
|
||||||
def _start_process(self, ipc_socket, args):
|
|
||||||
self.process = subprocess.Popen(args)
|
|
||||||
ipc_exists = False
|
|
||||||
for _ in range(100): # Give IINA 10 seconds to start.
|
|
||||||
time.sleep(0.1)
|
|
||||||
self.process.poll()
|
|
||||||
if os.path.exists(ipc_socket):
|
|
||||||
ipc_exists = True
|
|
||||||
log.debug("Found IINA socket.")
|
|
||||||
break
|
|
||||||
if self.process.returncode != 0: # iina-cli returns immediately after its start
|
|
||||||
log.error("IINA failed with returncode {0}.".format(self.process.returncode))
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
self.process.terminate()
|
|
||||||
raise MPVError("IINA start timed out.")
|
|
||||||
|
|
||||||
if not ipc_exists or self.process.returncode != 0:
|
|
||||||
self.process.terminate()
|
|
||||||
raise MPVError("IINA not started.")
|
|
||||||
|
|
||||||
def _get_arglist(self, exec_location, **kwargs):
|
|
||||||
args = [exec_location]
|
|
||||||
args.append(resourcespath + 'iina-bkg.png')
|
|
||||||
self._set_default(kwargs, "mpv-input-ipc-server", self.ipc_socket)
|
|
||||||
args.extend("--{0}={1}".format(v[0].replace("_", "-"), self._mpv_fmt(v[1]))
|
|
||||||
for v in kwargs.items())
|
|
||||||
return args
|
|
||||||
|
|
||||||
class MPVInter:
|
class MPVInter:
|
||||||
"""
|
"""
|
||||||
Low-level interface to MPV. Does NOT manage an mpv process. (Internal)
|
Low-level interface to MPV. Does NOT manage an mpv process. (Internal)
|
||||||
@ -685,18 +649,3 @@ class MPV:
|
|||||||
|
|
||||||
def __dir__(self):
|
def __dir__(self):
|
||||||
return self._dir
|
return self._dir
|
||||||
|
|
||||||
class IINA(MPV):
|
|
||||||
"""The main IINA interface class. Use this to control the MPV player instantiated by IINA."""
|
|
||||||
|
|
||||||
def _start_mpv(self, ipc_socket, mpv_location, **kwargs):
|
|
||||||
# Attempt to start IINA 3 times.
|
|
||||||
for i in range(3):
|
|
||||||
try:
|
|
||||||
self.mpv_process = IINAProcess(ipc_socket, mpv_location, **kwargs)
|
|
||||||
break
|
|
||||||
except MPVError:
|
|
||||||
log.warning("IINA start failed.", exc_info=1)
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
raise MPVError("IINA process retry limit reached.")
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user