[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/subed 0781285 061/389: Make mpv RPC socket and client buff
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/subed 0781285 061/389: Make mpv RPC socket and client buffer unique per buffer |
Date: |
Fri, 3 Dec 2021 10:59:57 -0500 (EST) |
branch: elpa/subed
commit 07812858d58715938f5a36857ec5bf64779ab13a
Author: Random User <rndusr@posteo.de>
Commit: Random User <rndusr@posteo.de>
Make mpv RPC socket and client buffer unique per buffer
This makes theoretically possible to work on multiple subtitle files with
multiple video players open. It works mostly, but there is some
interference
with point-player synchronization.
---
subed/subed-config.el | 2 +-
subed/subed-mpv.el | 38 ++++++++++++++++++++++++++------------
tests/test-subed-mpv.el | 8 +++++---
3 files changed, 32 insertions(+), 16 deletions(-)
diff --git a/subed/subed-config.el b/subed/subed-config.el
index f9e6fd7..daf3742 100644
--- a/subed/subed-config.el
+++ b/subed/subed-config.el
@@ -177,7 +177,7 @@ was moved by the user."
remembers whether it was originally enabled by the user.")
-(defcustom subed-mpv-socket "/tmp/mpv-socket"
+(defcustom subed-mpv-socket-base "/tmp/subed-mpv-socket"
"Path to Unix IPC socket that is passed to mpv --input-ipc-server."
:type 'file
:group 'subed)
diff --git a/subed/subed-mpv.el b/subed/subed-mpv.el
index 02426a5..e1cccd5 100644
--- a/subed/subed-mpv.el
+++ b/subed/subed-mpv.el
@@ -45,10 +45,7 @@
"Running mpv process.")
(defvar-local subed-mpv--client-proc nil
- "IPC socket process that communicates over `subed-mpv-socket'.")
-
-(defvar-local subed-mpv--client-buffer " *subed-mpv-buffer*"
- "Buffer for JSON responses from server.")
+ "IPC socket process that communicates over `subed-mpv--socket'.")
(defconst subed-mpv--client-test-request
(json-encode (list :command '(get_property mpv-version)))
@@ -57,19 +54,26 @@
(defconst subed-mpv--retry-delays
;; Sums up to 5 seconds in total before failing
'(0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.4 0.5 0.5 0.5 0.5 0.5 0.5 0.5)
- "List of delays between attemps to connect to `subed-mpv-socket'.")
+ "List of delays between attemps to connect to `subed-mpv--socket'.")
(defvar-local subed-mpv--client-command-queue nil
- "Commands to call when connection to `subed-mpv-socket' is established.")
+ "Commands to call when connection to `subed-mpv--socket' is established.")
;;; Server (mpv process that provides an IPC socket)
+(defun subed-mpv--socket ()
+ "Path to mpv's RPC socket for a particular buffer.
+See also `subed-mpv-socket-base'."
+ (format "/tmp/subed-mpv-socket:%s-%s"
+ (file-name-base (or (buffer-file-name) "unnamed"))
+ (buffer-hash)))
+
(defun subed-mpv--server-start (&rest args)
"Run mpv in JSON IPC mode."
(subed-mpv--server-stop)
(let ((argv (append (list subed-mpv-executable
- (format "--input-ipc-server=%s" subed-mpv-socket)
+ (format "--input-ipc-server=%s"
(subed-mpv--socket))
"--idle")
args)))
(subed-debug "Running %s" argv)
@@ -95,18 +99,28 @@
;;; Client (elisp process that connects to server's IPC socket)
+(defun subed-mpv--client-buffer ()
+ "Unique name of buffer that stores RPC responses."
+ (if subed--debug-enabled
+ (format "*subed-mpv-buffer:%s-%s*"
+ (file-name-base (or (buffer-file-name) "unnamed"))
+ (buffer-hash))
+ (format " *subed-mpv-buffer:%s-%s*"
+ (file-name-base (or (buffer-file-name) "unnamed"))
+ (buffer-hash))))
+
(defun subed-mpv--client-connect (delays)
- "Try to connect to `subed-mpv-socket'.
+ "Try to connect to `subed-mpv--socket'.
If a connection attempt fails, wait (car delays) seconds and try
again, passing (cdr delays)."
- (subed-debug "Attempting to connect to IPC socket: %s" subed-mpv-socket)
+ (subed-debug "Attempting to connect to IPC socket: %s" (subed-mpv--socket))
(subed-mpv--client-disconnect)
;; NOTE: make-network-process doesn't fail when the socket file doesn't exist
(let ((proc (make-network-process :name "subed-mpv-client"
:family 'local
- :service subed-mpv-socket
+ :service (subed-mpv--socket)
:coding '(utf-8 . utf-8)
- :buffer
(get-buffer-create subed-mpv--client-buffer)
+ :buffer
(subed-mpv--client-buffer)
:filter #'subed-mpv--client-filter
:noquery t
:nowait t)))
@@ -155,7 +169,7 @@ CMD to `subed-mpv--client-command-queue' which is evaluated
by
(process-send-string subed-mpv--client-proc (concat request-data
"\n"))
(error
(subed-mpv-kill)
- (error "Unable to send commands via %s: %s" subed-mpv-socket (cdr
err))))
+ (error "Unable to send commands via %s: %s" (subed-mpv--socket)
(cdr err))))
t)
(when (subed-mpv--server-started-p)
(subed-debug "Queueing command: %s" cmd)
diff --git a/tests/test-subed-mpv.el b/tests/test-subed-mpv.el
index 1d39b25..bd7c8fb 100644
--- a/tests/test-subed-mpv.el
+++ b/tests/test-subed-mpv.el
@@ -4,10 +4,11 @@
(describe "Starting mpv"
(it "passes arguments to make-process."
(spy-on 'make-process)
+ (spy-on 'subed-mpv--socket :and-return-value
"/mock/path/to/socket")
(subed-mpv--server-start "foo" "--bar")
(expect 'make-process :to-have-been-called-with
:command (list subed-mpv-executable
- (format "--input-ipc-server=%s"
subed-mpv-socket)
+ "--input-ipc-server=/mock/path/to/socket"
"--idle" "foo" "--bar")
:name "subed-mpv-server" :buffer nil :noquery t))
(it "sets subed-mpv--server-proc on success."
@@ -51,13 +52,14 @@
(it "correctly calls make-network-process."
(spy-on 'make-network-process)
(spy-on 'process-send-string)
+ (spy-on 'subed-mpv--socket :and-return-value
"/mock/path/to/socket")
(subed-mpv--client-connect '(0 0 0))
(expect 'make-network-process :to-have-been-called-with
:name "subed-mpv-client"
:family 'local
- :service subed-mpv-socket
+ :service (subed-mpv--socket)
:coding '(utf-8 . utf-8)
- :buffer (get-buffer-create
subed-mpv--client-buffer)
+ :buffer (subed-mpv--client-buffer)
:filter #'subed-mpv--client-filter
:noquery t
:nowait t))
- [nongnu] elpa/subed 3927690 037/389: Some rewording, (continued)
- [nongnu] elpa/subed 3927690 037/389: Some rewording, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 62d5d3d 038/389: Use (unless ...) instead of (when (not ...)), ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 166988c 041/389: Special subtitle separator when moving to end of subtitle, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed e471802 046/389: Adjust test description, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 727275d 043/389: subed-srt-sanitize: Wrap function body in atomic-change-group, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed a30a4b1 054/389: subed-srt-regenerate-ids: Don't change buffer unless it's necessary, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 5fd2009 055/389: subed-mpv: Handle invalid JSON, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed c865969 058/389: Toggle subed-mode when `subed-mode' is called, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 65bfba6 057/389: When enabling debugging, expect the debug window to exist, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed dc60c27 060/389: subed-srt--subtitle-id-at-msecs: Try to ignore invalid time stamps, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 0781285 061/389: Make mpv RPC socket and client buffer unique per buffer,
ELPA Syncer <=
- [nongnu] elpa/subed 2f86a8e 030/389: Add function: subed-srt--subtitle-text, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 17f3ae5 034/389: Add/fix tests for srt parsing changes, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed fb9354c 039/389: Adjust tests for subed-srt-move-to-subtitle-end, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 4e3e42f 044/389: subed-srt-sort: Wrap function body in atomic-change-group, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 33f27c5 063/389: Fix docstring, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 7932aee 066/389: subed-srt-sort: Sanitize before validating, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed dc771c8 067/389: Fix/Add tests, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 23156e3 071/389: subed-srt-subtitle-insert: Make argument optional, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 0e05076 072/389: subed-srt-sanitize: Properly trim trailing newlines, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 49e8e72 073/389: subed-srt-move-to-subtitle-end: Adjust docstring, ELPA Syncer, 2021/12/03