From c3b1e66646e2c00777b1fb7548d0315f5b34d797 Mon Sep 17 00:00:00 2001 From: Danielv123 Date: Wed, 1 Nov 2017 21:48:55 +0100 Subject: [PATCH] #59 Starting work on the mod manager --- client.js | 39 +++++++----- lib/modManager.js | 8 +++ lib/modManager/modManager.js | 30 ++++++++++ package-lock.json | 113 +++++++++++++++++++++++++++++++++++ package.json | 1 + 5 files changed, 175 insertions(+), 16 deletions(-) create mode 100644 lib/modManager.js create mode 100644 lib/modManager/modManager.js diff --git a/client.js b/client.js index e4adcdb5..bceb737e 100644 --- a/client.js +++ b/client.js @@ -1,21 +1,22 @@ -var fs = require('fs-extra'); -var https = require('follow-redirects').https; -var needle = require("needle"); -var child_process = require('child_process'); -var path = require('path'); -var syncRequest = require('sync-request'); -var request = require("request"); -var ncp = require('ncp').ncp; -var Rcon = require('simple-rcon'); -var hashFiles = require('hash-files'); -var _ = require('underscore'); -var deepmerge = require("deepmerge"); -var getMac = require('getmac').getMac; +const fs = require('fs-extra'); +const https = require('follow-redirects').https; +const needle = require("needle"); +const child_process = require('child_process'); +const path = require('path'); +const syncRequest = require('sync-request'); +const request = require("request"); +const ncp = require('ncp').ncp; +const Rcon = require('simple-rcon'); +const hashFiles = require('hash-files'); +const _ = require('underscore'); +const deepmerge = require("deepmerge"); +const getMac = require('getmac').getMac; // internal libraries -var objectOps = require("./lib/objectOps.js"); -var fileOps = require("./lib/fileOps.js"); -var stringUtils = require("./lib/stringUtils.js"); +const objectOps = require("./lib/objectOps.js"); +const fileOps = require("./lib/fileOps.js"); +const stringUtils = require("./lib/stringUtils.js"); +const modManager = require("./lib/modManager/modManager.js"); // require config.json var config = require('./config'); @@ -80,6 +81,12 @@ if (!command || command == "help" || command == "--help") { } else if (command == "list") { console.dir(fileOps.getDirectoriesSync("./instances/")); process.exit(1); +} else if (command == "modManager") { + console.log("Launching mod manager"); + + modManager.listMods(instance); + + // process.exit(1); } else if (command == "delete") { if (!process.argv[3]) { console.error("Usage: node client.js delete [instance]"); diff --git a/lib/modManager.js b/lib/modManager.js new file mode 100644 index 00000000..b17763fa --- /dev/null +++ b/lib/modManager.js @@ -0,0 +1,8 @@ +module.exports.findUpdates = function(){ + console.log("Downloading mods..."); + // get JSON data about releases + let res = syncRequest('GET', 'https://api.github.com/repos/Danielv123/factorioClusterioMod/releases', {"headers":{"User-Agent":"Fuck you for requiring user agents!"}}); + let url = JSON.parse(res.getBody())[0].assets[0].browser_download_url; + let name = JSON.parse(res.getBody())[0].assets[0].name; + console.log(JSON.parse(res.getBody())) +} \ No newline at end of file diff --git a/lib/modManager/modManager.js b/lib/modManager/modManager.js new file mode 100644 index 00000000..37cda42e --- /dev/null +++ b/lib/modManager/modManager.js @@ -0,0 +1,30 @@ +const factorioAPI = require("node-factorio-api"); +const fileOps = require("./../fileOps.js"); + +const instances = fileOps.getDirectoriesSync("./instances/"); + +module.exports.listMods = function(instance){ + if(instance && instances.includes(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', + require_ownership: false + }).then(token => { + console.log("authed") + factorioAPI.getModsFromSaves().then(list => { + console.log(list) + }); + }); + } else { + console.log(instance) + } + + // get JSON data about GH releases + /*let res = syncRequest('GET', 'https://api.github.com/repos/Danielv123/factorioClusterioMod/releases', {"headers":{"User-Agent":"Fuck you for requiring user agents!"}}); + let url = JSON.parse(res.getBody())[0].assets[0].browser_download_url; + let name = JSON.parse(res.getBody())[0].assets[0].name; + console.log(JSON.parse(res.getBody())) + */ +} diff --git a/package-lock.json b/package-lock.json index 537f0e26..0442f1b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -939,6 +939,11 @@ "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", "dev": true }, + "core-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1186,6 +1191,11 @@ } } }, + "es6-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1543,6 +1553,14 @@ "klaw": "1.3.1" } }, + "fs-jetpack": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-0.13.3.tgz", + "integrity": "sha1-nmxHEY8Ls9iAzIj5+KfSWGP0+xU=", + "requires": { + "minimatch": "3.0.4" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2171,6 +2189,46 @@ } } }, + "jszip": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.4.tgz", + "integrity": "sha512-z6w8iYIxZ/fcgul0j/OerkYnkomH8BZigvzbxVmr2h5HkZUrPtk2kjYtLkqR9wwQxEP6ecKNoKLsbhd18jfnGA==", + "requires": { + "core-js": "2.3.0", + "es6-promise": "3.0.2", + "lie": "3.1.1", + "pako": "1.0.6", + "readable-stream": "2.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "3.0.6" + } + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + } + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -2790,6 +2848,19 @@ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.1.1.tgz", "integrity": "sha512-6oxV13poCOv7TfGvhsSz6XZWpXeKkdGVh72++cs33OfMh3KAX8lN84dCvmqSETyDXAFcUHtV7eJrgFBoOqZbNQ==" }, + "node-factorio-api": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/node-factorio-api/-/node-factorio-api-0.1.27.tgz", + "integrity": "sha1-xvAoqzndPd8Anqhdhctsn2PSXlI=", + "requires": { + "fs-jetpack": "0.13.3", + "jszip": "3.1.4", + "request": "2.83.0", + "request-progress": "3.0.0", + "request-promise": "4.2.2", + "semver": "5.4.1" + } + }, "noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", @@ -3008,6 +3079,11 @@ "semver": "5.4.1" } }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -3345,6 +3421,33 @@ } } }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", + "requires": { + "throttleit": "1.0.0" + } + }, + "request-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz", + "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", + "requires": { + "bluebird": "3.5.1", + "request-promise-core": "1.1.1", + "stealthy-require": "1.1.1", + "tough-cookie": "2.3.3" + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "requires": { + "lodash": "4.17.4" + } + }, "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", @@ -3601,6 +3704,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, "streamifier": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", @@ -3879,6 +3987,11 @@ } } }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=" + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", diff --git a/package.json b/package.json index 7bdfa4c3..53f6c72b 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "ncp": "^2.0.0", "nedb": "^1.8.0", "needle": "^1.1.0", + "node-factorio-api": "^0.1.27", "portfinder": "^1.0.9", "request": "^2.83.0", "semver": "^5.4.1",