Skip to content

Commit c0eae6a

Browse files
committed
better log
fix issue of ctrl c not work fix iframe scrollbar
1 parent 8e4383b commit c0eae6a

File tree

7 files changed

+1122
-1114
lines changed

7 files changed

+1122
-1114
lines changed

helper.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import fs from 'fs-extra';
2+
import request from 'request';
3+
import inquirer from 'inquirer';
4+
5+
import * as logger from './logger';
6+
7+
export function download(apiPath, dest) {
8+
logger.Assets.info('DOWNLOAD', apiPath);
9+
request
10+
.get(apiPath)
11+
.on('error', (err) => {
12+
logger.Assets.error('DOWNLOAD', apiPath, err);
13+
})
14+
.pipe(fs.createWriteStream(dest));
15+
}
16+
17+
export function writeJSON(dest, data) {
18+
fs.writeFile(dest, JSON.stringify(data), (err) => {
19+
if (err) {
20+
logger.WriteJSON.error('CREATE', dest, err);
21+
} else {
22+
logger.WriteJSON.info('CREATE', dest);
23+
}
24+
});
25+
}
26+
27+
export function defaultSkin(uuid) {
28+
// great thanks to Minecrell for research into Minecraft and Java's UUID hashing!
29+
// https://git.io/xJpV
30+
// MC uses `uuid.hashCode() & 1` for alex
31+
// that can be compacted to counting the LSBs of every 4th byte in the UUID
32+
// an odd sum means alex, an even sum means steve
33+
// XOR-ing all the LSBs gives us 1 for alex and 0 for steve
34+
const isEven = (c) => {
35+
if (c >= '0' && c <= '9') {
36+
return (c & 1) === 0; // eslint-disable-line
37+
} else if (c >= 'a' && c <= 'f') {
38+
return (c & 1) === 1; // eslint-disable-line
39+
}
40+
console.log('Invalid digit', c);
41+
return null;
42+
};
43+
const lsbsEven =
44+
(isEven(uuid[7]) !== isEven(uuid[23])) !== (isEven(uuid[15]) !== isEven(uuid[31]));
45+
return lsbsEven ? 'Alex' : 'Steve';
46+
}
47+
48+
export async function confirm(message, _default = true) {
49+
const prompt = inquirer.createPromptModule();
50+
try {
51+
const res = await prompt({
52+
type: 'confirm',
53+
name: 'confirm',
54+
default: _default,
55+
message,
56+
});
57+
return res.confirm;
58+
} catch (error) {
59+
logger.Default.error('Cannot get user input.');
60+
return false;
61+
}
62+
}
63+
64+
export function delay(ms) {
65+
return new Promise(resolve => setTimeout(resolve, ms));
66+
}

ns.js renamed to index.js

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,42 @@
11
import fs from 'fs-extra';
22
import path from 'path';
3-
import ProgressBar from 'ascii-progress';
4-
import Confirm from 'prompt-confirm';
53

64
import Utils from './utils';
5+
import { writeJSON, confirm } from './helper';
6+
import * as logger from './logger';
77

8-
const utils = new Utils();
9-
const config = utils.getConfig();
8+
process.on('SIGINT', () => {
9+
process.exit();
10+
});
1011

11-
// Clear the terminal
1212
process.stdout.write('\x1Bc');
1313

14+
const utils = new Utils();
15+
const config = utils.getConfig();
16+
1417
let playerlist = [];
1518
if (config.render.whitelist) {
1619
playerlist = utils.getWhitelistedPlayers();
1720
} else {
1821
playerlist = utils.getAllPlayers();
1922
}
20-
console.log('[INFO] Players found:', playerlist.length);
23+
logger.Default.info('Players found', playerlist.length);
2124

2225
if (config.render.advancements) {
23-
console.log('[INFO] Advancements is set: Render mode set to 1.12+');
26+
logger.Default.info('Advancements is set: Render mode set to 1.12+');
2427
if (!config['advancements-progress']) {
25-
console.log('[WARN] You do not have advancements progresses defined. Please visit github.com/NyaaCat/NyaaStats for a new version of config file.');
28+
logger.Default.warn('You do not have advancements progresses defined. Please visit github.com/NyaaCat/NyaaStats for a new version of config file.');
2629
}
2730
} else {
28-
console.log('[INFO] Advancements not set: Render mode set to 1.11');
31+
logger.Default.info('Advancements not set: Render mode set to 1.11');
2932
}
3033

3134
const output = path.join(config.BASEPATH, config.render.output);
32-
console.log('[INFO] CREATE OUTPUT DIR:', output);
35+
logger.Default.info('CREATE OUTPUT DIR', output);
3336

3437
(async () => {
35-
const prompt = new Confirm('Do you want to clean the output folder?');
36-
37-
if (await prompt.run()) {
38+
const prompt = await confirm('Do you want to clean the output folder?');
39+
if (prompt) {
3840
try {
3941
fs.emptyDirSync(output);
4042
} catch (err) {
@@ -48,18 +50,10 @@ console.log('[INFO] CREATE OUTPUT DIR:', output);
4850
banlist = utils.getBannedPlayers();
4951
}
5052
if (!config.render['render-banned']) {
51-
console.log(playerlist, banlist);
5253
playerlist = playerlist.filter(uuid => !banlist.some(ban => ban === uuid));
5354
}
5455
playerlist = playerlist.sort(() => 0.5 - Math.random());
5556

56-
const totalTasks = playerlist.length;
57-
const bar = new ProgressBar({
58-
schema: '[:bar] :current/:total :percent :etas',
59-
width: 0.95,
60-
total: totalTasks,
61-
});
62-
6357
for (const uuid of playerlist) {
6458
let banned = false;
6559
if (config.render['render-banned']) {
@@ -69,7 +63,6 @@ console.log('[INFO] CREATE OUTPUT DIR:', output);
6963
try {
7064
data = await utils.createPlayerData(uuid, banned); // eslint-disable-line
7165
} catch (error) {
72-
bar.tick();
7366
continue;
7467
}
7568
if (!data.data) {
@@ -81,11 +74,10 @@ console.log('[INFO] CREATE OUTPUT DIR:', output);
8174
names: data.data.names,
8275
seen: data.data.seen,
8376
});
84-
bar.tick();
8577
}
8678

8779
players.sort((a, b) => b.seen - a.seen); // eslint-disable-line
88-
Utils.writeJSON(
80+
writeJSON(
8981
path.join(config.BASEPATH, config.render.output, 'players.json'),
9082
players,
9183
);
@@ -96,7 +88,7 @@ console.log('[INFO] CREATE OUTPUT DIR:', output);
9688
} catch (error) {
9789
throw new Error(error);
9890
}
99-
Utils.writeJSON(
91+
writeJSON(
10092
path.join(config.BASEPATH, config.render.output, 'info.json'),
10193
{
10294
worldTime,

logger.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import log4js from 'log4js';
2+
3+
log4js.configure({
4+
level: 'info',
5+
appenders: {
6+
Default: { type: 'stdout' },
7+
Config: { type: 'stdout' },
8+
PlayerData: { type: 'stdout' },
9+
MojangAPI: { type: 'stdout' },
10+
Assets: { type: 'stdout' },
11+
WriteJSON: { type: 'stdout' },
12+
},
13+
categories: {
14+
default: {
15+
appenders: ['Default'],
16+
level: 'info',
17+
},
18+
},
19+
});
20+
21+
export const Default = log4js.getLogger('Default');
22+
export const Config = log4js.getLogger('Config');
23+
export const PlayerData = log4js.getLogger('PlayerData');
24+
export const MojangAPI = log4js.getLogger('MojangAPI');
25+
export const Assets = log4js.getLogger('Assets');
26+
export const WriteJSON = log4js.getLogger('WriteJSON');

0 commit comments

Comments
 (0)