// ==UserScript==
// @name 夸克网盘
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.1
// @description 你手捏一片金黄,像一个归来的王
// @author You
// @match https://pan.quark.cn/s/*
// @match https://pan.quark.cn/list*
// @icon https://pan.quark.cn/favicon.ico
// @require https://code.jquery.com/jquery-3.6.0.min.js
// @run-at document-body
// @grant none
// ==/UserScript==
(function () {
'use strict';
var $ = $ || window.$;
var obj = {
file_page: {
share_list: [],
home_list: [],
}
};
obj.initSharePage = function () {
obj.initPageFileList();
obj.initSharePageVideoFile();
};
obj.initHomePage = function () {
obj.initPageFileList();
if (obj.file_page.home_list.length == 0) {
obj.getHomePageFileList().then(function (result) {
if (result && result.data && result.data.list.length) {
obj.file_page.home_list = result.data.list;
obj.initDownloadPage();
}
});
}
};
obj.initVideoPage = function () {
obj.autoResolution();
};
obj.initSharePageVideoFile = function () {
$(document).on("click", ".file-click-wrap", function (event) {
var filelist = obj.getSelectedFileList();
if (filelist.length == 1 && filelist[0].obj_category == "video") {
obj.saveFileList(filelist).then(function (result) {
result && result.data && setTimeout(function () {
obj.taskFileList(result.data.task_id).then(function (result) {
if (result && result.code !== 0) return obj.showTipError(result.message);
const fids = result && result.data && result.data.save_as && result.data.save_as.save_as_top_fids;
if (Array.isArray(fids) && fids.length) {
$(".pc-cannot-preview-cancel").click();
window.open("https://pan.quark.cn/list#/video/" + fids[0], "_blank");
setTimeout(function () {
obj.deleteFileList(fids).then(function (result) {
result && result.data && obj.taskFileList(result.data.task_id).then(function (result) {
if (result && result.code !== 0) return obj.showTipError(result.message);
});
});
}, 5e3);
}
});
}, 1e3);
});
};
});
};
obj.getHomePageFileList = function () {
var pdir_fid = ((location.hash.match(/all\/(\w+)/) || []) [1]) || 0;
return obj.fetch("https://drive.quark.cn/1/clouddrive/file/sort?pr=ucpro&fr=pc&pdir_fid=" + pdir_fid + "&_page=1&_size=50&_fetch_total=1&_fetch_sub_dirs=0&_sort=file_type:asc,updated_at:desc", null, "GET");
};
obj.autoResolution = function () {
var qbox = $(".keep-quality-text-box.keep-quality-active");
if (qbox.length) {
if (qbox.text() == "流畅") {
obj.playFile().then(function (result) {
var video_list = result && result.data && result.data.video_list;
if (Array.isArray(video_list) && video_list.length) {
var findex, video_info = video_list.find(function (item, index) {
findex = index;
return item.video_info;
}).video_info;
obj.defaultResolution(video_info);
qbox.removeClass("keep-quality-active");
$(".keep-quality-text-box").eq(findex).addClass("keep-quality-active");
}
});
}
}
else {
setTimeout(obj.autoResolution, .5e3);
}
};
obj.playFile = function (fid) {
fid || (fid = ((location.hash.match(/video\/(\w+)/) || []) [1]) || "");
return obj.fetch("https://drive.quark.cn/1/clouddrive/file/v2/play?pr=ucpro&fr=pc", {
fid: fid,
resolutions: "normal,low,high,super,2k,4k",
supports: "fmp4",
use_right: "free_limit"
}, "POST");
};
obj.defaultResolution = function (t) {
try {
var n = document.querySelector("video")
, r = n.playbackRate
, i = n.currentTime;
n.src = t.url;
n.currentTime = i;
n.play();
setTimeout(function() {
n.playbackRate = r;
}, 500);
} catch (e) {
throw new Error("\u753b\u8d28\u5207\u6362\u5f02\u5e38".concat(e))
}
};
obj.initDownloadPage = function () {
if ($(".btn-show-link").length) {
return;
}
if ($(".file-info-share-buttom").length) {
$(".file-info-share-buttom").prepend('
显示链接
');
$(".btn-show-link").on("click", obj.showDownloadSharePage);
}
else if ($(".btn-operate").length) {
$(".btn-operate").append('');
$(".btn-show-link").on("click", obj.showDownloadHomePage);
}
else {
setTimeout(obj.initDownloadPage, 500);
}
};
obj.showDownloadSharePage = function () {
var filelist = obj.getSelectedFileList();
if (filelist.length == 0) return obj.showTipError("文件获取失败");
obj.saveFileList(filelist).then(function (result) {
setTimeout(function () {
result && result.data && obj.taskFileList(result.data.task_id).then(function (result) {
if (result && result.code !== 0) return obj.showTipError(result.message);
var fids = result && result.data && result.data.save_as && result.data.save_as.save_as_top_fids;
fids && fids.length && obj.getDownloadUrl(fids).then(function (result) {
obj.showBox(result.data);
obj.deleteFileList(fids).then(function (result) {
result && result.data && obj.taskFileList(result.data.task_id).then(function (result) {
if (result && result.code !== 0) return obj.showTipError(result.message);
});
});
});
});
}, 1e3);
});
};
obj.showDownloadHomePage = function () {
var fileList = obj.getSelectedFileList();
if (fileList.length == 0) return obj.showTipError("文件获取失败");
var fids = [];
fileList.forEach(function (item, index) {
fids.push(item.fid);
});
obj.getDownloadUrl(fids).then(function (result) {
obj.showBox(result.data);
});
};
obj.showBox = function (filelist) {
if (!(filelist && filelist.length)) return;
var html = '';
$("body").append(html);
filelist.forEach(function (item, index) {
$(".show-link-list").find(".ant-tree.ant-tree-directory").append('' + item.file_name + '');
});
$(".show-link-list").find(".ant-modal-close").on("click", function () {
$(".show-link-list").remove();
});
$(".show-link-list .buttons-wrap").prepend('');
$(".show-link-list .buttons-wrap button:eq(-1)").on("click", function () {
window.open("https://pc-index-skin.cdn.bcebos.com/6cb0bccb31e49dc0dba6336167be0a18.png", "_blank");
});
$(".show-link-list .buttons-wrap").prepend('');
$(".show-link-list .buttons-wrap button:eq(-2)").on("click", function () {
var $this = $(this), $text = $this.text();
$this.text("正在推送");
var downData = [];
filelist.forEach(function (item, index) {
downData.push({
id: "",
jsonrpc: "2.0",
method: "aria2.addUri",
params:[
//"token:你的RPC密钥", // 替换你的RPC密钥
[ item.download_url ],
{
out: item.file_name,
dir: "D:\/quarkDownloads", // 下载路径
referer: "https://pan.quark.cn/",
"user-agent": navigator.userAgent,
header: [`cookie: ${document.cookie}`]
}
]
});
});
obj.aria2RPC(downData, function (result) {
if (result) {
obj.showTipSuccess("Aria2 推送完成,请查收");
}
else {
obj.showTipError("Aria2 推送失败 可能 Aria2 未启动或配置错误");
}
$this.text($text);
});
});
};
obj.aria2RPC = function (downData, callback) {
var urls = ["http://127.0.0.1:6800/jsonrpc", "http://localhost:16800/jsonrpc"];
var url = sessionStorage.getItem("aria-url");
$.ajax({
type: "POST",
url: url || urls[0],
data: JSON.stringify(downData),
crossDomain: true,
processData: false,
contentType: "application/json",
success: function(result){
url || sessionStorage.setItem("aria-url", this.url);
callback && callback(result);
},
error: function (error) {
var index = urls.indexOf(this.url);
if (url) {
if (index < urls.length - 1) {
sessionStorage.setItem("aria-url", urls[index + 1]);
setTimeout(function() { obj.aria2RPC(downData, callback) }, 500);
}
else {
sessionStorage.removeItem("aria-url");
callback && callback("");
}
}
else {
sessionStorage.setItem("aria-url", urls[index + 1]);
setTimeout(function() { obj.aria2RPC(downData, callback) }, 500);
}
}
});
};
obj.getSelectedFileList = function () {
var list = obj.getShareId() ? obj.file_page.share_list : obj.file_page.home_list, fids = [];
$(".ant-table-body tbody tr").each(function () {
var $this = $(this);
if ($this.find("input").get(0).checked) {
fids.push($this.attr("data-row-key"));
}
});
if (fids.length) {
return list.filter(function (item) {
return fids.includes(item.fid);
});
}
else {
return list;
}
};
obj.getDownloadUrl = function (fids) {
return obj.fetch("https://drive.quark.cn/1/clouddrive/file/download?pr=ucpro&fr=pc", {fids: fids}, "POST");
};
obj.saveFileList = function (filelist, to_pdir_fid) {
Array.isArray(filelist) || (filelist = [ filelist ]);
var fid_list = [], fid_token_list = [];
filelist.forEach(function (item) {
fid_list.push(item.fid);
fid_token_list.push(item.share_fid_token);
});
var _share_args = sessionStorage.getItem("_share_args")
, value = JSON.parse(_share_args).value
, pwd_id = value.pwd_id
, stoken = value.stoken;
return obj.fetch("https://drive.quark.cn/1/clouddrive/share/sharepage/save?pr=ucpro&fr=pc", {
to_pdir_fid: to_pdir_fid || "0",
fid_list: fid_list,
fid_token_list: fid_token_list,
pwd_id: pwd_id,
stoken: stoken,
pdir_fid: "0"
}, "POST");
};
obj.deleteFileList = function (filelist) {
Array.isArray(filelist) || (filelist = [ filelist ]);
var fid_list = [];
filelist.forEach(function (item) {
item && item.fid && fid_list.push(item.fid);
});
return obj.fetch("https://drive.quark.cn/1/clouddrive/file/delete?pr=ucpro&fr=pc", {
action_type: 2,
filelist: fid_list.length ? fid_list : filelist,
exclude_fids: []
}, "POST");
};
obj.taskFileList = function (task_id) {
return obj.fetch("https://drive.quark.cn/1/clouddrive/task?pr=ucpro&fr=pc&task_id=" + task_id + "&retry_index=0", null, "GET");
};
obj.fetch = function (url, body, method) {
return fetch(url, {
headers: {
"content-type": "application/json"
},
referrer: "https://pan.quark.cn/",
referrerPolicy: "strict-origin-when-cross-origin",
body: body ? JSON.stringify(body) : body,
method: method || "POST",
mode: "cors",
credentials: "include"
}).then(function (result) {
return result.ok ? result.json() : "";
}).catch(function(error) {
console.error("fetch error", error);
});
};
obj.getShareId = function () {
return (window.location.pathname || "").split("/").slice(2)[0] || "";
};
obj.showTipSuccess = function (message, timeout) {
if ($(".ant-message").length == 0) {
$("body").append('
');
}
$(".ant-message span").append('');
setTimeout(function () {
$(".ant-message span").empty();
}, timeout || 3e3)
};
obj.showTipError = function (message, timeout) {
if ($(".ant-message").length == 0) {
$("body").append('
');
}
$(".ant-message span").append('');
setTimeout(function () {
$(".ant-message span").empty();
}, timeout || 3e3)
};
obj.initPageFileList = function () {
var open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
this.addEventListener("load", function() {
if (this.readyState == 4 && this.status == 200) {
var responseURL = this.responseURL, response = this.response;
if (responseURL.indexOf("/clouddrive/share/sharepage/detail") > 0) {
try { response = JSON.parse(response) } catch (error) { };
if (response && response.data && response.data.list.length) {
obj.file_page.share_list = response.data.list;
obj.initDownloadPage();
}
}
else if (responseURL.indexOf("/clouddrive/file/sort") > 0) {
if ($(".ant-modal-mask").length && $(".ant-modal-mask").hasClass("ant-modal-mask-hidden") == false) return;
try { response = JSON.parse(response) } catch (error) { };
if (response && response.data && response.data.list.length) {
obj.file_page.home_list = response.data.list;
obj.initDownloadPage();
}
}
}
}, false);
open.apply(this, arguments);
};
};
obj.run = function () {
var url = location.href;
if (url.indexOf(".quark.cn/s/") > 0) {
obj.initSharePage();
}
else if (url.indexOf(".quark.cn/list") > 0) {
if (url.indexOf(".quark.cn/list#/video/") > 0) {
obj.initVideoPage();
}
else {
obj.initHomePage();
}
}
}();
console.log("=== 夸克网盘 好棒棒!===");
// Your code here...
})();