emacs-elpa-diffs
[Top][All Lists]
Advanced

[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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]