mirror of
https://github.com/artegoser/pimi-launcher-core.git
synced 2024-11-06 05:33:58 +03:00
Checksum, fix random version file request, removed node-fetch
This commit is contained in:
parent
50cc5678fc
commit
c0cf0aee01
3 changed files with 41 additions and 11 deletions
|
@ -2,6 +2,7 @@ const fs = require('fs');
|
||||||
const shelljs = require('shelljs');
|
const shelljs = require('shelljs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const request = require('request');
|
const request = require('request');
|
||||||
|
const checksum = require('checksum');
|
||||||
const zip = require('adm-zip');
|
const zip = require('adm-zip');
|
||||||
const event = require('./events');
|
const event = require('./events');
|
||||||
|
|
||||||
|
@ -56,9 +57,18 @@ function downloadAsync (url, directory, name) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkSum(hash, file, size) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
checksum.file(file, (err, sum) => resolve(hash === sum));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
module.exports.getVersion = function (version, directory) {
|
module.exports.getVersion = function (version, directory) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
if(fs.existsSync(path.join(directory, `${version}.json`))) resolve(require(path.join(directory, `${version}.json`)));
|
if(fs.existsSync(path.join(directory, `${version}.json`))) {
|
||||||
|
resolve(require(path.join(directory, `${version}.json`)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const manifest = "https://launchermeta.mojang.com/mc/game/version_manifest.json";
|
const manifest = "https://launchermeta.mojang.com/mc/game/version_manifest.json";
|
||||||
request.get(manifest, function(error, response, body) {
|
request.get(manifest, function(error, response, body) {
|
||||||
|
@ -108,7 +118,7 @@ module.exports.getAssets = function (directory, version) {
|
||||||
const subhash = hash.substring(0,2);
|
const subhash = hash.substring(0,2);
|
||||||
const assetDirectory = path.join(directory, 'assets', 'objects', subhash);
|
const assetDirectory = path.join(directory, 'assets', 'objects', subhash);
|
||||||
|
|
||||||
if(!fs.existsSync(path.join(assetDirectory, hash))) {
|
if(!fs.existsSync(path.join(assetDirectory, hash)) || !await checkSum(hash, path.join(assetDirectory, hash))) {
|
||||||
const download = await downloadAsync(`${assetsUrl}/${subhash}/${hash}`, assetDirectory, hash);
|
const download = await downloadAsync(`${assetsUrl}/${subhash}/${hash}`, assetDirectory, hash);
|
||||||
|
|
||||||
if(download.failed) failed.push(download.asset);
|
if(download.failed) failed.push(download.asset);
|
||||||
|
@ -164,6 +174,9 @@ module.exports.getNatives = function (root, version, os) {
|
||||||
if (native) {
|
if (native) {
|
||||||
const name = native.path.split('/').pop();
|
const name = native.path.split('/').pop();
|
||||||
await downloadAsync(native.url, nativeDirectory, name);
|
await downloadAsync(native.url, nativeDirectory, name);
|
||||||
|
if(!await checkSum(native.sha1, path.join(nativeDirectory, name))) {
|
||||||
|
await downloadAsync(native.url, nativeDirectory, name);
|
||||||
|
}
|
||||||
try {new zip(path.join(nativeDirectory, name)).extractAllTo(nativeDirectory, true);} catch(e) {
|
try {new zip(path.join(nativeDirectory, name)).extractAllTo(nativeDirectory, true);} catch(e) {
|
||||||
// Only doing a console.warn since a stupid error happens. You can basically ignore this.
|
// Only doing a console.warn since a stupid error happens. You can basically ignore this.
|
||||||
// if it says Invalid file name, just means two files were downloaded and both were deleted.
|
// if it says Invalid file name, just means two files were downloaded and both were deleted.
|
||||||
|
@ -248,9 +261,10 @@ module.exports.getClasses = function (options, version) {
|
||||||
|
|
||||||
const libraryPath = _lib.downloads.artifact.path;
|
const libraryPath = _lib.downloads.artifact.path;
|
||||||
const libraryUrl = _lib.downloads.artifact.url;
|
const libraryUrl = _lib.downloads.artifact.url;
|
||||||
|
const libraryHash = _lib.downloads.artifact.sha1;
|
||||||
const libraryDirectory = path.join(options.root, 'libraries', libraryPath);
|
const libraryDirectory = path.join(options.root, 'libraries', libraryPath);
|
||||||
|
|
||||||
if(!fs.existsSync(libraryDirectory)) {
|
if(!fs.existsSync(libraryDirectory) || !await checkSum(libraryHash, libraryDirectory)) {
|
||||||
let directory = libraryDirectory.split(path.sep);
|
let directory = libraryDirectory.split(path.sep);
|
||||||
const name = directory.pop();
|
const name = directory.pop();
|
||||||
directory = directory.join(path.sep);
|
directory = directory.join(path.sep);
|
||||||
|
|
28
package-lock.json
generated
28
package-lock.json
generated
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "minecraft-launcher-core",
|
"name": "minecraft-launcher-core",
|
||||||
"version": "2.5.6",
|
"version": "2.7.0",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -76,6 +76,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
|
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
|
||||||
},
|
},
|
||||||
|
"checksum": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/checksum/-/checksum-0.1.1.tgz",
|
||||||
|
"integrity": "sha1-3GUn1MkL6FYNvR7Uzs8yl9Uo6ek=",
|
||||||
|
"requires": {
|
||||||
|
"optimist": "~0.3.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
"co": {
|
"co": {
|
||||||
"version": "4.6.0",
|
"version": "4.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
|
||||||
|
@ -299,11 +307,6 @@
|
||||||
"brace-expansion": "^1.1.7"
|
"brace-expansion": "^1.1.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node-fetch": {
|
|
||||||
"version": "2.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.0.tgz",
|
|
||||||
"integrity": "sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA=="
|
|
||||||
},
|
|
||||||
"oauth-sign": {
|
"oauth-sign": {
|
||||||
"version": "0.9.0",
|
"version": "0.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||||
|
@ -317,6 +320,14 @@
|
||||||
"wrappy": "1"
|
"wrappy": "1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"optimist": {
|
||||||
|
"version": "0.3.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
|
||||||
|
"integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
|
||||||
|
"requires": {
|
||||||
|
"wordwrap": "~0.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"path-is-absolute": {
|
"path-is-absolute": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
@ -464,6 +475,11 @@
|
||||||
"extsprintf": "^1.2.0"
|
"extsprintf": "^1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"wordwrap": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
|
||||||
|
},
|
||||||
"wrappy": {
|
"wrappy": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"name": "minecraft-launcher-core",
|
"name": "minecraft-launcher-core",
|
||||||
"version": "2.6.2",
|
"version": "2.7.0",
|
||||||
"description": "Module that downloads Minecraft assets and runs Minecraft. Also Supports Forge",
|
"description": "Module that downloads Minecraft assets and runs Minecraft. Also Supports Forge",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"adm-zip": "^0.4.13",
|
"adm-zip": "^0.4.13",
|
||||||
"node-fetch": "^2.2.0",
|
"checksum": "^0.1.1",
|
||||||
"request": "^2.88.0",
|
"request": "^2.88.0",
|
||||||
"shelljs": "^0.8.2",
|
"shelljs": "^0.8.2",
|
||||||
"uuid": "^3.3.2"
|
"uuid": "^3.3.2"
|
||||||
|
|
Loading…
Reference in a new issue