This is the template project that's checked out and configured when you run the bando-up command from ljsthw-bandolier. This is where the code really lives.
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.
 
 
 
 
bandolier-template/commands/livestreams.js

45 lines
1.5 KiB

import { Livestream } from "../lib/models.js";
import { knex } from "../lib/ormish.js";
import assert from "assert";
import { glob } from "../lib/builderator.js";
import { video_meta, upsert_media } from "./media.js";
export const description = "Process Livestreams from the database and load the media.";
const load_livestreams = async () => {
const media_files = glob("./media/videos/livestreams/*.mp4");
const id_match = /.*Livestream_([0-9][0-9]).*/
for(let fname of media_files) {
const video = await video_meta({src: fname.slice(1)});
const stream_id = fname.match(id_match)[1];
assert(stream_id, `File ${fname} does not have a Livestream_ID format.`);
// use the episode number since ID could not represent the sequence
const stream = await Livestream.first({episode: stream_id});
if(stream === undefined) {
console.error(`SKIP! File ${fname} does not have a Livestream with ID ${stream_id}`);
} else {
console.log("MEDIA", fname, "STREAM ID", stream.id, stream.title);
// normally this works with .md files so fix it up
video.title = stream.title;
const media = await upsert_media(video, stream.description);
assert(media !== undefined, `Failed to upsert media for ${fname}.`);
await Livestream.update({id: stream.id}, {
media_id: media.id,
state: "archived",
poster: media.poster
});
}
}
}
export const main = async () => {
await load_livestreams();
knex.destroy();
}