You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.6 KiB
60 lines
1.6 KiB
/*
|
|
Mostly just code used in the `client/pages/Live.svelte` and `client/pages/LiveIndex.svelte`
|
|
to list and report the available livestreams. It does some caching and normalizes how the
|
|
streams are loaded.
|
|
*/
|
|
import api from "$/client/api.js";
|
|
import { user } from "$/client/stores.js";
|
|
import { get as get_store} from "svelte/store";
|
|
|
|
let livestreams = {};
|
|
|
|
/* Reset the cache. */
|
|
export const reset_cache = () => livestreams = {};
|
|
|
|
/* Load the available streams and cache them. */
|
|
export const load_past_streams = async () => {
|
|
if(!livestreams.index) {
|
|
const [status, data] = await api.get("/api/livestream");
|
|
|
|
if(status === 200) {
|
|
livestreams.index = data.sort((a, b) => b.id - a.id);
|
|
} else {
|
|
console.error("Invalid response", status, data);
|
|
}
|
|
}
|
|
|
|
return livestreams.index;
|
|
}
|
|
|
|
/*
|
|
Load a specific stream, with `cached` set to false it will bypass
|
|
the cache when loading it.
|
|
*/
|
|
export const load_stream = async (livestream_id, cached=true) => {
|
|
if(!cached || !livestreams[livestream_id]) {
|
|
const [status, data] = await api.get("/api/livestream", {livestream_id});
|
|
|
|
if(status === 200) {
|
|
livestreams[livestream_id] = data;
|
|
} else {
|
|
console.error("Invalid response", status, data);
|
|
}
|
|
}
|
|
|
|
return livestreams[livestream_id];
|
|
}
|
|
|
|
/*
|
|
Changes the state of the given stream, which is an administrator only
|
|
operation that moves it through the visual states.
|
|
*/
|
|
export const change_stream = async (livestream_id) => {
|
|
if(get_store(user).admin) {
|
|
const [status, data] = await api.post("/api/livestream", { livestream_id});
|
|
|
|
return status;
|
|
} else {
|
|
return 401;
|
|
}
|
|
}
|
|
|