From 2fd47434bb84167f914723670d328d9ad2000b81 Mon Sep 17 00:00:00 2001 From: Danielv123 Date: Mon, 6 Nov 2017 21:12:25 +0100 Subject: [PATCH] Added search functionality to mod manager #59 --- client.js | 38 +++++++++++++++++++++++++----- lib/manager/configManager.js | 0 lib/manager/configManager.spec.js | 0 lib/manager/modManager.js | 39 ++++++++++++++++++++++++++----- package-lock.json | 5 ++++ package.json | 1 + 6 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 lib/manager/configManager.js create mode 100644 lib/manager/configManager.spec.js diff --git a/client.js b/client.js index 4b195905..7b6bf66b 100644 --- a/client.js +++ b/client.js @@ -17,6 +17,7 @@ const objectOps = require("./lib/objectOps.js"); const fileOps = require("./lib/fileOps.js"); const stringUtils = require("./lib/stringUtils.js"); const modManager = require("./lib/manager/modManager.js"); +const configManager = require("./lib/manager/configManager.js"); // require config.json var config = require('./config'); @@ -124,12 +125,37 @@ if (!command || command == "help" || command == "--help") { process.exit(1); } else if (command == "manage"){ // console.log("Launching mod manager"); - const action = process.argv[4]; - if(instance && action && action == "list"){ - modManager.listMods(instance); + //const fullUsage = 'node client.js manage [instance, "shared"] ["mods", "config"] ...'; + function usage(instance, tool){ + return 'node client.js manage '+(instance || '[instance, "shared"]') +' '+ (tool || '["mods", "config"]') + ' ...'; + } + const modManagerUsage1 = 'node client.js manage '; + const modManagerUsage2 = ' mods ["list", "update"]'; + const tool = process.argv[4] || ""; + const action = process.argv[5] || ""; + if(instance){ + if(tool == "mods"){ + if(action == "list"){ + modManager.listMods(instance); + } else if(action == "search"){ + modManager.findMods(process.argv[6]); + } else { + console.log(modManagerUsage1 + instance + modManagerUsage2); + } + } else if(tool == "config"){ + if(action == "list" || action == "show" || action == "display"){ + configManager.displayConfig(instance); + } else if(action == "edit"){ + + } else { + console.log() + } + } else { + console.log(usage(instance)); + } } else { console.log('Usage:'); - console.log('node client.js manage [instance, "shared"] ["list"]'); + console.log(usage(instance)); } // process.exit(1); } else if (command == "delete") { @@ -152,8 +178,8 @@ if (!command || command == "help" || command == "--help") { let name = JSON.parse(res.getBody())[0].assets[0].name; if(url) { console.log(url); - var file = fs.createWriteStream("sharedMods/"+name); - var req = https.get(url, function(response) { + let file = fs.createWriteStream("sharedMods/"+name); + https.get(url, function(response) { response.pipe(file); console.log("Downloaded "+name); }); diff --git a/lib/manager/configManager.js b/lib/manager/configManager.js new file mode 100644 index 00000000..e69de29b diff --git a/lib/manager/configManager.spec.js b/lib/manager/configManager.spec.js new file mode 100644 index 00000000..e69de29b diff --git a/lib/manager/modManager.js b/lib/manager/modManager.js index 7f23d490..57ba5e2c 100644 --- a/lib/manager/modManager.js +++ b/lib/manager/modManager.js @@ -1,8 +1,10 @@ const rightpad = require("right-pad"); const asTable = require("as-table").configure({delimiter: ' | '}); +const moment = require("moment"); const factorioAPI = require("node-factorio-api"); const fileOps = require("./../fileOps.js"); +const config = require("./../../config"); const instances = fileOps.getDirectoriesSync("./instances/"); @@ -11,8 +13,8 @@ module.exports.listMods = function(instance){ factorioAPI.init(false, 'instances/'+instance+'/mods', 'instances/'+instance+'/saves', '0.15.37'); console.log("Authenticating to factorio.com...") factorioAPI.authenticate({ - username: 'Danielv123', - token: '53faebce0a608b1195f01dcfd95ee1', + username: config.username, + token: config.token, require_ownership: false }).then(token => { console.log("Currently installed:"); @@ -40,8 +42,8 @@ module.exports.listMods = function(instance){ factorioAPI.init(false, 'sharedMods/', '', '0.15.37'); console.log("Authenticating to factorio.com...") factorioAPI.authenticate({ - username: 'Danielv123', - token: '53faebce0a608b1195f01dcfd95ee1', + username: config.username, + token: config.token, require_ownership: false }).then(() => { factorioAPI.getInstalledMods().then(mods => { @@ -57,6 +59,31 @@ module.exports.listMods = function(instance){ console.log(JSON.parse(res.getBody())) */ } +module.exports.findMods = function(searchTerm){ + factorioAPI.init(false); + console.log("Authenticating to factorio.com...") + factorioAPI.authenticate({ + username: config.username, + token: config.token, + require_ownership: false + }).then(token => { + factorioAPI.searchMods( + {q: searchTerm, order: 'top', page_size: 20} + ).then(body => { + let mods = body.results; + console.log(asTable(mods.map(mod => { + return { + title:mod.title, + name:mod.name, + downloads:mod.downloads_count, + updated: moment(mod.updated_at).format("DD.MM.YY"), + owner:mod.owner, + //license: mod.license_name, + } + }))) + }) + }); +} // 'https://api.github.com/repos/Danielv123/factorioClusterioMod/releases' module.exports.downloadFromGitURL = function(url){ @@ -68,8 +95,8 @@ module.exports.downloadFromGitURL = function(url){ console.log(JSON.parse(res.getBody())) if(downloadUrl) { console.log(downloadUrl); - var file = fs.createWriteStream("sharedMods/"+name); - var request = https.get(downloadUrl, function(response) { + let file = fs.createWriteStream("sharedMods/"+name); + https.get(downloadUrl, function(response) { response.pipe(file); console.log("Downloaded "+name); }); diff --git a/package-lock.json b/package-lock.json index d808804f..9e8b50f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2770,6 +2770,11 @@ "integrity": "sha512-dF+yxZSojSiI8AXGoxj5qdFWpucndc54Ug+TwlpHFaV7j22MGG+OML2+FVa6xAZtjb/OFFQhOC37Jegx2GbEwA==", "dev": true }, + "moment": { + "version": "2.19.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz", + "integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc=" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", diff --git a/package.json b/package.json index 04fd01d2..e092771d 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "linvodb3": "^3.25.0", "luamin": "^1.0.4", "mkdirp": "^0.5.1", + "moment": "^2.19.1", "ncp": "^2.0.0", "nedb": "^1.8.0", "needle": "^1.1.0",