// 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). 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'; import { syncImdbRatings } from './imdbRatings.js'; import { syncType as syncJustwatch } from './justwatchSync.js'; import { buildMapping } from './tmdb2imdb.js'; import { syncExports } from './tmdbExports.js'; import { syncType as syncTmdb } from './tmdbSync.js'; const LOCK_PATH = join(ROOT, '.cron.lock'); function dateStamp() { return new Date().toString(); } export async function runAll() { acquireLock(LOCK_PATH); writeFileSync(CRON_TXT, `Started At ${dateStamp()}\n`); await syncImdbRatings(); await syncExports(); 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')]); appendFileSync(CRON_TXT, `Finished At ${dateStamp()}\n`); } if (import.meta.url === `file://${process.argv[1]}`) { runAll().catch((err) => { console.error(err); process.exit(1); }); }