Files
js-scripts/scripts/async.js
2025-06-20 22:13:06 +08:00

106 lines
3.3 KiB
JavaScript

#! /usr/bin/env runjs
var Thread = java.lang.Thread;
var Runtime = java.lang.Runtime;
var argsjs = require('component-args.js');
var jsonjs = require('component-json-ex.js');
var printHelp = () => {
println('async.js [options] <id>');
println();
println('-h, --help Print help');
println('-i, --interval Time every refresh, default 1 (s)');
println('-t, --token Token, default read from ~/.jssp/config/asyncjs.token');
return;
};
var main = () => {
var args = argsjs.parseDefARGs(['h', 'help']);
if (args.flg('h', 'help')) {
printHelp();
return;
}
if (args.length < 1) {
xprintln('[ERROR] Target id and filename is not assigned.');
printHelp();
return;
}
var id = args[0];
var interval = args.val('i', 'interfal') || 1;
var token = args.val('t', 'token');
if (token == null) {
var tokenFile = $$.file('~/.jssp/config/asyncjs.token');
if (tokenFile.exists()) { token = $$.rFile(tokenFile).string().trim(); }
}
if (token == null) {
xprintln('[ERROR] Token is not assigned!');
return;
}
var getResultStr = $$.httpRequest().url('https://play.hatter.me/editItem.jsonp').post($$.keyValues()
.kv('token', token)
.kv('id', id)
.kv('act', 'GET')
.join()).toString();
var getResultJSON = JSON.parse(getResultStr);
if (getResultJSON.status != 200) {
xprintln('[ERROR] Get item failed: ' + getResultStr);
return;
}
var fn = getResultJSON.data.fileName;
var body = getResultJSON.data.body;
var localFile = $$.file(id + '_' + fn);
if (localFile.exists()) {
xprintln('[ERROR] File exists: ' + localFile);
return;
}
$$.rFile(localFile).write(body);
xprintln('[OK] Write file success: ' + localFile);
Runtime.getRuntime().addShutdownHook(new Thread(() => {
xprintln('[INFO] Watch ended: ' + localFile);
}));
var localFileLastModifiled = localFile.lastModified();
xprintln('[INFO] Last modified: ' + localFileLastModifiled);
xprintln('[INFO] Watching thread is running...');
while (true) {
$$.sleep(500);
var modified = localFile.lastModified();
if (modified > localFileLastModifiled) {
var now = $$.date().millis();
if ((now - modified) < 100) { $$.sleep(100); }
var secs = '' + $$.num(modified).sub(localFileLastModifiled).divr(1000, 0, null);
xprintln('[INFO] File last modified updated: '
+ localFileLastModifiled + ' -> ' + modified
+ ', diff: '
+ repeat(' ', (6 - secs.length)) + secs + ' s');
var putResultStr = $$.httpRequest().url('https://play.hatter.me/editItem.jsonp').post($$.keyValues()
.kv('token', token)
.kv('id', id)
.kv('act', 'PUT')
.kv('body', $$.rFile(localFile).string())
.join()).toString();
var putResultJSON = JSON.parse(putResultStr);
if (getResultJSON.status != 200) {
xprintln('[ERROR] Put item failed: ' + getResultStr); // STOP ?
} else {
xprintln('[OK] Put item successed!')
}
localFileLastModifiled = modified;
}
}
};
main();