diff options
Diffstat (limited to 'apps/web/src/lib/time.ts')
| -rw-r--r-- | apps/web/src/lib/time.ts | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/apps/web/src/lib/time.ts b/apps/web/src/lib/time.ts index f24c5961..20e2ff6d 100644 --- a/apps/web/src/lib/time.ts +++ b/apps/web/src/lib/time.ts @@ -1,10 +1,14 @@ // Time-related utility functions +import { DEFAULT_FPS } from "@/stores/project-store"; + +export type TimeCode = "MM:SS" | "HH:MM:SS" | "HH:MM:SS:CS" | "HH:MM:SS:FF"; + // Helper function to format time in various formats (MM:SS, HH:MM:SS, HH:MM:SS:CS, HH:MM:SS:FF) export const formatTimeCode = ( timeInSeconds: number, - format: "MM:SS" | "HH:MM:SS" | "HH:MM:SS:CS" | "HH:MM:SS:FF" = "HH:MM:SS:CS", - fps = 30 + format: TimeCode = "HH:MM:SS:CS", + fps = DEFAULT_FPS ): string => { const hours = Math.floor(timeInSeconds / 3600); const minutes = Math.floor((timeInSeconds % 3600) / 60); @@ -26,8 +30,8 @@ export const formatTimeCode = ( export const parseTimeCode = ( timeCode: string, - format: "MM:SS" | "HH:MM:SS" | "HH:MM:SS:CS" | "HH:MM:SS:FF" = "HH:MM:SS:CS", - fps = 30 + format: TimeCode = "HH:MM:SS:CS", + fps = DEFAULT_FPS ): number | null => { if (!timeCode || typeof timeCode !== "string") return null; @@ -116,3 +120,18 @@ export const parseTimeCode = ( return null; }; + +export const guessTimeCodeFormat = (timeCode: string): TimeCode | null => { + if (!timeCode || typeof timeCode !== "string") return null; + + const numbers = timeCode.split(":"); + + if (!numbers.every((n) => !isNaN(Number(n)))) return null; + + if (numbers.length === 2) return "MM:SS"; + if (numbers.length === 3) return "HH:MM:SS"; + // todo: how to tell frames apart from cs? + if (numbers.length === 4) return "HH:MM:SS:FF"; + + return null; +}; |
