From 16e04bf1c6264c23a2d2cb7c5727cb1faa72e82e Mon Sep 17 00:00:00 2001
From: Craig Reyenga <craig.reyenga@gmail.com>
Date: Sun, 19 Jan 2025 13:55:59 -0500
Subject: [PATCH] Add key bindings for numbered keys in the player.

---
 Resources/en.lproj/Localizable.strings        | 10 +++
 .../Player/PlayerViewController.swift         | 90 ++++++++++++++++++-
 2 files changed, 99 insertions(+), 1 deletion(-)

diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings
index 0bd5cc461..8ba5981cf 100644
--- a/Resources/en.lproj/Localizable.strings
+++ b/Resources/en.lproj/Localizable.strings
@@ -676,6 +676,16 @@
 "KEY_INCREASE_PLAYBACK_SPEED" = "Increase playback speed";
 "KEY_DECREASE_PLAYBACK_SPEED" = "Decrease playback speed";
 "KEY_RESET_PLAYBACK_SPEED" = "Reset playback speed";
+"KEY_SEEK_TO_10_PERCENT" = "Seek to 10% of duration";
+"KEY_SEEK_TO_20_PERCENT" = "Seek to 20% of duration";
+"KEY_SEEK_TO_30_PERCENT" = "Seek to 30% of duration";
+"KEY_SEEK_TO_40_PERCENT" = "Seek to 40% of duration";
+"KEY_SEEK_TO_50_PERCENT" = "Seek to 50% of duration";
+"KEY_SEEK_TO_60_PERCENT" = "Seek to 60% of duration";
+"KEY_SEEK_TO_70_PERCENT" = "Seek to 70% of duration";
+"KEY_SEEK_TO_80_PERCENT" = "Seek to 80% of duration";
+"KEY_SEEK_TO_90_PERCENT" = "Seek to 90% of duration";
+"KEY_SEEK_TO_START" = "Seek to beginning of video";
 
 // MARK: - TitleSelection
 
diff --git a/Sources/Playback/Player/PlayerViewController.swift b/Sources/Playback/Player/PlayerViewController.swift
index 29c7523ea..2cc2cc5a1 100644
--- a/Sources/Playback/Player/PlayerViewController.swift
+++ b/Sources/Playback/Player/PlayerViewController.swift
@@ -1283,6 +1283,53 @@ extension PlayerViewController {
         playbackService.playbackRate = 1.0
     }
 
+    @objc func keyNumber(_ n: Int) {
+        guard playbackService.isSeekable else { return }
+
+        // n=6 --> seek to 60%
+        playbackService.playbackPosition = (Float(n) / 10.0)
+    }
+
+    @objc func keyNumber1() {
+        keyNumber(1)
+    }
+
+    @objc func keyNumber2() {
+        keyNumber(2)
+    }
+
+    @objc func keyNumber3() {
+        keyNumber(3)
+    }
+
+    @objc func keyNumber4() {
+        keyNumber(4)
+    }
+
+    @objc func keyNumber5() {
+        keyNumber(5)
+    }
+
+    @objc func keyNumber6() {
+        keyNumber(6)
+    }
+
+    @objc func keyNumber7() {
+        keyNumber(7)
+    }
+
+    @objc func keyNumber8() {
+        keyNumber(8)
+    }
+
+    @objc func keyNumber9() {
+        keyNumber(9)
+    }
+
+    @objc func keyNumber0() {
+        keyNumber(0)
+    }
+
     override var keyCommands: [UIKeyCommand]? {
         var commands: [UIKeyCommand] = [
             UIKeyCommand(input: " ",
@@ -1308,7 +1355,48 @@ extension PlayerViewController {
             UIKeyCommand(input: "]",
                          modifierFlags: [],
                          action: #selector(keyLeftBracket),
-                         discoverabilityTitle: NSLocalizedString("KEY_DECREASE_PLAYBACK_SPEED", comment: ""))
+                         discoverabilityTitle: NSLocalizedString("KEY_DECREASE_PLAYBACK_SPEED", comment: "")),
+            UIKeyCommand(input: "1",
+                         modifierFlags: [],
+                         action: #selector(keyNumber1),
+                         discoverabilityTitle: NSLocalizedString("KEY_SEEK_TO_10_PERCENT", comment: "")),
+            UIKeyCommand(input: "2",
+                         modifierFlags: [],
+                         action: #selector(keyNumber2),
+                         discoverabilityTitle: NSLocalizedString("KEY_SEEK_TO_20_PERCENT", comment: "")),
+            UIKeyCommand(input: "3",
+                         modifierFlags: [],
+                         action: #selector(keyNumber3),
+                         discoverabilityTitle: NSLocalizedString("KEY_SEEK_TO_30_PERCENT", comment: "")),
+            UIKeyCommand(input: "4",
+                         modifierFlags: [],
+                         action: #selector(keyNumber4),
+                         discoverabilityTitle: NSLocalizedString("KEY_SEEK_TO_40_PERCENT", comment: "")),
+            UIKeyCommand(input: "5",
+                         modifierFlags: [],
+                         action: #selector(keyNumber5),
+                         discoverabilityTitle: NSLocalizedString("KEY_SEEK_TO_50_PERCENT", comment: "")),
+            UIKeyCommand(input: "6",
+                         modifierFlags: [],
+                         action: #selector(keyNumber6),
+                         discoverabilityTitle: NSLocalizedString("KEY_SEEK_TO_60_PERCENT", comment: "")),
+            UIKeyCommand(input: "7",
+                         modifierFlags: [],
+                         action: #selector(keyNumber7),
+                         discoverabilityTitle: NSLocalizedString("KEY_SEEK_TO_70_PERCENT", comment: "")),
+            UIKeyCommand(input: "8",
+                         modifierFlags: [],
+                         action: #selector(keyNumber8),
+                         discoverabilityTitle: NSLocalizedString("KEY_SEEK_TO_80_PERCENT", comment: "")),
+            UIKeyCommand(input: "9",
+                         modifierFlags: [],
+                         action: #selector(keyNumber9),
+                         discoverabilityTitle: NSLocalizedString("KEY_SEEK_TO_90_PERCENT", comment: "")),
+            UIKeyCommand(input: "0",
+                         modifierFlags: [],
+                         action: #selector(keyNumber0),
+                         discoverabilityTitle: NSLocalizedString("KEY_SEEK_TO_START", comment: ""))
+
         ]
 
         if abs(playbackService.playbackRate - 1.0) > .ulpOfOne {
-- 
GitLab