diff options
Diffstat (limited to 'apps/web/src/lib/timeline/bookmarks.ts')
| -rw-r--r-- | apps/web/src/lib/timeline/bookmarks.ts | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/apps/web/src/lib/timeline/bookmarks.ts b/apps/web/src/lib/timeline/bookmarks.ts new file mode 100644 index 00000000..0b06c2f6 --- /dev/null +++ b/apps/web/src/lib/timeline/bookmarks.ts @@ -0,0 +1,61 @@ +import { roundToFrame } from "@/lib/time"; + +export function findBookmarkIndex({ + bookmarks, + frameTime, +}: { + bookmarks: number[]; + frameTime: number; +}): number { + return bookmarks.findIndex( + (bookmark) => Math.abs(bookmark - frameTime) < 0.001, + ); +} + +export function isBookmarkAtTime({ + bookmarks, + frameTime, +}: { + bookmarks: number[]; + frameTime: number; +}): boolean { + return bookmarks.some((bookmark) => Math.abs(bookmark - frameTime) < 0.001); +} + +export function toggleBookmarkInArray({ + bookmarks, + frameTime, +}: { + bookmarks: number[]; + frameTime: number; +}): number[] { + const bookmarkIndex = findBookmarkIndex({ bookmarks, frameTime }); + + if (bookmarkIndex !== -1) { + return bookmarks.filter((_, i) => i !== bookmarkIndex); + } + + return [...bookmarks, frameTime].sort((a, b) => a - b); +} + +export function removeBookmarkFromArray({ + bookmarks, + frameTime, +}: { + bookmarks: number[]; + frameTime: number; +}): number[] { + return bookmarks.filter( + (bookmark) => Math.abs(bookmark - frameTime) >= 0.001, + ); +} + +export function getFrameTime({ + time, + fps, +}: { + time: number; + fps: number; +}): number { + return roundToFrame({ time, fps }); +} |
