下载助手(未点亮)
`);
if (pt === 'home') {
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.home);
if ($toolWrap.length > 0) {
$toolWrap.append($button);
//clearInterval(ins);
}
//}, 50);
}
if (pt === 'share') {
$button.css({'margin-right': '10px'});
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.share);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
$button.click(() => base.initDialog());
setInterval(function(){
if(!document.getElementById("pl-button-link")){
ali.addInitButton();
}
},1000)
},
async getPCSLink() {
let reactDomGrid = document.querySelector(pan.dom.grid);
if (reactDomGrid) {
let res = await Swal.fire({
title: '提示',
html: '
请先切换到 列表视图 “ ” 后获取下载链接!
',
icon: 'info',
confirmButtonText: '点击切换'
});
if (res) {
document.querySelector(pan.dom.switch).click();
return message.success('切换成功,请重新获取下载链接!');
}
return false;
}
selectList = this.getSelectedList();
if (selectList.length === 0) {
return message.error('提示:请先勾选要下载的文件!');
}
if (this.isOnlyFolder()) {
return message.error('提示:请打开文件夹后勾选文件!');
}
if (pt === 'share') {
if (selectList.length > 20) {
return message.error('提示:单次最多可勾选 20 个文件!');
}
try {
let authorization = `${base.getStorage('token').token_type} ${base.getStorage('token').access_token}`;
let xShareToken = base.getStorage('shareToken').share_token;
for (let i = 0; i < selectList.length; i++) {
let res = await base.post(pan.pcs[0], {
expire_sec: 600,
file_id: selectList[i].fileId,
share_id: selectList[i].shareId
}, {
authorization,
"content-type": "application/json;charset=utf-8",
"x-share-token": xShareToken
});
if (res.download_url) {
selectList[i].downloadUrl = res.download_url;
}
}
} catch (e) {
return message.error('提示:请先登录网盘!');
}
}
let html = this.generateDom(selectList);
this.showMainDialog(pan[mode][0], html, pan[mode][1]);
},
generateDom(list) {
let content = '
';
let alinkAllText = '';
list.forEach((v, i) => {
if (v.type === 'folder') return;
let filename = v.name;
let fid = v.fileId;
let did = v.driveId;
let size = base.sizeFormat(v.size);
let dlink = v.downloadUrl || v.url;
if (mode === 'api') {
content += `
`;
}
if (mode === 'aria') {
let alink = this.convertLinkToAria(dlink, filename, navigator.userAgent);
alinkAllText += alink + '\r\n';
content += `
`;
}
if (mode === 'rpc') {
content += `
`;
}
if (mode === 'curl') {
let alink = this.convertLinkToCurl(dlink, filename, navigator.userAgent);
alinkAllText += alink + '\r\n';
content += `
`;
}
if (mode === 'bc') {
let alink = this.convertLinkToBC(dlink, filename, navigator.userAgent);
content += `
`;
}
});
content += '
';
if (mode === 'aria')
content += ``;
if (mode === 'rpc') {
let rpc = base.getValue('setting_rpc_domain') + ':' + base.getValue('setting_rpc_port') + base.getValue('setting_rpc_path');
content += ``;
}
if (mode === 'curl')
content += ``;
return content;
},
async sendLinkToRPC(filename, link) {
let rpc = {
domain: base.getValue('setting_rpc_domain'),
port: base.getValue('setting_rpc_port'),
path: base.getValue('setting_rpc_path'),
token: base.getValue('setting_rpc_token'),
dir: base.getValue('setting_rpc_dir'),
};
let url = `${rpc.domain}:${rpc.port}${rpc.path}`;
let rpcData = {
id: new Date().getTime(),
jsonrpc: '2.0',
method: 'aria2.addUri',
params: [`token:${rpc.token}`, [link], {
dir: rpc.dir,
out: filename,
header: [`Referer: https://www.aliyundrive.com/`]
}]
};
try {
let res = await base.post(url, rpcData, {"Referer": "https://www.aliyundrive.com/"}, '');
if (res.result) return 'success';
return 'fail';
} catch (e) {
return 'fail';
}
},
getSelectedList() {
try {
let selectedList = [];
let reactDom = document.querySelector(pan.dom.list);
let reactObj = base.findReact(reactDom, 1);
let props = reactObj.pendingProps;
if (props) {
let fileList = props.dataSource || [];
let selectedKeys = props.selectedKeys.split(',');
fileList.forEach((val) => {
if (selectedKeys.includes(val.fileId)) {
selectedList.push(val);
}
});
}
return selectedList;
} catch (e) {
return [];
}
},
detectPage() {
let path = location.pathname;
if (/^\/(drive)/.test(path)) return 'home';
if (/^\/(s|share)\//.test(path)) return 'share';
return '';
},
isOnlyFolder() {
for (let i = 0; i < selectList.length; i++) {
if (selectList[i].type === 'file') return false;
}
return true;
},
showMainDialog(title, html, footer) {
Swal.fire({
title,
html,
footer,
allowOutsideClick: false,
showCloseButton: true,
showConfirmButton: false,
position: 'top',
width,
padding: '15px 20px 5px',
customClass,
});
},
async initPanLinker() {
base.initDefaultConfig();
pt = this.detectPage();
if (base.getValue('setting_getuser_info') === 'yes') {
let res = await base.post
(`https://api.youxiaohou.com/config/ali?ver=${version}&a=${author}`, {}, {}, 'text');
pan = JSON.parse(base.decode(res));
};
Object.freeze && Object.freeze(pan);
pan.num === base.getValue('setting_init_code') ? this.addButton() : this.addInitButton();
base.createTip();
base.registerMenuCommand();
}
};
//天翼云
let tianyi = {
convertLinkToAria(link, filename, ua) {
filename = base.fixFilename(filename);
return encodeURIComponent(`aria2c "${link}" --out "${filename}"`);
},
convertLinkToBC(link, filename, ua) {
let bc = `AA/${encodeURIComponent(filename)}/?url=${encodeURIComponent(link)}ZZ`;
return encodeURIComponent(`bc://http/${base.encode(bc)}`);
},
convertLinkToCurl(link, filename, ua) {
let terminal = base.getValue('setting_terminal_type');
filename = base.fixFilename(filename);
return encodeURIComponent(`${terminal !== 'wp' ? 'curl' : 'curl.exe'} -L -C - "${link}" -o "${filename}"`);
},
addPageListener() {
doc.on('click', '.pl-button-mode', (e) => {
mode = e.target.dataset.mode;
Swal.showLoading();
this.getPCSLink();
});
doc.on('click', '.listener-link-api', async (e) => {
e.preventDefault();
$('#downloadIframe').attr('src', e.currentTarget.dataset.link);
});
doc.on('click', '.listener-link-aria, .listener-copy-all', (e) => {
e.preventDefault();
base.setClipboard(decodeURIComponent(e.target.dataset.link));
$(e.target).text('复制成功,快去粘贴吧!').animate({opacity: '0.5'}, "slow");
setTimeout(
function (){
$(e.target).text('重新复制').animate({opacity: '1'}, "slow");
},2000
)
});
doc.on('click', '.listener-link-rpc', async (e) => {
let target = $(e.currentTarget);
target.find('.icon').remove();
target.find('.pl-loading').remove();
target.prepend(base.createLoading());
let res = await this.sendLinkToRPC(e.currentTarget.dataset.filename, e.currentTarget.dataset.link);
if (res === 'success') {
$('.listener-rpc-task').show();
target.removeClass('pl-btn-danger').html('发送成功,快去看看吧!').animate({opacity: '0.5'}, "slow");
} else {
target.addClass('pl-btn-danger').text('发送失败,请检查您的RPC配置信息!').animate({opacity: '0.5'}, "slow");
}
});
doc.on('click', '.listener-send-rpc', (e) => {
$('.listener-link-rpc').click();
$(e.target).text('发送完成,发送结果见上方按钮!').animate({opacity: '0.5'}, "slow");
});
doc.on('click', '.listener-open-setting', () => {
base.showSetting();
});
doc.on('click', '.listener-open-updatelog', () => {
base.showUpdateLog();
});
doc.on('click', '.listener-rpc-task', () => {
let rpc = JSON.stringify({
domain: base.getValue('setting_rpc_domain'),
port: base.getValue('setting_rpc_port'),
}), url = `${pan.d}/?rpc=${base.encode(rpc)}#${base.getValue('setting_rpc_token')}`;
GM_openInTab(url, {active: true});
});
},
addButton() {
if(document.getElementById("pl-button-link")){
document.getElementById("pl-button-link").remove()
}
if (!pt) return;
let $toolWrap;
let $button = $(`
下载助手
`);
if (pt === 'home') {
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.home);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
if (pt === 'share') {
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.share);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
base.createDownloadIframe();
this.addPageListener();
setInterval(function(){
if(!document.getElementById("pl-button-link")){
tianyi.addButton();
}
},1000)
},
addInitButton() {
if(document.getElementById("pl-button-link")){
document.getElementById("pl-button-link").remove()
}
if (!pt) return;
let $toolWrap;
let $button = $(`
下载助手(未点亮)
`);
if (pt === 'home') {
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.home);
if ($toolWrap.length > 0) {
$toolWrap.append($button);
//clearInterval(ins);
}
//}, 50);
}
if (pt === 'share') {
$button.css({'margin-right': '10px'});
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.share);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
$button.click(() => base.initDialog());
setInterval(function(){
if(!document.getElementById("pl-button-link")){
tianyi.addInitButton();
}
},1000)
},
async getToken() {
let res = await base.getFinalUrl(pan.pcs[1], {});
let accessToken = res.match(/accessToken=(\w+)/)?.[1];
accessToken && base.setStorage('accessToken', accessToken);
return accessToken;
},
async getFileUrlByOnce(item, index, token) {
try {
if (item.downloadUrl) return {
index,
downloadUrl: item.downloadUrl
};
let time = Date.now(),
fileId = item.fileId,
o = "AccessToken=" + token + "&Timestamp=" + time + "&fileId=" + fileId,
url = pan.pcs[2] + '?fileId=' + fileId;
if (item.shareId) {
o = "AccessToken=" + token + "&Timestamp=" + time + "&dt=1&fileId=" + fileId + "&shareId=" + item.shareId;
url += '&dt=1&shareId=' + item.shareId;
}
let sign = md5(o).toString();
let res = await base.get(url, {
"accept": "application/json;charset=UTF-8",
"sign-type": 1,
"accesstoken": token,
"timestamp": time,
"signature": sign
});
if (res.res_code === 0) {
return {
index,
downloadUrl: res.fileDownloadUrl
};
} else if (res.errorCode === 'InvalidSessionKey') {
return {
index,
downloadUrl: '提示:请先登录网盘!'
};
} else if (res.res_code === 'ShareNotFoundFlatDir') {
return {
index,
downloadUrl: '提示:请先[转存]文件,👉前往[我的网盘]中下载!'
};
} else {
return {
index,
downloadUrl: '获取下载地址失败,请刷新重试!'
};
}
} catch (e) {
return {
index,
downloadUrl: '获取下载地址失败,请刷新重试!'
};
}
},
async getPCSLink() {
selectList = this.getSelectedList();
if (selectList.length === 0) {
return message.error('提示:请先勾选要下载的文件!');
}
if (this.isOnlyFolder()) {
return message.error('提示:请打开文件夹后勾选文件!');
}
let token = base.getStorage('accessToken') || await this.getToken();
if (!token) {
return message.error('提示:请先登录网盘!');
}
let queue = [];
selectList.forEach((item, index) => {
queue.push(this.getFileUrlByOnce(item, index, token));
});
const res = await Promise.all(queue);
res.forEach(val => {
selectList[val.index].downloadUrl = val.downloadUrl;
});
let html = this.generateDom(selectList);
this.showMainDialog(pan[mode][0], html, pan[mode][1]);
},
generateDom(list) {
let content = '
';
let alinkAllText = '';
list.forEach((v, i) => {
if (v.isFolder) return;
let filename = v.fileName;
let size = base.sizeFormat(v.size);
let dlink = v.downloadUrl;
if (mode === 'api') {
content += `
`;
}
if (mode === 'aria') {
let alink = this.convertLinkToAria(dlink, filename, navigator.userAgent);
alinkAllText += alink + '\r\n';
content += `
`;
}
if (mode === 'rpc') {
content += `
`;
}
if (mode === 'curl') {
let alink = this.convertLinkToCurl(dlink, filename, navigator.userAgent);
alinkAllText += alink + '\r\n';
content += `
`;
}
if (mode === 'bc') {
let alink = this.convertLinkToBC(dlink, filename, navigator.userAgent);
content += `
`;
}
});
content += '
';
if (mode === 'aria')
content += ``;
if (mode === 'rpc') {
let rpc = base.getValue('setting_rpc_domain') + ':' + base.getValue('setting_rpc_port') + base.getValue('setting_rpc_path');
content += ``;
}
if (mode === 'curl')
content += ``;
return content;
},
async sendLinkToRPC(filename, link) {
let rpc = {
domain: base.getValue('setting_rpc_domain'),
port: base.getValue('setting_rpc_port'),
path: base.getValue('setting_rpc_path'),
token: base.getValue('setting_rpc_token'),
dir: base.getValue('setting_rpc_dir'),
};
let url = `${rpc.domain}:${rpc.port}${rpc.path}`;
let rpcData = {
id: new Date().getTime(),
jsonrpc: '2.0',
method: 'aria2.addUri',
params: [`token:${rpc.token}`, [link], {
dir: rpc.dir,
out: filename,
header: []
}]
};
try {
let res = await base.post(url, rpcData, {}, '');
if (res.result) return 'success';
return 'fail';
} catch (e) {
return 'fail';
}
},
getSelectedList() {
try {
return document.querySelector(".c-file-list").__vue__.selectedList;
} catch (e) {
return [document.querySelector(".info-detail").__vue__.fileDetail];
}
},
detectPage() {
let path = location.pathname;
if (/^\/web\/main/.test(path)) return 'home';
if (/^\/web\/share/.test(path)) return 'share';
return '';
},
isOnlyFolder() {
for (let i = 0; i < selectList.length; i++) {
if (!selectList[i].isFolder) return false;
}
return true;
},
showMainDialog(title, html, footer) {
Swal.fire({
title,
html,
footer,
allowOutsideClick: false,
showCloseButton: true,
showConfirmButton: false,
position: 'top',
width,
padding: '15px 20px 5px',
customClass,
});
},
async initPanLinker() {
base.initDefaultConfig();
pt = this.detectPage();
if (base.getValue('setting_getuser_info') === 'yes') {
let res = await base.post
(`https://api.youxiaohou.com/config/tianyi?ver=${version}&a=${author}`, {}, {}, 'text');
pan = JSON.parse(base.decode(res));
};
Object.freeze && Object.freeze(pan);
pan.num === base.getValue('setting_init_code') ? this.addButton() : this.addInitButton();
this.getToken();
base.createTip();
base.registerMenuCommand();
}
};
//迅雷云盘
let xunlei = {
convertLinkToAria(link, filename, ua) {
filename = base.fixFilename(filename);
return encodeURIComponent(`aria2c "${link}" --out "${filename}"`);
},
convertLinkToBC(link, filename, ua) {
let bc = `AA/${encodeURIComponent(filename)}/?url=${encodeURIComponent(link)}ZZ`;
return encodeURIComponent(`bc://http/${base.encode(bc)}`);
},
convertLinkToCurl(link, filename, ua) {
let terminal = base.getValue('setting_terminal_type');
filename = base.fixFilename(filename);
return encodeURIComponent(`${terminal !== 'wp' ? 'curl' : 'curl.exe'} -L -C - "${link}" -o "${filename}"`);
},
addPageListener() {
doc.on('click', '.pl-button-mode', (e) => {
mode = e.target.dataset.mode;
Swal.showLoading();
this.getPCSLink();
});
doc.on('click', '.listener-link-api', async (e) => {
e.preventDefault();
$('#downloadIframe').attr('src', e.currentTarget.dataset.link);
});
doc.on('click', '.listener-link-api-btn', async (e) => {
base.setClipboard(e.target.dataset.filename);
$(e.target).text('复制成功').animate({opacity: '0.5'}, "slow");
setTimeout(
function (){
$(e.target).text('重新复制').animate({opacity: '1'}, "slow");
},2000
)
});
doc.on('click', '.listener-link-bc-btn', async (e) => {
let mirror = base.getMirrorList(e.target.dataset.dlink, pan.mirror);
base.setClipboard(mirror);
$(e.target).text('复制成功').animate({opacity: '0.5'}, "slow");
setTimeout(
function (){
$(e.target).text('重新复制').animate({opacity: '1'}, "slow");
},2000
)
});
doc.on('click', '.listener-link-aria, .listener-copy-all', (e) => {
e.preventDefault();
base.setClipboard(decodeURIComponent(e.target.dataset.link));
$(e.target).text('复制成功,快去粘贴吧!').animate({opacity: '0.5'}, "slow");
setTimeout(
function (){
$(e.target).text('重新复制').animate({opacity: '1'}, "slow");
},2000
)
});
doc.on('click', '.listener-link-rpc', async (e) => {
let target = $(e.currentTarget);
target.find('.icon').remove();
target.find('.pl-loading').remove();
target.prepend(base.createLoading());
let res = await this.sendLinkToRPC(e.currentTarget.dataset.filename, e.currentTarget.dataset.link);
if (res === 'success') {
$('.listener-rpc-task').show();
target.removeClass('pl-btn-danger').html('发送成功,快去看看吧!').animate({opacity: '0.5'}, "slow");
} else {
target.addClass('pl-btn-danger').text('发送失败,请检查您的RPC配置信息!').animate({opacity: '0.5'}, "slow");
}
});
doc.on('click', '.listener-send-rpc', (e) => {
$('.listener-link-rpc').click();
$(e.target).text('发送完成,发送结果见上方按钮!').animate({opacity: '0.5'}, "slow");
});
doc.on('click', '.listener-open-setting', () => {
base.showSetting();
});
doc.on('click', '.listener-open-updatelog', () => {
base.showUpdateLog();
});
doc.on('click', '.listener-rpc-task', () => {
let rpc = JSON.stringify({
domain: base.getValue('setting_rpc_domain'),
port: base.getValue('setting_rpc_port'),
}), url = `${pan.d}/?rpc=${base.encode(rpc)}#${base.getValue('setting_rpc_token')}`;
GM_openInTab(url, {active: true});
});
},
addButton() {
if(document.getElementById("pl-button-link")){
document.getElementById("pl-button-link").remove()
}
if (!pt) return;
let $toolWrap;
let $button = $(`
下载助手
`);
if (pt === 'home') {
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.home);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
if (pt === 'share') {
$button.css({'margin-right': '10px'});
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.share);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
base.createDownloadIframe();
this.addPageListener();
setInterval(function(){
if(!document.getElementById("pl-button-link")){
xunlei.addButton();
}
},1000)
},
addInitButton() {
if(document.getElementById("pl-button-link")){
document.getElementById("pl-button-link").remove()
}
if (!pt) return;
let $toolWrap;
let $button = $(`
下载助手(未点亮)
`);
if (pt === 'home') {
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.home);
if ($toolWrap.length > 0) {
$toolWrap.append($button);
//clearInterval(ins);
}
//}, 50);
}
if (pt === 'share') {
$button.css({'margin-right': '10px'});
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.share);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
$button.click(() => base.initDialog());
setInterval(function(){
if(!document.getElementById("pl-button-link")){
xunlei.addInitButton();
}
},1000)
},
getToken() {
let credentials = {}, captcha = {};
for (let i = 0; i < localStorage.length; i++) {
if (/^credentials_/.test(localStorage.key(i))) {
credentials = base.getStorage(localStorage.key(i));
base.setStorage('');
}
if (/^captcha_[\w]{16}/.test(localStorage.key(i))) {
captcha = base.getStorage(localStorage.key(i));
}
}
let deviceid = /(\w{32})/.exec(base.getStorage('deviceid').split(','))[0];
let token = {
credentials,
captcha,
deviceid
};
return token;
},
async getFileUrlByOnce(item, index, token) {
try {
if (item.downloadUrl) return {
index,
downloadUrl: item.downloadUrl
};
let res = await base.get(pan.pcs[0] + item.id, {
'Authorization': `${token.credentials.token_type} ${token.credentials.access_token}`,
'content-type': "application/json",
'x-captcha-token': token.captcha.token,
'x-device-id': token.deviceid,
});
if (res.web_content_link) {
return {
index,
downloadUrl: res.web_content_link
};
} else {
return {
index,
downloadUrl: '获取下载地址失败,请刷新重试!'
};
}
} catch (e) {
return message.error('提示:请先登录网盘后刷新页面!');
}
},
async getPCSLink() {
selectList = this.getSelectedList();
if (selectList.length === 0) {
return message.error('提示:请先勾选要下载的文件!');
}
if (this.isOnlyFolder()) {
return message.error('提示:请打开文件夹后勾选文件!');
}
if (pt === 'home') {
let queue = [];
let token = this.getToken();
selectList.forEach((item, index) => {
queue.push(this.getFileUrlByOnce(item, index, token));
});
const res = await Promise.all(queue);
res.forEach(val => {
selectList[val.index].downloadUrl = val.downloadUrl;
});
} else {
return message.error('提示:请保存到自己网盘后去网盘主页下载!');
}
let html = this.generateDom(selectList);
this.showMainDialog(pan[mode][0], html, pan[mode][1]);
},
generateDom(list) {
let content = '
';
let alinkAllText = '';
list.forEach((v, i) => {
if (v.kind === 'drive#folder') return;
let filename = v.name;
let size = base.sizeFormat(+v.size);
let dlink = v.downloadUrl;
if (mode === 'api') {
content += `
`;
}
if (mode === 'aria') {
let alink = this.convertLinkToAria(dlink, filename, navigator.userAgent);
alinkAllText += alink + '\r\n';
content += `
`;
}
if (mode === 'rpc') {
content += `
`;
}
if (mode === 'curl') {
let alink = this.convertLinkToCurl(dlink, filename, navigator.userAgent);
alinkAllText += alink + '\r\n';
content += `
`;
}
if (mode === 'bc') {
let alink = this.convertLinkToBC(dlink, filename, navigator.userAgent);
content += `
`;
}
});
content += '
';
if (mode === 'aria')
content += ``;
if (mode === 'rpc') {
let rpc = base.getValue('setting_rpc_domain') + ':' + base.getValue('setting_rpc_port') + base.getValue('setting_rpc_path');
content += ``;
}
if (mode === 'curl')
content += ``;
return content;
},
async sendLinkToRPC(filename, link) {
let rpc = {
domain: base.getValue('setting_rpc_domain'),
port: base.getValue('setting_rpc_port'),
path: base.getValue('setting_rpc_path'),
token: base.getValue('setting_rpc_token'),
dir: base.getValue('setting_rpc_dir'),
};
let url = `${rpc.domain}:${rpc.port}${rpc.path}`;
let rpcData = {
id: new Date().getTime(),
jsonrpc: '2.0',
method: 'aria2.addUri',
params: [`token:${rpc.token}`, [link], {
dir: rpc.dir,
out: filename,
header: []
}]
};
try {
let res = await base.post(url, rpcData, {}, '');
if (res.result) return 'success';
return 'fail';
} catch (e) {
return 'fail';
}
},
getSelectedList() {
try {
let doms = document.querySelectorAll('.pan-list-item');
let selectedList = [];
for (let dom of doms) {
let domVue = dom.__vue__;
if (domVue.selected.includes(domVue.info.id)) {
selectedList.push(domVue.info);
}
}
return selectedList;
} catch (e) {
return [];
}
},
detectPage() {
let path = location.pathname;
if (/^\/$/.test(path)) return 'home';
if (/^\/(s|share)\//.test(path)) return 'share';
return '';
},
isOnlyFolder() {
for (let i = 0; i < selectList.length; i++) {
if (selectList[i].kind === 'drive#file') return false;
}
return true;
},
showMainDialog(title, html, footer) {
Swal.fire({
title,
html,
footer,
allowOutsideClick: false,
showCloseButton: true,
showConfirmButton: false,
position: 'top',
width,
padding: '15px 20px 5px',
customClass,
});
},
async initPanLinker() {
base.initDefaultConfig();
pt = this.detectPage();
if (base.getValue('setting_getuser_info') === 'yes') {
let res = await base.post
(`https://api.youxiaohou.com/config/xunlei?ver=${version}&a=${author}`, {}, {}, 'text');
pan = JSON.parse(base.decode(res));
};
Object.freeze && Object.freeze(pan);
pan.num === base.getValue('setting_init_code') ? this.addButton() : this.addInitButton();
base.createTip();
base.registerMenuCommand();
}
};
//夸克网盘
let quark = {
convertLinkToAria(link, filename, ua) {
filename = base.fixFilename(filename);
return encodeURIComponent(`aria2c "${link}" --out "${filename}" --header "Cookie: ${document.cookie}"`);
},
convertLinkToBC(link, filename, ua) {
let bc = `AA/${encodeURIComponent(filename)}/?url=${encodeURIComponent(link)}&cookie=${encodeURIComponent(document.cookie)}ZZ`;
return encodeURIComponent(`bc://http/${base.encode(bc)}`);
},
convertLinkToCurl(link, filename, ua) {
let terminal = base.getValue('setting_terminal_type');
filename = base.fixFilename(filename);
return encodeURIComponent(`${terminal !== 'wp' ? 'curl' : 'curl.exe'} -L -C - "${link}" -o "${filename}" -b "${document.cookie}"`);
},
addPageListener() {
window.addEventListener('hashchange', async (e) => {
let home = 'https://pan.quark.cn/list#/', all = 'https://pan.quark.cn/list#/list/all';
if (e.oldURL === home && e.newURL === all) return;
await base.sleep(150);
if ($('.quark-button').length > 0) return;
pan.num === base.getValue('setting_init_code') ? this.addButton() : this.addInitButton();
});
doc.on('click', '.pl-button-mode', (e) => {
mode = e.target.dataset.mode;
Swal.showLoading();
this.getPCSLink();
});
doc.on('click', '.listener-link-api', async (e) => {
e.preventDefault();
$('#downloadIframe').attr('src', e.currentTarget.dataset.link);
});
doc.on('click', '.listener-link-aria, .listener-copy-all', (e) => {
e.preventDefault();
base.setClipboard(decodeURIComponent(e.target.dataset.link));
$(e.target).text('复制成功,快去粘贴吧!').animate({opacity: '0.5'}, "slow");
setTimeout(
function (){
$(e.target).text('重新复制').animate({opacity: '1'}, "slow");
},2000
)
});
doc.on('click', '.listener-link-rpc', async (e) => {
let target = $(e.currentTarget);
target.find('.icon').remove();
target.find('.pl-loading').remove();
target.prepend(base.createLoading());
let res = await this.sendLinkToRPC(e.currentTarget.dataset.filename, e.currentTarget.dataset.link);
if (res === 'success') {
$('.listener-rpc-task').show();
target.removeClass('pl-btn-danger').html('发送成功,快去看看吧!').animate({opacity: '0.5'}, "slow");
} else {
target.addClass('pl-btn-danger').text('发送失败,请检查您的RPC配置信息!').animate({opacity: '0.5'}, "slow");
}
});
doc.on('click', '.listener-send-rpc', (e) => {
$('.listener-link-rpc').click();
$(e.target).text('发送完成,发送结果见上方按钮!').animate({opacity: '0.5'}, "slow");
});
doc.on('click', '.listener-open-setting', () => {
base.showSetting();
});
doc.on('click', '.listener-open-updatelog', () => {
base.showUpdateLog();
});
doc.on('click', '.listener-rpc-task', () => {
let rpc = JSON.stringify({
domain: base.getValue('setting_rpc_domain'),
port: base.getValue('setting_rpc_port'),
}), url = `${pan.d}/?rpc=${base.encode(rpc)}#${base.getValue('setting_rpc_token')}`;
GM_openInTab(url, {active: true});
});
},
addButton() {
if(document.getElementById("pl-button-link")){
document.getElementById("pl-button-link").remove()
}
if (!pt) return;
waitForKeyElements(".share-content-right", function () {
let ad1 = document.getElementsByClassName("share-content-right")[0];
ad1.remove();
});
let $toolWrap;
let $button = $(`
`);
$button.css({"margin-right":"10px","background-color":color});
if (pt === 'home') {
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.home);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
if (pt === 'share') {
$button.css({"height":"40px","background-color":color});
$toolWrap = $(pan.btn.share);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
}
}
setInterval(function(){
if(!document.getElementById("pl-button-link")){
quark.addButton();
}
},1000)
},
addInitButton() {
if(document.getElementById("pl-button-link")){
document.getElementById("pl-button-link").remove()
}
if (!pt) return;
let $toolWrap;
let $button = $(`
`);
$button.css({"margin-right":"10px","background-color":color});
if (pt === 'home') {
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.home);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
if (pt === 'share') {
$button.css({"height":"40px","background-color":color});
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.share);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
$button.click(() => base.initDialog());
setInterval(function(){
if(!document.getElementById("pl-button-link")){
quark.addInitButton();
}
},1000)
},
async getPCSLink() {
selectList = this.getSelectedList();
if (selectList.length === 0) {
return message.error('提示:请先勾选要下载的文件!');
}
if (this.isOnlyFolder()) {
return message.error('提示:请打开文件夹后勾选文件!');
}
let fids = [];
selectList.forEach(val => {
fids.push(val.fid);
});
if (pt === 'home') {
let res = await base.post(pan.pcs[0], {
"fids": fids
}, {"content-type": "application/json;charset=utf-8", "user-agent": pan.ua});
if (res.code === 31001) {
return message.error('提示:请先登录网盘!');
}
if (res.code !== 0) {
return message.error('提示:获取链接失败!');
}
let html = this.generateDom(res.data);
this.showMainDialog(pan[mode][0], html, pan[mode][1]);
} else {
message.error('提示:请保存到自己网盘后去网盘主页下载!');
await base.sleep(1000);
document.querySelector('.file-info_r').click();
return;
}
},
generateDom(list) {
let content = '
';
let alinkAllText = '';
list.forEach((v, i) => {
if (v.file === false) return;
let filename = v.file_name;
let fid = v.fid;
let size = base.sizeFormat(v.size);
let dlink = v.download_url;
if (mode === 'api') {
content += `
`;
}
if (mode === 'aria') {
let alink = this.convertLinkToAria(dlink, filename, navigator.userAgent);
alinkAllText += alink + '\r\n';
content += `
`;
}
if (mode === 'rpc') {
content += `
`;
}
if (mode === 'curl') {
let alink = this.convertLinkToCurl(dlink, filename, navigator.userAgent);
alinkAllText += alink + '\r\n';
content += `
`;
}
if (mode === 'bc') {
let alink = this.convertLinkToBC(dlink, filename, navigator.userAgent);
content += `
`;
}
});
content += '
';
if (mode === 'aria')
content += ``;
if (mode === 'rpc') {
let rpc = base.getValue('setting_rpc_domain') + ':' + base.getValue('setting_rpc_port') + base.getValue('setting_rpc_path');
content += ``;
}
if (mode === 'curl')
content += ``;
return content;
},
async sendLinkToRPC(filename, link) {
let rpc = {
domain: base.getValue('setting_rpc_domain'),
port: base.getValue('setting_rpc_port'),
path: base.getValue('setting_rpc_path'),
token: base.getValue('setting_rpc_token'),
dir: base.getValue('setting_rpc_dir'),
};
let url = `${rpc.domain}:${rpc.port}${rpc.path}`;
let rpcData = {
id: new Date().getTime(),
jsonrpc: '2.0',
method: 'aria2.addUri',
params: [`token:${rpc.token}`, [link], {
dir: rpc.dir,
out: filename,
header: [`Cookie: ${document.cookie}`]
}]
};
try {
let res = await base.post(url, rpcData, {"Cookie": document.cookie}, '');
if (res.result) return 'success';
return 'fail';
} catch (e) {
return 'fail';
}
},
getSelectedList() {
try {
let selectedList = [];
let reactDom = document.getElementsByClassName('file-list')[0];
let reactObj = base.findReact(reactDom);
let props = reactObj.props;
if (props) {
let fileList = props.list || [];
let selectedKeys = props.selectedRowKeys || [];
fileList.forEach((val) => {
if (selectedKeys.includes(val.fid)) {
selectedList.push(val);
}
});
}
return selectedList;
} catch (e) {
return [];
}
},
detectPage() {
let path = location.pathname;
if (/^\/(list)/.test(path)) return 'home';
if (/^\/(s|share)\//.test(path)) return 'share';
return '';
},
isOnlyFolder() {
for (let i = 0; i < selectList.length; i++) {
if (selectList[i].file) return false;
}
return true;
},
showMainDialog(title, html, footer) {
Swal.fire({
title,
html,
footer,
allowOutsideClick: false,
showCloseButton: true,
showConfirmButton: false,
position: 'top',
width,
padding: '15px 20px 5px',
customClass,
});
},
async initPanLinker() {
base.initDefaultConfig();
pt = this.detectPage();
if (base.getValue('setting_getuser_info') === 'yes') {
let res = await base.post
(`https://api.youxiaohou.com/config/quark?ver=${version}&a=${author}`, {}, {}, 'text');
pan = JSON.parse(base.decode(res));
};
Object.freeze && Object.freeze(pan);
pan.num === base.getValue('setting_init_code') ? this.addButton() : this.addInitButton();
this.addPageListener();
base.createTip();
base.createDownloadIframe();
base.registerMenuCommand();
}
};
//中国移动云盘/和彩云
let yidong = {
convertLinkToAria(link, filename, ua) {
filename = base.fixFilename(filename);
return encodeURIComponent(`aria2c "${link}" --out "${filename}"`);
},
convertLinkToBC(link, filename, ua) {
let bc = `AA/${encodeURIComponent(filename)}/?url=${encodeURIComponent(link)}ZZ`;
return encodeURIComponent(`bc://http/${base.encode(bc)}`);
},
convertLinkToCurl(link, filename, ua) {
let terminal = base.getValue('setting_terminal_type');
filename = base.fixFilename(filename);
return encodeURIComponent(`${terminal !== 'wp' ? 'curl' : 'curl.exe'} -L -C - "${link}" -o "${filename}"`);
},
addPageListener() {
doc.on('click', '.pl-button-mode', (e) => {
mode = e.target.dataset.mode;
Swal.showLoading();
this.getPCSLink();
});
doc.on('click', '.listener-link-api', async (e) => {
e.preventDefault();
$('#downloadIframe').attr('src', e.currentTarget.dataset.link);
});
doc.on('click', '.listener-link-aria, .listener-copy-all', (e) => {
e.preventDefault();
base.setClipboard(decodeURIComponent(e.target.dataset.link));
$(e.target).text('复制成功!').animate({opacity: '0.5'}, "slow");
setTimeout(
function (){
$(e.target).text('重新复制').animate({opacity: '1'}, "slow");
},2000
)
});
doc.on('click', '.listener-link-rpc', async (e) => {
let target = $(e.currentTarget);
target.find('.icon').remove();
target.find('.pl-loading').remove();
target.prepend(base.createLoading());
let res = await this.sendLinkToRPC(e.currentTarget.dataset.filename, e.currentTarget.dataset.link);
if (res === 'success') {
$('.listener-rpc-task').show();
target.removeClass('pl-btn-danger').html('发送成功,快去看看吧!').animate({opacity: '0.5'}, "slow");
} else {
target.addClass('pl-btn-danger').text('发送失败,请检查您的RPC配置信息!').animate({opacity: '0.5'}, "slow");
}
});
doc.on('click', '.listener-send-rpc', (e) => {
$('.listener-link-rpc').click();
$(e.target).text('发送完成,发送结果见上方按钮!').animate({opacity: '0.5'}, "slow");
});
doc.on('click', '.listener-open-setting', () => {
base.showSetting();
});
doc.on('click', '.listener-open-updatelog', () => {
base.showUpdateLog();
});
doc.on('click', '.listener-rpc-task', () => {
let rpc = JSON.stringify({
domain: base.getValue('setting_rpc_domain'),
port: base.getValue('setting_rpc_port'),
}), url = `${pan.d}/?rpc=${base.encode(rpc)}#${base.getValue('setting_rpc_token')}`;
GM_openInTab(url, {active: true});
});
},
addButton() {
if(document.getElementById("pl-button-link")){
document.getElementById("pl-button-link").remove()
}
if (!pt) return;
let $toolWrap;
let $button = $(`
下载助手
`);
if (pt === 'home') {
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.home);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
if (pt === 'share') {
$button.removeClass('yidong-button').addClass('yidong-share-button');
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.share);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
base.createDownloadIframe();
this.addPageListener();
setInterval(function(){
if(!document.getElementById("pl-button-link")){
yidong.addButton();
}
},1000)
},
addInitButton() {
if(document.getElementById("pl-button-link")){
document.getElementById("pl-button-link").remove()
}
if (!pt) return;
let $toolWrap;
let $button = $(`
下载助手(未点亮)
`);
if (pt === 'home') {
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.home);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
if (pt === 'share') {
$button.removeClass('yidong-button').addClass('yidong-share-button');
//let ins = setInterval(() => {
$toolWrap = $(pan.btn.share);
if ($toolWrap.length > 0) {
$toolWrap.prepend($button);
//clearInterval(ins);
}
//}, 50);
}
$button.click(() => base.initDialog());
setInterval(function(){
if(!document.getElementById("pl-button-link")){
yidong.addInitButton();
}
},1000)
},
getRandomString(len) {
len = len || 16;
let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
let maxPos = $chars.length;
let pwd = '';
for (let i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
},
utob(str) {
const u = String.fromCharCode;
return str.replace(/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g, (t) => {
if (t.length < 2) {
let e = t.charCodeAt(0);
return e < 128 ? t : e < 2048 ? u(192 | e >>> 6) + u(128 | 63 & e) : u(224 | e >>> 12 & 15) + u(128 | e >>> 6 & 63) + u(128 | 63 & e);
}
e = 65536 + 1024 * (t.charCodeAt(0) - 55296) + (t.charCodeAt(1) - 56320);
return u(240 | e >>> 18 & 7) + u(128 | e >>> 12 & 63) + u(128 | e >>> 6 & 63) + u(128 | 63 & e);
});
},
getSign(e, t, a, n) {
let r = "",
i = "";
if (t) {
let s = Object.assign({}, t);
i = JSON.stringify(s),
i = i.replace(/\s*/g, ""),
i = encodeURIComponent(i);
let c = i.split(""),
u = c.sort();
i = u.join("");
}
let A = md5(base.encode(this.utob(i)));
let l = md5(a + ":" + n);
return md5(A + l).toUpperCase();
},
async getFileUrlByOnce(item, index) {
try {
if (item.downloadUrl) return {
index,
downloadUrl: item.downloadUrl
};
if (this.detectPage() === 'home') {
let body = {
"appName": "",
"contentID": item.contentID,
"commonAccountInfo": {"account": item.owner, "accountType": 1}
};
let time = new Date(+new Date() + 8 * 3600 * 1000).toJSON().substr(0, 19).replace('T', ' ');
let key = this.getRandomString(16);
let sign = this.getSign(undefined, body, time, key);
let res = await base.post(pan.pcs[0], body, {
'x-huawei-channelSrc': '10000034',
'x-inner-ntwk': '2',
'mcloud-channel': '1000101',
'mcloud-client': '10701',
'mcloud-sign': time + "," + key + "," + sign,
'content-type': "application/json;charset=UTF-8",
'caller': 'web',
'CMS-DEVICE': 'default',
'x-DeviceInfo': '||9|7.11.0|chrome|102.0.0.0|||windows 10||zh-CN|||',
'x-SvcType': '1',
});
if (res.success) {
return {
index,
downloadUrl: res.data.downloadURL
};
} else {
return {
index,
downloadUrl: '获取下载地址失败,请刷新重试!'
};
}
}
if (this.detectPage() === 'share') {
let vueDom = document.querySelector(".home-page").__vue__;
let res = await base.post(pan.pcs[1], `linkId=${vueDom.linkID}&contentIds=${encodeURIComponent(vueDom.currentPath.id + '/' + item.coID)}&catalogIds=`, {
'Content-Type': 'application/x-www-form-urlencoded',
});
if (res.code === 0) {
return {
index,
downloadUrl: res.data.redrUrl
};
} else {
return {
index,
downloadUrl: '获取下载地址失败,请刷新重试!'
};
}
}
} catch (e) {
return {
index,
downloadUrl: '获取下载地址失败,请刷新重试!'
};
}
},
async getPCSLink() {
selectList = this.getSelectedList();
if (selectList.length === 0) {
return message.error('提示:请先勾选要下载的文件!');
}
if (this.isOnlyFolder()) {
return message.error('提示:请打开文件夹后勾选文件!');
}
let queue = [];
selectList.forEach((item, index) => {
queue.push(this.getFileUrlByOnce(item, index));
});
const res = await Promise.all(queue);
res.forEach(val => {
selectList[val.index].downloadUrl = val.downloadUrl;
});
let html = this.generateDom(selectList);
this.showMainDialog(pan[mode][0], html, pan[mode][1]);
},
generateDom(list) {
let content = '
';
let alinkAllText = '';
list.forEach((v, i) => {
if (v.dirEtag || v.caName) return;
let filename = v.contentName || v.coName;
let size = base.sizeFormat(v.contentSize || v.coSize);
let dlink = v.downloadUrl;
if (mode === 'api') {
alinkAllText += dlink + '\r\n';
content += `
`;
}
if (mode === 'aria') {
let alink = this.convertLinkToAria(dlink, filename, navigator.userAgent);
alinkAllText += alink + '\r\n';
content += `
`;
}
if (mode === 'rpc') {
content += `
`;
}
if (mode === 'curl') {
let alink = this.convertLinkToCurl(dlink, filename, navigator.userAgent);
alinkAllText += alink + '\r\n';
content += `
`;
}
if (mode === 'bc') {
let alink = this.convertLinkToBC(dlink, filename, navigator.userAgent);
content += `
`;
}
});
content += '
';
if (mode === 'api'){
content += ``;}
if (mode === 'aria')
content += ``;
if (mode === 'rpc') {
let rpc = base.getValue('setting_rpc_domain') + ':' + base.getValue('setting_rpc_port') + base.getValue('setting_rpc_path');
content += ``;
}
if (mode === 'curl')
content += ``;
return content;
},
async sendLinkToRPC(filename, link) {
let rpc = {
domain: base.getValue('setting_rpc_domain'),
port: base.getValue('setting_rpc_port'),
path: base.getValue('setting_rpc_path'),
token: base.getValue('setting_rpc_token'),
dir: base.getValue('setting_rpc_dir'),
};
let url = `${rpc.domain}:${rpc.port}${rpc.path}`;
let rpcData = {
id: new Date().getTime(),
jsonrpc: '2.0',
method: 'aria2.addUri',
params: [`token:${rpc.token}`, [link], {
dir: rpc.dir,
out: filename,
header: []
}]
};
try {
let res = await base.post(url, rpcData, {}, '');
if (res.result) return 'success';
return 'fail';
} catch (e) {
return 'fail';
}
},
getSelectedList() {
try {
return document.querySelector(".main_file_list").__vue__.selectList.map(val => val.item);
} catch (e) {
let vueDom = document.querySelector(".home-page").__vue__;
let fileList = vueDom._computedWatchers.fileList.value;
let dirList = vueDom._computedWatchers.dirList.value;
let selectedFileIndex = vueDom.selectedFile;
let selectedDirIndex = vueDom.selectedDir;
let selectFileList = fileList.filter((v, i) => {
return selectedFileIndex.includes(i);
});
let selectDirList = dirList.filter((v, i) => {
return selectedDirIndex.includes(i);
});
return [...selectFileList, ...selectDirList];
}
},
detectPage() {
let hostname = location.hostname;
if (/^yun/.test(hostname)) return 'home';
if (/^caiyun/.test(hostname)) return 'share';
return '';
},
isOnlyFolder() {
for (let i = 0; i < selectList.length; i++) {
if (selectList[i].fileEtag || selectList[i].coName) return false;
}
return true;
},
showMainDialog(title, html, footer) {
Swal.fire({
title,
html,
footer,
allowOutsideClick: false,
showCloseButton: true,
showConfirmButton: false,
position: 'top',
width,
padding: '15px 20px 5px',
customClass,
});
},
async initPanLinker() {
base.initDefaultConfig();
pt = this.detectPage();
let res = await base.post
(`https://api.youxiaohou.com/config/yidong?ver=${version}&a=${author}`, {}, {}, 'text');
pan = JSON.parse(base.decode(res));
Object.freeze && Object.freeze(pan);
pan.num === base.getValue('setting_init_code') ? this.addButton() : this.addInitButton();
base.createTip();
base.registerMenuCommand();
}
};
// 油小猴
let youxiaohou ={
async initPanLinker() {
base.initDefaultConfig();
let res = await base.post(`https://api.youxiaohou.com/config/?ver=${version}&a=${author}`, {}, {}, 'text');
pan = JSON.parse(base.decode(res));
base.createTip();
base.registerPanMenuCommand();
let $button1 = `
`
doc.on('click', '.listener-open-updatelog', () => {
base.showUpdateLog();
});
document.getElementsByClassName("nav-links can-hide")[0].innerHTML += $button1
let $button2 = `
`
doc.on('click', '.listener-open-info', () => {
base.showPanInfo();
});
document.getElementsByClassName("nav-links can-hide")[0].innerHTML += $button2
}
}
//获取实时脚本信息
function fetchScriptInfo(url, retryCount) {
fetch(url)
.then(response => response.json())
.then(data => {
console.log('【(改)网盘直链下载助手】Fetch\n请求地址:' + url + ' (GreasyFork)\n返回结果:', data);
var scriptVersion = data.version;
var scriptAuthor = data.users[0].name;
var scriptName = data.name;
var scriptDescription = data.description;
/*---
console/log('原脚本名称:', scriptName);
console/log('原脚本版本:', scriptVersion);
console/log('原脚本作者:', scriptAuthor);
console/log('原脚本介绍:', scriptDescription);
console/log('真实名称:', scriptInfo.name);
console/log('真实版本:', scriptInfo.version);
console/log('真实作者:', scriptInfo.author);
console/log('真实介绍:', scriptInfo.description);
*/
base.setValue('setting_script_version', scriptVersion);
base.setValue('setting_script_author', 'YouXiaoHou');
base.setValue('setting_script_name', scriptName);
base.setValue('setting_script_description', scriptDescription);
})
.catch(error => {
console.error('【(改)网盘直链下载助手】\n获取脚本版本时发生错误', error);
if (retryCount > 0) {
console.log("【(改)网盘直链下载助手】\n5秒后将重试获取版本")
setTimeout(function(){
console.log('【(改)网盘直链下载助手】\n重新尝试获取脚本信息...');
fetchScriptInfo(url, retryCount - 1); // 重新尝试获取脚本版本
},5000)
} else {
console.error('【(改)网盘直链下载助手】\n无法获取脚本信息,达到最大尝试次数。');
}
});
}
//获取原脚本的GreasyFork信息,确保油小猴服务器信任
var retryCount = 5; // 重新尝试次数
fetchScriptInfo('https://greasyfork.org/zh-CN/scripts/436446.json', retryCount);
//用于油小猴服务器检测的脚本信息
const scriptInfo = GM_info.script;
//用于油小猴服务器检测的脚本作者
const realauthor = scriptInfo.author;
const author = base.getValue('setting_script_author');
//用于油小猴服务器检测的脚本名称
const realname = scriptInfo.name;
const name = base.getValue('setting_script_name');
//用于油小猴服务器检测的脚本版本,防止服务器返回更新信息
const realversion = scriptInfo.version;
const version = base.getValue('setting_script_version');
/*--- waitForKeyElements(): 一个实用函数,用于Greasemonkey脚本,
它可以检测和处理AJAX加载的内容。
使用示例:
waitForKeyElements (
"div.comments"
, commentCallbackFunction
);
// 页面特定的函数,用于在找到节点时执行我们想要的操作。
function commentCallbackFunction (jNode) {
jNode.text ("waitForKeyElements() 更改了这段注释。");
}
重要提示:这个函数需要你的脚本加载了jQuery。
*/
function waitForKeyElements(selectorTxt, actionFunction, bWaitOnce, iframeSelector) {
var targetNodes, btargetsFound;
if (typeof iframeSelector == "undefined")
targetNodes = $(selectorTxt);
else
targetNodes = $(iframeSelector).contents()
.find(selectorTxt);
if (targetNodes && targetNodes.length > 0) {
btargetsFound = true;
targetNodes.each(function () {
var jThis = $(this);
var alreadyFound = jThis.data('alreadyFound') || false;
if (!alreadyFound) {
//--- 调用载荷函数。
var cancelFound = actionFunction(jThis);
if (cancelFound) btargetsFound = false;
else jThis.data('alreadyFound', true);
}
});
} else {
btargetsFound = false;
}
//--- 获取这个选择器的定时器控制变量。
var controlObj = waitForKeyElements.controlObj || {};
var controlKey = selectorTxt.replace(/[^\w]/g, "_");
var timeControl = controlObj[controlKey];
//--- 现在根据情况设置或清除定时器。
if (btargetsFound && bWaitOnce && timeControl) {
//--- 唯一需要清除定时器的情况。
clearInterval(timeControl);
delete controlObj[controlKey]
} else {
//--- 如果需要的话,设置一个定时器。
if (!timeControl) {
timeControl = setInterval(function () {
waitForKeyElements(selectorTxt, actionFunction, bWaitOnce, iframeSelector);
}, 300);
controlObj[controlKey] = timeControl;
}
}
waitForKeyElements.controlObj = controlObj;
}
// 主代码
let main = {
init() {
// 加载网页样式
base.addPanLinkerStyle();
// 判断网盘地址并加载对应的initPanLinker
if (/(pan|yun).baidu.com/.test(location.host)) {
baidu.initPanLinker();
}
if (/www.aliyundrive.com/.test(location.host)) {
ali.initPanLinker();
}
if (/cloud.189.cn/.test(location.host)) {
tianyi.initPanLinker();
}
if (/pan.xunlei.com/.test(location.host)) {
xunlei.initPanLinker();
}
if (/pan.quark.cn/.test(location.host)) {
quark.initPanLinker();
}
if (/(yun|caiyun).139.com/.test(location.host)) {
yidong.initPanLinker();
}
if (/www.youxiaohou.com/.test(location.host)) {
youxiaohou.initPanLinker();
}
}
};
main.init();
})();