Compare commits
2 commits
e9b50164a2
...
b0738d9710
Author | SHA1 | Date | |
---|---|---|---|
b0738d9710 | |||
99d855c4d4 |
1 changed files with 8 additions and 5 deletions
13
index.ts
13
index.ts
|
@ -60,6 +60,7 @@ async function processSnapshots(
|
||||||
videos: VideoInfo[],
|
videos: VideoInfo[],
|
||||||
snapshotsDir: string,
|
snapshotsDir: string,
|
||||||
count: number,
|
count: number,
|
||||||
|
sizeLimit: number,
|
||||||
) {
|
) {
|
||||||
const totalDuration = videos.reduce((acc, video) => acc + video.duration, 0);
|
const totalDuration = videos.reduce((acc, video) => acc + video.duration, 0);
|
||||||
const currentHour = new Date().getHours();
|
const currentHour = new Date().getHours();
|
||||||
|
@ -91,7 +92,7 @@ async function processSnapshots(
|
||||||
|
|
||||||
const stats = await stat(snapshotPath);
|
const stats = await stat(snapshotPath);
|
||||||
size = stats.size;
|
size = stats.size;
|
||||||
if (size < 5 * 1024) {
|
if (size < sizeLimit) {
|
||||||
logger.info(
|
logger.info(
|
||||||
`Snapshot ${
|
`Snapshot ${
|
||||||
i + 1
|
i + 1
|
||||||
|
@ -108,6 +109,7 @@ async function setupSnapshotServer(
|
||||||
videoPaths: string[],
|
videoPaths: string[],
|
||||||
snapshotsDir: string,
|
snapshotsDir: string,
|
||||||
count: number,
|
count: number,
|
||||||
|
sizeLimit: number,
|
||||||
) {
|
) {
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
|
@ -116,10 +118,10 @@ async function setupSnapshotServer(
|
||||||
const videos = await getVideoInfo(videoPaths);
|
const videos = await getVideoInfo(videoPaths);
|
||||||
|
|
||||||
// noinspection ES6MissingAwait
|
// noinspection ES6MissingAwait
|
||||||
processSnapshots(videos, snapshotsDir, count);
|
processSnapshots(videos, snapshotsDir, count, sizeLimit);
|
||||||
|
|
||||||
schedule.scheduleJob("0 * * * *", () =>
|
schedule.scheduleJob("0 * * * *", () =>
|
||||||
processSnapshots(videos, snapshotsDir, count),
|
processSnapshots(videos, snapshotsDir, count, sizeLimit),
|
||||||
);
|
);
|
||||||
|
|
||||||
app.get("/:magic?", async (req, res) => {
|
app.get("/:magic?", async (req, res) => {
|
||||||
|
@ -136,11 +138,10 @@ async function setupSnapshotServer(
|
||||||
if (magic) {
|
if (magic) {
|
||||||
const hash = createHash("md5").update(magic).digest("hex");
|
const hash = createHash("md5").update(magic).digest("hex");
|
||||||
const index = parseInt(hash.substring(0, 8), 16) % files.length;
|
const index = parseInt(hash.substring(0, 8), 16) % files.length;
|
||||||
// Cache until the next hour rolls over
|
|
||||||
res.sendFile(files[index], {
|
res.sendFile(files[index], {
|
||||||
headers: {
|
headers: {
|
||||||
"Cache-Control": `public, max-age=${
|
"Cache-Control": `public, max-age=${
|
||||||
3600 - new Date().getMinutes() * 60
|
3600 - new Date().getMinutes() * 60 - new Date().getSeconds()
|
||||||
}`,
|
}`,
|
||||||
},
|
},
|
||||||
root: currentDir,
|
root: currentDir,
|
||||||
|
@ -172,11 +173,13 @@ program
|
||||||
.argument("<paths...>", "Video file paths")
|
.argument("<paths...>", "Video file paths")
|
||||||
.option("-d, --directory <dir>", "Directory to store snapshots", "snapshots")
|
.option("-d, --directory <dir>", "Directory to store snapshots", "snapshots")
|
||||||
.option("-c, --count <count>", "Number of snapshots to take per hour", "32")
|
.option("-c, --count <count>", "Number of snapshots to take per hour", "32")
|
||||||
|
.option("--size-limit <size>", "Size limit for snapshots in KiB", "7")
|
||||||
.action(async (videoPaths: string[], options) => {
|
.action(async (videoPaths: string[], options) => {
|
||||||
await setupSnapshotServer(
|
await setupSnapshotServer(
|
||||||
videoPaths,
|
videoPaths,
|
||||||
options.directory,
|
options.directory,
|
||||||
parseInt(options.count, 10),
|
parseInt(options.count, 10),
|
||||||
|
parseInt(options.sizeLimit, 10) * 1024,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue