minor: heavily simplify server and app content. unify styling (#4)
All checks were successful
ci/woodpecker/push/push Pipeline was successful
All checks were successful
ci/woodpecker/push/push Pipeline was successful
Co-authored-by: Madison Grubb <madison@elastiflow.com> Reviewed-on: #4
This commit was merged in pull request #4.
This commit is contained in:
@@ -1,24 +1,12 @@
|
||||
/**
|
||||
* Fetches active live sessions (camera + location sharing) and refreshes on an interval.
|
||||
* Only runs when the app is focused so we don't poll in the background.
|
||||
*/
|
||||
|
||||
/** Fetches live sessions; polls when tab visible. */
|
||||
const POLL_MS = 1500
|
||||
|
||||
export function useLiveSessions() {
|
||||
const { data: sessions, refresh } = useAsyncData(
|
||||
const { data: _sessions, refresh } = useAsyncData(
|
||||
'live-sessions',
|
||||
async () => {
|
||||
try {
|
||||
const result = await $fetch('/api/live')
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
console.log('[useLiveSessions] Fetched sessions:', result.map(s => ({
|
||||
id: s.id,
|
||||
label: s.label,
|
||||
hasStream: s.hasStream,
|
||||
})))
|
||||
}
|
||||
return result
|
||||
return await $fetch('/api/live')
|
||||
}
|
||||
catch (err) {
|
||||
const msg = err?.message ?? String(err)
|
||||
@@ -30,14 +18,13 @@ export function useLiveSessions() {
|
||||
{ default: () => [] },
|
||||
)
|
||||
|
||||
const sessions = computed(() => Object.freeze([...(_sessions.value ?? [])]))
|
||||
const pollInterval = ref(null)
|
||||
|
||||
function startPolling() {
|
||||
if (pollInterval.value) return
|
||||
refresh() // Fetch immediately so new sessions show without waiting for first interval
|
||||
pollInterval.value = setInterval(() => {
|
||||
refresh()
|
||||
}, POLL_MS)
|
||||
refresh()
|
||||
pollInterval.value = setInterval(refresh, POLL_MS)
|
||||
}
|
||||
|
||||
function stopPolling() {
|
||||
@@ -49,21 +36,12 @@ export function useLiveSessions() {
|
||||
|
||||
onMounted(() => {
|
||||
if (typeof document === 'undefined') return
|
||||
const onFocus = () => startPolling()
|
||||
const onBlur = () => stopPolling()
|
||||
document.addEventListener('visibilitychange', () => {
|
||||
if (document.visibilityState === 'visible') {
|
||||
onFocus()
|
||||
refresh() // Fresh data when returning to tab
|
||||
}
|
||||
else onBlur()
|
||||
document.visibilityState === 'visible' ? (startPolling(), refresh()) : stopPolling()
|
||||
})
|
||||
if (document.visibilityState === 'visible') startPolling()
|
||||
})
|
||||
onBeforeUnmount(stopPolling)
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
stopPolling()
|
||||
})
|
||||
|
||||
return { sessions, refresh, startPolling, stopPolling }
|
||||
return Object.freeze({ sessions, refresh, startPolling, stopPolling })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user