diff --git a/src/components/MusicPlayer.tsx b/src/components/MusicPlayer.tsx index 6d2fc28..bfbc174 100644 --- a/src/components/MusicPlayer.tsx +++ b/src/components/MusicPlayer.tsx @@ -19,6 +19,7 @@ import { Minimize2, Minus } from 'lucide-react' +import { formatDuration } from '@/lib/format-duration' export function MusicPlayer() { const { @@ -179,8 +180,8 @@ export function MusicPlayer() { />
- {formatTime(currentTime)} - {formatTime(duration)} + {formatDuration(currentTime)} + {formatDuration(duration)}
@@ -270,7 +271,7 @@ export function MusicPlayer() { )} - {formatTime(track.duration)} + {formatDuration(track.duration)} ))} @@ -328,8 +329,8 @@ export function MusicPlayer() { />
- {formatTime(currentTime)} - {formatTime(duration)} + {formatDuration(currentTime)} + {formatDuration(duration)}
@@ -408,7 +409,7 @@ export function MusicPlayer() { )} - {formatTime(track.duration)} + {formatDuration(track.duration)} ))} diff --git a/src/lib/format-duration.ts b/src/lib/format-duration.ts new file mode 100644 index 0000000..c203568 --- /dev/null +++ b/src/lib/format-duration.ts @@ -0,0 +1,18 @@ +export function formatDuration(ms: number): string { + if (isNaN(ms) || ms < 0) return '0:00' + + // Convert milliseconds to seconds + const totalSeconds = Math.floor(ms / 1000) + + // Calculate hours, minutes, and remaining seconds + const hours = Math.floor(totalSeconds / 3600) + const minutes = Math.floor((totalSeconds % 3600) / 60) + const seconds = totalSeconds % 60 + + // Format based on duration + if (hours > 0) { + return `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}` + } else { + return `${minutes}:${seconds.toString().padStart(2, '0')}` + } +} diff --git a/src/lib/format-size.ts b/src/lib/format-size.ts new file mode 100644 index 0000000..5044ff8 --- /dev/null +++ b/src/lib/format-size.ts @@ -0,0 +1,32 @@ +/** + * Units for file sizes + */ +const FILE_SIZE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] + +/** + * Converts a file size in bytes to a human-readable string + * @param bytes File size in bytes + * @returns Formatted file size string (e.g., "1.5 MB") + */ +export function formatSize(bytes: number, binary: boolean = false): string { + // Handle invalid input + if (bytes === null || bytes === undefined || isNaN(bytes) || bytes < 0) { + return `0 B` + } + + // If the size is 0, return early + if (bytes === 0) { + return `0 B` + } + + // Otherwise, determine the appropriate unit based on the size + const unit = binary ? 1024 : 1000 + const unitIndex = Math.floor(Math.log(bytes) / Math.log(unit)) + const unitSize = Math.pow(unit, unitIndex) + const value = bytes / unitSize + + // Make sure we don't exceed our units array + const safeUnitIndex = Math.min(unitIndex, FILE_SIZE_UNITS.length - 1) + + return `${value.toFixed(2)} ${FILE_SIZE_UNITS[safeUnitIndex]}` +}