56 lines
1.6 KiB
JavaScript
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);
|