Add oputil fb desc

This commit is contained in:
Bryan Ashby 2018-12-21 14:39:57 -07:00
parent f4088303ca
commit c6e176f5bd
5 changed files with 113 additions and 18 deletions

View file

@ -8,6 +8,12 @@ const fs = require('graceful-fs');
const iconv = require('iconv-lite');
const moment = require('moment');
// Descriptions found in the wild that mean "no description" /facepalm.
const IgnoredDescriptions = [
'No description available',
'No ID File Found For This Archive File.',
];
module.exports = class FilesBBSFile {
constructor() {
this.entries = new Map();
@ -34,6 +40,10 @@ module.exports = class FilesBBSFile {
const lines = iconv.decode(descData, 'cp437').split(/\r?\n/g);
const filesBbs = new FilesBBSFile();
const isBadDescription = (desc) => {
return IgnoredDescriptions.find(d => desc.startsWith(d)) ? true : false;
};
//
// Contrary to popular belief, there is not a FILES.BBS standard. Instead,
// many formats have been used over the years. We'll try to support as much
@ -84,7 +94,7 @@ module.exports = class FilesBBSFile {
const fileName = hdr[1];
const timestamp = moment(hdr[2], 'MM/DD/YY');
if(!timestamp.isValid()) {
if(isBadDescription(desc) || !timestamp.isValid()) {
continue;
}
filesBbs.entries.set(fileName, { timestamp, desc } );
@ -121,6 +131,10 @@ module.exports = class FilesBBSFile {
const desc = long.join('\r\n');
const fileName = hdr[1];
if(isBadDescription(desc)) {
continue;
}
filesBbs.entries.set(fileName, { desc } );
}
}
@ -157,6 +171,10 @@ module.exports = class FilesBBSFile {
const desc = long.join('\r\n');
const fileName = hdr[1];
if(isBadDescription(desc)) {
continue;
}
filesBbs.entries.set(fileName, { desc } );
}
}
@ -182,10 +200,6 @@ module.exports = class FilesBBSFile {
}
const firstDescLine = hdr[4].trimRight();
// ugly kludge:
if('No ID File Found For This Archive File.' === firstDescLine) {
continue;
}
const long = [ firstDescLine ];
for(let j = i + 1; j < lines.length; ++j) {
line = lines[j];
@ -201,7 +215,7 @@ module.exports = class FilesBBSFile {
const size = parseInt(hdr[2]);
const timestamp = moment(hdr[3], 'MM-DD-YY');
if(isNaN(size) || !timestamp.isValid()) {
if(isBadDescription(desc) || isNaN(size) || !timestamp.isValid()) {
continue;
}
@ -235,7 +249,7 @@ module.exports = class FilesBBSFile {
const fileName = hdr[1].trim();
const desc = hdr[2].trim();
if(desc) {
if(desc && !isBadDescription(desc)) {
filesBbs.entries.set(fileName, { desc } );
}
});