// ==UserScript==
// @name 百度网盘秒传转存助手 支持PC及移动端 永久无广告绿色版
// @version 3.1.5
// @author tousakasp
// @description 百度网盘秒传链接转存及生成 永久无广告绿色版 支持移动端界面 -- 再次感谢初代大佬伟大贡献
// @match *://pan.baidu.com/disk/home*
// @match *://pan.baidu.com/disk/main*
// @match *://pan.baidu.com/disk/synchronization*
// @match *://pan.baidu.com/s/*
// @match *://yun.baidu.com/disk/home*
// @match *://yun.baidu.com/disk/main*
// @match *://yun.baidu.com/disk/synchronization*
// @match *://yun.baidu.com/s/*
// @match *://wangpan.baidu.com/disk/home*
// @match *://wangpan.baidu.com/disk/main*
// @match *://wangpan.baidu.com/disk/synchronization*
// @match *://wangpan.baidu.com/s/*
// @match *://pan.baidu.com/wap/home*
// @license GPLv3
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABBUlEQVR4AZTTJRBUURTH4TtDwXuPdPrgbhHXiksf3CPucRNScHd3d3d3uO9bKeu7b79+fun8Q17CNHyMMUqaiPE4fEyYVjjGNKnNwQ4lpgV8lManEfwfosLHEGPU1N3ZnAv4qlT+NiQ56uPWSjKBrztUSnIaB66sY1vgxgxoMXB5NbsCB9rxcB5fN2M5/16nCFxeS6YTezpzsB1Pu/C2O7/78/99eYBYHXh+gqdHObGIK4GHgevjVIt1AgAnhvE4cGe8euoHbizgYuD2RGgx8O0RpwIPRmsmJDGqcrANd3pLo/qVr03hUlcpfSwf0/vD3JwkPdPK5/zhkOz+/f1FIDv/RcnOAEjywH/DhgADAAAAAElFTkSuQmCC
// @namespace com.github.tousakasp
// @homepageURL
// @description:en input bdlink to get files or get bdlink for Baidu™ WebDisk.
// @compatible firefox Violentmonkey
// @compatible firefox Tampermonkey
// @compatible chrome Violentmonkey
// @compatible chrome Tampermonkey
// @compatible edge Violentmonkey
// @compatible edge Tampermonkey
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_setClipboard
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @grant GM_registerMenuCommand
// @grant unsafeWindow
// @run-at document-body
// @connect baidu.com
// @connect baidupcs.com
// @connect unpkg.com
// @connect *
// @downloadURL https://raw.githubusercontent.com/tousakasp/rapid-upload-userscript-rinsp/main/dist/%E7%A7%92%E4%BC%A0%E8%BD%AC%E5%AD%98%E5%8A%A9%E6%89%8B.user.js
// @updateURL https://cdn.jsdelivr.net/gh/tousakasp/rapid-upload-userscript-rinsp@main/dist/%E7%A7%92%E4%BC%A0%E8%BD%AC%E5%AD%98%E5%8A%A9%E6%89%8B.user.js
// @require https://unpkg.com/jquery@3.7.0/dist/jquery.min.js
// @require https://unpkg.com/js-base64@3.7.5/base64.js
// @require https://unpkg.com/sweetalert2@11.4.8/dist/sweetalert2.min.js
// @require https://unpkg.com/spark-md5@3.0.2/spark-md5.min.js
// ==/UserScript==
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ 65:
/***/ ((module) => {
module.exports = ".mzf_btn{text-align:center;font-size:.85em;color:#09aaff;border:2px solid #c3eaff;border-radius:4px;margin-left:5px;padding:10px;padding-top:5px;padding-bottom:5px;cursor:pointer}.mzf_btn2{text-align:center;color:#09aaff;margin-left:5px;cursor:pointer}.mzf_link{font-family:inherit;color:#09aaff;text-decoration:none;vertical-align:baseline}.mzf_text{font-feature-settings:\"lnum\";-webkit-font-smoothing:antialiased;font-family:inherit;color:#545454;font-weight:400;word-break:break-word;-webkit-tap-highlight-color:transparent;margin:0;padding:0;width:100%;height:34px;display:block;line-height:34px;text-align:center;white-space:nowrap}.mzf_arrow{margin-right:5px;transform:rotate(180deg);transition:transform .2s;fill:none;stroke:gray}.mzf_details{cursor:pointer}.mzf_details summary{white-space:nowrap}.mzf_content{max-height:0;margin:0;transition:max-height .5s;overflow:hidden}.mzf_details[open]>summary>svg{transform:rotate(0deg)}.mzf_details[open]+.mzf_content{max-height:100%}.mzf_html_container{grid-template-columns:minmax(0, 100%);align-self:center;justify-self:center;width:32em;max-width:100%}.mzf_updateInfo{border:1px #000;width:100%;margin:0 auto;text-align:left}.mzf_updateInfo dl{display:flex;flex-wrap:wrap;line-height:26px}.mzf_updateInfo dl>dt{font-family:monospace;font-size:.9em;color:#186a8c;flex-basis:3em;flex-grow:0;flex-shrink:0}.mzf_updateInfo dl>dt~dt,.mzf_updateInfo dl>dt~dt+dd{margin-top:.3em;border-top:1px solid #ccc}.mzf_updateInfo dl>dd{flex:1}.mzf_updateInfo dl>dd+dd{padding-left:3em;flex-basis:100%}.mzf_updateInfo span{vertical-align:baseline}"
/***/ }),
/***/ 184:
/***/ ((module) => {
module.exports = "
\r\n
\r\n
更新日志:
\r\n
\r\n - 3.1.5
\r\n - 改善错误信息
\r\n \r\n\r\n - 3.1.4
\r\n - 改用unpkg cdn
\r\n \r\n\r\n - 3.1.3
\r\n - 转存全失败时不添加打开目录按钮
\r\n - 外部库切换为使用CDN
\r\n - 更正代码内元数据
\r\n \r\n\r\n - 3.1.2
\r\n - (只改名)
\r\n \r\n\r\n - 3.1.1
\r\n - 修正移动版保存路径无效问题
\r\n \r\n\r\n - 3.0.9
\r\n - 有限度支持移动端界面
\r\n - 提醒20G及短链不支持 (256K以内支持)
\r\n \r\n\r\n - 3.0.8
\r\n - 修正生成重试时小BUG
\r\n \r\n\r\n - 3.0.7
\r\n - 优化秒传生成稳定性
\r\n \r\n \r\n - 3.0.6
\r\n - 秒传支持空目录 (文件夹结构使用时)
\r\n - 增加随机大小写尝试次数
\r\n \r\n \r\n - 3.0.5
\r\n - 提高旧秒传兼容性
\r\n \r\n \r\n - 3.0.4
\r\n - (没有发布)
\r\n \r\n \r\n - 3.0.3
\r\n - 改用rapidupload接口
\r\n \r\n \r\n - 3.0.2
\r\n - 3.0.2 修正404时正确报错
\r\n \r\n \r\n - 3.0.1
\r\n - 拒绝短秒传输入
\r\n \r\n \r\n - 3.0.0
\r\n - 挽救秒传功能
\r\n \r\n
\r\n
\r\n
"
/***/ }),
/***/ 149:
/***/ ((module) => {
module.exports = "/*自定义单选框样式*/\r\n.mzf_check {\r\n display: inline-block;\r\n background-color: white;\r\n border-radius: 5px;\r\n border: 1px solid #d3d3d3;\r\n width: 20px;\r\n height: 20px;\r\n text-align: center;\r\n vertical-align: middle;\r\n line-height: 20px;\r\n margin-left: 10px;\r\n}\r\n.mzf_check_ori:checked + .mzf_check {\r\n background-color: #eee;\r\n}\r\n.mzf_check_ori:checked + .mzf_check::after {\r\n content: \"✓\";\r\n}\r\n.mzf_check_ori {\r\n display: none;\r\n}\r\n\r\n/*新版度盘页面的按钮样式(直接拷贝)*/\r\n.mzf_new_btn {\r\n -webkit-text-size-adjust: 100%;\r\n -webkit-font-smoothing: antialiased;\r\n -webkit-tap-highlight-color: transparent;\r\n vertical-align: middle;\r\n font: inherit;\r\n overflow: visible;\r\n text-transform: none;\r\n font-family: SFUIText, PingFangSC-Regular, Helvetica Neue, Helvetica, Arial,\r\n sans-serif;\r\n display: inline-block;\r\n line-height: 1;\r\n white-space: nowrap;\r\n cursor: pointer;\r\n background: #fff;\r\n text-align: center;\r\n box-sizing: border-box;\r\n outline: 0;\r\n margin: 0;\r\n transition: 0.1s;\r\n color: #fff;\r\n background-color: #06a7ff;\r\n font-weight: 700;\r\n padding: 8px 24px;\r\n height: 32px;\r\n font-size: 14px;\r\n border-radius: 16px;\r\n border: none;\r\n margin-left: 8px;\r\n}\r\n#mzf-rapid-input.swal2-textarea {\r\n height: 10em;\r\n}"
/***/ }),
/***/ 825:
/***/ ((module) => {
module.exports = "#gen_bdlink_btn {\r\n display: none;\r\n font-size: .28rem;\r\n padding: 0.3em;\r\n color: #a57406;\r\n}\r\nheader[style=\"display: none;\"] ~ #gen_bdlink_btn {\r\n display: inline-block;\r\n position: fixed;\r\n top: 0.4em;\r\n left: 3.5em;\r\n z-index: 99999;\r\n}\r\n#gen_bdlink_btn.mobile-share-page {\r\n display: inline-block;\r\n position: fixed;\r\n top: 0.7em;\r\n right: 1.3em;\r\n z-index: 99999;\r\n}\r\n#gen_bdlink_btn:after {\r\n content: \"\\26A1生成\";\r\n}\r\nhtml.swal2-shown {\r\n font-size: 16px !important;\r\n}\r\n.mzf_new_btn {\r\n padding: 3px 9px;\r\n}\r\n.swal2-title {\r\n font-size: 1.5rem;\r\n}\r\n.mzf_updateInfo {\r\n font-size: 1rem;\r\n}"
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";
// EXTERNAL MODULE: ./src/css/app.css
var app = __webpack_require__(149);
var app_default = /*#__PURE__*/__webpack_require__.n(app);
// EXTERNAL MODULE: ./src/css/mobile-app.css
var mobile_app = __webpack_require__(825);
var mobile_app_default = /*#__PURE__*/__webpack_require__.n(mobile_app);
// EXTERNAL MODULE: ./src/css/app.scss
var css_app = __webpack_require__(65);
var css_app_default = /*#__PURE__*/__webpack_require__.n(css_app);
;// CONCATENATED MODULE: ./src/common/const.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 存放各种全局常量对象
*/
var version = "3.1.5"; // 当前版本号
var updateDate = "23.6.25"; // 更新弹窗显示的日期
var updateInfoVer = "3.1.4"; // 更新弹窗的版本, 没必要提示的非功能性更新就不弹窗了
var swalCssVer = "3.1.3"; // 由于其他主题的Css代码会缓存到本地, 故更新主题包版本(url)时, 需要同时更新该字段以刷新缓存
var locUrl = location.href;
var baiduMobilePage = "baidu.com/wap/home";
var baiduNewPage = "baidu.com/disk/main"; // 匹配新版度盘界面
var baiduSyncPage = "baidu.com/disk/synchronization"; // 匹配同步空间
var baiduSharePage = "baidu.com/s/"; // 匹配分享页
var TAG = "[秒传转存助手 mod by tousakasp]";
var ajaxError = 514; // 自定义ajax请求失败时的错误码(不能与http statusCode冲突)
var bdlinkPrefix = "https://pan.baidu.com/#bdlink="; // 一键秒传链接的前缀
var commandList = ["set", "gen", "info"]; // 转存输入框内支持输入的命令
var UA = "netdisk;"; // 自定义User-Agent
var extCssUrl = {
Default: "https://unpkg.com/@sweetalert2/theme-default@5.0.15/default.min.css",
Dark: "https://unpkg.com/@sweetalert2/theme-dark@5.0.15/dark.min.css",
"WordPress Admin": "https://unpkg.com/@sweetalert2/theme-wordpress-admin@5.0.15/wordpress-admin.min.css",
"Material UI": "https://unpkg.com/@sweetalert2/theme-material-ui@5.0.15/material-ui.min.css",
Bulma: "https://unpkg.com/@sweetalert2/theme-bulma@5.0.15/bulma.min.css",
"Bootstrap 4": "https://unpkg.com/@sweetalert2/theme-bootstrap-4@5.0.15/bootstrap-4.min.css",
}; // 各主题包对应的url
var appError = {
SwalCssInvalid: "\u6837\u5F0F\u5305\u6570\u636E\u9519\u8BEF, \u81EA\u52A8\u4F7F\u7528\u5185\u7F6E\u6837\u5F0F (\u8BF7\u70B9\u786E\u5B9A)",
SwalCssErrReq: "\u6837\u5F0F\u5305\u52A0\u8F7D\u5931\u8D25, \u81EA\u52A8\u4F7F\u7528\u5185\u7F6E\u6837\u5F0F (\u8BF7\u70B9\u786E\u5B9A), \u9519\u8BEF\u4EE3\u7801: ",
ClipboardPremissionErr: '使用 "监听剪贴板" 功能需要允许剪贴板权限!\n该功能只支持Chrome系/Edge/Opera浏览器, 不支持Firefox, 同时注意使用https访问页面 (http访问会导致浏览器直接禁止剪贴板权限)',
}; // 主程序异常
var docPrefix2 = "https://xtsat.github.io/rapid-upload-userscript-doc/document";
var doc2 = {
shareDoc: docPrefix2 + "/FAQ/\u9519\u8BEF\u4EE3\u7801",
linkTypeDoc: docPrefix2 + "/Info/\u79D2\u4F20\u683C\u5F0F",
bdlinkDoc: docPrefix2 + "/\u79D2\u4F20\u94FE\u63A5\u751F\u6210/\u4E00\u952E\u79D2\u4F20",
}; // 文档载点2
var linkStyle = 'class="mzf_link" rel="noopener noreferrer" target="_blank"';
var btnStyle = 'class="mzf_btn" rel="noopener noreferrer" target="_blank"';
var bdlinkPattern = /#bdlink=([\da-zA-Z+/=]+)/; // b64可能出现的字符: 大小写字母a-zA-Z, 数字0-9, +, /, = (=用于末尾补位)
var htmlDocument = "\u79D2\u4F20\u65E0\u6548,\u9632\u548C\u8C10\u7B49 \u53EF\u53C2\u8003\u79D2\u4F20\u6587\u6863\u8F7D\u70B9
";
var htmlAboutBdlink = "\u4EC0\u4E48\u662F\u4E00\u952E\u79D2\u4F20?: \u6587\u6863\u8F7D\u70B9";
var copyFailList = '复制列表';
var copyFailBranchList = '复制列表';
var copySuccessList = '复制列表';
;// CONCATENATED MODULE: ./src/common/duParser.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 各种解析器
*/
/**
* @description: 从url中解析秒传链接
*/
function parseQueryLink(url) {
var bdlinkB64 = url.match(bdlinkPattern);
return bdlinkB64 ? bdlinkB64[1].fromBase64() : "";
}
/**
* @description: 秒传链接解析器
*/
function DuParser() { }
DuParser.parse = function generalDuCodeParse(szUrl) {
var r;
if (szUrl.indexOf("bdpan") === 0) {
r = DuParser.parseDu_v1(szUrl);
r.ver = "PanDL";
}
else if (szUrl.indexOf("BaiduPCS-Go") === 0) {
r = DuParser.parseDu_v2(szUrl);
r.ver = "PCS-Go";
}
else if (szUrl.indexOf("BDLINK") === 0) {
r = DuParser.parseDu_v3(szUrl);
r.ver = "游侠 v1";
}
else {
r = DuParser.parseDu_v4(szUrl);
r.ver = "梦姬标准";
}
return r;
};
DuParser.parseDu_v1 = function parseDu_v1(szUrl) {
return szUrl
.replace(/\s*bdpan:\/\//g, " ")
.trim()
.split(" ")
.map(function (z) {
return z
.trim()
.fromBase64()
.match(/([\s\S]+)\|([\d]{1,20})\|([\da-f]{32})\|([\da-f]{32})/i);
})
.filter(function (z) {
return z;
})
.map(function (info) {
return {
md5: info[3],
md5s: info[4],
size: Number.parseInt(info[2]),
path: info[1],
};
});
};
DuParser.parseDu_v2 = function parseDu_v2(szUrl) {
return szUrl
.split("\n")
.map(function (z) {
// unsigned long long: 0~18446744073709551615
return z
.trim()
.match(/-length=([\d]{1,20}) -md5=([\da-f]{32}) -slicemd5=([\da-f]{32})[\s\S]+"([\s\S]+)"/i);
})
.filter(function (z) {
return z;
})
.map(function (info) {
return {
md5: info[2],
md5s: info[3],
size: Number.parseInt(info[1]),
path: info[4],
};
});
};
DuParser.parseDu_v3 = function parseDu_v3(szUrl) {
var raw = atob(szUrl.slice(6).replace(/\s/g, ""));
if (raw.slice(0, 5) !== "BDFS\x00") {
return null;
}
var buf = new SimpleBuffer(raw);
var ptr = 9;
var arrFiles = [];
var fileInfo, nameSize;
var total = buf.readUInt(5);
var i;
for (i = 0; i < total; i++) {
// 大小 (8 bytes)
// MD5 + MD5S (0x20)
// nameSize (4 bytes)
// Name (unicode)
fileInfo = {};
fileInfo.size = buf.readULong(ptr + 0);
fileInfo.md5 = buf.readHex(ptr + 8, 0x10);
fileInfo.md5s = buf.readHex(ptr + 0x18, 0x10);
nameSize = buf.readUInt(ptr + 0x28) << 1;
fileInfo.nameSize = nameSize;
ptr += 0x2c;
fileInfo.path = buf.readUnicode(ptr, nameSize);
arrFiles.push(fileInfo);
ptr += nameSize;
}
return arrFiles;
};
DuParser.parseDu_v4 = function parseDu_v3(szUrl) {
var err_20g = [];
var err_short = [];
var list = szUrl
.split("\n")
.map(function (z) {
return z
.trim()
.match(/^([\da-f]{9}[\da-z][\da-f]{22})(?:#([\da-f]{9}[\da-z][\da-f]{22}))?#([\d]{1,20})#([\s\S]+)/i); // 22.8.29新增支持第10位为g-z的加密md5, 输入后自动解密转存
})
.filter(function (z) {
return z;
})
.map(function (info, i) {
var md5 = decryptMd5(info[1].toLowerCase());
var md5s = info[2] ? decryptMd5(info[2].toLowerCase()) : null;
var fs = Number.parseInt(info[3]);
if (md5s == null) { // 256KiB means md5s = md5
if (fs <= 262144) {
md5s = md5;
}
else {
err_short.push(i);
return null;
}
}
if (fs > 21474836480) { // over 20GiB not supported
err_20g.push(i);
return null;
}
return {
// 标准码 / 短版标准码(无md5s)
md5: md5,
md5s: md5s,
size: fs,
path: info[4],
};
});
if (err_short.length > 0) {
throw "百度不再支持秒传短链";
}
else if (err_20g.length > 0) {
throw "百度不再支持超过20G单的文件";
}
return list;
};
/**
* 一个简单的类似于 NodeJS Buffer 的实现.
* 用于解析游侠度娘提取码。
* @param {SimpleBuffer}
*/
function SimpleBuffer(str) {
this.fromString(str);
}
SimpleBuffer.toStdHex = function toStdHex(n) {
return ("0" + n.toString(16)).slice(-2);
};
SimpleBuffer.prototype.fromString = function fromString(str) {
var len = str.length;
this.buf = new Uint8Array(len);
for (var i = 0; i < len; i++) {
this.buf[i] = str.charCodeAt(i);
}
};
SimpleBuffer.prototype.readUnicode = function readUnicode(index, size) {
if (size & 1) {
size++;
}
var bufText = Array.prototype.slice
.call(this.buf, index, index + size)
.map(SimpleBuffer.toStdHex);
var buf = [""];
for (var i = 0; i < size; i += 2) {
buf.push(bufText[i + 1] + bufText[i]);
}
return JSON.parse('"' + buf.join("\\u") + '"');
};
SimpleBuffer.prototype.readNumber = function readNumber(index, size) {
var ret = 0;
for (var i = index + size; i > index;) {
ret = this.buf[--i] + ret * 256;
}
return ret;
};
SimpleBuffer.prototype.readUInt = function readUInt(index) {
return this.readNumber(index, 4);
};
SimpleBuffer.prototype.readULong = function readULong(index) {
return this.readNumber(index, 8);
};
SimpleBuffer.prototype.readHex = function readHex(index, size) {
return Array.prototype.slice
.call(this.buf, index, index + size)
.map(SimpleBuffer.toStdHex)
.join("");
};
// EXTERNAL MODULE: ./src/components/updateInfo.html
var updateInfo = __webpack_require__(184);
var updateInfo_default = /*#__PURE__*/__webpack_require__.n(updateInfo);
;// CONCATENATED MODULE: ./src/common/swalConfig.tsx
/*
* @Author: mengzonefire
* @Date: 2021-08-26 12:16:57
* @LastEditTime: 2023-02-18 21:27:36
* @LastEditors: mengzonefire
* @Description: 存放各Swal弹窗的固定参数配置
*/
var SwalConfig = {
inputView: {
title: "请输入秒传&保存路径",
showCancelButton: true,
html: "\n ",
confirmButtonText: "确定",
cancelButtonText: "取消",
customClass: { htmlContainer: "mzf_html_container" },
},
processView: {
showCloseButton: true,
showConfirmButton: false,
allowOutsideClick: false,
},
finishView: {
showCloseButton: true,
allowOutsideClick: false,
},
genUnfinish: {
title: "检测到上次未完成的秒传任务",
text: "是否继续该任务?",
showCancelButton: true,
allowOutsideClick: false,
confirmButtonText: "是",
cancelButtonText: "否",
},
genUnfinish2: {
title: "检测到上次未正常退出的秒传任务",
text: "是否恢复该任务?",
showCancelButton: true,
allowOutsideClick: false,
confirmButtonText: "是",
cancelButtonText: "否",
},
genView: {
title: "请输入需要生成的文件路径",
input: "textarea",
showCancelButton: true,
showCloseButton: true,
inputPlaceholder: "[支持批量(换行分隔)]",
confirmButtonText: "确定",
cancelButtonText: "取消",
inputValidator: function (value) {
if (!value) {
return "文件路径不能为空";
}
},
},
updateInfo: {
title: "\u79D2\u4F20\u94FE\u63A5\u63D0\u53D6 v" + version + " (" + updateDate + ")",
showCloseButton: true,
allowOutsideClick: false,
confirmButtonText: "知道了",
html: (updateInfo_default()),
},
checkRecursive: {
icon: "info",
title: "包含文件夹, 是否递归生成?",
text: "若选是, 将同时生成各级子文件夹下的文件",
allowOutsideClick: false,
focusCancel: true,
showCancelButton: true,
reverseButtons: true,
showCloseButton: true,
confirmButtonText: "是",
cancelButtonText: "否",
},
settingView: {
title: "秒传链接提取 设置页",
showCloseButton: true,
showCancelButton: true,
confirmButtonText: "确定",
cancelButtonText: "取消",
allowOutsideClick: false,
html: " ",
},
settingWarning: {
title: "设置成功 刷新页面生效",
showCloseButton: true,
allowOutsideClick: false,
confirmButtonText: "知道了",
},
selectNoFileWarning: {
title: "请勾选要生成秒传的文件/文件夹",
icon: "error",
showCloseButton: true,
confirmButtonText: "知道了",
},
};
;// CONCATENATED MODULE: external "Swal"
const external_Swal_namespaceObject = Swal;
var external_Swal_default = /*#__PURE__*/__webpack_require__.n(external_Swal_namespaceObject);
;// CONCATENATED MODULE: ./src/common/swalBase.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 定义全套的前台弹窗逻辑, 在Swal的回调函数内调用***Task类内定义的任务代码
*/
var __assign = (undefined && undefined.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
};
var Swalbase = /** @class */ (function () {
function Swalbase(rapiduploadTask, generatebdlinkTask) {
this.rapiduploadTask = rapiduploadTask;
this.generatebdlinkTask = generatebdlinkTask;
}
// 合并swal参数
Swalbase.prototype.mergeArg = function () {
var inputArgs = [];
for (var _i = 0; _i < arguments.length; _i++) {
inputArgs[_i] = arguments[_i];
}
var output = {};
var swalCfgArgs = {
// 禁用backdrop动画, 阻止多次弹窗时的屏闪
showClass: { backdrop: "swal2-noanimation" },
hideClass: { backdrop: "swal2-noanimation" },
};
$.extend.apply($, __spreadArray([output, this.swalGlobalArgs, swalCfgArgs], inputArgs));
return output;
};
// 点击 "秒传链接" 后显示的弹窗
Swalbase.prototype.inputView = function (inputValue) {
if (inputValue === void 0) { inputValue = ""; }
return __awaiter(this, void 0, void 0, function () {
var pathValue, preConfirm, willOpen;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(GM_getValue("listen-clipboard") && !inputValue)) return [3 /*break*/, 2];
return [4 /*yield*/, parseClipboard()];
case 1:
// 标志位true 且 inputValue为空(非一键秒传进入时) 从剪贴板读取有效的秒传链接
inputValue = _a.sent();
_a.label = 2;
case 2:
pathValue = GM_getValue("last_dir") || "";
preConfirm = function () {
// 手动读取Multiple inputs内的数据, 由于未设置input参数, 原生Validator不生效, 自行添加Validator逻辑
inputValue = $("#mzf-rapid-input")[0].value;
pathValue = $("#mzf-path-input")[0]
.value.trim()
.replace(/(\s+)?\/(\s+)?/g, "/"); // 修正不合规的路径(空白开头/结尾)
if (!inputValue) {
external_Swal_default().showValidationMessage("秒传不能为空");
return false;
}
if (commandList.includes(inputValue.trim())) {
// 输入支持的命令, 跳出检查
inputValue = inputValue.trim();
return;
}
try {
if (!DuParser.parse(inputValue).length) {
external_Swal_default().showValidationMessage("\u672A\u8BC6\u522B\u5230\u6B63\u786E\u7684\u94FE\u63A5 \u67E5\u770B\u652F\u6301\u683C\u5F0F
");
return false;
}
}
catch (e) {
external_Swal_default().showValidationMessage("" + ('' + e) + "
");
return false;
}
if (pathValue.match(illegalPathPattern)) {
external_Swal_default().showValidationMessage('保存路径不能含有字符\\":*?<>|, 示例:/GTA5/');
return false;
}
};
willOpen = function () {
$("#swal2-html-container")
.css("font-size", "1rem")
.css("display", "grid")
.css("margin", "0");
$("#mzf-rapid-input")[0].value = inputValue;
$("#mzf-path-input")[0].value = pathValue;
$("#mzf-rapid-input").on("input", function (event) {
var result = parseQueryLink(event.target.value);
if (DuParser.parse(result).length)
event.target.value = result;
}); // 绑定输入框事件, 输入一键秒传后尝试转换为普通秒传
};
external_Swal_default().fire(this.mergeArg(SwalConfig.inputView, {
preConfirm: preConfirm,
willOpen: willOpen,
})).then(function (result) {
if (result.isConfirmed) {
if (inputValue === "set")
_this.settingView();
else if (inputValue === "gen")
_this.genView();
else if (inputValue === "info")
_this.updateInfo(function () { });
else {
_this.rapiduploadTask.reset();
_this.rapiduploadTask.fileInfoList = DuParser.parse(inputValue);
GM_setValue("last_dir", pathValue);
if (!pathValue) {
// 路径留空
_this.rapiduploadTask.isDefaultPath = true;
var nowPath = location.href.match(/path=(.+?)(?:&|$)/);
if (nowPath) {
pathValue = decodeURIComponent(nowPath[1]);
}
else {
nowPath = location.href.match(/\/\/pan\.baidu\.com\/wap\/home#\/dir\/(.+?)(?:&|$)/);
if (nowPath) {
pathValue = decodeURIComponent(nowPath[1]);
}
else {
pathValue = "/";
}
}
}
if (pathValue.charAt(0) !== "/")
pathValue = "/" + pathValue; // 补齐路径前缀斜杠
if (pathValue.charAt(pathValue.length - 1) !== "/")
pathValue += "/"; // 补全路径结尾的斜杠
if (locUrl.includes(baiduSyncPage) &&
!pathValue.includes(syncPathPrefix))
pathValue = syncPathPrefix + pathValue; // 补全同步页路径前缀
console.log("\u79D2\u4F20\u6587\u4EF6\u4FDD\u5B58\u5230: " + pathValue); // debug
_this.rapiduploadTask.savePath = pathValue;
_this.processView(false);
}
}
});
return [2 /*return*/];
}
});
});
};
// 转存/生成过程中的弹窗
Swalbase.prototype.processView = function (isGen) {
var _this = this;
var swalArg = {
title: isGen ? "秒传生成中" : "文件转存中",
html: isGen
? "正在生成第 0 个
正在获取文件列表...
"
: "正在转存第 0 个",
willOpen: function () {
external_Swal_default().showLoading();
isGen || _this.saveFileWork();
},
};
external_Swal_default().fire(this.mergeArg(SwalConfig.processView, swalArg));
};
// 转存/生成秒传完成的弹窗
Swalbase.prototype.finishView = function (isGen) {
var _this = this;
var action = isGen ? "生成" : "转存";
var fileInfoList = isGen
? this.generatebdlinkTask.fileInfoList
: this.rapiduploadTask.fileInfoList;
var parseResult = parsefileInfo(fileInfoList);
this.parseResult = parseResult;
var checkboxArg = {
input: "checkbox",
inputValue: GM_getValue("with_path"),
inputPlaceholder: "导出文件夹目录结构",
}; // 全部失败不显示此checkbox, 22.5.22: 全部失败也显示
var html = (isGen ? htmlDocument : "") + // 生成模式下添加文档入口
(parseResult.htmlInfo && isGen ? "
" : "") +
parseResult.htmlInfo; // 添加失败列表, 生成模式下添加顶部空行分隔
var htmlFooter = "";
if (htmlFooter)
htmlFooter = "
" + htmlFooter; // 添加底部空行分隔
var successAny = fileInfoList.length - parseResult.failList.length > 0;
var swalArg = __assign(__assign({ title: action + "\u5B8C\u6BD5 \u5171" + fileInfoList.length + "\u4E2A, \u5931\u8D25" + parseResult.failList.length + "\u4E2A!", confirmButtonText: isGen ? "复制秒传代码" : "确认", showDenyButton: isGen, denyButtonText: "复制一键秒传", denyButtonColor: "#ecae3c", reverseButtons: true, html: html + htmlFooter }, (isGen && checkboxArg)), { willOpen: function () {
if (isGen) {
GM_setValue("unClose", true); // 生成模式设置结果窗口未关闭的标记
}
else if (successAny) {
_this.addOpenDirBtn(); // 转存模式时添加 "打开目录" 按钮
}
},
// 秒传生成的 "复制一键秒传" 按钮回调
preDeny: function () {
var with_path = $("#swal2-checkbox")[0].checked;
GM_setValue("with_path", with_path);
if (!with_path)
GM_setClipboard(bdlinkPrefix + parseResult.bdcode.replace(/0+#0+#0#.*\/(?:\n|$)/, '').replace(/\/.+\//g, "").toBase64());
// 去除目录结构, 并转换为一键秒传
else
GM_setClipboard(bdlinkPrefix + parseResult.bdcode.toBase64()); // 转换为一键秒传
external_Swal_default().getDenyButton().innerText = "复制成功,点击右上关闭";
var footer = external_Swal_default().getFooter();
footer.innerHTML = htmlAboutBdlink;
footer.style.display = "flex";
return false;
}, preConfirm: function () {
if (isGen) {
// 生成模式, "复制秒传代码"按钮
var with_path = $("#swal2-checkbox")[0].checked;
GM_setValue("with_path", with_path);
if (!with_path)
GM_setClipboard(parseResult.bdcode.replace(/0+#0+#0#.*\/(?:\n|$)/, '').replace(/(#\/.+\/)|(#\/)/g, "#"));
// 去除秒传链接中的目录结构(仅保留文件名)
else {
var pathType = GM_getValue("pathType") === undefined
? "relative"
: GM_getValue("pathType");
if ("absolute" === pathType)
GM_setClipboard(parseResult.bdcode);
// 保留完整的文件路径(绝对路径)
else if ("relative" === pathType) {
// 去除前置的路径以及路径开头的'/', 将绝对路径转换为相对路径 (默认执行)
var localPathPrefix = "";
var nowPath = location.href.match(/path=(.+?)(?:&|$)/);
if (nowPath)
localPathPrefix = decodeURIComponent(nowPath[1]);
GM_setClipboard(parseResult.bdcode.replace(new RegExp("(#" + localPathPrefix + "/)|(#/)", "g"), "#"));
}
}
external_Swal_default().getConfirmButton().innerText = "复制成功,点击右上关闭";
return false;
}
else {
// 转存模式, "确定" 按钮
refreshList(); // 调用刷新文件列表的方法
return undefined;
}
} });
external_Swal_default().fire(this.mergeArg(SwalConfig.finishView, swalArg)).then(function (result) {
if (result.isDismissed || result.dismiss === (external_Swal_default()).DismissReason.close) {
GM_deleteValue("unfinish"); // 点击了右上角的关闭按钮, 清除任务进度数据
GM_setValue("unClose", false);
}
});
};
// 生成文件夹秒传, 是否递归生成提示
Swalbase.prototype.checkRecursive = function () {
var _this = this;
external_Swal_default().fire(this.mergeArg(SwalConfig.checkRecursive)).then(function (result) {
if (result.isConfirmed) {
_this.generatebdlinkTask.recursive = true;
}
else if (result.dismiss === (external_Swal_default()).DismissReason.cancel)
_this.generatebdlinkTask.recursive = false;
else
return;
_this.processView(true);
_this.generatebdlinkTask.scanFile(0);
});
};
// 设置页
Swalbase.prototype.settingView = function () {
var _this = this;
var willOpen = function () {
$("#swal2-html-container")
.css("font-size", "1rem")
.css("display", "grid")
.css("margin", "0");
$("#mzf-theme")[0].value = GM_getValue("swalThemes") || "Default";
$("#mzf-pathType")[0].value = GM_getValue("pathType") || "relative";
$("#mzf-listen-clipboard")[0].checked = Boolean(GM_getValue("listen-clipboard"));
};
var preConfirm = function () { return __awaiter(_this, void 0, void 0, function () {
var error_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
// 设置主题
GM_setValue("swalThemes", $("#mzf-theme")[0].value);
// 设置生成秒传导出路径(相对/绝对)
GM_setValue("pathType", $("#mzf-pathType")[0].value);
if (!$("#mzf-listen-clipboard")[0].checked) return [3 /*break*/, 4];
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, navigator.clipboard.readText()];
case 2:
_a.sent();
GM_setValue("listen-clipboard", $("#mzf-listen-clipboard")[0].checked);
return [3 /*break*/, 4];
case 3:
error_1 = _a.sent();
showAlert(appError.ClipboardPremissionErr);
return [2 /*return*/];
case 4: return [2 /*return*/];
}
});
}); };
external_Swal_default().fire(this.mergeArg(SwalConfig.settingView, {
willOpen: willOpen,
preConfirm: preConfirm,
})).then(function (result) {
if (result.isConfirmed)
external_Swal_default().fire(_this.mergeArg(SwalConfig.settingWarning));
});
};
// 生成页 (输入路径列表进行秒传生成)
Swalbase.prototype.genView = function () {
var _this = this;
external_Swal_default().fire(this.mergeArg(SwalConfig.genView)).then(function (result) {
if (result.isConfirmed) {
_this.generatebdlinkTask.reset();
result.value.split("\n").forEach(function (filePath) {
if (filePath.charAt(0) !== "/")
filePath = "/" + filePath; // 补齐路径前缀斜杠
if (locUrl.includes(baiduSyncPage) &&
!filePath.includes(syncPathPrefix))
filePath = syncPathPrefix + filePath; // 补全同步页路径前缀
_this.generatebdlinkTask.fileInfoList.push({
path: filePath,
});
});
_this.processView(true); // 显示进度弹窗
_this.genFileWork(false, true); // 跳过获取选择文件列表和扫描文件夹的步骤
_this.generatebdlinkTask.generateBdlink(0); // 开始生成任务
}
});
};
// 生成秒传未完成任务提示
Swalbase.prototype.genUnfinish = function (onConfirm, onCancel) {
external_Swal_default().fire(this.mergeArg(GM_getValue("unClose")
? SwalConfig.genUnfinish2
: SwalConfig.genUnfinish)).then(function (result) {
if (result.isConfirmed)
onConfirm();
else if (result.dismiss === (external_Swal_default()).DismissReason.cancel)
onCancel();
});
};
// 生成秒传, 未选择任何文件的提示
Swalbase.prototype.selectNoFileWarning = function () {
external_Swal_default().fire(this.mergeArg(SwalConfig.selectNoFileWarning));
};
// 更新信息页
Swalbase.prototype.updateInfo = function (onConfirm) {
external_Swal_default().fire(this.mergeArg(SwalConfig.updateInfo)).then(function (result) {
if (result.isConfirmed)
onConfirm();
});
};
// 以下的方法都是任务操作逻辑, 不是弹窗逻辑
Swalbase.prototype.saveFileWork = function () {
var _this = this;
this.rapiduploadTask.onFinish = function () { return _this.finishView(false); };
this.rapiduploadTask.onProcess = function (i, fileInfoList) {
external_Swal_default().getHtmlContainer().querySelector("file_num").textContent = i + 1 + " / " + fileInfoList.length;
};
this.rapiduploadTask.start(); // 开始转存任务
};
Swalbase.prototype.genFileWork = function (isUnfinish, isGenView) {
var _this = this;
if (this.generatebdlinkTask.isSharePage)
this.generatebdlinkTask.selectList = getShareFileList();
else if (!isGenView)
this.generatebdlinkTask.selectList = getSelectedFileList();
if (
// 未选择文件 + 无未完成的生成任务 + 不在生成页 -> 弹出未选择生成文件的警告弹出
!this.generatebdlinkTask.selectList.length &&
!isGenView &&
!isUnfinish) {
this.selectNoFileWarning();
return;
}
this.generatebdlinkTask.onProcess = function (i, fileInfoList) {
external_Swal_default().getHtmlContainer().querySelector("file_num").textContent = i + 1 + " / " + fileInfoList.length;
external_Swal_default().getHtmlContainer().querySelector("gen_prog").textContent = "0%";
};
this.generatebdlinkTask.onProgress = function (e, text) {
if (text === void 0) { text = ""; }
if (text) {
// 显示自定义文本
external_Swal_default().getHtmlContainer().querySelector("gen_prog").textContent = text;
return;
}
if (!e || typeof e.total !== "number")
return; // 参数数据不正确 跳过
external_Swal_default().getHtmlContainer().querySelector("gen_prog").textContent = ((e.loaded / e.total) * 100).toFixed(0) + "%";
};
if (this.generatebdlinkTask.isSharePage) {
this.generatebdlinkTask.onHasNoDir = function () {
_this.processView(true);
_this.generatebdlinkTask.scanShareFile(0);
};
}
else {
this.generatebdlinkTask.onHasNoDir = function () {
_this.processView(true);
_this.generatebdlinkTask.generateBdlink(0);
};
this.generatebdlinkTask.onHasDir = function () { return _this.checkRecursive(); };
}
this.generatebdlinkTask.onFinish = function () { return _this.finishView(true); };
if (!isUnfinish && !isGenView)
this.generatebdlinkTask.start(); // 执行新任务初始化
};
Swalbase.prototype.checkUnfinish = function () {
var _this = this;
if (GM_getValue("unfinish")) {
this.genUnfinish(function () {
_this.processView(true);
_this.genFileWork(true, false);
var unfinishInfo = GM_getValue("unfinish");
_this.generatebdlinkTask.fileInfoList = unfinishInfo.file_info_list;
unfinishInfo.isCheckMd5
? _this.generatebdlinkTask.checkMd5(unfinishInfo.file_id)
: _this.generatebdlinkTask.generateBdlink(unfinishInfo.file_id);
}, // 确认继续未完成任务
function () {
GM_deleteValue("unfinish");
_this.genFileWork(false, false);
} // 不继续未完成任务, 清除数据, 开启新任务
);
}
else {
this.genFileWork(false, false);
} // 没有未完成任务, 直接开启新任务
};
// 添加 "打开目录" 按钮
Swalbase.prototype.addOpenDirBtn = function () {
if (this.rapiduploadTask.isDefaultPath)
return; // 转存路径留空, 跳出
var _dir = (this.rapiduploadTask.savePath || "").replace(/\/$/, ""); // 去除路径结尾的"/"
if (_dir.charAt(0) !== "/")
_dir = "/" + _dir; // 补齐路径开头的"/"
var cBtn = external_Swal_default().getConfirmButton();
var btn = cBtn.cloneNode();
btn.textContent = "打开目录";
btn.style.backgroundColor = "#ecae3c";
var nowPath = location.href.match(/(path=(.+?))(?:&|$)/);
btn.onclick = function () {
if (nowPath) {
location.href = location.href.replace(
// 仅替换path参数, 不修改其他参数
nowPath[1], "path=" + encodeURIComponent(_dir));
}
else {
var connectChar = location.href.includes("?") ? "&" : "?"; // 确定参数的连接符
location.href += connectChar + "path=" + encodeURIComponent(_dir);
} // 没有找到path参数, 直接添加
external_Swal_default().close();
};
if ((nowPath ? nowPath[2] : "%2F") != encodeURIComponent(_dir))
// 当前已在转存目录时不添加按钮
cBtn.before(btn);
};
return Swalbase;
}());
/* harmony default export */ const swalBase = (Swalbase);
;// CONCATENATED MODULE: ./src/common/ajax.tsx
/*
* @Author: mengzonefire
* @Date: 2021-08-27 14:48:24
* @LastEditTime: 2023-02-14 04:10:09
* @LastEditors: mengzonefire
* @Description: 自封装JQ ajax方法
*/
var ajax_assign = (undefined && undefined.__assign) || function () {
ajax_assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return ajax_assign.apply(this, arguments);
};
var DEBUG = false;
function ajax(config, callback, failback) {
GM_xmlhttpRequest(ajax_assign(ajax_assign({}, config), { onload: function (r) {
// console.log(r); // debug
if (Math.floor(r.status / 100) === 2) {
if (DEBUG) {
console.info("%s version: %s 接口返回: %s", TAG, version, JSON.stringify(r.response)); // user debug
}
callback(r);
}
else
failback(r.status);
}, onerror: function () {
failback(ajaxError);
} }));
}
;// CONCATENATED MODULE: external "SparkMD5"
const external_SparkMD5_namespaceObject = SparkMD5;
var external_SparkMD5_default = /*#__PURE__*/__webpack_require__.n(external_SparkMD5_namespaceObject);
;// CONCATENATED MODULE: ./src/baidu/common/rapiduploadTask.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 百度网盘 秒传转存任务实现
*/
var RapiduploadTask = /** @class */ (function () {
function RapiduploadTask() {
}
RapiduploadTask.prototype.reset = function () {
this.bdstoken = getBdstoken();
console.log("bdstoken\u72B6\u6001: " + (this.bdstoken ? "获取成功" : "获取失败")); // debug
this.fileInfoList = [];
this.savePath = "";
this.isDefaultPath = false;
this.onFinish = function () { };
this.onProcess = function () { };
};
RapiduploadTask.prototype.start = function () {
this.saveFileV2(0);
};
/**
* @description: 转存秒传 接口2
* @param {number} i
*/
RapiduploadTask.prototype.saveFileV2 = function (i) {
var _this = this;
if (i >= this.fileInfoList.length) {
this.onFinish(this.fileInfoList);
return;
}
this.onProcess(i, this.fileInfoList);
var file = this.fileInfoList[i];
var onFailed = function (statusCode) {
file.errno = statusCode;
_this.saveFileV2(i + 1);
};
if (file.path.endsWith("/") && file.size === 0) {
createDir.call(this, file.path.replace(/\/+$/, ''), function (data) {
data = data.response;
file.errno = data.errno;
_this.saveFileV2(i + 1);
}, onFailed);
return;
}
// 文件名为空
if (file.path === "/") {
file.errno = -7;
this.saveFileV2(i + 1);
return;
}
rapiduploadCreateFile.call(this, file, function (data) {
console.info(JSON.stringify(data));
data = data.response;
file.errno = 2 === data.errno ? 114 : data.errno;
file.errno = 31190 === file.errno ? 404 : file.errno;
_this.saveFileV2(i + 1);
}, onFailed);
};
return RapiduploadTask;
}());
/* harmony default export */ const rapiduploadTask = (RapiduploadTask);
function createDir(path, onResponsed, onFailed) {
ajax({
url: "" + create_url + (this.bdstoken ? "?bdstoken=" + this.bdstoken : ""),
method: "POST",
responseType: "json",
data: convertData({
block_list: JSON.stringify([]),
path: this.savePath + path,
isdir: 1,
rtype: 0,
}),
headers: {
"User-Agent": UA,
}
}, function (data) {
if (0 !== data.response.errno) {
onFailed(data.response.errno);
}
else {
onResponsed(data);
}
}, onFailed);
}
var defaultRetryDelay = 200;
var retryDelayIncrement = 100;
var randomCaseRetryCount = 5;
function generateRandomInt(max) {
return Math.floor(Math.random() * (max + 1));
}
function transformCase(str, mask) {
var next = mask;
return str.toLowerCase().split('').map(function (c) {
if (c >= 'a' && c <= 'z') {
if (next % 2 === 1) {
c = c.toUpperCase();
}
next = next >> 1;
}
return c;
})
.join('');
}
function rapiduploadCreateFile(file, onResponsed, onFailed) {
var charCount = file.md5.toLowerCase().split('').filter(function (c) { return c >= 'a' && c <= 'z'; }).length;
var maxCombination = 1 << charCount;
var attempts = [
0,
maxCombination - 1, // 大写
];
var gen = randomCaseRetryCount;
while (attempts.length < maxCombination && gen > 0) {
var n = void 0;
do {
n = generateRandomInt(maxCombination - 1);
} while (attempts.includes(n));
attempts.push(n);
gen--;
}
tryRapiduploadCreateFile.call(this, file, onResponsed, onFailed, attempts, 0, defaultRetryDelay);
}
// 此接口测试结果如下: 错误md5->返回"errno": 31190, 正确md5+错误size->返回"errno": 2
// 此外, 即使md5和size均正确, 连续请求时依旧有小概率返回"errno": 2, 故建议加入retry策略
function tryRapiduploadCreateFile(file, onResponsed, onFailed, attempts, attemptIndex, retryDelay) {
var _this = this;
if (retryDelay === void 0) { retryDelay = 0; }
var contentMd5 = transformCase(file.md5, attempts[attemptIndex]);
var sliceMd5 = file.md5s.toLowerCase();
ajax({
url: "" + rapidupload_url + (this.bdstoken ? "?bdstoken=" + this.bdstoken : ""),
method: "POST",
responseType: "json",
data: convertData({
path: this.savePath + file.path.replace(illegalPathPattern, "_"),
"content-length": file.size,
"content-md5": contentMd5,
"slice-md5": sliceMd5,
rtype: 0, // rtype=3覆盖文件, rtype=0则返回报错, 不覆盖文件, 默认为rtype=1 (自动重命名, 1和2是两种不同的重命名策略)
}),
headers: {
"User-Agent": UA,
}
}, function (data) {
// console.log(data.response); // debug
if (31039 === data.response.errno && 31039 != file.errno) {
file.errno = 31039;
file.path = suffixChange(file.path);
tryRapiduploadCreateFile.call(_this, file, onResponsed, onFailed, attempts, attemptIndex);
}
else if (404 === data.response.errno && attempts.length > attemptIndex + 1) {
//console.log(`转存接口错误, 重试${retry + 1}次: ${file.path}`); // debug
setTimeout(function () {
tryRapiduploadCreateFile.call(_this, file, onResponsed, onFailed, attempts, attemptIndex + 1, retryDelay + retryDelayIncrement);
}, retryDelay);
}
else if (0 !== data.response.errno) {
onFailed(data.response.errno);
}
else
onResponsed(data);
}, onFailed);
}
;// CONCATENATED MODULE: ./src/baidu/common/generatebdlinkTask.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 百度网盘 秒传生成任务实现
*/
// import { createFileV2 } from "./rapiduploadTask";
var listMinDelayMsec = 1000;
var retryDelaySec = 30;
// 普通生成:
var GeneratebdlinkTask = /** @class */ (function () {
function GeneratebdlinkTask() {
}
GeneratebdlinkTask.prototype.reset = function () {
this.isGenView = false;
this.isSharePage = false;
this.recursive = false;
this.savePath = "";
this.bdstoken = getBdstoken(); // 此处bdstoken不可删除, 会在下方createFileV2方法调用
this.dirList = [];
this.selectList = [];
this.fileInfoList = [];
this.onFinish = function () { };
this.onProcess = function () { };
this.onProgress = function () { };
this.onHasDir = function () { };
this.onHasNoDir = function () { };
};
/**
* @description: 执行新任务的初始化步骤 扫描选择的文件列表
*/
GeneratebdlinkTask.prototype.start = function () {
if (this.isSharePage) {
this.logid = getLogid();
this.surl = getSurl();
if (!this.surl) {
showAlert("surl获取失败");
return;
}
this.parseShareFileList();
this.onHasNoDir();
}
else {
this.parseMainFileList();
if (this.dirList.length)
this.onHasDir();
else
this.onHasNoDir();
}
};
GeneratebdlinkTask.prototype.scanShareFile = function (i, page, retryAllowed) {
var _this = this;
if (page === void 0) { page = 1; }
if (retryAllowed === void 0) { retryAllowed = 5; }
if (i >= this.dirList.length) {
this.generateBdlink(0);
return;
}
this.onProgress(false, "\u6B63\u5728\u83B7\u53D6\u6587\u4EF6\u5217\u8868, \u7B2C" + (i + 1) + "\u4E2A");
var shareid = unsafeWindow.yunData ? unsafeWindow.yunData.shareid : unsafeWindow.locals.shareid;
var uk = unsafeWindow.yunData ? unsafeWindow.yunData.share_uk : unsafeWindow.locals.share_uk;
ajax({
url: sharelist_url + "&dir=" + encodeURIComponent(this.dirList[i]) + "&logid=" + this.logid + "&shareid=" + shareid + "&uk=" + uk + "&page=" + page,
method: "GET",
responseType: "json",
}, function (data) {
data = data.response;
if (!data.errno) {
if (!data.list.length) {
// 返回列表为空, 即此文件夹文件全部扫描完成
if (page === 1) {
_this.fileInfoList.push({
path: _this.dirList[i] + '/',
size: 0,
fs_id: '',
md5: '00000000000000000000000000000000',
md5s: '00000000000000000000000000000000',
});
}
setTimeout(function () {
_this.scanShareFile(i + 1);
}, listMinDelayMsec);
}
else {
_this.parseShareFileList(data.list);
if (data.list.length >= listLimit) {
setTimeout(function () {
_this.scanShareFile(i, page + 1); // 下一页
}, listMinDelayMsec);
}
else {
setTimeout(function () {
_this.scanShareFile(i + 1);
}, listMinDelayMsec);
}
}
}
else {
_this.fileInfoList.push({
path: _this.dirList[i],
isdir: 1,
errno: data.errno,
}); // list接口访问失败, 添加失败信息
setTimeout(function () {
_this.scanShareFile(i + 1);
}, listMinDelayMsec);
}
}, function (statusCode) {
if (statusCode === 400 && retryAllowed > 0) { // rate limit
_this.onProgress(false, retryDelaySec + "\u79D2\u540E\u91CD\u8BD5 ...");
setTimeout(function () {
_this.scanShareFile(i, page, retryAllowed - 1);
}, listMinDelayMsec + retryDelaySec * 1000);
}
else {
_this.fileInfoList.push({
path: _this.dirList[i],
errno: statusCode,
});
setTimeout(function () {
_this.scanShareFile(i + 1);
}, listMinDelayMsec);
}
});
};
/**
* @description: 选择的列表包含文件夹, 获取文件夹下的子文件
* @param {number} i 条目index
* @param {number} start 列表接口检索起点(即翻页参数)
*/
GeneratebdlinkTask.prototype.scanFile = function (i, start, retryAllowed) {
var _this = this;
if (start === void 0) { start = 0; }
if (retryAllowed === void 0) { retryAllowed = 5; }
if (i >= this.dirList.length) {
this.generateBdlink(0);
return;
}
ajax({
url: "" + list_url + encodeURIComponent(this.dirList[i]) + "&recursion=" + (this.recursive ? 1 : 0) + "&start=" + start,
method: "GET",
responseType: "json",
}, // list接口自带递归参数recursion
function (data) {
data = data.response;
if (!data.errno) {
if (!data.list.length) {
// 返回列表为空, 即此文件夹文件全部扫描完成
if (start === 0) {
_this.fileInfoList.push({
path: _this.dirList[i] + '/',
size: 0,
fs_id: '',
md5: '00000000000000000000000000000000',
md5s: '00000000000000000000000000000000',
});
}
setTimeout(function () {
_this.scanFile(i + 1);
}, listMinDelayMsec);
}
else {
data.list.forEach(function (item) {
if (!item.isdir) {
_this.fileInfoList.push({
path: item.path,
size: item.size,
fs_id: item.fs_id,
md5: "",
md5s: "",
}); // 筛选文件(isdir=0)
}
});
if (data.has_more) {
setTimeout(function () {
_this.scanFile(i, start + listLimit); // 从下一个起点继续检索列表
}, listMinDelayMsec);
}
else {
setTimeout(function () {
_this.scanFile(i + 1);
}, listMinDelayMsec);
}
}
}
else {
_this.fileInfoList.push({
path: _this.dirList[i],
isdir: 1,
errno: data.errno,
}); // list接口访问失败, 添加失败信息
setTimeout(function () {
_this.scanFile(i + 1);
}, listMinDelayMsec);
}
}, function (statusCode) {
if (statusCode === 400 && retryAllowed > 0) { // rate limit
_this.onProgress(false, retryDelaySec + "\u79D2\u540E\u91CD\u8BD5 ...");
setTimeout(function () {
_this.scanFile(i, start, retryAllowed - 1);
}, listMinDelayMsec + retryDelaySec * 1000);
}
else {
_this.fileInfoList.push({
path: _this.dirList[i],
errno: statusCode,
});
setTimeout(function () {
_this.scanFile(i + 1);
}, listMinDelayMsec);
}
});
};
/**
* @description: 顺序执行生成任务
* @param {number} i
*/
GeneratebdlinkTask.prototype.generateBdlink = function (i) {
// 保存任务进度数据, 分享页生成不保存
if (!this.isSharePage)
GM_setValue("unfinish", {
file_info_list: this.fileInfoList,
file_id: i,
});
// 生成完成
if (i >= this.fileInfoList.length) {
this.onFinish(this.fileInfoList);
return;
}
var file = this.fileInfoList[i];
if (file.fs_id === '') {
this.generateBdlink(i + 1);
}
else {
// 刷新弹窗内的任务进度
this.onProcess(i, this.fileInfoList);
// 跳过扫描失败的目录路径
if (file.errno && file.isdir) {
this.generateBdlink(i + 1);
return;
}
// 普通生成步骤
this.isSharePage ? this.getShareDlink(i) : this.getDlink(i);
}
};
/**
* @description: 获取文件信息: size, md5(可能错误), fs_id
* @param {number} i
*/
GeneratebdlinkTask.prototype.getFileInfo = function (i) {
var _this = this;
var file = this.fileInfoList[i];
ajax({
url: meta_url + encodeURIComponent(file.path),
responseType: "json",
method: "GET",
}, function (data) {
data = data.response;
if (!data.error_code) {
if (data.list[0].isdir) {
console.log(1111);
file.isdir = 1;
file.errno = 900;
_this.generateBdlink(i + 1);
return;
}
file.size = data.list[0].size;
file.fs_id = data.list[0].fs_id;
// 已开启极速生成, 直接取meta内的md5
file.md5 = "";
file.md5s = "";
_this.getDlink(i);
}
else {
file.errno = data.error_code;
_this.generateBdlink(i + 1);
}
}, function (statusCode) {
file.errno = statusCode === 404 ? 909 : statusCode;
_this.generateBdlink(i + 1);
});
};
/**
* @description: 获取分享页的文件dlink(下载直链)
* @param {number} i
*/
GeneratebdlinkTask.prototype.getShareDlink = function (i) {
var _this = this;
var sign, timestamp, file = this.fileInfoList[i], onFailed = function (errno) {
file.errno = errno;
_this.checkMd5(i + 1);
// md5为空只在分享单个文件时出现, 故无需考虑获取多文件md5(跳转generateBdlink), 直接跳转checkMd5即可
};
function getTplconfig(file) {
var _this = this;
ajax({
url: tpl_url + "&surl=" + this.surl + "&logid=" + this.logid,
responseType: "json",
method: "GET",
}, function (data) {
data = data.response;
// 请求正常
if (!data.errno) {
sign = data.data.sign;
timestamp = data.data.timestamp;
getDlink.call(_this, file);
return;
}
// 请求报错
onFailed(data.errno);
}, onFailed);
}
function getDlink(file) {
var _this = this;
ajax({
url: sharedownload_url + "&sign=" + sign + "×tamp=" + timestamp,
responseType: "json",
method: "POST",
data: convertData({
extra: getExtra(),
logid: this.logid,
fid_list: JSON.stringify([file.fs_id]),
primaryid: unsafeWindow.yunData ? unsafeWindow.yunData.shareid : unsafeWindow.locals.shareid,
uk: unsafeWindow.yunData ? unsafeWindow.yunData.share_uk : unsafeWindow.locals.share_uk,
product: "share",
encrypt: 0,
}),
}, function (data) {
data = data.response;
// 请求正常
if (!data.errno) {
_this.downloadFileData(i, data.list[0].dlink);
return;
}
// 请求报错
onFailed(data.errno);
}, onFailed);
}
getTplconfig.call(this, file);
};
/**
* @description: 获取文件dlink(下载直链)
* @param {number} i
*/
GeneratebdlinkTask.prototype.getDlink = function (i) {
var _this = this;
var file = this.fileInfoList[i];
// 使用生成页时仅有path没有fs_id, 跳转到获取fs_id
if (!file.fs_id) {
this.getFileInfo(i);
return;
}
ajax({
url: meta_url2 + JSON.stringify([String(file.fs_id)]),
responseType: "json",
method: "GET",
headers: { "User-Agent": UA },
}, function (data) {
data = data.response;
// 请求正常
if (!data.errno) {
_this.downloadFileData(i, data.info[0].dlink);
return;
}
// 请求报错
file.errno = data.errno;
_this.generateBdlink(i + 1);
}, function (statusCode) {
file.errno = statusCode;
_this.generateBdlink(i + 1);
});
};
/**
* @description: 调用下载直链
* @param {number} i
* @param {string} dlink
*/
GeneratebdlinkTask.prototype.downloadFileData = function (i, dlink) {
var _this = this;
var file = this.fileInfoList[i];
var dlSize = file.size < 262144 ? 1 : 262143; //slice-md5: 文件前256KiB的md5, size<256KiB则直接取md5即可, 无需下载文件数据
ajax({
url: dlink,
method: "GET",
responseType: "arraybuffer",
headers: {
Range: "bytes=0-" + dlSize,
"User-Agent": UA,
},
onprogress: this.onProgress,
}, function (data) {
_this.onProgress({ loaded: 100, total: 100 }); // 100%
_this.parseDownloadData(i, data);
}, function (statusCode) {
if (statusCode === 404)
file.errno = 909;
else
file.errno = statusCode;
_this.generateBdlink(i + 1);
});
};
/**
* @description: 解析直链请求返回的数据
* @param {number} i
* @param {any} data
*/
GeneratebdlinkTask.prototype.parseDownloadData = function (i, data) {
var _this = this;
var file = this.fileInfoList[i];
console.log("dl_url: " + data.finalUrl); // debug
// 下载直链重定向到此域名, 判定为文件和谐
if (data.finalUrl.includes("issuecdn.baidupcs.com")) {
file.errno = 1919;
this.generateBdlink(i + 1);
return;
}
// 从下载接口获取md5, 此步骤可确保获取到正确md5
var fileMd5 = data.responseHeaders.match(/content-md5: ([\da-f]{32})/i);
if (fileMd5)
file.md5 = fileMd5[1];
else if (file.size <= 3900000000 && !file.retry_996 && !this.isSharePage) {
// 默认下载接口未拿到md5, 尝试使用旧下载接口, 旧接口请求文件size大于3.9G会返回403
// 分享页的生成任务不要调用旧接口
file.retry_996 = true;
this.downloadFileData(i, pcs_url + ("&path=" + encodeURIComponent(file.path)));
return;
}
else {
// 两个下载接口均未拿到md5, 失败跳出
file.errno = 996;
this.generateBdlink(i + 1);
return;
}
// 获取md5s, "极速生成" 跳过此步
if (file.size < 262144)
file.md5s = file.md5; // 此时md5s=md5
else {
// 计算md5s
var spark = new (external_SparkMD5_default()).ArrayBuffer();
spark.append(data.response);
var sliceMd5 = spark.end();
file.md5s = sliceMd5;
}
var interval = this.fileInfoList.length > 1 ? 2000 : 1000;
setTimeout(function () {
_this.generateBdlink(i + 1);
}, interval);
};
/**
* @description: "极速生成" 可能得到错误md5, 故执行验证步骤, 若验证不通过则执行普通生成
* @param {number} i
*/
GeneratebdlinkTask.prototype.checkMd5 = function (i) {
var _this = this;
if (i >= this.fileInfoList.length) {
this.onFinish(this.fileInfoList);
return;
}
var file = this.fileInfoList[i];
// 跳过扫描失败的目录路径
if (file.errno && file.isdir) {
this.checkMd5(i + 1);
return;
}
this.onProcess(i, this.fileInfoList);
this.onProgress(false, "极速生成中...");
// this.isSharePage ? this.getShareDlink(i) : this.getDlink(i);
// 23.4.27: 错误md5在文件上传者账号使用此接口正常转存, 在其他账号则报错#404(#31190), 导致生成秒传完全无法验证, 故弃用meta内的md5
// 23.5.4: 发现错误md5只要改成大写, 在上传者账号就能正常返回#31190, 而正确md5则大小写都能正常转存, 故重新启用此验证过程
// 主要是因为频繁请求直链接口获取正确md5会导致#9019错误(即账号被限制), 对大批量生成秒传有很大影响, 极速生成功能使用此验证则可以节约请求以避免此问题
// 为避免百度后面又改接口导致生成错误秒传问题, 这个接口特性我会写个定时脚本每天测试一次, 出了问题就能即使更新
// 目前发现是通过秒传拿到的文件再生成秒传不会有这问题, 上传的文件或通过分享转存的别人上传的文件则会有
rapiduploadCreateFile.call(this, file, function (data) {
data = data.response;
if (0 === data.errno)
_this.checkMd5(i + 1); // md5验证成功
else if (31190 === data.errno) {
// md5验证失败, 执行普通生成, 仅在此处保存任务进度, 生成页不保存进度
if (!_this.isSharePage)
GM_setValue("unfinish", {
file_info_list: _this.fileInfoList,
file_id: i,
isCheckMd5: true,
});
_this.isSharePage ? _this.getShareDlink(i) : _this.getDlink(i);
}
else {
// 接口访问失败
file.errno = data.errno;
_this.checkMd5(i + 1);
}
}, function (statusCode) {
file.errno = statusCode;
_this.checkMd5(i + 1);
}, 0, true);
};
/**
* @description: 用于解析度盘主页的文件列表数据
*/
GeneratebdlinkTask.prototype.parseMainFileList = function () {
for (var _i = 0, _a = this.selectList; _i < _a.length; _i++) {
var item = _a[_i];
if (item.isdir)
this.dirList.push(item.path);
else
this.fileInfoList.push({
path: item.path,
size: item.size,
fs_id: item.fs_id,
// 已开启极速生成, 直接取meta内的md5
md5: "",
md5s: "",
});
}
};
/**
* @description: 用于解析分享页的文件列表数据
*/
GeneratebdlinkTask.prototype.parseShareFileList = function (list) {
if (list === void 0) { list = this.selectList; }
for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
var item = list_1[_i];
var path = void 0;
if ("app_id" in item)
path = item.isdir ? item.path : item.server_filename;
else
path = item.path;
if ("/" !== path.charAt(0))
path = "/" + path; // 补齐路径开头的斜杠
if (item.isdir)
this.dirList.push(path);
else
this.fileInfoList.push({
path: path,
size: item.size,
fs_id: item.fs_id,
md5: item.md5 && decryptMd5(item.md5.toLowerCase()),
md5s: item.md5s && decryptMd5(item.md5s.toLowerCase()),
});
}
};
return GeneratebdlinkTask;
}());
/* harmony default export */ const generatebdlinkTask = (GeneratebdlinkTask);
;// CONCATENATED MODULE: ./src/baidu/common/const.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 存放各种全局常量对象
*/
var host = location.host;
var listLimit = 10000;
var syncPathPrefix = "/_pcs_.workspace";
var create_url = "https://" + host + "/api/create";
var precreate_url = "https://" + host + "/api/precreate";
var rapidupload_url = "https://" + host + "/api/rapidupload";
var list_url = "https://" + host + "/rest/2.0/xpan/multimedia?method=listall&order=name&limit=" + listLimit + "&path=";
var meta_url = "https://pcs.baidu.com/rest/2.0/pcs/file?app_id=778750&method=meta&path=";
var meta_url2 = "https://" + host + "/api/filemetas?dlink=1&fsids=";
var tpl_url = "https://" + host + "/share/tplconfig?fields=sign,timestamp&channel=chunlei&web=1&app_id=250528&clienttype=0";
var sharedownload_url = "https://" + host + "/api/sharedownload?channel=chunlei&clienttype=12&web=1&app_id=250528";
var sharelist_url = "https://" + host + "/share/list?showempty=0&num=" + listLimit + "&channel=chunlei&web=1&app_id=250528&clienttype=0";
var syncdownload_url = "https://" + host + "/api/download";
var pcs_url = "https://pcs.baidu.com/rest/2.0/pcs/file?app_id=778750&method=download";
var illegalPathPattern = /[\\":*?<>|]/g; // 匹配路径中的非法字符
var getBdstoken; // 获取bdstoken的实现
function setGetBdstoken(func) {
getBdstoken = func;
}
var refreshList; // 刷新文件列表的实现
function setRefreshList(func) {
refreshList = func;
}
var getSelectedFileList; // 获取选中的文件列表的实现
function setGetSelectedFileList(func) {
getSelectedFileList = func;
}
var getShareFileList;
function setGetShareFileList(func) {
getShareFileList = func;
}
var swalInstance = new swalBase(new rapiduploadTask(), new generatebdlinkTask());
function baiduErrno(errno) {
switch (errno) {
case 31045:
case -6:
return "认证失败, 请重新登入, 刷新页面";
case -7:
return "转存路径含有非法字符, 请改名后重试";
case -8:
return "路径下存在同名文件";
case -9:
return "验证已过期, 请刷新页面";
case 400:
return "请求错误";
case 9019:
case 403:
return "接口限制访问";
case 404:
return "秒传未生效";
case 114:
return "转存失败";
case 514:
return "请求失败, 常见百度问题, 请稍后重试";
case 1919:
return "文件已被和谐";
case 996:
return "md5获取失败";
case 2:
return "转存失败, 接口可能限制了IP, 请改IP重试, VPN海外IP更佳";
case -10:
return "网盘容量已满";
case 500:
case 502:
case 503:
return "服务器错误, 请稍后重试";
case 31066:
case 909:
return "路径不存在/云端文件已损坏";
case 900:
return "路径为文件夹, 不支持生成秒传";
case 31039:
return "转存失败, 秒传文件名冲突";
case 110:
return "请先登录百度账号";
case 9013:
return "账号被限制, 尝试 更换账号 或 等待一段时间再重试";
default:
return "不明错误";
}
} // 自定义百度api返回errno的报错
;// CONCATENATED MODULE: ./src/common/utils.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 存放工具函数
*/
var utils_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var utils_generator = (undefined && undefined.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
/**
* @description: 弹出一个文本提示框
* @param {string} text
*/
function showAlert(text) {
alert(TAG + ":\n" + text);
}
/**
* @description: 解析文件信息, 返回转存结果列表html, 秒传链接, 失败文件个数, 成功的文件信息列表, 失败的文件信息列表
* @param {Array} fileInfoList 文件信息数据列表
*/
function parsefileInfo(fileInfoList) {
var bdcode = "";
var successInfo = "";
var failedInfo = "";
var successList = [];
var failList = [];
var failCodeDic = {};
fileInfoList.forEach(function (item) {
item.path = item.path.replace(syncPathPrefix, ""); // 移除同步页前缀
// 成功文件
if (0 === item.errno || undefined === item.errno) {
successInfo += "" + item.path + "
";
bdcode += "" + item.md5 + (item.md5s && "#" + item.md5s) + "#" + item.size + "#" + item.path + "\n";
successList.push(item);
}
// 失败文件
else {
failList.push(item);
if (String(item.errno) in failCodeDic)
failCodeDic[String(item.errno)].push(item);
else
failCodeDic[String(item.errno)] = [item];
}
});
var _loop_1 = function (failCode) {
var failBranchInfo = "";
var failBranchList = failCodeDic[failCode];
failBranchList.forEach(function (item) {
failBranchInfo += "" + item.path + "
";
});
failedInfo += "" + baiduErrno(Number(failCode)) + " (#" + Number(failCode) + "):" + copyFailBranchList + "
" + failBranchInfo + "
";
};
for (var failCode in failCodeDic) {
_loop_1(failCode);
}
if (failedInfo)
failedInfo = "\u5931\u8D25\u6587\u4EF6\u5217\u8868(\u70B9\u8FD9\u91CC\u770B\u5931\u8D25\u539F\u56E0):" + copyFailList + "
" + failedInfo + "
";
if (successInfo)
successInfo = "\u6210\u529F\u6587\u4EF6\u5217\u8868(\u70B9\u51FB\u5C55\u5F00):" + copySuccessList + "
" + successInfo + "
";
bdcode = bdcode.trim();
return {
htmlInfo: successInfo && failedInfo
? successInfo + "
" + failedInfo
: successInfo + failedInfo,
bdcode: bdcode,
successList: successList,
failList: failList,
};
}
/**
* @description: 获取分享页的文件列表
*/
function utils_getShareFileList() {
var bdListInstance = unsafeWindow.require("system-core:context/context.js")
.instanceForSystem.list;
var selectList = bdListInstance.getSelected();
if (!selectList.length)
selectList = bdListInstance.getCurrentList();
return selectList;
}
/**
* @description: 获取选择的文件列表(旧版界面)
*/
function getSelectedFileListLegacy() {
return unsafeWindow
.require("system-core:context/context.js")
.instanceForSystem.list.getSelected();
}
/**
* @description: 获取选择的文件列表(新版界面)
* 我从这里抄的, 谢谢你: https://greasyfork.org/zh-CN/scripts/436446
*/
function getSelectedFileListNew() {
return document.querySelector(".nd-main-list, .nd-new-main-list").__vue__
.selectedList;
}
/**
* @description: 将data键值对转换为query字符串
* @param {any} data
* @return {string} query
*/
function convertData(data) {
var query = "";
for (var key in data)
query += "&" + key + "=" + encodeURIComponent(data[key]);
return query;
}
/**
* @description: 从剪贴板获取字符串数据
* @return {string} bdlink
*/
function parseClipboard() {
return utils_awaiter(this, void 0, void 0, function () {
var bdlink, error_1;
return utils_generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, navigator.clipboard.readText()];
case 1:
bdlink = _a.sent();
if (!DuParser.parse(bdlink).length)
return [2 /*return*/, ""];
return [2 /*return*/, bdlink];
case 2:
error_1 = _a.sent();
showAlert(appError.ClipboardPremissionErr);
return [2 /*return*/, ""];
case 3: return [2 /*return*/];
}
});
});
}
/**
* @description: 解密已加密的md5
* @param {string} md5 (加密)
* @return {string} md5 (解密)
*/
function decryptMd5(md5) {
if (!((parseInt(md5[9]) >= 0 && parseInt(md5[9]) <= 9) ||
(md5[9] >= "a" && md5[9] <= "f")))
return decrypt(md5);
else
return md5;
function decrypt(encryptMd5) {
var key = (encryptMd5[9].charCodeAt(0) - "g".charCodeAt(0)).toString(16);
var key2 = encryptMd5.slice(0, 9) + key + encryptMd5.slice(10);
var key3 = "";
for (var a = 0; a < key2.length; a++)
key3 += (parseInt(key2[a], 16) ^ (15 & a)).toString(16);
var md5 = key3.slice(8, 16) +
key3.slice(0, 8) +
key3.slice(24, 32) +
key3.slice(16, 24);
return md5;
}
}
/**
* @description: 用于解决#31039报错
* @param {string} path 原文件路径
* @return {string} 修改文件后缀的路径
*/
function suffixChange(path) {
var suffix = path.substring(path.lastIndexOf(".") + 1); // 获取后缀
return path.substring(0, path.length - suffix.length) + reverseStr(suffix);
}
/**
* @description: 随机大小写
* @param {string} str
* @return {string}
*/
function randomStringTransform(str) {
var tempString = [];
for (var _i = 0, str_1 = str; _i < str_1.length; _i++) {
var i = str_1[_i];
if (!Math.round(Math.random())) {
tempString.push(i.toLowerCase());
}
else {
tempString.push(i.toUpperCase());
}
}
return tempString.join("");
}
/**
* @description: 交替大小写
* @param {string} str
* @return {string}
*/
function alternateCaseTransform(str) {
var tempString = [];
var low = false;
for (var _i = 0, str_2 = str; _i < str_2.length; _i++) {
var i = str_2[_i];
if (i >= 'a' && i <= 'z' || i >= 'A' && i <= 'Z') {
tempString.push(low ? i.toLowerCase() : i.toUpperCase());
low = !low;
}
else {
tempString.push(i);
}
}
return tempString.join("");
}
/**
* @description: 逆转字符串大小写
* @param {string} str 输入字符串
* @return {string} 处理后的字符串
*/
function reverseStr(str) {
var newStr = "";
for (var i = 0; i < str.length; i++) {
var reverseChar = void 0;
if (str.charAt(i) >= "a")
reverseChar = str.charAt(i).toUpperCase();
else if (str.charAt(i) >= "A")
reverseChar = str.charAt(i).toLowerCase();
else
reverseChar = str.charAt(i);
newStr += reverseChar;
}
return newStr;
}
// 下方四个function用于分享页生成秒传
// 依旧是从这里抄的: https://greasyfork.org/zh-CN/scripts/436446
function getCookie(name) {
var arr = document.cookie.replace(/\s/g, "").split(";");
for (var i = 0, l = arr.length; i < l; i++) {
var tempArr = arr[i].split("=");
if (tempArr[0] === name) {
return decodeURIComponent(tempArr[1]);
}
}
return "";
}
function getLogid() {
return btoa(getCookie("BAIDUID")); // BAIDUID is asciii
}
function getSurl() {
var reg = /(s\/|surl=)([a-zA-Z0-9_-]+)/;
if (reg.test(location.href)) {
return location.href.match(reg)[2];
}
return "";
}
function getExtra() {
var seKey = decodeURIComponent(getCookie("BDCLND"));
return "{" + '"sekey":"' + seKey + '"' + "}";
}
function isMobileVer() {
return document.location.pathname === '/wap/home' || document.querySelector('script[src^="https://hm.baidu.com/h.js"]:not([async])') != null;
}
;// CONCATENATED MODULE: ./src/baidu/newPage/loader.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 新版度盘界面loader入口: https://pan.baidu.com/disk/main
*/
var htmlTagNew = "div.nd-file-list-toolbar__actions"; // 新版界面秒传按钮的html父对象
var htmlTagNew2 = "div.wp-s-agile-tool-bar__header"; // 22.5.24: 新版界面新增的一个父对象
var htmlBtnRapidNew = // 新版界面秒传按钮的html元素
'';
var htmlBtnGenNew = // 新版界面秒传生成按钮的html元素
'';
function installNew() {
console.info("%s version: %s DOM方式安装 (new-ui)", TAG, version);
swalInstance.swalGlobalArgs = {
heightAuto: false,
scrollbarPadding: false,
}; // 添加swal参数以防止新版界面下的body样式突变
setRefreshList(function () {
document
.querySelector(".nd-main-list, .nd-new-main-list")
.__vue__.reloadList();
});
setGetShareFileList(utils_getShareFileList);
setGetSelectedFileList(getSelectedFileListNew);
setGetBdstoken(function () {
return document.querySelector(".nd-main-list, .nd-new-main-list").__vue__.yunData
.bdstoken;
});
$(document).on("click", "#bdlink_btn", function () {
swalInstance.inputView();
}); // 绑定转存秒传按钮事件
$(document).on("click", "#gen_bdlink_btn", function () {
swalInstance.generatebdlinkTask.reset();
swalInstance.checkUnfinish();
}); // 绑定生成秒传按钮事件
addBtn();
}
function addBtn() {
// 轮询添加按钮, 防止新版页面重复init时, 将按钮覆盖
var target = $(htmlTagNew);
if (!target.length)
target = $(htmlTagNew2);
if (target.length && !$("#bdlink_btn").length)
target.append(htmlBtnRapidNew, htmlBtnGenNew);
setTimeout(addBtn, 500);
}
;// CONCATENATED MODULE: ./src/baidu/legacyPage/loader.tsx
/*
* @Author: mengzonefire
* @Date: 2022-10-20 10:36:43
* @LastEditTime: 2022-12-24 10:57:23
* @LastEditors: mengzonefire
* @Description: 旧版度盘界面loader入口: https://pan.baidu.com/disk/home?stayAtHome=true
*/
var htmlTagLegacy = "div.tcuLAu"; // 旧版界面秒传按钮的html父对象
var htmlBtnRapidLegacy = // 旧版界面秒传按钮的html元素
'秒传链接';
var htmlBtnGenLegacy = // 旧版界面秒传生成按钮的html元素
'生成秒传';
function installLegacy() {
console.info("%s version: %s DOM方式安装", TAG, version);
setRefreshList(function () {
// 旧版界面, 调用原生方法刷新文件列表, 无需重新加载页面
unsafeWindow
.require("system-core:system/baseService/message/message.js")
.trigger("system-refresh");
});
setGetShareFileList(utils_getShareFileList);
setGetSelectedFileList(getSelectedFileListLegacy);
setGetBdstoken(function () { return unsafeWindow.locals.get("bdstoken"); });
loader_addBtn(); // DOM添加秒传按钮
addGenBtn(); // DOM添加生成按钮
$(document).on("click", "#bdlink_btn", function () {
swalInstance.inputView();
}); // 绑定秒传按钮事件
$(document).on("click", "#gen_bdlink_btn", function () {
swalInstance.generatebdlinkTask.reset();
swalInstance.checkUnfinish();
}); // 绑定生成按钮事件
}
function getSystemContext() {
return unsafeWindow.require("system-core:context/context.js")
.instanceForSystem;
}
function addGenBtn() {
var listTools = getSystemContext().Broker.getButtonBroker("listTools");
if (listTools && listTools.$box)
$(listTools.$box).children("div").after(htmlBtnGenLegacy);
else
setTimeout(addGenBtn, 300);
}
function loader_addBtn() {
if ($(htmlTagLegacy).length)
$(htmlTagLegacy).append(htmlBtnRapidLegacy);
else
setTimeout(loader_addBtn, 100);
}
;// CONCATENATED MODULE: ./src/baidu/syncPage/loader.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 同步空间loader入口: https://pan.baidu.com/disk/synchronization#
*/
var loader_htmlTagNew = "div.nd-btn-group > span";
var loader_htmlBtnRapidNew = '';
// const htmlBtnGenNew =
// '';
function installSync() {
console.info("%s version: %s DOM方式安装", TAG, version);
swalInstance.swalGlobalArgs = {
heightAuto: false,
scrollbarPadding: false,
};
setRefreshList(function () {
document
.querySelector(".nd-main-list, .nd-new-main-list")
.__vue__.reloadList();
});
setGetShareFileList(utils_getShareFileList);
setGetSelectedFileList(getSelectedFileListNew);
setGetBdstoken(function () {
return document.querySelector(".nd-main-list, .nd-new-main-list").__vue__.yunData
.bdstoken;
});
$(document).on("click", "#bdlink_btn", function () {
swalInstance.inputView();
}); // 绑定转存秒传按钮事件
$(document).on("click", "#gen_bdlink_btn", function () {
swalInstance.generatebdlinkTask.reset();
swalInstance.checkUnfinish();
}); // 绑定生成秒传按钮事件
syncPage_loader_addBtn();
}
function syncPage_loader_addBtn() {
// 轮询添加按钮, 防止新版页面重复init时, 将按钮覆盖
var target = $(loader_htmlTagNew);
if (target.length && !$("#bdlink_btn").length)
target.append(loader_htmlBtnRapidNew);
// target.append(htmlBtnRapidNew, htmlBtnGenNew);
// 同步页中的文件使用另一种的接口获取dlink, 故暂不添加生成功能
setTimeout(syncPage_loader_addBtn, 500);
}
;// CONCATENATED MODULE: ./src/baidu/sharePage/loader.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 文件分享页loader入口: https://pan.baidu.com/s/xxx
*/
var htmlBtnGenShare = // 分享页的秒传生成按钮html元素
' 生成秒传 ';
var htmlTagSahre = "[node-type=qrCode]";
function installShare() {
console.info("%s version: %s DOM方式安装", TAG, version);
setGetBdstoken(function () { return unsafeWindow.locals.get("bdstoken"); });
setGetShareFileList(utils_getShareFileList);
sharePage_loader_addBtn();
$(document).on("click", "#gen_bdlink_btn_sharePage", function () {
swalInstance.generatebdlinkTask.reset();
swalInstance.generatebdlinkTask.isSharePage = true;
swalInstance.genFileWork(false, false);
}); // 绑定生成按钮事件
}
function sharePage_loader_addBtn() {
if ($(htmlTagSahre).length)
$(htmlTagSahre).before(htmlBtnGenShare);
else
setTimeout(sharePage_loader_addBtn, 100);
}
;// CONCATENATED MODULE: ./src/baidu/mobilePage/loader.tsx
var mobilePage_loader_htmlBtnRapidNew = // 新版界面秒传按钮的html元素
'';
function installMobile() {
console.info("%s version: %s MobileVer方式安装", TAG, version);
swalInstance.swalGlobalArgs = {
heightAuto: false,
scrollbarPadding: false,
}; // 添加swal参数以防止新版界面下的body样式突变
setRefreshList(function () { return document.location.reload(); });
setGetShareFileList(utils_getShareFileList);
setGetSelectedFileList(function () {
var fileList = $('.main-container > .multifile > .file-list')[0].__vue__.allFileList;
return fileList.filter(function (item) { return !!item.selected; });
});
setGetBdstoken(function () { return unsafeWindow.locals.bdstoken; });
$(document).on("click", "#bdlink_btn", function () {
swalInstance.inputView();
}); // 绑定转存秒传按钮事件
$(document).on("click", "#gen_bdlink_btn", function () {
swalInstance.generatebdlinkTask.reset();
swalInstance.checkUnfinish();
}); // 绑定生成秒传按钮事件
mobilePage_loader_addBtn();
}
function mobilePage_loader_addBtn() {
// 轮询添加按钮, 防止新版页面重复init时, 将按钮覆盖
var target = $(".main-container > header");
if (target.length && !$("#bdlink_btn").length)
target.append(mobilePage_loader_htmlBtnRapidNew);
var target2 = $(".main-container");
if (target2.length && !$("#gen_bdlink_btn").length)
target2.append('');
setTimeout(mobilePage_loader_addBtn, 500);
}
;// CONCATENATED MODULE: ./src/baidu/mobileSharePage/loader.tsx
function installMobileShare() {
console.info("%s version: %s MobileVer方式安装", TAG, version);
swalInstance.swalGlobalArgs = {
heightAuto: false,
scrollbarPadding: false,
}; // 添加swal参数以防止新版界面下的body样式突变
setRefreshList(function () { return document.location.reload(); });
setGetShareFileList(function () {
var fileList = $('.main-container > .multifile > .file-list')[0].__vue__.allFileList;
return Array.from(fileList).map(function (item) {
return Object.assign({}, item, {
category: item.category * 1,
fs_id: item.fs_id * 1,
isdir: item.isdir * 1,
local_ctime: item.local_ctime * 1,
local_mtime: item.local_mtime * 1,
server_ctime: item.server_ctime * 1,
server_mtime: item.server_mtime * 1,
size: item.size * 1,
});
});
});
setGetBdstoken(function () { return unsafeWindow.locals.bdstoken; });
$(document).on("click", "#gen_bdlink_btn", function () {
swalInstance.generatebdlinkTask.reset();
swalInstance.generatebdlinkTask.isSharePage = true;
swalInstance.checkUnfinish();
}); // 绑定生成秒传按钮事件
mobileSharePage_loader_addBtn();
}
function mobileSharePage_loader_addBtn() {
// 轮询添加按钮, 防止新版页面重复init时, 将按钮覆盖
var target = $(".main-container");
if (target.length && !$("#gen_bdlink_btn").length)
target.append('');
setTimeout(mobileSharePage_loader_addBtn, 500);
}
;// CONCATENATED MODULE: ./src/baidu/loader.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 主函数入口
*/
function loaderBaidu() {
var load = function () {
if (locUrl.includes(baiduNewPage)) {
installNew();
}
else if (locUrl.includes(baiduSharePage)) {
if (isMobileVer()) {
installMobileShare();
}
else {
installShare();
}
}
else if (locUrl.includes(baiduSyncPage)) {
installSync();
}
else if (isMobileVer() && locUrl.includes(baiduMobilePage)) {
installMobile();
}
else {
installLegacy();
}
// 进入页面后的弹窗任务
var bdlink = parseQueryLink(locUrl); // 解析url中的秒传链接
if (bdlink) {
// 解析到秒传链接, 弹出转存窗口
swalInstance.inputView(bdlink);
}
else if (!GM_getValue(updateInfoVer + "_no_first"))
// 检查是否首次运行, 若是则弹出更新信息窗口
swalInstance.updateInfo(function () {
GM_setValue(updateInfoVer + "_no_first", true);
});
// 预先绑定好按钮事件
$(document).on("click", "#copy_fail_list", function (btn) {
var listText = "";
for (var _i = 0, _a = swalInstance.parseResult.failList; _i < _a.length; _i++) {
var item = _a[_i];
listText += item.path + "\n";
}
GM_setClipboard(listText);
btn.target.innerText = "复制成功";
}); // 失败文件列表复制
$(document).on("click", "#copy_success_list", function (btn) {
var listText = "";
for (var _i = 0, _a = swalInstance.parseResult.successList; _i < _a.length; _i++) {
var item = _a[_i];
listText += item.path + "\n";
}
GM_setClipboard(listText);
btn.target.innerText = "复制成功";
}); // 成功文件列表复制
$(document).on("click", "#copy_fail_branch_list", function (btn) {
var ele = $(btn.target);
GM_setClipboard(ele
.parents("details.mzf_details_branch")
.next()[0]
.innerText.replace(/\n\n/g, "\n"));
btn.target.innerText = "复制成功";
}); // 失败文件分支列表复制
try {
// 添加油猴插件菜单按钮
GM_registerMenuCommand("🕮 版本信息", function () {
swalInstance.updateInfo(function () { });
});
GM_registerMenuCommand("⚙ 工具设置", function () {
swalInstance.settingView();
});
GM_registerMenuCommand("⚡生成秒传(输入文件路径)", function () {
swalInstance.genView();
});
}
catch (_) {
console.info("%s version: %s 插件菜单添加失败, 使用的插件不支持GM_registerMenuCommand", TAG, version);
}
};
// 绑定入口函数到dom事件
var giveUpTime = Date.now() + 30000;
function tryLoad() {
if (["interactive", "complete"].includes(document.readyState)) {
load();
}
else if (giveUpTime > Date.now()) {
setTimeout(tryLoad, 100);
}
else {
console.warn('插件添加失败');
}
}
tryLoad();
}
;// CONCATENATED MODULE: ./src/common/injectStyle.tsx
/*
* @Author: mengzonefire
* @LastEditors: tousakasp
* @Description: 样式注入模块
*/
/**
* @description: 注入脚本样式
*/
function injectStyle() {
// 注入自定义样式
GM_addStyle((app_default()));
GM_addStyle((css_app_default()));
if (isMobileVer()) {
GM_addStyle((mobile_app_default()));
}
var swalThemes = GM_getValue("swalThemes") || "Default"; // sweetAlert的主题(css), 默认为Default
var ThemesCss = GM_getValue("" + swalCssVer + swalThemes); // 从缓存获取非默认主题的css代码
if (ThemesCss) {
GM_addStyle(ThemesCss);
}
else {
getThemesCss(swalThemes); // 未找到缓存, fallback到下载css代码
return;
}
loaderBaidu();
}
/**
* @description: 下载并注入对应主题的css样式代码, 会将css代码缓存本地
* @param {string} swalThemes 主题包名
*/
function getThemesCss(swalThemes) {
ajax({
url: extCssUrl[swalThemes],
method: "GET",
}, function (data) {
var ThemesCss = data.responseText;
if (ThemesCss.length < 100) {
showAlert(appError.SwalCssInvalid +
("\n\u9519\u8BEF\u6570\u636E:" + swalThemes + " InvalidCss:\n" + ThemesCss));
GM_setValue("swalThemes", "Default");
loaderBaidu();
return;
} // 返回data数据长度过小, 判定为无效样式代码
GM_setValue("" + swalCssVer + swalThemes, ThemesCss); // 缓存css代码
GM_addStyle(ThemesCss); // 注入css
loaderBaidu();
}, function (statusCode) {
showAlert(appError.SwalCssErrReq + ("#" + statusCode));
GM_setValue("swalThemes", "Default");
loaderBaidu();
});
}
;// CONCATENATED MODULE: external "Base64"
const external_Base64_namespaceObject = Base64;
;// CONCATENATED MODULE: ./src/app.tsx
/**
* @description: 主函数入口
*/
function app_app() {
external_Base64_namespaceObject.Base64.extendString();
injectStyle();
}
// 广告拦截插件会导致脚本报错跳出, 网页卡死, 故加入异常处理
try {
app_app();
}
catch (error) {
console.log(error);
}
})();
/******/ })()
;