Skip to content

Commit 6d55a34

Browse files
committed
refactor: move isScrubbing state to playback manager
1 parent c6666fd commit 6d55a34

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

apps/web/src/core/managers/playback-manager.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export class PlaybackManager {
66
private volume = 1;
77
private muted = false;
88
private previousVolume = 1;
9+
private isScrubbing = false;
910
private listeners = new Set<() => void>();
1011
private playbackTimer: number | null = null;
1112
private lastUpdate = 0;
@@ -101,6 +102,15 @@ export class PlaybackManager {
101102
return this.muted;
102103
}
103104

105+
setScrubbing({ isScrubbing }: { isScrubbing: boolean }): void {
106+
this.isScrubbing = isScrubbing;
107+
this.notify();
108+
}
109+
110+
getIsScrubbing(): boolean {
111+
return this.isScrubbing;
112+
}
113+
104114
subscribe(listener: () => void): () => void {
105115
this.listeners.add(listener);
106116
return () => this.listeners.delete(listener);

apps/web/src/hooks/timeline/use-timeline-playhead.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ export function useTimelinePlayhead({
2424
const currentTime = editor.playback.getCurrentTime();
2525
const duration = editor.timeline.getTotalDuration();
2626
const isPlaying = editor.playback.getIsPlaying();
27+
const isScrubbing = editor.playback.getIsScrubbing();
2728

2829
const seek = useCallback(
2930
({ time }: { time: number }) => editor.playback.seek({ time }),
3031
[editor.playback],
3132
);
3233

33-
const [isScrubbing, setIsScrubbing] = useState(false);
3434
const [scrubTime, setScrubTime] = useState<number | null>(null);
3535

3636
const [isDraggingRuler, setIsDraggingRuler] = useState(false);
@@ -81,10 +81,10 @@ export function useTimelinePlayhead({
8181
({ event }: { event: React.MouseEvent }) => {
8282
event.preventDefault();
8383
event.stopPropagation();
84-
setIsScrubbing(true);
84+
editor.playback.setScrubbing({ isScrubbing: true });
8585
handleScrub({ event });
8686
},
87-
[handleScrub],
87+
[handleScrub, editor.playback],
8888
);
8989

9090
const handleRulerMouseDown = useCallback(
@@ -97,10 +97,10 @@ export function useTimelinePlayhead({
9797
setIsDraggingRuler(true);
9898
setHasDraggedRuler(false);
9999

100-
setIsScrubbing(true);
100+
editor.playback.setScrubbing({ isScrubbing: true });
101101
handleScrub({ event });
102102
},
103-
[handleScrub, playheadRef],
103+
[handleScrub, playheadRef, editor.playback],
104104
);
105105

106106
const handlePlayheadMouseDownEvent = useCallback(
@@ -132,7 +132,7 @@ export function useTimelinePlayhead({
132132
};
133133

134134
const handleMouseUp = ({ event }: { event: MouseEvent }) => {
135-
setIsScrubbing(false);
135+
editor.playback.setScrubbing({ isScrubbing: false });
136136
if (scrubTime !== null) {
137137
seek({ time: scrubTime });
138138
editor.project.setTimelineViewState({

0 commit comments

Comments
 (0)