You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
4.6 KiB
151 lines
4.6 KiB
const testPath = module.modulePath.slice(0, module.modulePath.lastIndexOf("/")) + "/";
|
|
const JSEngine = com.example.hikerview.service.parser.JSEngine;
|
|
const drpyMap = new Map();
|
|
const GMkey = module.importParam;
|
|
function buildJsEnv(ticket) {
|
|
let code = String.raw`
|
|
// const my_rule = '
|
|
const MY_RULE = ${my_rule};
|
|
const my_rule = JSON.stringify(MY_RULE);
|
|
const MY_TICKET = "${ticket || ""}";
|
|
eval(getJsPlugin());
|
|
eval(getJsLazyPlugin());
|
|
`;
|
|
return code;
|
|
}
|
|
|
|
function sync(func, sp) {
|
|
return new org.mozilla.javascript.Synchronizer(func, sp || {});
|
|
}
|
|
|
|
function createDrpy(key) {
|
|
JSEngine.getInstance().evalJS(buildJsEnv(MY_TICKET) + "\n!" + $.toString((key, path, GMkey, MY_TICKET) => {
|
|
const localKey = "drpy";
|
|
globalThis.local = {
|
|
set(rulekey, k, v) {
|
|
storage0.setItem(localKey + "@" + rulekey + "@" + k, v);
|
|
},
|
|
get(rulekey, k, v) {
|
|
return storage0.getItem(localKey + "@" + rulekey + "@" + k, "") || v;
|
|
},
|
|
delete(rulekey, k) {
|
|
storage0.clearItem(localKey + "@" + rulekey + "@" + k);
|
|
}
|
|
};
|
|
eval(getCryptoJS());
|
|
globalThis.CryptoJS = CryptoJS;
|
|
|
|
let $request = request;
|
|
let $post = post;
|
|
globalThis.req = function (url, cobj) {
|
|
try {
|
|
let res = {};
|
|
let obj = Object.assign({}, cobj);
|
|
if (obj.data) {
|
|
obj.body = obj.data;
|
|
delete obj.data;
|
|
}
|
|
|
|
if (obj.hasOwnProperty("redirect")) obj.redirect = !!obj.redirect;
|
|
if (obj.buffer === 2) {
|
|
obj.toHex = true;
|
|
}
|
|
obj.headers = Object.assign({
|
|
Cookie: "#noCookie#"
|
|
}, obj.headers);
|
|
if (url === "https://api.nn.ci/ocr/b64/text" && obj.headers) {
|
|
obj.headers["Content-Type"] = "text/plain";
|
|
}
|
|
|
|
if (url.startsWith("file://") && (url.includes("?type=") || url.includes("?params="))) {
|
|
url = url.slice(0, url.lastIndexOf("?"));
|
|
}
|
|
for (let key in obj.headers) {
|
|
if (typeof obj.headers[key] !== "string") {
|
|
obj.headers[key] = String(obj.headers[key]);
|
|
}
|
|
}
|
|
let r = "";
|
|
r = $request(url, obj);
|
|
if (obj.withHeaders) {
|
|
r = JSON.parse(r);
|
|
res.content = r.body;
|
|
res.headers = {};
|
|
for (let [k, v] of Object.entries(r.headers || {})) {
|
|
res.headers[k] = v[0];
|
|
}
|
|
} else {
|
|
res.content = r;
|
|
}
|
|
if (obj.buffer === 2) {
|
|
const CryptoUtil = $.require("hiker://assets/crypto-java.js");
|
|
res.content = CryptoUtil.Data.parseHex(res.content).toBase64(_base64.NO_WRAP);
|
|
}
|
|
return res;
|
|
} catch (e) {
|
|
log("Error" + e.toString());
|
|
}
|
|
}
|
|
pdfa = _pdfa;
|
|
pd = _pd;
|
|
pdfh = _pdfh;
|
|
String.prototype.replaceAll = function (search, replacement) {
|
|
return this.split(search).join(replacement);
|
|
};
|
|
let $toString = Function.prototype.toString;
|
|
Function.prototype.toString = function () {
|
|
return $toString.apply(this).trim();
|
|
};
|
|
let drpy2 = $.require(path +'drpy/drpy2.js');
|
|
GM.has(GMkey, (DrpyManage) => {
|
|
DrpyManage.put(key, drpy2);
|
|
});
|
|
}, key, testPath, GMkey, MY_TICKET) + ";\n", "", false);
|
|
}
|
|
|
|
function createNewDrpy(source) {
|
|
let key = source.key;
|
|
createDrpy(key,source.path);
|
|
let drpy = drpyMap.get(key);
|
|
drpy.init(source.ext);
|
|
return drpy;
|
|
}
|
|
|
|
function get(key,ext) {
|
|
return sync(() => {
|
|
//log(drpyMap.size)
|
|
if (drpyMap.has(key)) {
|
|
//log("取缓存" + key)
|
|
return drpyMap.get(key);
|
|
}
|
|
if (drpyMap.size >= 5) {
|
|
//log("删除缓存")
|
|
del(Array.from(drpyMap.keys()).at(0));
|
|
}
|
|
let source = {key:key,ext:ext};
|
|
let drpy = createNewDrpy(source);
|
|
return drpy;
|
|
}, this).call();
|
|
}
|
|
|
|
function put(key, drpy) {
|
|
sync(() => drpyMap.set(key, drpy), this).call();
|
|
}
|
|
|
|
function del(key) {
|
|
sync(() => {
|
|
//log("删除" + key);
|
|
drpyMap.delete(key);
|
|
}, this).call();
|
|
}
|
|
|
|
function clear() {
|
|
sync(() => {
|
|
drpyMap.clear();
|
|
}, this).call();
|
|
}
|
|
$.exports = {
|
|
get,
|
|
clear,
|
|
put
|
|
} |