This commit is contained in:
539943419 committed 2023-10-11 21:00:04 +08:00
1 parent 49e3c26c31
commit 5b359d61bb
1 file changed
+266 -98
+266 -98
View File
@@ -2,8 +2,6 @@ game.import("extension", function (lib, game, ui, get, ai, _status) {
//重置删除扩展的选择 //重置删除扩展的选择
lib.config.extension_喵喵配件_extensionDeleter1 = "1"; lib.config.extension_喵喵配件_extensionDeleter1 = "1";
//改自拓展:《在线更新》 //改自拓展:《在线更新》
function miaoFetch(url, options = { timeout: 3000 }) { function miaoFetch(url, options = { timeout: 3000 }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@@ -34,109 +32,136 @@ game.import("extension", function (lib, game, ui, get, ai, _status) {
}); });
} }
/** 检测最快连接到的更新源 */ // 更新拓展
// @ts-ignore async function miao_update_extension_js(url, extName){
function getFastestUpdateURLMiao4( // var url = "https://raw.githubusercontent.com/Zioywishing/Noname_Miaoxtension/main/extension.js";
updateURLS = { var text_download = "";
github: "https://raw.githubusercontent.com/Zioywishing/Noname_Miaoxtension/main/extension.js" // var extName = "喵喵喵喵";
}, var path = "\\extension\\" + extName + "\\extension.js";
translate = { var time = new Date();
coding: "Coding", var path_bak = path + "." + time.valueOf() + ".bak";
github: "GitHub", var fileName = "extension.js";
// fastgit: 'GitHub镜像', var fileName_bak = fileName + "." + time.valueOf() + ".bak";
// xuanwu: '玄武镜像',
URC: "URC"
}
) {
// if (typeof updateURLS != "object") throw new TypeError("updateURLS must be an object type");
if (typeof translate != "object") throw new TypeError("translate must be an object type");
const promises = [];
const keys = Object.keys(updateURLS);
keys.forEach(key => {
const url = updateURLS[key];
const start = new Date().getTime();
promises.push(
miaoFetch(`${url}?date=${new Date().getTime()}`).then(async response => {
try { try {
await response.text(); var fec = miaoFetch(url);
const finish = new Date().getTime() - start; fec.catch(err => reject(err));
return { key, finish }; await fec
} catch (e) { .then(data => {
return { return data.text();
key,
err: new Error(e.message)
};
}
}) })
); .then(res => {
text_download = res;
}); });
} catch (e) {
/* Promise.allSettled */ return alert("连接出了问题喵:" + e);
function allSettled(array) {
return new Promise(resolve => {
let args = Array.prototype.slice.call(array);
if (args.length === 0) return resolve([]);
let arrCount = args.length;
function resolvePromise(index, value) {
if (typeof value === "object") {
let then = value.then;
if (typeof then === "function") {
then.call(
value,
function (val) {
args[index] = { status: "fulfilled", value: val };
if (--arrCount === 0) {
resolve(args);
} }
alert("下载成功");
//电脑端node.js环境下
if (lib.node && lib.node.fs) {
path = __dirname + path;
path_bak = __dirname + path_bak;
// return alert(path)
const fs = lib.node.fs;
//创建备份文件
try {
fs.readFile(path, function read(err, data) {
if (err) {
throw err;
}
if(text_download == data){
alert('本地和下载的一模一样喵')
}else{
fs.appendFile(path_bak, data, function (err) {
if (err) throw err;
});
}
});
} catch (e) {
return alert("备份时:" + e);
}
//更新文件
try {
fs.writeFileSync(path, text_download);
} catch (e) {
return alert("更新extension.js时:" + e);
}
}
//移动端
else {
//将内容数据写入到文件中
function writeFile(fileEntry, dataObj) {
//创建一个写入对象
fileEntry.createWriter(function (fileWriter) {
//文件写入成功
fileWriter.onwriteend = function () {
// alert("Successful file read...");
};
//文件写入失败
fileWriter.onerror = function (e) {
alert("Failed file read: " + e.toString());
};
//写入文件
fileWriter.write(dataObj);
});
}
//备份文件
game.readFileAsText(
"extension/" + extName + "/extension.js",
e => {
var oldt = e;
if(text_download == data){
alert('本地和下载的一模一样喵')
}else{
window.resolveLocalFileSystemURL(
lib.assetURL + "extension/" + extName,
function (root) {
root.getFile(
fileName_bak,
{ create: true },
function (fileEntry) {
var dataObj = new Blob([oldt], { type: "text/plain" });
//写入文件
// alert(oldt);
writeFile(fileEntry, dataObj);
}, },
function (e) { function (err) {
args[index] = { status: "rejected", reason: e }; alert("创建失败!");
if (--arrCount === 0) {
resolve(args);
}
} }
); );
} },
} function (err) {}
}
for (let i = 0; i < args.length; i++) {
resolvePromise(i, args[i]);
}
});
}
return allSettled(promises).then(values => {
const array = values.filter(i => i && !i.reason && !i.value.err);
const errArray = values.filter(i => i && (i.reason || i.value.err));
if (array.length == 0) {
alert("更新源连接全部出错");
return {
success: [],
failed: errArray.map(_ => _.value || _.reason)
};
}
const fastest = array.reduce((previous, next) => {
const a = previous.value.finish;
const b = next.value.finish;
return a > b ? next : previous;
});
function getTranslate(_) {
const index = values.findIndex(item => item == _);
return translate[keys[index]];
}
alert(
`最快连接到的更新源是:${getTranslate(fastest) || fastest.value.key}, 用时${fastest.value.finish / 1000}秒${
errArray.length > 0 ? "\n连接不上的更新源有:" + errArray.map(getTranslate) : ""
}`
); );
return { }
fastest: fastest.value,
success: array.map(_ => _.value), },
failed: errArray.map(_ => _.value || _.reason) () => {}
}; );
});
//更新extension.js
window.resolveLocalFileSystemURL(
lib.assetURL + "extension/" + extName,
function (root) {
root.getFile(
"extension.js",
{ create: true },
function (fileEntry) {
var dataObj = new Blob([text_download], { type: "text/plain" });
//写入文件
writeFile(fileEntry, dataObj);
},
function (err) {
alert("创建失败!");
}
);
},
function (err) {}
);
}
} }
// function miaoFetch(url) { // function miaoFetch(url) {
// var p1 = new Promise((resolve, reject)=>{ // var p1 = new Promise((resolve, reject)=>{
@@ -1653,7 +1678,150 @@ game.import("extension", function (lib, game, ui, get, ai, _status) {
} }
alert("更新完成"); alert("更新完成");
this.innerHTML = "<button>更新完成</button>"; this.innerHTML = "<span><button>更新喵喵喵喵</button></span>";
}
},
updateSelf: {
name: "<button>更新喵喵配件</button>",
intro: "这还用说????",
clear: true,
onclick: async function () {
if (this.innerHTML != "<span><button>更新喵喵配件</button></span>") {
return alert("已经在更新了");
}
this.innerHTML = "<button>更新中</button>";
var url = "https://raw.githubusercontent.com/Zioywishing/Noname_Miaoxtension/main/extension.js";
var text_download = "";
var extName = "喵喵喵喵";
var path = "\\extension\\" + extName + "\\extension.js";
var time = new Date();
var path_bak = path + "." + time.valueOf() + ".bak";
var fileName = "extension.js";
var fileName_bak = fileName + "." + time.valueOf() + ".bak";
try {
var fec = miaoFetch(url);
fec.catch(err => reject(err));
await fec
.then(data => {
return data.text();
})
.then(res => {
text_download = res;
});
} catch (e) {
return alert("连接出了问题喵:" + e);
}
alert("下载成功");
//电脑端node.js环境下
if (lib.node && lib.node.fs) {
path = __dirname + path;
path_bak = __dirname + path_bak;
// return alert(path)
const fs = lib.node.fs;
//创建备份文件
try {
fs.readFile(path, function read(err, data) {
if (err) {
throw err;
}
if(text_download == data){
alert('本地和下载的一模一样喵')
}else{
fs.appendFile(path_bak, data, function (err) {
if (err) throw err;
});
}
});
} catch (e) {
return alert("备份时:" + e);
}
//更新文件
try {
fs.writeFileSync(path, text_download);
} catch (e) {
return alert("更新extension.js时:" + e);
}
}
//移动端
else {
//将内容数据写入到文件中
function writeFile(fileEntry, dataObj) {
//创建一个写入对象
fileEntry.createWriter(function (fileWriter) {
//文件写入成功
fileWriter.onwriteend = function () {
// alert("Successful file read...");
};
//文件写入失败
fileWriter.onerror = function (e) {
alert("Failed file read: " + e.toString());
};
//写入文件
fileWriter.write(dataObj);
});
}
//备份文件
game.readFileAsText(
"extension/" + extName + "/extension.js",
e => {
var oldt = e;
if(text_download == data){
alert('本地和下载的一模一样喵')
}else{
window.resolveLocalFileSystemURL(
lib.assetURL + "extension/" + extName,
function (root) {
root.getFile(
fileName_bak,
{ create: true },
function (fileEntry) {
var dataObj = new Blob([oldt], { type: "text/plain" });
//写入文件
// alert(oldt);
writeFile(fileEntry, dataObj);
},
function (err) {
alert("创建失败!");
}
);
},
function (err) {}
);
}
},
() => {}
);
//更新extension.js
window.resolveLocalFileSystemURL(
lib.assetURL + "extension/" + extName,
function (root) {
root.getFile(
"extension.js",
{ create: true },
function (fileEntry) {
var dataObj = new Blob([text_download], { type: "text/plain" });
//写入文件
writeFile(fileEntry, dataObj);
},
function (err) {
alert("创建失败!");
}
);
},
function (err) {}
);
}
alert("更新完成");
this.innerHTML = "<span><button>更新喵喵配件</button></span>";
} }
}, },
// getFastestUpdateURLMiao4:{ // getFastestUpdateURLMiao4:{