2026-04-23 08:37:48 +02:00
|
|
|
// Port of cron.sh + tmdbintegral/tmdbintegral.sh
|
|
|
|
|
//
|
|
|
|
|
// Pipeline:
|
|
|
|
|
// 1. Refresh imdbratings.tsv
|
|
|
|
|
// 2. Download daily TMDb exports (movie.json, tv.json)
|
|
|
|
|
// 3. In parallel: tmdbSync(movie+tv), justwatchSync(movie+tv)
|
|
|
|
|
// 4. In parallel: tmdb2imdb(movie+tv), buildSearch(movie+tv)
|
|
|
|
|
// 5. In parallel: ambiguity(movie+tv)
|
|
|
|
|
//
|
|
|
|
|
// Writes cron.txt at start/end (mirrors cron.sh).
|
|
|
|
|
|
Phase 1: lock cron, reload chaud, argon2, providers, IMDb lookup, cache LRU, /health, /metrics, rate limit, UI dark, biome
2026-04-24 07:35:10 +02:00
|
|
|
import { appendFileSync, writeFileSync } from 'node:fs';
|
|
|
|
|
import { join } from 'node:path';
|
|
|
|
|
import { CRON_TXT, ROOT } from '../config.js';
|
|
|
|
|
import { acquireLock } from '../lib/lockFile.js';
|
|
|
|
|
import { buildAmbiguity } from './ambiguity.js';
|
|
|
|
|
import { buildSearch } from './buildSearch.js';
|
2026-04-23 08:37:48 +02:00
|
|
|
import { syncImdbRatings } from './imdbRatings.js';
|
|
|
|
|
import { syncType as syncJustwatch } from './justwatchSync.js';
|
|
|
|
|
import { buildMapping } from './tmdb2imdb.js';
|
Phase 1: lock cron, reload chaud, argon2, providers, IMDb lookup, cache LRU, /health, /metrics, rate limit, UI dark, biome
2026-04-24 07:35:10 +02:00
|
|
|
import { syncExports } from './tmdbExports.js';
|
|
|
|
|
import { syncType as syncTmdb } from './tmdbSync.js';
|
|
|
|
|
|
|
|
|
|
const LOCK_PATH = join(ROOT, '.cron.lock');
|
2026-04-23 08:37:48 +02:00
|
|
|
|
|
|
|
|
function dateStamp() {
|
|
|
|
|
return new Date().toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function runAll() {
|
Phase 1: lock cron, reload chaud, argon2, providers, IMDb lookup, cache LRU, /health, /metrics, rate limit, UI dark, biome
2026-04-24 07:35:10 +02:00
|
|
|
acquireLock(LOCK_PATH);
|
2026-04-23 08:37:48 +02:00
|
|
|
writeFileSync(CRON_TXT, `Started At ${dateStamp()}\n`);
|
|
|
|
|
|
|
|
|
|
await syncImdbRatings();
|
|
|
|
|
await syncExports();
|
|
|
|
|
|
Phase 1: lock cron, reload chaud, argon2, providers, IMDb lookup, cache LRU, /health, /metrics, rate limit, UI dark, biome
2026-04-24 07:35:10 +02:00
|
|
|
await Promise.all([syncTmdb('movie'), syncTmdb('tv'), syncJustwatch('movie'), syncJustwatch('tv')]);
|
|
|
|
|
|
|
|
|
|
await Promise.all([buildMapping('movie'), buildMapping('tv'), buildSearch('movie'), buildSearch('tv')]);
|
|
|
|
|
|
|
|
|
|
await Promise.all([buildAmbiguity('movie'), buildAmbiguity('tv')]);
|
2026-04-23 08:37:48 +02:00
|
|
|
|
|
|
|
|
appendFileSync(CRON_TXT, `Finished At ${dateStamp()}\n`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
|
|
|
runAll().catch((err) => {
|
|
|
|
|
console.error(err);
|
|
|
|
|
process.exit(1);
|
|
|
|
|
});
|
|
|
|
|
}
|