diff --git a/CHANGELOG b/CHANGELOG index 92ba846..dd7e645 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,11 @@ # CHANGELOG +## 7.0.1 ## current +- Fixed bugs and typos for export. + +## 7.0.0 +- Export functions added for logs and data. + ## 6.0.2 - Games directories are always set by update-conf. - Updated to newer version of commander. diff --git a/bin/nodegame b/bin/nodegame index ccbef0f..2e7101c 100755 --- a/bin/nodegame +++ b/bin/nodegame @@ -197,7 +197,7 @@ program .command('export-data ') .description('Exports data from a game.') // Input/Output - .option(' --games-dir ', 'log directory (default log)') + .option(' --games-dir ', 'games directory (default games/)') .option(' --export-dir ', 'export directory (default export)') .option(' --create-export-sub-dir', 'create sub-directory inside export directory') .option('-r, --recursive', 'recursively search for files') @@ -214,6 +214,8 @@ program .option(' --rooms ', 'room/s to export') .option(' --from-room ', 'export from room (included)') .option(' --to-room ', 'export up to room (included)') + // Process. + .option(' --on-insert ', 'path to file exporting a function to modify items') // CSV .option(' --out-csv-flatten [group]', 'merges all items [by group] before export') .option(' --out-csv-header
', 'header for export csv files (comma separeted values)') @@ -237,7 +239,7 @@ program .command('export-logs') .description('Exports logs from nodeGame server') // Input/Output - .option(' --games-dir ', 'log directory (default log)') + .option(' --log-dir ', 'log directory (default log/)') .option(' --export-dir ', 'export directory (default export)') .option(' --create-export-sub-dir', 'create sub-directory inside export directory') .option('-r, --recursive', 'recursively search for files') @@ -351,16 +353,51 @@ const processExportOptions = opts => { delete opts.msgType; } - if (opts.files) opts.files = opts.files.split(','); + if ('string' === typeof opts.files) opts.files = opts.files.split(','); if (opts.filesAdd) opts.filesAdd = opts.filesAdd.split(','); - if (opts.outCsvHeader) opts.outCsvHeader = opts.outCsvHeader.split(','); + if ('string' === typeof opts.outCsvHeader) { + opts.outCsvHeader = opts.outCsvHeader.split(','); + } if (opts.outCsvNoHeader) opts.outCsvHeader = false; - if (opts.inCsvHeader) opts.inCsvHeader = opts.inCsvHeader.split(','); + if ('string' === typeof opts.inCsvHeader) { + opts.inCsvHeader = opts.inCsvHeader.split(','); + } if (opts.inCsvNoHeader) opts.inCsvHeader = false; - if (opts.outCSvObjLevel) opts.outCSvObjLevel = J.isInt(opts.outCSvObjLevel); + if (opts.outCsvObjLevel) opts.outCsvObjLevel = J.isInt(opts.outCsvObjLevel); + + if (opts.outCsvFlatten) { + if ('string' === typeof opts.outCsvFlatten) { + opts.outCsvFlattenByGroup = opts.outCsvFlatten; + opts.outCsvFlatten = true; + } + } + + if (opts.onInsert) { + let p = opts.onInsert; + // console.log(p); + if (!path.isAbsolute(p) && !p.substring(0,2) === "./") { + p = "./" + p; + } + + try { + p = require(p); + if ('function' !== typeof p) { + console.log('Error: on-insert did not return a function'); + opts.onInsert = null; + } + else { + opts.onInsert = p; + } + } + catch(e) { + if (opts.verbose) console.log(e); + console.log('Error: could not load on-insert function'); + opts.onInsert = null; + } + } }; /** @@ -825,6 +862,9 @@ function createGameDir(template, gameName, outDir, fs.copySync(ngt.resolve(path.join('public', 'favicon.ico')), path.resolve(outDir, 'public', 'favicon.ico')); + fs.copySync(ngt.resolve(path.join('public', '404.htm')), + path.resolve(outDir, 'public', '404.htm')); + mkdir(path.resolve(outDir, 'public', 'js'), function() { write(path.resolve(outDir, 'public', 'js', 'index.js'), indexJS); diff --git a/lib/export.js b/lib/export.js index 80e5b57..08b4989 100644 --- a/lib/export.js +++ b/lib/export.js @@ -186,7 +186,7 @@ const setDefaults = (LOGS, serverConf, opts, game) => { opts.verbose = opts.verbose ?? true; - opts.inCsvHeader = opts.inCsvHeader ?? 'all'; + opts.inCsvHeader = opts.inCsvHeader ?? true; opts.inCsvFlatten = !!opts.inCsvFlatten; opts.ouCsvtHeader = opts.outCsvHeader ?? 'all'; @@ -233,15 +233,19 @@ const setDefaults = (LOGS, serverConf, opts, game) => { if (opts.fromRoom || opts.toRoom || opts.rooms.length) { + // console.log(opts.fromRoom, opts.toRoom, opts.rooms); + opts.dirFilter = (dir) => { // Filter room number. let roomNum = dir.split('room')[1]; roomNum = J.isInt(roomNum); // Skip directories not like rooom0000X. if (!roomNum) return false; - if (fromRoom && roomNum < fromRoom) return false; - if (toRoom && roomNum > toRoom) return false; - if (opts.rooms && !~rooms.indexOf(roomNum)) return false; + if (opts.fromRoom && (roomNum < opts.fromRoom)) return false; + if (opts.toRoom && (roomNum > opts.toRoom)) return false; + if (opts.rooms.length && !~opts.rooms.indexOf(roomNum)) { + return false; + } return true; }; } diff --git a/package.json b/package.json index b9541a5..4ee012d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegame-generator", "description": "NodeGame' game generator", - "version": "6.0.2", + "version": "7.0.0", "author": "Stefano Balietti ", "keywords": [ "nodegame",