415415 class="media-controls-item"
416416 max-height="45px"
417417 />
418+ <SkipBackBtn
419+ v-if =" isAudiobookOrPodcast "
420+ :player-queue =" store .activePlayerQueue "
421+ :cur-queue-item =" store .curQueueItem "
422+ :skip-amount =" skipAmount "
423+ class="media-controls-item"
424+ max-height="45px"
425+ />
418426 <PlayBtn
419427 :player =" store .activePlayer "
420428 :player-queue =" store .activePlayerQueue "
421429 class="media-controls-item"
422430 max-height="70px"
423431 />
432+ <SkipForwardBtn
433+ v-if =" isAudiobookOrPodcast "
434+ :player-queue =" store .activePlayerQueue "
435+ :cur-queue-item =" store .curQueueItem "
436+ :skip-amount =" skipAmount "
437+ class="media-controls-item"
438+ max-height="45px"
439+ />
424440 <NextBtn
425441 :player =" store .activePlayer "
426442 :player-queue =" store .activePlayerQueue "
@@ -553,6 +569,10 @@ import {
553569 Track ,
554570} from " @/plugins/api/interfaces" ;
555571import { getBreakpointValue } from " @/plugins/breakpoint" ;
572+ import SkipForwardBtn from " @/layouts/default/PlayerOSD/PlayerControlBtn/SkipForwardBtn.vue" ;
573+ import SkipBackBtn from " @/layouts/default/PlayerOSD/PlayerControlBtn/SkipBackBtn.vue" ;
574+ import QueueBtn from " ./PlayerControlBtn/QueueBtn.vue" ;
575+ import SpeakerBtn from " ./PlayerControlBtn/SpeakerBtn.vue" ;
556576import { eventbus } from " @/plugins/eventbus" ;
557577import { $t } from " @/plugins/i18n" ;
558578import router from " @/plugins/router" ;
@@ -569,8 +589,6 @@ import {
569589} from " vue" ;
570590import { useDisplay } from " vuetify" ;
571591import { ContextMenuItem } from " ../ItemContextMenu.vue" ;
572- import QueueBtn from " ./PlayerControlBtn/QueueBtn.vue" ;
573- import SpeakerBtn from " ./PlayerControlBtn/SpeakerBtn.vue" ;
574592import PlayerTimeline from " ./PlayerTimeline.vue" ;
575593import { getSourceName } from " @/plugins/api/helpers" ;
576594import computeElapsedTime from " @/helpers/elapsed" ;
@@ -727,6 +745,23 @@ watch(
727745 },
728746);
729747
748+ // Check if current media is audiobook or podcast
749+ const isAudiobookOrPodcast = computed (() => {
750+ const mediaType = store .curQueueItem ?.media_item ?.media_type ;
751+ return (
752+ mediaType === MediaType .AUDIOBOOK ||
753+ mediaType === MediaType .PODCAST ||
754+ mediaType === MediaType .PODCAST_EPISODE
755+ );
756+ });
757+
758+ // Get configured skip amount from settings
759+ const skipAmount = computed (() => {
760+ return parseInt (
761+ localStorage .getItem (" frontend.settings.audiobook_skip_seconds" ) || " 30" ,
762+ );
763+ });
764+
730765const titleFontSize = computed (() => {
731766 switch (name .value ) {
732767 case " xs" :
0 commit comments