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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/subed 14ebbbb 293/389: subed-srt--subtitle-id-at-msecs: Re


From: ELPA Syncer
Subject: [nongnu] elpa/subed 14ebbbb 293/389: subed-srt--subtitle-id-at-msecs: Return nil if no matching subtitle
Date: Fri, 3 Dec 2021 11:00:44 -0500 (EST)

branch: elpa/subed
commit 14ebbbb34909a980800f96f2010c9429b126a88b
Author: Random User <rndusr@posteo.de>
Commit: Random User <rndusr@posteo.de>

    subed-srt--subtitle-id-at-msecs: Return nil if no matching subtitle
    
    This fixes a bug which made point jump to the previous subtitle when 
adjusting
    times.
---
 subed/subed-srt.el      | 19 ++++++++-----------
 tests/test-subed-srt.el | 16 ++++++++--------
 2 files changed, 16 insertions(+), 19 deletions(-)

diff --git a/subed/subed-srt.el b/subed/subed-srt.el
index ca98899..83bd2d4 100644
--- a/subed/subed-srt.el
+++ b/subed/subed-srt.el
@@ -77,9 +77,7 @@ Return nil if TIME-STRING doesn't match the pattern."
 
 (defun subed-srt--subtitle-id-at-msecs (msecs)
   "Return the ID of the subtitle at MSECS milliseconds.
-If MSECS is between subtitles, return the subtitle that starts
-after MSECS if there is one and its start time is >= MSECS +
-1000.  Otherwise return the closest subtitle before MSECS."
+Return nil if there is no subtitle at MSECS."
   (save-match-data
     (save-excursion
       (goto-char (point-min))
@@ -90,17 +88,16 @@ after MSECS if there is one and its start time is >= MSECS +
         (when (re-search-forward (format "\\(%s\\|\\`\\)[0-9]+\n%02d:" 
subed-srt--regexp-separator only-hours) nil t)
           (beginning-of-line)
           ;; Move to first subtitle in the relevant hour and minute
-          (re-search-forward (format "\\(\n\n\\|\\`\\)[0-9]+\n%02d:%02d" 
only-hours only-mins) nil t)))
+          (re-search-forward (format "\\(\n\n\\|\\`\\)[0-9]+\n%02d:%02d" 
only-hours only-mins) nil t))
       ;; Move to first subtitle that starts at or after MSECS
-      (catch 'last-subtitle-reached
+      (catch 'subtitle-id
         (while (<= (or (subed-srt--subtitle-msecs-start) -1) msecs)
+          ;; If stop time is >= MSECS, we found a match
+          (let ((cur-sub-end (subed-srt--subtitle-msecs-stop)))
+            (when (and cur-sub-end (>= cur-sub-end msecs))
+              (throw 'subtitle-id (subed-srt--subtitle-id))))
           (unless (subed-srt--forward-subtitle-id)
-            (throw 'last-subtitle-reached nil))))
-      ;; Move back to previous subtitle if start of current subtitle is in the
-      ;; future (i.e. MSECS is between subtitles)
-      (when (> (or (subed-srt--subtitle-msecs-start) -1) msecs)
-        (subed-srt--backward-subtitle-id))
-      (subed-srt--subtitle-id))))
+            (throw 'subtitle-id nil))))))))
 
 (defun subed-srt--subtitle-msecs-start (&optional sub-id)
   "Subtitle start time in milliseconds or nil if it can't be found.
diff --git a/tests/test-subed-srt.el b/tests/test-subed-srt.el
index 8585c3a..2ae1832 100644
--- a/tests/test-subed-srt.el
+++ b/tests/test-subed-srt.el
@@ -61,7 +61,7 @@ Baz.
                             (progn
                               (subed-srt--jump-to-subtitle-id outset-id)
                               (expect (subed-srt--subtitle-id-at-msecs msecs) 
:to-equal target-id)))))))
-    (it "returns first subtitle ID if time is before the first subtitle's 
start time."
+    (it "returns nil if time is before the first subtitle's start time."
       (with-temp-srt-buffer
         (insert mock-srt-data)
         (let ((msecs (- (save-excursion
@@ -70,8 +70,8 @@ Baz.
           (cl-loop for outset-id from 1 to 3 do
                    (progn
                      (subed-srt--jump-to-subtitle-id outset-id)
-                     (expect (subed-srt--subtitle-id-at-msecs msecs) :to-equal 
1))))))
-    (it "returns last subtitle ID if time is after the last subtitle's start 
time."
+                     (expect (subed-srt--subtitle-id-at-msecs msecs) :to-equal 
nil))))))
+    (it "returns nil if time is after the last subtitle's start time."
       (with-temp-srt-buffer
         (insert mock-srt-data)
         (let ((msecs (+ (save-excursion
@@ -80,8 +80,8 @@ Baz.
           (cl-loop for outset-id from 1 to 3 do
                    (progn
                      (subed-srt--jump-to-subtitle-id outset-id)
-                     (expect (subed-srt--subtitle-id-at-msecs msecs) :to-equal 
3))))))
-    (it "returns previous subtitle ID when time is between subtitles."
+                     (expect (subed-srt--subtitle-id-at-msecs msecs) :to-equal 
nil))))))
+    (it "returns nil if time is between subtitles."
       (with-temp-srt-buffer
         (insert mock-srt-data)
         (cl-loop for target-id from 1 to 2 do
@@ -89,13 +89,13 @@ Baz.
                    (cl-loop for outset-id from 1 to 3 do
                             (progn
                               (subed-srt--jump-to-subtitle-id outset-id)
-                              (expect (subed-srt--subtitle-id-at-msecs msecs) 
:to-equal target-id))))
+                              (expect (subed-srt--subtitle-id-at-msecs msecs) 
:to-equal nil))))
                  (let ((msecs (- (subed-srt--subtitle-msecs-start (+ target-id 
1)) 1)))
                    (cl-loop for outset-id from 1 to 3 do
                             (progn
                               (subed-srt--jump-to-subtitle-id outset-id)
-                              (expect (subed-srt--subtitle-id-at-msecs msecs) 
:to-equal target-id)))))))
-    (it "doesn't fail when start time is invalid."
+                              (expect (subed-srt--subtitle-id-at-msecs msecs) 
:to-equal nil)))))))
+    (it "doesn't fail if start time is invalid."
       (with-temp-srt-buffer
         (insert mock-srt-data)
         (subed-srt--jump-to-subtitle-id 2)



reply via email to

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