summaryrefslogtreecommitdiff
path: root/apps/web/src/stores
diff options
context:
space:
mode:
authorSai Teja <vurukondasaiteja13@gmail.com>2025-08-12 03:55:52 +0530
committerGitHub <noreply@github.com>2025-08-12 00:25:52 +0200
commit3807e146e4e910d16b452b896d4faaf52a314160 (patch)
treee7d17b0eca372ceb3703f65e7e9b88870022c23d /apps/web/src/stores
parenta1e48613b404544bfa8a4b23185054bb3651fb51 (diff)
downloadopencut-3807e146e4e910d16b452b896d4faaf52a314160.tar.gz
feat(playback): restart from beginning when play pressed at end of timeline (Fixes #536) (#542)
Diffstat (limited to 'apps/web/src/stores')
-rw-r--r--apps/web/src/stores/playback-store.ts18
1 files changed, 18 insertions, 0 deletions
diff --git a/apps/web/src/stores/playback-store.ts b/apps/web/src/stores/playback-store.ts
index feea0f46..a92cb530 100644
--- a/apps/web/src/stores/playback-store.ts
+++ b/apps/web/src/stores/playback-store.ts
@@ -82,6 +82,24 @@ export const usePlaybackStore = create<PlaybackStore>((set, get) => ({
speed: 1.0,
play: () => {
+ const state = get();
+
+ const actualContentDuration = useTimelineStore
+ .getState()
+ .getTotalDuration();
+ const effectiveDuration =
+ actualContentDuration > 0 ? actualContentDuration : state.duration;
+
+ if (effectiveDuration > 0) {
+ const fps = useProjectStore.getState().activeProject?.fps ?? 30;
+ const frameOffset = 1 / fps;
+ const endThreshold = Math.max(0, effectiveDuration - frameOffset);
+
+ if (state.currentTime >= endThreshold) {
+ get().seek(0);
+ }
+ }
+
set({ isPlaying: true });
startTimer(get);
},