Store MPV socket in $XDG_RUNTIME_DIR
This commit is contained in:
parent
665f24f5b0
commit
6c5e3a1855
@ -1,5 +1,6 @@
|
|||||||
# coding:utf8
|
# coding:utf8
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
@ -10,7 +11,7 @@ import ast
|
|||||||
from syncplay import constants
|
from syncplay import constants
|
||||||
from syncplay.messages import getMessage
|
from syncplay.messages import getMessage
|
||||||
from syncplay.players.basePlayer import BasePlayer
|
from syncplay.players.basePlayer import BasePlayer
|
||||||
from syncplay.utils import isURL, findResourcePath
|
from syncplay.utils import getRuntimeDir, isURL, findResourcePath
|
||||||
from syncplay.utils import isMacOS, isWindows, isASCII
|
from syncplay.utils import isMacOS, isWindows, isASCII
|
||||||
from syncplay.vendor.python_mpv_jsonipc.python_mpv_jsonipc import MPV
|
from syncplay.vendor.python_mpv_jsonipc.python_mpv_jsonipc import MPV
|
||||||
|
|
||||||
@ -621,7 +622,15 @@ class MpvPlayer(BasePlayer):
|
|||||||
env['PATH'] = python_executable + ':' + env['PATH']
|
env['PATH'] = python_executable + ':' + env['PATH']
|
||||||
env['PYTHONPATH'] = pythonPath
|
env['PYTHONPATH'] = pythonPath
|
||||||
try:
|
try:
|
||||||
self.mpvpipe = self.playerIPCHandler(mpv_location=self.playerPath, loglevel="info", log_handler=self.__playerController.mpv_log_handler, quit_callback=self.stop_client, env=env, **self.mpv_arguments)
|
self.mpvpipe = self.playerIPCHandler(
|
||||||
|
loglevel="info",
|
||||||
|
ipc_socket=self._get_ipc_socket(),
|
||||||
|
mpv_location=self.playerPath,
|
||||||
|
log_handler=self.__playerController.mpv_log_handler,
|
||||||
|
quit_callback=self.stop_client,
|
||||||
|
env=env,
|
||||||
|
**self.mpv_arguments
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.quitReason = getMessage("media-player-error").format(str(e)) + " " + getMessage("mpv-failed-advice")
|
self.quitReason = getMessage("media-player-error").format(str(e)) + " " + getMessage("mpv-failed-advice")
|
||||||
self.__playerController.reactor.callFromThread(self.__playerController._client.ui.showErrorMessage, self.quitReason, True)
|
self.__playerController.reactor.callFromThread(self.__playerController._client.ui.showErrorMessage, self.quitReason, True)
|
||||||
@ -630,6 +639,12 @@ class MpvPlayer(BasePlayer):
|
|||||||
#self.mpvpipe.show_text("HELLO WORLD!", 1000)
|
#self.mpvpipe.show_text("HELLO WORLD!", 1000)
|
||||||
threading.Thread.__init__(self, name="MPV Listener")
|
threading.Thread.__init__(self, name="MPV Listener")
|
||||||
|
|
||||||
|
def _get_ipc_socket(self):
|
||||||
|
if isWindows():
|
||||||
|
# On Windows, mpv expects a named pipe identifier (not a path)
|
||||||
|
return "syncplay-mpv-{0}".format(random.randint(0, 2**48))
|
||||||
|
return getRuntimeDir().joinpath("mpv-socket").as_posix()
|
||||||
|
|
||||||
def __getCwd(self, filePath, env):
|
def __getCwd(self, filePath, env):
|
||||||
if not filePath:
|
if not filePath:
|
||||||
return None
|
return None
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
import ast
|
import ast
|
||||||
|
import atexit
|
||||||
import datetime
|
import datetime
|
||||||
import hashlib
|
import hashlib
|
||||||
import itertools
|
import itertools
|
||||||
@ -10,11 +10,13 @@ import re
|
|||||||
import string
|
import string
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
import tempfile
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
import urllib.error
|
import urllib.error
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
from syncplay import constants
|
from syncplay import constants
|
||||||
from syncplay.messages import getMessage
|
from syncplay.messages import getMessage
|
||||||
@ -37,9 +39,28 @@ def isMacOS():
|
|||||||
def isBSD():
|
def isBSD():
|
||||||
return constants.OS_BSD in sys.platform or sys.platform.startswith(constants.OS_DRAGONFLY)
|
return constants.OS_BSD in sys.platform or sys.platform.startswith(constants.OS_DRAGONFLY)
|
||||||
|
|
||||||
|
|
||||||
def isWindowsConsole():
|
def isWindowsConsole():
|
||||||
return os.path.basename(sys.executable) == "SyncplayConsole.exe"
|
return os.path.basename(sys.executable) == "SyncplayConsole.exe"
|
||||||
|
|
||||||
|
|
||||||
|
def getRuntimeDir():
|
||||||
|
cachedPath = getattr(getRuntimeDir, "cachedPath", None)
|
||||||
|
if cachedPath is not None:
|
||||||
|
return cachedPath
|
||||||
|
|
||||||
|
baseDir = None
|
||||||
|
if not isWindows() and not isMacOS():
|
||||||
|
baseDir = os.getenv("XDG_RUNTIME_DIR", None)
|
||||||
|
|
||||||
|
tmp = tempfile.TemporaryDirectory(prefix="syncplay-", dir=baseDir)
|
||||||
|
atexit.register(tmp.cleanup)
|
||||||
|
|
||||||
|
o = Path(tmp.name)
|
||||||
|
setattr(getRuntimeDir, "cachedPath", o)
|
||||||
|
return o
|
||||||
|
|
||||||
|
|
||||||
def retry(ExceptionToCheck, tries=4, delay=3, backoff=2, logger=None):
|
def retry(ExceptionToCheck, tries=4, delay=3, backoff=2, logger=None):
|
||||||
"""Retry calling the decorated function using an exponential backoff.
|
"""Retry calling the decorated function using an exponential backoff.
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user