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.
54 lines
1.3 KiB
54 lines
1.3 KiB
2 years ago
|
import fetch from "node-fetch";
|
||
|
import assert from "assert";
|
||
|
import slugify from "slugify";
|
||
|
const base_host = "http://localhost:5001";
|
||
|
|
||
|
export const get = async (url) => {
|
||
|
assert(url && url[0] === "/", `url must start with / you have ${url}`);
|
||
|
|
||
|
const target = `${base_host}${url}`;
|
||
|
const res = await fetch(target);
|
||
|
|
||
|
if(res.status === 200) {
|
||
|
return await res.json();
|
||
|
} else {
|
||
|
console.error(`!!! ERROR: Failed getting ${target}`, res.status, await res.text());
|
||
|
return [];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export const listing = async () => {
|
||
|
const listing = await get("/api/livestream");
|
||
|
return listing.sort((a,b) => b.id - a.id);
|
||
|
}
|
||
|
|
||
|
export const slug = (stream, with_id=true) => {
|
||
|
if(with_id) {
|
||
|
return slugify(`${stream.id}-${stream.title}`, { lower: true, strict: true, trim: true});
|
||
|
} else {
|
||
|
return slugify(`${stream.title}`, { lower: true, strict: true, trim: true});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export const stream = async (id) => {
|
||
|
const stream = await get(`/api/livestream?livestream_id=${id}`);
|
||
|
stream.slug = slug(stream);
|
||
|
return stream;
|
||
|
}
|
||
|
|
||
|
export const load_paths = async() => {
|
||
|
const streams = await listing();
|
||
|
const result = [];
|
||
|
|
||
|
for(let i of streams) {
|
||
|
// stream.slug is setup in rendered/pages/live/index.js
|
||
|
result.push(await stream(i.id));
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
export default {
|
||
|
listing, stream, load_paths, get, slug
|
||
|
}
|