diff --git a/src/App.svelte b/src/App.svelte index d5d99be..e23ebba 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -13,7 +13,8 @@ import PlayerControls from '$lib/components/PlayerControls.svelte'; import PlayerTimeline from '$lib/components/PlayerTimeline.svelte'; import { loadPreferences, preferences, setClipListPosition, setClipListWidth, setAppMode } from '$lib/stores/preferences.svelte'; - import { getSelectedClipId, removeClip, markInPoint, markOutPoint } from '$lib/stores/clips.svelte'; + import { getSelectedClipId, removeClip, markInPoint, markOutPoint, addClip } from '$lib/stores/clips.svelte'; + import { computeQuickClipRange } from '$lib/utils/clipRange'; import { adjustShuttle, resetShuttleRate, @@ -186,6 +187,13 @@ } } + function cutClip(position: 'at' | 'before') { + const range = computeQuickClipRange(session.currentTime, session.duration, position); + if (!range) return; + addClip(range.start, range.end); + setAppMode('clipper'); + } + function handleToggleCaptions() { captionsEnabled = !captionsEnabled; } @@ -230,6 +238,20 @@ e.preventDefault(); toggleMode(); break; + case 'x': + case 'X': + if (isPlayerMode) { + e.preventDefault(); + cutClip('at'); + } + break; + case 'z': + case 'Z': + if (isPlayerMode) { + e.preventDefault(); + cutClip('before'); + } + break; case 'f': case 'F': if (isPlayerMode) { @@ -405,6 +427,7 @@ hasCaptions={session.hasCaptions || false} onToggleCaptions={handleToggleCaptions} onOpenCaptionSettings={() => {}} + onCutClip={cutClip} /> {:else} diff --git a/src/lib/components/PlayerControls.svelte b/src/lib/components/PlayerControls.svelte index a0b3014..39b5fe7 100644 --- a/src/lib/components/PlayerControls.svelte +++ b/src/lib/components/PlayerControls.svelte @@ -38,12 +38,14 @@ hasCaptions, onToggleCaptions, onOpenCaptionSettings, + onCutClip, }: { visible: boolean; captionsEnabled: boolean; hasCaptions: boolean; onToggleCaptions: () => void; onOpenCaptionSettings: () => void; + onCutClip: (position: 'at' | 'before') => void; } = $props(); let showSpeedSelector = $state(false); @@ -225,6 +227,14 @@ {/if} + + {#if hasCaptions}