From 5b359d61bb2987919d9db80e28dd6fcb79b91814 Mon Sep 17 00:00:00 2001
From: Miao_Spring <539943419@qq.com>
Date: Wed, 11 Oct 2023 21:00:04 +0800
Subject: [PATCH] update
---
extension.js | 370 +++++++++++++++++++++++++++++++++++++--------------
1 file changed, 269 insertions(+), 101 deletions(-)
diff --git a/extension.js b/extension.js
index 2302dac..20f8f5e 100644
--- a/extension.js
+++ b/extension.js
@@ -2,8 +2,6 @@ game.import("extension", function (lib, game, ui, get, ai, _status) {
//重置删除扩展的选择
lib.config.extension_喵喵配件_extensionDeleter1 = "1";
-
-
//改自拓展:《在线更新》
function miaoFetch(url, options = { timeout: 3000 }) {
return new Promise((resolve, reject) => {
@@ -34,109 +32,136 @@ game.import("extension", function (lib, game, ui, get, ai, _status) {
});
}
- /** 检测最快连接到的更新源 */
- // @ts-ignore
- function getFastestUpdateURLMiao4(
- updateURLS = {
- github: "https://raw.githubusercontent.com/Zioywishing/Noname_Miaoxtension/main/extension.js"
- },
- translate = {
- coding: "Coding",
- github: "GitHub",
- // fastgit: 'GitHub镜像',
- // 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 {
- await response.text();
- const finish = new Date().getTime() - start;
- return { key, finish };
- } catch (e) {
- return {
- key,
- err: new Error(e.message)
- };
- }
+ // 更新拓展
+ async function miao_update_extension_js(url, extName){
+ // 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();
})
- );
- });
-
- /* Promise.allSettled */
- 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);
- }
- },
- function (e) {
- args[index] = { status: "rejected", reason: e };
- if (--arrCount === 0) {
- resolve(args);
- }
- }
- );
- }
- }
- }
-
- for (let i = 0; i < args.length; i++) {
- resolvePromise(i, args[i]);
- }
- });
+ .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 {
- 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)
- };
+ //将内容数据写入到文件中
+ 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);
+ });
}
- 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) : ""
- }`
+
+
+ //备份文件
+ 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) {}
+ );
+ }
+
+ },
+ () => {}
);
- 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) {
// var p1 = new Promise((resolve, reject)=>{
@@ -1653,7 +1678,150 @@ game.import("extension", function (lib, game, ui, get, ai, _status) {
}
alert("更新完成");
- this.innerHTML = "";
+ this.innerHTML = "";
+ }
+ },
+
+ updateSelf: {
+ name: "",
+ intro: "这还用说????",
+ clear: true,
+ onclick: async function () {
+ if (this.innerHTML != "") {
+ return alert("已经在更新了");
+ }
+ this.innerHTML = "";
+ 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 = "";
}
},
// getFastestUpdateURLMiao4:{