Add keyboard shortcuts for seeking

- Seeks by 5 seconds back / forward
- Note: Pressing these shortcuts quickly in succession while transcoding is active will throw an error since the previous request hasn't had time to finish before the next one. This bug also happens with the seek bar so might perhaps be best addressed in a separate pr / commit.
This commit is contained in:
Tuukka Ojala
2025-02-02 13:46:24 +02:00
parent aab5dbee2b
commit ce5fb17722
2 changed files with 27 additions and 2 deletions
+2
View File
@@ -71,6 +71,8 @@ _LMS_ supports lyrics in `lrc` files, `txt` files, and embedded track metadata.
* Next track: <kbd>Ctrl</kbd> + <kbd>Right</kbd>
* Decrease volume: <kbd>Ctrl</kbd> + <kbd>Down</kbd>
* Increase volume: <kbd>Ctrl</kbd> + <kbd>Up</kbd>
* Seek back by 5 seconds: <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Left</kbd>
* Seek forward by 5 seconds: <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Right</kbd>
## Installation
+25 -2
View File
@@ -18,6 +18,9 @@ Object.freeze(Mode);
// How much to increase / decrease volume when adjusting it with keyboard shortcuts
const volumeStepAmount = 0.05;
// How much to seek back / forward (in seconds) with keyboard shortcuts
const seekAmount = 5;
LMS.mediaplayer = function () {
let _root = {};
let _elems = {};
@@ -245,6 +248,18 @@ LMS.mediaplayer = function () {
_updateMediaSessionState();
}
let _seekBack = function() {
let currentPosition = _offset + _elems.audio.currentTime;
let newPosition = currentPosition - seekAmount;
_seekTo(Math.max(newPosition, 0));
}
let _seekForward = function() {
let currentPosition = _offset + _elems.audio.currentTime;
let newPosition = currentPosition + seekAmount;
_seekTo(Math.min(newPosition, _duration));
}
let _updateMediaSessionState = function() {
if ("mediaSession" in navigator) {
navigator.mediaSession.setPositionState({
@@ -346,11 +361,11 @@ LMS.mediaplayer = function () {
_playPause();
handled = true;
}
else if (event.ctrlKey && event.keyCode == 37) {
else if (event.ctrlKey && !event.shiftKey && event.keyCode == 37) {
_playPrevious();
handled = true;
}
else if (event.ctrlKey && event.keyCode == 39) {
else if (event.ctrlKey && !event.shiftKey && event.keyCode == 39) {
_playNext();
handled = true;
}
@@ -362,6 +377,14 @@ LMS.mediaplayer = function () {
_stepVolumeUp();
handled = true;
}
else if (event.ctrlKey && event.shiftKey && event.keyCode == 37) {
_seekBack();
handled = true;
}
else if (event.ctrlKey && event.shiftKey && event.keyCode == 39) {
_seekForward();
handled = true;
}
if (handled)
event.preventDefault();