56 lines
1.6 KiB
JavaScript

import 'dotenv/config';
import { getDb } from '../lib/database.js';
import { create } from 'xmlbuilder2';
import fs from 'fs/promises';
import log4js from '../lib/logger.js';
const logger = log4js.getLogger('nzb');
async function createNzb(fileId) {
const db = await getDb();
const file = await db.get('SELECT * FROM files WHERE id = ?', fileId);
if (!file) {
logger.error(`File with ID ${fileId} not found.`);
return;
}
logger.info(`Creating NZB for file: ${file.filename}`);
const messageIds = JSON.parse(file.message_ids);
const root = create({ version: '1.0', encoding: 'UTF-8' })
.dtd({ pubID: '-//newzBin//DTD NZB 1.1//EN', sysID: 'http://www.newzbin.com/DTD/nzb/nzb-1.1.dtd' })
.ele('nzb', { xmlns: 'http://www.newzbin.com/DTD/2003/nzb' });
const nzbFile = root.ele('file', {
poster: file.poster,
date: file.date,
subject: file.filename,
});
const groups = nzbFile.ele('groups');
// This should be dynamic in a real application
groups.ele('group').txt('alt.binaries.test');
const segments = nzbFile.ele('segments');
for (let i = 1; i <= file.parts; i++) {
const segment = messageIds[i];
segments.ele('segment', { 'bytes': segment.size.toString(), 'number': i.toString() }).txt(segment.id);
}
const xml = root.end({ prettyPrint: true });
const nzbFilename = `${file.filename}.nzb`;
await fs.writeFile(nzbFilename, xml);
logger.info(`NZB file created: ${nzbFilename}`);
}
const fileId = parseInt(process.argv[2], 10);
if (isNaN(fileId)) {
logger.error('Please provide a valid file ID as a command-line argument.');
process.exit(1);
}
createNzb(fileId);