From 5a4936f75d3af8a6e215a5df9bb20b5304794446 Mon Sep 17 00:00:00 2001 From: Ollie Taylor <13766232+OllieJT@users.noreply.github.com> Date: Thu, 23 Feb 2023 00:19:10 +0000 Subject: [PATCH] Add timestamp --- src/lib/components/audio/store.ts | 16 ++++++++++++++-- src/lib/helper/s-to-timestamp.ts | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/lib/helper/s-to-timestamp.ts diff --git a/src/lib/components/audio/store.ts b/src/lib/components/audio/store.ts index 57b0747..feadc03 100644 --- a/src/lib/components/audio/store.ts +++ b/src/lib/components/audio/store.ts @@ -1,7 +1,8 @@ import { dev } from '$app/environment'; import type { PlayerElement, PlayerMetadata } from '$lib/components/audio/types'; +import { secondsToTimestamp } from '$lib/helper/s-to-timestamp'; import clamp from 'just-clamp'; -import { writable } from 'svelte/store'; +import { derived, writable } from 'svelte/store'; function log(...val: (string | number | boolean)[]) { if (!dev) return; @@ -23,6 +24,17 @@ export const __internal_audio_metadata = writable({ loading: false, }); +const state = derived( + [__internal_audio_metadata, __internal_audio_current_time], + ([$metadata, $current_time]) => { + return { + current_time: $current_time, + timestamp: secondsToTimestamp($current_time), + ...$metadata, + }; + }, +); + type HandleType = 'toggle' | 'set'; function play(type: HandleType = 'set') { @@ -118,7 +130,7 @@ function skip(seconds: number, type: 'forward' | 'backward' = 'forward') { } export const audio = { - subscribe: __internal_audio_metadata.subscribe, + subscribe: state.subscribe, play, pause, mute, diff --git a/src/lib/helper/s-to-timestamp.ts b/src/lib/helper/s-to-timestamp.ts new file mode 100644 index 0000000..5bd152f --- /dev/null +++ b/src/lib/helper/s-to-timestamp.ts @@ -0,0 +1,18 @@ +function section(t: number) { + if (t < 10) return `0${t}`; + return t; +} + +export function secondsToTimestamp(seconds: number) { + const hh = Math.floor(seconds / 3600); + const hh_remainder = seconds % 3600; + const mm = Math.floor(hh_remainder / 60); + const mm_remainder = hh_remainder % 60; + const ss = Math.floor(mm_remainder); + + const hrs = hh > 0 ? `${section(hh)}:` : ''; + const mins = mm ? `${section(mm)}:` : '00:'; + const secs = ss ? `${section(ss)}` : '00'; + + return `${hrs}${mins}${secs}`; +}