- // ==UserScript==
- // @license MIT
- // @name 阿里云盘Dplayer
- // @namespace http://tampermonkey.net/
- // @version 3.1.1
- // @description 支持生成文件下载链接(多种下载姿势),支持第三方播放器DPlayer(支持自动/手动添加字幕,突破视频2分钟限制,选集,上下集,自动记忆播放,跳过片头片尾, 字幕设置随心所欲...),支持自定义分享密码,支持图片预览,支持移动端播放,...
- // @author You
- // @match https://www.aliyundrive.com/*
- // @connect lc-cn-n1-shared.com
- // @connect *
- // @icon https://gw.alicdn.com/imgextra/i3/O1CN01aj9rdD1GS0E8io11t_!!6000000000620-73-tps-16-16.ico
- // @require https://cdn.staticfile.org/localforage/1.10.0/localforage.min.js
- // @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js
- // @antifeature ads
- // @antifeature membership
- // @antifeature payment
- // @antifeature referral-link
- // @antifeature tracking
- // @run-at document-body
- // @grant unsafeWindow
- // @grant GM_xmlhttpRequest
- // @grant GM_getValue
- // @grant GM_setValue
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- var localforage = window.localforage;
- var $ = $ || window.$;
- var obj = {
- file_page: {
- parent_file_id: "root",
- file_info: {},
- order_by: "",
- order_direction: "",
- next_marker_list: [],
- items: []
- },
- video_page: {
- play_info: {},
- sub_info: {
- index: 0
- },
- elevideo: "",
- player: null,
- media_num: 0
- }
- };
-
- obj.useDPlayer = function () {
- obj.dPlayerSupport(function (result) {
- result && obj.dPlayerStart();
- });
- };
-
- obj.dPlayerSupport = function (callback) {
- (function laodcdn(urlArr, index) {
- var arr = urlArr[index];
- if (arr) {
- var promises = [];
- arr.forEach(function (url, index) {
- promises.push(loadScript(url));
- });
- Promise.all(promises).then(function(results) {
- setTimeout(function () {
- obj.isAppreciation.toString().length == 1367 && callback(unsafeWindow.DPlayer);
- }, 0);
- }).catch(function (error) {
- laodcdn(urlArr, ++index);
- });
- }
- else {
- callback && callback(unsafeWindow.DPlayer);
- }
- })([
- [
- "https://cdn.staticfile.org/hls.js/1.3.2/hls.min.js",
- "https://cdn.staticfile.org/dplayer/1.27.1/DPlayer.min.js",
- ],
- [
- "https://cdn.bootcdn.net/ajax/libs/hls.js/1.3.2/hls.min.js",
- "https://cdn.bootcdn.net/ajax/libs/dplayer/1.27.1/DPlayer.min.js",
- ],
- [
- "https://cdn.jsdelivr.net/npm/hls.js/dist/hls.min.js",
- "https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.js",
- ],
- ], 0);
- function loadScript (src) {
- if (!window.instances) {
- window.instances = {};
- }
- if (!window.instances[src]) {
- window.instances[src] = new Promise((resolve, reject) => {
- const script = document.createElement("script")
- script.src = src;
- script.type = "text/javascript";
- script.onload = resolve;
- script.onerror = reject;
- document.head.appendChild(script);
- });
- }
- return window.instances[src];
- }
- };
-
- obj.dPlayerStart = function () {
- var prevPlayer = obj.video_page.player;
- var dPlayerNode, videoNode = document.querySelector("video");
- if (videoNode) {
- dPlayerNode = document.getElementById("dplayer");
- if (!dPlayerNode) {
- dPlayerNode = document.createElement("div");
- dPlayerNode.setAttribute("id", "dplayer");
- dPlayerNode.setAttribute("style", "width: 100%; height: 100%;");
- var videoParentNode = videoNode.parentNode.parentNode;
- obj.video_page.elevideo = videoParentNode.parentNode.replaceChild(dPlayerNode, videoParentNode);
- }
- }
- else {
- return setTimeout(obj.dPlayerStart, 500);
- }
- var quality = [], defaultQuality, localQuality = localStorage.getItem("dplayer-quality");;
- var play_info = obj.video_page.play_info || {};
- var video_preview_play_info = play_info.video_preview_play_info || {};
- var task_list = video_preview_play_info.live_transcoding_task_list;
- if (Array.isArray(task_list)) {
- var pds = {
- UHD: "4K 超清",
- QHD: "2K 超清",
- FHD: "1080 全高清",
- HD: "720 高清",
- SD: "540 标清",
- LD: "360 流畅"
- };
- task_list.forEach(function (item, index) {
- var name = pds[item.template_id];
- localQuality ? localQuality == name ? defaultQuality = index : defaultQuality = index : defaultQuality = index;
- quality.push({
- name: name,
- url: item.url || item.preview_url,
- type: "hls"
- });
- });
- }
- else {
- obj.showTipError("获取播放信息失败:请刷新网页重试");
- return;
- }
- if (obj.video_page.file_id === play_info.file_id) {
- if (prevPlayer && document.querySelector("video")) {
- return obj.dPlayerThrough(quality);
- }
- }
- else {
- obj.video_page.file_id = play_info.file_id;
- if (prevPlayer) {
- prevPlayer.destroy();
- prevPlayer = null;
- }
- }
- var options = {
- container: dPlayerNode,
- video: {
- quality: quality,
- defaultQuality: defaultQuality,
- customType: {
- hls: function (video, player) {
- if (player.plugins.hls) {
- player.plugins.prevHls = player.plugins.hls;
- delete player.plugins.hls;
- }
- const hls = new unsafeWindow.Hls();
- player.plugins.hls = hls;
- hls.loadSource(video.src);
- hls.attachMedia(video);
- }
- }
- },
- subtitle: {
- url: "",
- type: "webvtt",
- fontSize: (localStorage.getItem("dplayer-subtitle-fontSize") || 5) + "vh",
- bottom: (localStorage.getItem("dplayer-subtitle-bottom") || 10) + "%",
- color: localStorage.getItem("dplayer-subtitle-color") || "#ffd821",
- },
- autoplay: true,
- screenshot: true,
- hotkey: false,
- airplay: true,
- volume: 1.0,
- playbackSpeed: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 3, 4],
- contextmenu: [
- {
- text: "👍 爱发电 不再弹出 👍",
- link: "https://afdian.net/order/create?plan_id=be4f4d0a972811eda14a5254001e7c00",
- click: obj.showDialog
- }
- ],
- theme: obj.getRandomColor()
- };
- try {
- var player = obj.video_page.player = new unsafeWindow.DPlayer(options);
- if (prevPlayer) {
- const { video } = prevPlayer;
- player.seek(video.currentTime - 1);
- player.speed(video.playbackRate);
- player.video.muted = video.muted;
- prevPlayer.destroy();
- prevPlayer = null;
- }
- obj.playerReady(player, function(player) {
- player.options.hotkey || obj.dPlayerHotkey();
- obj.dPlayerInitAspectRatio();
- obj.autoSkipPlayNext();
- obj.memoryPlay();
- obj.playSetting();
- obj.selectEpisode();
- obj.addCueVideoSubtitle(function (textTracks) {
- if (textTracks) {
- obj.selectSubtitles(textTracks);
- obj.dPlayerSubtitleStyle();
- }
- });
- player.on("quality_end", function () {
- localStorage.setItem("dplayer-quality", player.quality.name);
- obj.addCueVideoSubtitle();
- });
- player.speed(localStorage.getItem("dplayer-speed") || 1);
- player.on("ratechange", function () {
- player.notice("播放速度:" + player.video.playbackRate);
- localStorage.getItem("dplayer-speed") == player.video.playbackRate || localStorage.setItem("dplayer-speed", player.video.playbackRate);
- });
- player.on("contextmenu_hide", function () {
- obj.isAppreciation(function (data) {
- data || player.contextmenu.show(player.container.offsetWidth / 2.5, player.container.offsetHeight / 3);
- });
- });
- localStorage.getItem("dplayer-isfullscreen") == "true" && player.fullScreen.request("browser");
- player.on("fullscreen", function () {
- localStorage.setItem("dplayer-isfullscreen", true);
- try {
- screen.orientation.lock("landscape");
- } catch (error) { };
- });
- player.on("fullscreen_cancel", function () {
- localStorage.removeItem("dplayer-isfullscreen");
- try {
- screen.orientation.unlock();
- } catch (error) { };
- });
- });
- } catch (error) {
- console.error("播放器创建失败", error);
- }
- };
-
- obj.dPlayerThrough = function (quality) {
- var player = obj.video_page.player;
- player.options.video.quality = quality;
- player.quality = player.options.video.quality[ player.qualityIndex ];
- const paused = player.video.paused;
- const videoHTML = '<video class="dplayer-video" webkit-playsinline playsinline crossorigin="anonymous" preload="auto" src="' + player.quality.url + '"><track kind="metadata" default src=""></track></video>';
- const videoEle = new DOMParser().parseFromString(videoHTML, 'text/html').body.firstChild;
- player.template.videoWrap.insertBefore(videoEle, player.template.videoWrap.getElementsByTagName('div')[0]);
- player.prevVideo = player.video;
- player.video = videoEle;
- player.initVideo(player.video, player.quality.type || player.options.video.type);
- player.video.currentTime = player.prevVideo.currentTime + 1;
- player.on('canplaythrough', () => {
- if (player.prevVideo) {
- if (player.video.currentTime !== player.prevVideo.currentTime) {
- player.video.currentTime = player.prevVideo.currentTime;
- (obj.onPost.length && obj.onPost.toString().length == 460) || player.destroy();
- }
- player.prevVideo.muted && (player.video.muted = player.prevVideo.muted);
- player.prevVideo.pause();
- player.template.videoWrap.removeChild(player.prevVideo);
- player.video.classList.add('dplayer-video-current');
- player.template.video = player.video;
- if (!paused) {
- const bezelswitch = player.bezel.switch;
- player.bezel.switch = () => {};
- setTimeout(() => { player.bezel.switch = bezelswitch; }, 1000);
- player.video.play();
- player.controller.hide();
- setTimeout(() => {
- obj.isAppreciation(function (data) {
- data || player.contextmenu.show(player.container.offsetWidth / 2.5, player.container.offsetHeight / 3);
- });
- document.querySelectorAll("video").length > 1 && [ ... document.querySelectorAll("video") ].forEach(element => {
- element.paused && player.template.videoWrap.removeChild(element);
- });
- });
- }
- setTimeout(() => {
- player.controller.hide();
- if (player.plugins.prevHls) {
- player.plugins.prevHls.destroy();
- delete player.plugins.prevHls;
- }
- });
- player.prevVideo = null;
- obj.dPlayerEvents(player);
- }
- });
- };
-
- obj.dPlayerEvents = function (player) {
- obj.playerReady(player, function(player) {
- const { options: { contextmenu } } = player;
- JSON.stringify(contextmenu).includes(5254001) || player.destroy();
- obj.dPlayerAspectRatio();
- obj.addCueVideoSubtitle(function (textTracks) {
- if (textTracks) {
- obj.selectSubtitles(textTracks);
- obj.dPlayerSubtitleStyle();
- obj.offsetCache && obj.dPlayerSubtitleOffset();
- }
- });
- });
- };
-
- obj.playerReady = function (player, callback) {
- if (player.isReady) {
- callback && callback(player);
- }
- else if (player.video.duration > 0 || player.video.readyState > 2) {
- player.isReady = true;
- callback && callback(player);
- }
- else {
- player.video.ondurationchange = function () {
- player.video.ondurationchange = null;
- player.isReady = true;
- callback && callback(player);
- }
- }
- };
-
- obj.dPlayerHotkey = function () {
- if (window.dPlayerHotkey) return;
- window.dPlayerHotkey = true;
- document.addEventListener("keydown", (function(e) {
- var t = obj.video_page.player;
- if (t && document.getElementById("dplayer")) {
- var a = document.activeElement.tagName.toUpperCase()
- , n = document.activeElement.getAttribute("contenteditable");
- if ("INPUT" !== a && "TEXTAREA" !== a && "" !== n && "true" !== n) {
- var o, r = e || window.event;
- switch (r.keyCode) {
- case 13:
- r.preventDefault();
- t.fullScreen.toggle();
- break;
- case 32:
- r.preventDefault();
- t.toggle();
- break;
- case 37:
- r.preventDefault();
- t.seek(t.video.currentTime - 5);
- break;
- case 39:
- r.preventDefault();
- t.seek(t.video.currentTime + 5);
- break;
- case 38:
- r.preventDefault();
- o = t.volume() + .01;
- t.volume(o);
- break;
- case 40:
- r.preventDefault();
- o = t.volume() - .01;
- t.volume(o);
- break;
- case 36:
- r.preventDefault();
- t.notice("上一项");
- o = document.querySelector("[data-icon-type=PDSChevronLeft]") || document.querySelector("[data-icon-type=PDSLeftNormal]");
- o && o.click();
- break;
- case 35:
- r.preventDefault();
- t.notice("下一项");
- o = document.querySelector("[data-icon-type=PDSChevronRight]") || document.querySelector("[data-icon-type=PDSRightNormal]");
- o && o.click();
- break;
- }
- }
- }
- }));
- document.addEventListener("wheel", function (event) {
- event = event || window.event;
- if ($(event.target).closest(".playlist-content").length) return;
- var o, t = obj.video_page.player;
- if (event.deltaY < 0) {
- o = t.volume() + .01;
- t.volume(o);
- } else if (event.deltaY > 0) {
- o = t.volume() - .01;
- t.volume(o);
- }
- });
- };
-
- obj.dPlayerInitAspectRatio = function () {
- if ($(".dplayer-icons-right .btn-select-aspectRatio").length) return;
- var html = '<div class="dplayer-quality btn-select-aspectRatio"><button class="dplayer-icon dplayer-quality-icon">画面比例</button><div class="dplayer-quality-mask"><div class="dplayer-quality-list">';
- html += '<div class="dplayer-quality-item" data-value="4:3">4:3</div><div class="dplayer-quality-item" data-value="16:9">16:9</div><div class="dplayer-quality-item" data-value="none">原始比例</div><div class="dplayer-quality-item" data-value="cover">自动裁剪</div><div class="dplayer-quality-item" data-value="fill">拉伸填充</div><div class="dplayer-quality-item" data-value="default">系统默认</div>';
- html += '</div></div></div>';
- $(".dplayer-icons-right").prepend(html);
- $(".btn-select-aspectRatio .dplayer-quality-item").on("click", function() {
- var ratio = $(this).attr("data-value");
- obj.dPlayerAspectRatio(ratio);
- });
- };
-
- obj.dPlayerAspectRatio = function (ratio) {
- const player = obj.video_page.player;
- const { template: { videoWrap, video } } = player;
- const ratios = { "default": "系统默认", "4:3": "4:3", "16:9": "16:9", "fill": "拉伸填充", "cover": "自动裁剪", "none": "原始比例" };
- !ratio ? (ratio = videoWrap.dataset.aspectRatio || "default") : player.notice(`画面比例: ${ratios[ratio]}`);
- if (ratio === "default") {
- setStyle(video, 'width', null);
- setStyle(video, 'height', null);
- setStyle(video, 'padding', null);
- setStyle(video, 'object-fit', null);
- delete videoWrap.dataset.aspectRatio;
- }
- else if (["4:3", "16:9"].includes(ratio)) {
- const ratioArray = ratio.split(':').map(Number);
- const { videoWidth, videoHeight } = video;
- const { clientWidth, clientHeight } = videoWrap;
- const videoRatio = videoWidth / videoHeight;
- const setupRatio = ratioArray[0] / ratioArray[1];
- if (videoRatio > setupRatio) {
- const percentage = (setupRatio * videoHeight) / videoWidth;
- setStyle(video, 'width', `${percentage * 100}%`);
- setStyle(video, 'height', '100%');
- setStyle(video, 'padding', `0 ${(clientWidth - clientWidth * percentage) / 2}px`);
- } else {
- const percentage = videoWidth / setupRatio / videoHeight;
- setStyle(video, 'width', '100%');
- setStyle(video, 'height', `${percentage * 100}%`);
- setStyle(video, 'padding', `${(clientHeight - clientHeight * percentage) / 2}px 0`);
- }
- setStyle(video, 'object-fit', 'fill');
- videoWrap.dataset.aspectRatio = ratio;
- }
- else if (["fill", "cover", "none"].includes(ratio)) {
- setStyle(video, 'width', null);
- setStyle(video, 'height', null);
- setStyle(video, 'padding', null);
- setStyle(video, 'object-fit', ratio);
- videoWrap.dataset.aspectRatio = ratio;
- }
- function setStyle (element, key, value) {
- element.style[key] = value;
- return element;
- }
- };
-
- obj.memoryPlay = function () {
- if (obj.hasMemoryDisplay) return;
- obj.hasMemoryDisplay = true;
- var jumpstart = obj.getPlayMemory("jumpstart") || 60;
- var jumpend = obj.getPlayMemory("jumpend") || 120;
- var skipPosition = obj.getPlayMemory("skipposition");
- var player = obj.video_page.player;
- var playInfo = obj.video_page.play_info;
- var fileList = obj.file_page.items
- , file = fileList.find(function (item, index) {
- return item.file_id == playInfo.file_id;
- })
- , sign = file ? file.file_id : ""
- , memoryTime = obj.getPlayMemory(sign);
- if (memoryTime && parseInt(memoryTime)) {
- var autoPosition = obj.getItem("dplayer-position");
- if (autoPosition) {
- player.seek(memoryTime - 1);
- }
- else {
- var formatTime = formatVideoTime(memoryTime);
- $(player.container).append('<div class="memory-play-wrap" style="display: block;position: absolute;left: 33px;bottom: 66px;font-size: 15px;padding: 7px;border-radius: 3px;color: #fff;z-index:100;background: rgba(0,0,0,.5);">上次播放到:' + formatTime + ' <a href="javascript:void(0);" class="play-jump" style="text-decoration: none;color: #06c;"> 跳转播放 </a><em class="close-btn" style="display: inline-block;width: 15px;height: 15px;vertical-align: middle;cursor: pointer;background: url(https://nd-static.bdstatic.com/m-static/disk-share/widget/pageModule/share-file-main/fileType/video/img/video-flash-closebtn_15f0e97.png) no-repeat;"></em></div>');
- var memoryTimeout = setTimeout(function () {
- skipPosition && jumpstart && jumpstart > player.video.currentTime && player.seek(jumpstart);
- $(".memory-play-wrap").remove();
- }, 15000);
- $(".memory-play-wrap .close-btn").click(function () {
- skipPosition && jumpstart && jumpstart > player.video.currentTime && player.seek(jumpstart);
- $(".memory-play-wrap").remove();
- clearTimeout(memoryTimeout);
- });
- $(".memory-play-wrap .play-jump").click(function () {
- player.seek(memoryTime - 1);
- $(".memory-play-wrap").remove();
- clearTimeout(memoryTimeout);
- });
- }
- }
- else {
- if (typeof skipPosition == "boolean") {
- skipPosition && jumpstart && player.seek(jumpstart);
- }
- }
- var duration = player.video.duration;
- document.onvisibilitychange = function () {
- if (document.visibilityState === "hidden") {
- var currentTime = player.video.currentTime;
- currentTime && obj.setPlayMemory(sign, currentTime, duration, jumpstart, jumpend);
- obj.setPlayMemory("last_file_id", sign);
- }
- };
- window.onbeforeunload = function () {
- var currentTime = player.video.currentTime;
- currentTime && obj.setPlayMemory(sign, currentTime, duration, jumpstart, jumpend);
- obj.setPlayMemory("last_file_id", sign);
- };
- $("[data-icon-type=PDSClose]").one("click", function () {
- var currentTime = player.video.currentTime;
- currentTime && obj.setPlayMemory(sign, currentTime, duration, jumpstart, jumpend);
- obj.setPlayMemory("last_file_id", sign);
- obj.autoLastBtn();
- });
- function formatVideoTime (seconds) {
- var secondTotal = Math.round(seconds)
- , hour = Math.floor(secondTotal / 3600)
- , minute = Math.floor((secondTotal - hour * 3600) / 60)
- , second = secondTotal - hour * 3600 - minute * 60;
- minute < 10 && (minute = "0" + minute);
- second < 10 && (second = "0" + second);
- return hour === 0 ? minute + ":" + second : hour + ":" + minute + ":" + second;
- }
- };
-
- obj.autoSkipPlayNext = function () {
- var player = obj.video_page.player;
- player.on("timeupdate", function () {
- if (!this.autonext && obj.getPlayMemory("skipposition")) {
- var { video } = player;
- var { currentTime, duration } = video;
- var jumpStart = obj.getPlayMemory("jumpstart") || 60;
- var jumpEnd = obj.getPlayMemory("jumpend") || 120;
- if (!isNaN(duration) && jumpEnd > 0 && duration - currentTime <= parseInt(jumpEnd) + 10 * video.playbackRate) {
- this.autonext = true;
- var playInfo = obj.video_page.play_info;
- var fileList = obj.file_page.items
- , videoList = fileList.filter(function (item, index) {
- return item.category == "video";
- })
- , fileIndex, file = videoList.find(function (item, index) {
- fileIndex = index;
- return item.file_id == playInfo.file_id;
- })
- , sign = file ? file.file_id : "";
- obj.setPlayMemory(sign, currentTime + 10 * video.playbackRate, duration, jumpStart, jumpEnd);
- var fileNext = videoList[ fileIndex + 1 ];
- if (fileNext) {
- $(player.container).append('<div class="memory-play-wrap" style="display: block;position: absolute;left: 33px;bottom: 66px;font-size: 15px;padding: 7px;border-radius: 3px;color: #fff;z-index:100;background: rgba(0,0,0,.5);">10秒后自动下一集 <a href="javascript:void(0);" class="play-jump" style="text-decoration: none;color: #06c;"> 取消 </a><em class="close-btn" style="display: inline-block;width: 15px;height: 15px;vertical-align: middle;cursor: pointer;background: url(https://nd-static.bdstatic.com/m-static/disk-share/widget/pageModule/share-file-main/fileType/video/img/video-flash-closebtn_15f0e97.png) no-repeat;"></em></div>');
- var memoryTimeout = setTimeout(function () {
- obj.playByFile(fileNext);
- $(".memory-play-wrap").remove();
- }, 10000);
- $(".memory-play-wrap .close-btn").click(function () {
- clearTimeout(memoryTimeout);
- $(".memory-play-wrap").remove();
- });
- $(".memory-play-wrap .play-jump").click(function () {
- clearTimeout(memoryTimeout);
- $(".memory-play-wrap").remove();
- });
- }
- else {
- obj.showTipError("没有下一集了");
- }
- }
- }
- });
- };
-
- obj.playByFile = function(file) {
- var player = obj.video_page.player;
- if (player) {
- try {
- player.pause();
- player.docClickFun && document.removeEventListener('click', player.docClickFun, true);
- player.containerClickFun && player.container.removeEventListener('click', player.containerClickFun, true);
- player.fullScreen && player.fullScreen.destroy && player.fullScreen.destroy();
- player.hotkey && player.hotkey.destroy && player.hotkey.destroy();
- player.contextmenu && player.contextmenu.destroy && player.contextmenu.destroy();
- player.controller && player.controller.destroy && player.controller.destroy();
- player.timer && player.timer.destroy && player.timer.destroy();
- obj.video_page.player = null;
- obj.offsetCache = 0;
- } catch (error) { };
- }
- obj.video_page.play_info.file_id = file.file_id;
- obj.getVideoPreviewPlayInfo(function () {
- $(".header-file-name--CN_fq, .text--2KGvI").text(file.name);
- });
- };
-
- obj.playByScroll = function() {
- // 继续上次播放 代码贡献:https://greasyfork.org/zh-CN/users/795227-星峰
- var last_file_id = obj.getPlayMemory("last_file_id");
- var fileList = obj.file_page.items
- , file = fileList.find(function (item, index) {
- return item.file_id == last_file_id;
- })
- , lastplay = file ? file.name : "";
- var soretype=$('.switch-wrapper--1yEfx .icon--d-ejA').attr("data-icon-type");
- var topp = 0;
- var scrollerdiv = $(".scroller--2hMGk,.grid-scroll--3o7hp");
- var he = 0;
- var url = location.href;
- if (url.indexOf(".aliyundrive.com/s/") > 0) {
- he = $(".thead--JwBMm,.top-element-wrapper--1iOwf").next().children().height();
- }
- else if (url.indexOf(".aliyundrive.com/drive") > 0) {
- he = scrollerdiv.children().children().height();
- }
- //通过文件列表定位上次播放文件
- var rownum=1;
- if(soretype=='PDSDrag'){//平铺模式
- var lastbox=$(".grid-card-container.first-row-item--AGVET:last");
- rownum=Number( lastbox.attr('data-index'))+1;
- }
- for(var i = 0; i < fileList.length; i++) {
- var tmptext = fileList[i].name;
- if (tmptext == lastplay) {
- topp = (parseInt(i/rownum) * (he / Math.ceil(fileList.length/rownum)));
- }
- }
- scrollerdiv.scrollTop(topp);
- setTimeout(() => {
- $(".text-primary--3DHOJ,.title--3x5k2").each( function () {
- var tmptext = this.textContent;
- if(tmptext == lastplay){
- this.click();
- }
- });
- },500)
- };
-
- obj.autoLastBtn = function () {
- var lastplay = obj.getPlayMemory("last_file_id");
- lastplay ? $(".button-last--batch").show() : $(".button-last--batch").hide();
- };
-
- obj.playSetting = function () {
- //将片头片尾放在设置里 代码贡献:https://greasyfork.org/zh-CN/users/795227-星峰
- if ($(".dplayer-setting-skipposition").length) return;
- var html = '<div class="dplayer-setting-item dplayer-setting-jumpend" style="display:none"><span class="dplayer-label" title="双击设置剩余时间为跳过片尾秒数">片尾(秒)</span><input type="text" name="dplayer-toggle" class="dplayer-toggle" style="height: 15px; font-size: 13px;border: 1px solid #fff;border-radius: 15px;"></div><div class="dplayer-setting-item dplayer-setting-jumpstart" style="display:none"><span class="dplayer-label" title="双击设置当前时间为跳过片头秒数">片头(秒)</span><input type="text" name="dplayer-toggle" class="dplayer-toggle" style="height: 15px; font-size: 13px;border: 1px solid #fff;border-radius: 15px;"></div><div class="dplayer-setting-item dplayer-setting-skipposition"><span class="dplayer-label">跳过片头片尾</span><div class="dplayer-toggle"><input class="dplayer-toggle-setting-input-skipposition" type="checkbox" name="dplayer-toggle"><label for="dplayer-toggle"></label></div></div>';
- html += '<div class="dplayer-setting-item dplayer-setting-autoposition"><span class="dplayer-label">自动记忆播放</span><div class="dplayer-toggle"><input class="dplayer-toggle-setting-input-autoposition" type="checkbox" name="dplayer-toggle"><label for="dplayer-toggle"></label></div></div>';
- $(".dplayer-setting-origin-panel").prepend(html);
- html = '<div class="dplayer-setting-item dplayer-setting-subtitle"><span class="dplayer-label">字幕设置</span></div></div>';
- $(".dplayer-setting-origin-panel").append(html);
- $(".dplayer-setting-subtitle").on("click", function() {
- obj.subtitleSetting();
- });
- $(".dplayer-mask").on("click",function() {
- if ($(".subtitle-setting-box").css("display") != "none") {
- $(".subtitle-setting-box").toggle();
- $(this).removeClass("dplayer-mask-show");
- }
- });
- var jumpstart = obj.getPlayMemory("jumpstart") || 60;
- var jumpend = obj.getPlayMemory("jumpend") || 120;
- var skipPosition = obj.getPlayMemory("skipposition");
- if (skipPosition) {
- $(".dplayer-toggle-setting-input-skipposition").get(0).checked = true;
- $(".dplayer-setting-jumpstart").show();
- $(".dplayer-setting-jumpend").show();
- }
- var txt = $(".dplayer-setting-jumpstart .dplayer-toggle");
- txt.val(jumpstart);
- txt.change(function() {
- obj.setPlayMemory("jumpstart", txt.val());
- jumpstart = txt.val();
- });
- txt.on('input propertychange', function(e) {
- var text = txt.val().replace(/[^\d]/g, "");
- txt.val(text);
- });
- var txt1 = $(".dplayer-setting-jumpend .dplayer-toggle");
- txt1.val(jumpend);
- txt1.change(function() {
- obj.setPlayMemory("jumpend", txt1.val());
- jumpend = txt1.val();
- });
- txt1.on('input propertychange', function(e) {
- var text = txt.val().replace(/[^\d]/g, "");
- txt.val(text);
- });
- $(".dplayer-setting-skipposition").on("click", function() {
- var check = $(".dplayer-toggle-setting-input-skipposition");
- var skipPosition = !check.is(":checked");
- $(".dplayer-toggle-setting-input-skipposition").get(0).checked = skipPosition;
- obj.setPlayMemory("skipposition", skipPosition);
- if (skipPosition) {
- $(".dplayer-setting-jumpstart").show()
- $(".dplayer-setting-jumpend").show()
- txt.val(jumpstart);
- txt1.val(jumpend);
- obj.setPlayMemory("jumpstart", jumpstart);
- obj.setPlayMemory("jumpend", jumpend);
- if($(".dplayer-setting-loop .dplayer-toggle-setting-input").is(":checked")) {
- $(".dplayer-setting-loop .dplayer-toggle-setting-input").click();
- }
- }
- else{
- $(".dplayer-setting-jumpstart").hide()
- $(".dplayer-setting-jumpend").hide()
- }
- });
- $(".dplayer-setting-jumpstart, .dplayer-setting-jumpend").on("dblclick", function() {
- let currtime = 0, video = obj.video_page.player.video, duration = parseInt(video.duration), currentTime = parseInt(video.currentTime);
- if($(this).hasClass("dplayer-setting-jumpstart")){
- currtime = currentTime;
- obj.setPlayMemory("jumpstart", currtime);
- }
- else{
- currtime = duration - currentTime;
- obj.setPlayMemory("jumpend", currtime);
- }
- $(this).children("input").val(currtime)
- });
- obj.getItem("dplayer-position") && ($(".dplayer-toggle-setting-input-autoposition").get(0).checked = true);
- $(".dplayer-setting-autoposition").on("click", function() {
- var check = $(".dplayer-toggle-setting-input-autoposition");
- var autoPosition = !check.is(":checked");
- $(".dplayer-toggle-setting-input-autoposition").get(0).checked = autoPosition;
- obj.setItem("dplayer-position", autoPosition);
- });
- $(".dplayer-setting-loop").on("click", function() {
- if ($(".dplayer-setting-loop .dplayer-toggle-setting-input").is(":checked") && skipPosition) {
- $(".dplayer-setting-skipposition").click();
- }
- $(".dplayer-setting-icon").click();
- });
- };
-
- obj.selectEpisode = function () {
- //选集 代码贡献:https://greasyfork.org/zh-CN/users/795227-星峰
- if ($(".dplayer-icons-right #btn-select-episode").length) return;
- if (document.querySelectorAll(".dplayer-menu-item").length < 4) return;
- var fileList = obj.file_page.items
- , videoList = fileList.filter(function (item, index) {
- return item.category == "video";
- })
- , play_info = obj.video_page.play_info
- , fileIndex = videoList.findIndex(function (item, index) {
- return item.file_id == play_info.file_id;
- });
- if (!(fileIndex > -1 && videoList.length > 1)) return;
- var elevideo = "";
- videoList.forEach(function (item, index) {
- if (fileIndex == index) {
- elevideo += '<div class="video-item active" title="' + item.name + '" style="background-color: rgba(0,0,0,.3);color: #0df;cursor: pointer;font-size: 14px;line-height: 35px;overflow: hidden;padding: 0 10px;text-overflow: ellipsis;text-align: center;white-space: nowrap;">' + item.name + '</div>';
- }
- else {
- elevideo += '<div class="video-item" title="' + item.name + '" style="color: #fff;cursor: pointer;font-size: 14px;line-height: 35px;overflow: hidden;padding: 0 10px;text-overflow: ellipsis;text-align: center;white-space: nowrap;">' + item.name + '</div>';
- }
- });
- var svg = '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 32 32"><path d="M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z"></path></svg>'
- var html = '<button class="dplayer-icon dplayer-play-icon prev-icon" style="transform: rotate(-180deg)" title="上一集">'+ svg +'</button>';
- html += '<button id="btn-select-episode" class="dplayer-icon dplayer-quality-icon" title="选集">选集</button> <div class="playlist-content" style="max-width: 80%;max-height: 330px;width: auto;height: auto;box-sizing: border-box;overflow: hidden;position: absolute;left: 0;transition: all .38s ease-in-out;bottom: 52px;overflow-y: auto;transform: scale(0);z-index: 2;"><div class="list" style="background-color: rgba(0,0,0,.3);height: 100%;">' + elevideo + '</div></div>';
- html += '<button class="dplayer-icon dplayer-play-icon next-icon" title="下一集">'+ svg +'</button>';
- $(".dplayer-icons-right").prepend(html);
- $("#btn-select-episode").on("click", function() {
- var eleEpisode = $(".playlist-content");
- if (eleEpisode.css("transform").match(/\d+/) > 0) {
- eleEpisode.css("transform", "scale(0)");
- }
- else {
- eleEpisode.css("transform", "scale(1)");
- $(".dplayer-mask").addClass("dplayer-mask-show");
- var singleheight = $(".dplayer-icons-right .video-item")[0].offsetHeight;
- var totalheight = $(".dplayer-icons-right .playlist-content").height();
- $(".dplayer-icons-right .playlist-content").scrollTop((fileIndex + 1) * singleheight - totalheight / 2);
- }
- });
- $(".dplayer-mask").on("click",function() {
- var eleEpisode = $(".playlist-content");
- if (eleEpisode.css("transform").match(/\d+/) > 0) {
- eleEpisode.css("transform", "scale(0)");
- $(this).removeClass("dplayer-mask-show");
- }
- });
- $(".playlist-content .video-item").on("click", function() {
- var $this = $(this);
- if ($this.hasClass("active")) return;
- $(".dplayer-mask").removeClass("dplayer-mask-show");
- var oldele = $(".video-item.active");
- oldele.removeClass("active");
- oldele.css({"background-color": "", "color": "#fff"});
- $this.addClass("active");
- $this.css({"background-color": "rgba(0,0,0,.3)", "color": "#0df"});
- var file = videoList[$this.index()];
- obj.playByFile(file);
- });
- $(".prev-icon").on("click", function () {
- var file = videoList[fileIndex - 1];
- file ? obj.playByFile(file) : obj.showTipError("没有上一集了");
- });
- $(".next-icon").on("click",function(){
- var file = videoList[fileIndex + 1];
- file ? obj.playByFile(file) : obj.showTipError("没有下一集了");
- });
- };
-
- obj.selectSubtitles = function (textTracks) {
- if (textTracks.length <= 1) return;
- if ($(".dplayer-subtitle-btn .dplayer-quality-mask").length) {
- $(".dplayer-subtitle-btn .dplayer-quality-mask").remove();
- }
- var subbtn = $(".dplayer-subtitle-btn")
- subbtn.addClass("dplayer-quality");
- var fileId = obj.video_page.play_info.file_id
- , sub_info = obj.video_page.sub_info;
- var subList = sub_info[fileId];
- var eleSub = '<div class="dplayer-quality-item subtitle-item" data-index="'+ 0 +'" style="opacity: 0.4;">默认字幕</div>';
- for(var i = 1; i < subList.length; i++) {
- eleSub += '<div class="dplayer-quality-item subtitle-item" data-index="'+ i +'">'+ subList[i].label +'</div>';
- }
- var html = '<div class="dplayer-quality-mask"><div class="dplayer-quality-list subtitle-select"> '+ eleSub +'</div></div>'
- subbtn.append(html);
- $(".subtitle-select .subtitle-item").off("click").on("click", function() {
- var $this = $(this), index = $this.attr("data-index");
- if ($this.css("opacity") != .4) {
- $this.css("opacity", .4);
- $this.siblings().css("opacity", "");
- var subPicBtn = $(".dplayer-subtitle-btn .dplayer-icon");
- subPicBtn.attr("data-balloon") == "显示字幕" && subPicBtn.click();
- var subitem = subList[index];
- if (subitem && subitem.sarr && subitem.sarr.length) {
- for(var i = textTracks[0].cues.length - 1; i >= 0; i--) {
- textTracks[0].removeCue(textTracks[0].cues[i]);
- }
- subitem.sarr.forEach(function (item) {
- /<b>.*<\/b>/.test(item.text) || (item.text = item.text.split(/\r?\n/).map((item) => `<b>${item}</b>`).join("\n"));
- var textTrackCue = new VTTCue(item.startTime, item.endTime, item.text);
- textTrackCue.id = item.index;
- textTracks[0] && textTracks[0].addCue(textTrackCue);
- });
- sub_info.index = index;
- }
- }
- });
- var index = sub_info.index;
- index && $(".subtitle-select .subtitle-item").eq(index).click();
- };
-
- obj.dPlayerSubtitleStyle = function () {
- const player = obj.video_page.player;
- const { subtitle: { container: { style } } } = player;
- const bottom = localStorage.getItem("dplayer-subtitle-bottom")
- , color = localStorage.getItem("dplayer-subtitle-color")
- , fontSize = localStorage.getItem("dplayer-subtitle-fontSize");
- style.fontSize == fontSize + "vh" || (style.fontSize = fontSize + "vh");
- style.bottom == bottom + "%" || (style.bottom = bottom + "%");
- style.color == color || (style.color = color);
- style.textShadow || (style.textShadow = "1px 0 1px #000, 0 1px 1px #000, -1px 0 1px #000, 0 -1px 1px #000, 1px 1px 1px #000, -1px -1px 1px #000, 1px -1px 1px #000, -1px 1px 1px #000");
- if (!style.fontFamily) {
- const fontFamilys = ["黑体", "楷体", "宋体", "微软雅黑", "Trajan", "serif"]
- , rand_font = Math.floor(Math.random() * fontFamilys.length);
- style.fontFamily = fontFamilys[rand_font];
- }
- };
-
- obj.subtitleSetting = function () {
- var subSetBox = $(".subtitle-setting-box");
- if (subSetBox.length) {
- return subSetBox.toggle();
- }
- else {
- var html = '<div class="dplayer-icons dplayer-comment-box subtitle-setting-box" style="display: block; z-index: 111; position: absolute; bottom: 10px;left:auto; right: 400px !important;"><div class="dplayer-comment-setting-box dplayer-comment-setting-open" >';
- html += '<div class="dplayer-comment-setting-color"><div class="dplayer-comment-setting-title">字幕颜色<input type="text" class="color-value" style="height: 16px;width: 70px;font-size: 14px;border: 1px solid #fff;border-radius: 3px;margin-left: 70px;color: black;text-align: center;"></div><label><input type="radio" name="dplayer-danmaku-color-1" value="#fff" checked=""><span style="background: #fff;"></span></label><label><input type="radio" name="dplayer-danmaku-color-1" value="#e54256"><span style="background: #e54256"></span></label><label><input type="radio" name="dplayer-danmaku-color-1" value="#ffe133"><span style="background: #ffe133"></span></label><label><input type="radio" name="dplayer-danmaku-color-1" value="#64DD17"><span style="background: #64DD17"></span></label><label><input type="radio" name="dplayer-danmaku-color-1" value="#39ccff"><span style="background: #39ccff"></span></label><label><input type="radio" name="dplayer-danmaku-color-1" value="#D500F9"><span style="background: #D500F9"></span></label></div>';
- html += '<div class="dplayer-comment-setting-type"><div class="dplayer-comment-setting-title">字幕位置</div><label><input type="radio" name="dplayer-danmaku-type-1" value="1"><span>上移</span></label><label><input type="radio" name="dplayer-danmaku-type-1" value="0" checked=""><span>默认</span></label><label><input type="radio" name="dplayer-danmaku-type-1" value="2"><span>下移</span></label></div>';
- html += '<div class="dplayer-comment-setting-type"><div class="dplayer-comment-setting-title">字幕大小</div><label><input type="radio" name="dplayer-danmaku-type-1" value="1"><span>加大</span></label><label><input type="radio" name="dplayer-danmaku-type-1" value="0"><span>默认</span></label><label><input type="radio" name="dplayer-danmaku-type-1" value="2"><span>减小</span></label></div>';
- html += '<div class="dplayer-comment-setting-type"><div class="dplayer-comment-setting-title">字幕偏移<span class="offset-text" style="border: 0px;width: 58px;"></span>偏移量 <input type="number" class="offset-value" style="height: 14px;width: 42px;font-size: 13px;border: 1px solid #fff;border-radius: 3px;color: black;line-height: normal;text-align: center;" step="1" min="1"></div><label><input type="radio" name="dplayer-danmaku-type-1" value="1"><span>前移</span></label><label><input type="radio" name="dplayer-danmaku-type-1" value="0"><span>默认</span></label><label><input type="radio" name="dplayer-danmaku-type-1" value="2"><span>后移</span></label></div>';
- html += '<div class="dplayer-comment-setting-type"><div class="dplayer-comment-setting-title">更多字幕功能</div><label><input type="radio" name="dplayer-danmaku-type-1" value="1"><span>本地字幕</span></label><label><input type="radio" name="dplayer-danmaku-type-1" value="0"><span>待定</span></label><label><input type="radio" name="dplayer-danmaku-type-1" value="2"><span>网络字幕</span></label></div>';
- html += '</div></div>';
- $(".dplayer-controller").append(html);
- subSetBox = $(".subtitle-setting-box");
- var colortxt = $(".color-value");
- colortxt.val(localStorage.getItem("dplayer-subtitle-color")||"#ffe133")
- colortxt.on('input propertychange', function(e) {
- var color = colortxt.val();
- color = color.replace(/[^#0-9a-fA-F]/g, "");//排除#和十六进制字符
- color = color.replace(/^[0-9a-fA-F]/g, "");//排除非#开头
- color = color.replace("#", "$@$").replace(/\#/g, "").replace("$@$", "#");//排除多个#
- color = color.replace(/^#([0-9a-fA-F]{3,6}).*$/, '#$1');//排除十六进制字符长度超过6位
-
- colortxt.val(color);
- if (localStorage.getItem("dplayer-subtitle-color") != color) {
- localStorage.setItem("dplayer-subtitle-color", color);
- $(".dplayer-subtitle").css("color", color);
- }
- });
- var txt = $(".offset-value");
- txt.val("5");
- txt.on('input propertychange', function(e) {
- var text = txt.val().replace(/[^\d]/g, "");
- txt.val(text);
- });
- }
- $(".subtitle-setting-box .dplayer-comment-setting-color input[type='radio']").on("click",function() {
- var color = this.value;
- if (localStorage.getItem("dplayer-subtitle-color") != color) {
- localStorage.setItem("dplayer-subtitle-color", color);
- $(".dplayer-subtitle").css("color", color);
- }
- colortxt.val(color)
- });
- $(".subtitle-setting-box .dplayer-comment-setting-type input[type='radio']").on("click",function() {
- var value = this.value;
- var $this = $(this), $name = $this.parent().parent().children(":first").text();
- if ($name == "字幕位置") {
- var bottom = Number(localStorage.getItem("dplayer-subtitle-bottom") || 10);
- value == "1" ? bottom += 1 : value == "2" ? bottom -= 1 : bottom = 10;
- localStorage.setItem("dplayer-subtitle-bottom", bottom);
- $(".dplayer-subtitle").css("bottom", bottom + "%");
- }
- else if ($name == "字幕大小") {
- var fontSize = Number(localStorage.getItem("dplayer-subtitle-fontSize") || 5);
- value == "1" ? fontSize += .1 : value == "2" ? fontSize -= .1 : fontSize = 5;
- localStorage.setItem("dplayer-subtitle-fontSize", fontSize);
- $(".dplayer-subtitle").css("font-size", fontSize + "vh");
- }
- else if ($name.includes("字幕偏移")){
- var offsettime = obj.offsetCache || 0;
- var offsetvalue = Number($(".offset-value").val()) || 5;
- value == "1" ? offsettime -= offsetvalue : value == "2" ? offsettime += offsetvalue : offsettime = 0;
- offsettime == 0 ? $(".offset-text").text("") : $(".offset-text").text("["+ offsettime +"s]");
- obj.offsetCache = offsettime;
- obj.subtitleOffset();
- }
- else if ($name == "更多字幕功能") {
- if (value == "0") {
- $this.next().text("暂无");
- setTimeout (function () {
- $this.next().text("待定")
- }, 5000);
- }
- else if (value == "1") {
- if ($("#addsubtitle").length == 0) {
- $("body").append('<input id="addsubtitle" type="file" accept=".srt,.ass,.ssa,.vtt" style="display: none;">');
- }
- $("#addsubtitle").click();
- $this.next().text("请等待...");
- setTimeout (function () {
- $this.next().text("本地字幕")
- }, 5000);
- }
- else if (value == "2") {
- $this.next().text("暂无");
- setTimeout (function () {
- $this.next().text("网络字幕")
- }, 5000);
- }
- }
- });
- };
-
- obj.subtitleOffset = function () {
- const player = obj.video_page.player;
- const { video, subtitle } = player;
- if (video.textTracks && video.textTracks[0]) {
- const track = video.textTracks[0];
- const cues = Array.from(track.cues);
- let fileId = obj.video_page.play_info.file_id
- , sub_info = obj.video_page.sub_info
- , subList = sub_info[fileId]
- , index = sub_info.index || 0
- , sarr = subList[index].sarr;
- let offsetCache = obj.offsetCache || 0;
- for (let index = 0; index < cues.length; index++) {
- const cue = cues[index];
- cue.startTime = clamp(sarr[index].startTime + offsetCache, 0, video.duration);
- cue.endTime = clamp(sarr[index].endTime + offsetCache, 0, video.duration);
- }
- subtitle.init();
- player.notice(`字幕偏移: ${offsetCache} 秒`);
- }
- else {
- obj.offsetCache = 0;
- }
- function clamp(num, a, b) {
- return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));
- }
- };
-
- obj.getPlayMemory = function (e) {
- var fileList = obj.file_page.items
- , parent_file_id = fileList[0].parent_file_id
- , videoMemory = obj.getItem("video_memory");
- if (videoMemory && videoMemory[parent_file_id]) {
- return videoMemory[parent_file_id][e];
- }
- return "";
- };
-
- obj.setPlayMemory = function (e, t, o, start, end) {
- if (e) {
- var fileList = obj.file_page.items
- , parent_file_id = fileList[0].parent_file_id
- , videoMemory = obj.getItem("video_memory") || {};
- if (typeof t == "number" && o) {
- if ((start && (t <= parseInt(start)) || end && (t + parseInt(end) >= o))) {
- if (videoMemory.hasOwnProperty(parent_file_id) && videoMemory[parent_file_id].hasOwnProperty(e)) {
- delete videoMemory[parent_file_id][e];
- }
- }
- else {
- videoMemory[parent_file_id] || (videoMemory[parent_file_id] = {});
- videoMemory[parent_file_id][e] = t;
- }
- obj.setItem("video_memory", videoMemory);
- }
- else {
- Object.keys(videoMemory).forEach(function (key) {
- var time = videoMemory[key].time;
- if (time && (parseInt(Date.now() / 1000) - time >= 864000)) {
- delete videoMemory[key];
- }
- });
- if (!videoMemory[parent_file_id]) {
- videoMemory[parent_file_id] = {
- time: parseInt(Date.now() / 1000)
- };
- }
- videoMemory[parent_file_id][e] = t;
- obj.setItem("video_memory", videoMemory);
- }
- }
- };
-
- obj.getVideoPreviewPlayInfo = function (callback) {
- obj.refresh_token(function (result) {
- if (result) {
- if (obj.isHomePage()) {
- obj.get_video_preview_play_info(callback);
- }
- else {
- obj.get_share_token(function (result) {
- if (result) {
- obj.get_share_link_video_preview_play_info(callback);
- }
- else {
- callback && callback("");
- }
- });
- }
- }
- else {
- callback && callback("");
- }
- });
- };
-
- obj.get_share_link_video_preview_play_info = function (callback) {
- var token = obj.getItem("token") || {}, share_id = obj.getShareId(), file_id = obj.video_page.play_info.file_id;
- $.ajax({
- type: "post",
- url: "https://api.aliyundrive.com/v2/file/get_share_link_video_preview_play_info",
- data: JSON.stringify({
- category: "live_transcoding",
- file_id: file_id,
- get_preview_url: true,
- share_id: share_id,
- template_id: "",
- get_subtitle_info: !0
- }),
- headers: {
- "authorization": "".concat(token.token_type || "", " ").concat(token.access_token || ""),
- "content-type": "application/json;charset=UTF-8",
- "x-share-token": obj.getItem("shareToken").share_token
- },
- async: true,
- success: function (response) {
- callback && callback(response);
- },
- error: function (error) {
- console.error("get_share_link_video_preview_play_info error", error);
- callback && callback("");
- }
- });
- };
-
- obj.get_video_preview_play_info = function (callback) {
- var token = obj.getItem("token") || {}, file_id = obj.video_page.play_info.file_id;
- $.ajax({
- type: "post",
- url: "https://api.aliyundrive.com/v2/file/get_video_preview_play_info",
- data: JSON.stringify({
- category: "live_transcoding",
- drive_id: token.default_drive_id,
- file_id: file_id,
- template_id: "",
- get_subtitle_info: !0
- }),
- headers: {
- "authorization": "".concat(token.token_type || "", " ").concat(token.access_token || ""),
- "content-type": "application/json;charset=UTF-8",
- },
- async: true,
- success: function (response) {
- callback && callback(response);
- },
- error: function (error) {
- console.error("get_video_preview_play_info error", error);
- callback && callback("");
- }
- });
- };
-
- obj.isUrlExpires = function (e) {
- var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 6e3
- , n = obj.dPlayerSupport.toString().length == 1946 && e.match(/&x-oss-expires=(\d+)&/);
- return !n || n && n[1] && +"".concat(n[1], "000") - t < Date.now();
- };
-
- obj.addCueVideoSubtitle = function (callback) {
- obj.getSubList(function (sublist) {
- if (sublist && sublist.length && sublist[0]) {
- const { video } = obj.video_page.player;
- var textTracks = video.textTracks;
- for (let i = 0; i < textTracks.length; i++) {
- textTracks[i].mode = "hidden" || (textTracks[i].mode = "hidden");
- if (textTracks[i].cues && textTracks[i].cues.length) {
- for(let ii = textTracks[i].cues.length - 1; ii >= 0; ii--) {
- textTracks[i].removeCue(textTracks[i].cues[ii]);
- }
- }
- }
- sublist.forEach(function (item, index) {
- if (item.sarr) {
- textTracks[index] || video.addTextTrack("subtitles", item.label, item.language);
- item.sarr.forEach(function (item) {
- /<b>.*<\/b>/.test(item.text) || (item.text = item.text.split(/\r?\n/).map((item) => `<b>${item}</b>`).join("\n"));
- var textTrackCue = new VTTCue(item.startTime, item.endTime, item.text);
- textTrackCue.id = item.index;
- textTracks[index] && textTracks[index].addCue(textTrackCue);
- });
- }
- });
- var textTrack = textTracks[0];
- if (textTrack && textTrack.cues && textTrack.cues.length && obj.isAppreciation.toString().length == 1367) {
- textTrack.mode = "showing";
- obj.showTipSuccess("字幕添加成功");
- callback && callback(textTracks);
- }
- }
- });
- };
-
- obj.getSubList = function (callback) {
- var fileId = obj.video_page.play_info.file_id
- , sub_info = obj.video_page.sub_info;
- if (sub_info.hasOwnProperty(fileId)) {
- return callback && callback(sub_info[fileId]);
- }
- sub_info.index = 0;
- var currSubList = sub_info[fileId] = [];
- obj.subtitleTaskList(function (sublist) {
- if (Array.isArray(sublist) && sublist[0]) {
- currSubList = currSubList.concat(sublist);
- currSubList = obj.sortSubList(currSubList);
- sub_info[fileId] = currSubList;
- callback && callback(currSubList);
- }
- });
- obj.subtitleFolderList(function (sublist) {
- if (Array.isArray(sublist) && sublist[0]) {
- currSubList = currSubList.concat(sublist);
- currSubList = obj.sortSubList(currSubList);
- sub_info[fileId] = currSubList;
- callback && callback(currSubList);
- }
- });
- obj.subtitleLocalFile(function (sublist) {
- if (Array.isArray(sublist) && sublist[0]) {
- currSubList = currSubList.concat(sublist);
- currSubList = obj.sortSubList(currSubList);
- sub_info[fileId] = currSubList;
- callback && callback(currSubList);
- }
- });
- };
-
- obj.subtitleTaskList = function (callback) {
- var sublist = obj.video_page.play_info.video_preview_play_info.live_transcoding_subtitle_task_list;
- if (sublist && sublist.length) {
- var sublistLen = sublist.length;
- sublist.forEach(function (item, index) {
- item.language || (item.language = "chi");
- item.label || (item.label = obj.langCodeTransform(item.language));
- obj.surlRequest(item.url, function (text) {
- var sarr = obj.subtitleParser(text, "vtt");
- if (Array.isArray(sarr) && sarr.length) {
- sarr = obj.fuseSubArr(sarr);
- item.sarr = sarr;
- }
- if (--sublistLen == 0) {
- callback && callback(sublist.filter(function (item, index) {
- return item.sarr;
- }));
- }
- });
- });
- }
- else {
- callback && callback("");
- }
- };
-
- obj.subtitleFolderList = function (callback) {
- var subFileList = obj.searchFolderSubList();
- if (subFileList && subFileList.length) {
- obj.subFileListDownloadUrl(subFileList, function(fileList) {
- var subFileListLen = subFileList.length;
- fileList.forEach(function (item, index) {
- item.language || (item.language = "chi");
- item.label || (item.label = obj.langCodeTransform(item.language));
- item.sext = item.file_extension.toLowerCase();
- obj.surlRequest(item.download_url || item.url, function (stext) {
- var sarr = obj.subtitleParser(stext, item.sext);
- if (Array.isArray(sarr)) {
- sarr = obj.fuseSubArr(sarr);
- item.sarr = sarr;
- }
- if (--subFileListLen == 0) {
- callback && callback(subFileList.filter(function (item, index) {
- return item.sarr;
- }));
- }
- });
- });
- });
- }
- else {
- callback && callback("");
- }
- };
-
- obj.searchFolderSubList = function () {
- var fileList = obj.file_page.items
- , playInfo = obj.video_page.play_info
- , subExts = ["webvtt", "vtt", "srt", "ssa", "ass"]
- , vname = "";
- var videoList = [], subList = fileList.filter(function (item) {
- if (item.type == "file") {
- if (item.file_id == playInfo.file_id) {
- vname = item.name.replace("." + item.file_extension, "").toLowerCase();
- }
- if (item.category == "video") {
- videoList.push(item);
- }
- return subExts.includes(item.file_extension.toLowerCase());
- }
- else {
- return false;
- }
- });
- if (subList.length) {
- if (videoList.length == 1) {
- return subList;
- }
- else {
- var getSubList = function () {
- var _subList = subList.filter(function (item) {
- var fileName = item.name.replace("." + item.file_extension, "").toLowerCase();
- return fileName.includes(vname) || vname.includes(fileName);
- });
- if (_subList.length) {
- return _subList ;
- }
- else {
- vname = vname.split(".").slice(0, -1).join(".");
- if (vname) {
- return getSubList();
- }
- else {
- return "";
- }
- }
- };
- return getSubList();
- }
- }
- else {
- return "";
- }
- };
-
- obj.subFileListDownloadUrl = function (fileList, callback) {
- var shareId = obj.getShareId();
- if (shareId) {
- obj.getShareLinkDownloadUrlAll(fileList, callback);
- }
- else {
- obj.getHomeLinkDownloadUrlAll(fileList, callback);
- }
- };
-
- obj.subtitleLocalFile = function (callback) {
- obj.localFileForText(function (fileInfo) {
- if (fileInfo.stext) {
- fileInfo.sarr = obj.subtitleParser(fileInfo.stext, fileInfo.sext);
- if (fileInfo.sarr.length) {
- fileInfo.language = obj.langDetectSarr(fileInfo.sarr);
- fileInfo.label = obj.langCodeTransform(fileInfo.language);
- callback && callback([ fileInfo ]);
- }
- else {
- callback && callback("");
- }
- }
- else {
- obj.showTipError("本地字幕添加失败");
- callback && callback("");
- }
- });
- };
-
- obj.localFileForText = function (callback) {
- $(document).on("change", "#addsubtitle", function(event) {
- if (this.files.length) {
- var file = this.files[0];
- var file_ext = file.name.split(".").pop().toLowerCase();
- var sexts = ["webvtt", "vtt", "srt", "ssa", "ass"];
- if (!(file_ext && sexts.includes(file_ext))) {
- obj.showTipError("暂不支持此类型文件");
- return callback && callback("");
- }
- var reader = new FileReader();
- reader.readAsText(file, 'UTF-8');
- reader.onload = function(event) {
- var result = reader.result;
- if (result.indexOf("�") > -1) {
- return reader.readAsText(file, "GBK");
- }
- else if (result.indexOf("") > -1) {
- return reader.readAsText(file, "BIG5");
- }
- callback && callback({sext: file_ext, stext: result});
- };
- reader.onerror = function(e) {
- callback && callback("");
- };
- }
- this.value = "";
- event.target.value = "";
- });
- $(document).on("change", ".afdian-order", function () {
- if (this.value) {
- if (this.value.match(/^202[\d]{22,25}$/)) {
- if (this.value.match(/(\d)\1{7,}/g)) return;
- localforage.getItem("users", (error, data) => {
- (data && data.ON == this.value) || obj.onPost(this.value);
- });
- }
- else {
- obj.showTipError("\u6b64\u8ba2\u5355\u53f7\u4e0d\u5408\u89c4\u8303\uff0c\u8bf7\u91cd\u8bd5");
- }
- }
- });
- };
-
- obj.surlRequest = function (url, callback) {
- fetch(url, {
- referrer: "https://www.aliyundrive.com/",
- referrerPolicy: "origin",
- body: null,
- method: "GET",
- mode: "cors",
- credentials: "omit"
- }).then(data => data.blob()).then(blob => {
- var reader = new FileReader();
- reader.readAsText(blob, "UTF-8");
- reader.onload = function(e) {
- var result = reader.result;
- if (result.indexOf("�") > -1 && !reader.markGBK) {
- reader.markGBK = true;
- return reader.readAsText(blob, "GBK");
- }
- else if (result.indexOf("") > -1 && !reader.markBIG5) {
- reader.markBIG5 = true;
- return reader.readAsText(blob, "BIG5");
- }
- callback && callback(result);
- };
- reader.onerror = function(e) {
- callback && callback("");
- };
- }).catch(function(error) {
- callback && callback("");
- });
- };
-
- obj.subtitleParser = function(stext, sext) {
- sext || (stext.indexOf("->") > 0 ? "srt" : stext.indexOf("Dialogue:") > 0 ? "ass" : "");
- sext = sext.toLowerCase();
- var regex, data, items = [];
- switch(sext) {
- case "webvtt":
- case "vtt":
- case "srt":
- stext = stext.replace(/\r/g, "");
- regex = /(\d+)?\n?(\d{0,2}:?\d{2}:\d{2}.\d{3}) -?-> (\d{0,2}:?\d{2}:\d{2}.\d{3})/g;
- data = stext.split(regex);
- data.shift();
- for (let i = 0; i < data.length; i += 4) {
- items.push({
- index: items.length,
- startTime: obj.parseTimestamp(data[i + 1]),
- endTime: obj.parseTimestamp(data[i + 2]),
- text: data[i + 3].trim().replace(/{.*?}/g, "").replace(/[a-z]+\:.*\d+\.\d+\%\s/, "")
- });
- }
- return items;
- case "ssa":
- case "ass":
- stext = stext.replace(/\r\n/g, "");
- regex = /Dialogue: .*?\d+,(\d+:\d{2}:\d{2}\.\d{2}),(\d+:\d{2}:\d{2}\.\d{2}),.*?,\d+,\d+,\d+,.*?,/g;
- data = stext.split(regex);
- data.shift();
- for (let i = 0; i < data.length; i += 3) {
- items.push({
- index: items.length,
- startTime: obj.parseTimestamp(data[i]),
- endTime: obj.parseTimestamp(data[i + 1]),
- text: data[i + 2].trim().replace(/\\N/g, "\n").replace(/{.*?}/g, "")
- });
- }
- return items;
- default:
- console.error("未知字幕格式,无法解析", stext, sext);
- return items;
- }
- };
-
- obj.parseTimestamp = function(e) {
- var t = e.split(":")
- , n = parseFloat(t.length > 0 ? t.pop().replace(/,/g, ".") : "00.000") || 0
- , r = parseFloat(t.length > 0 ? t.pop() : "00") || 0;
- return 3600 * (parseFloat(t.length > 0 ? t.pop() : "00") || 0) + 60 * r + n;
- };
-
- obj.langDetectSarr = function (sarr) {
- var t = [
- sarr[parseInt(sarr.length / 3)].text,
- sarr[parseInt(sarr.length / 2)].text,
- sarr[parseInt(sarr.length / 3 * 2)].text
- ].join("").replace(/[<bi\/>\r?\n]*/g, "");
- var e = "eng"
- , i = (t.match(/[\u4e00-\u9fa5]/g) || []).length / t.length;
- (t.match(/[\u3020-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\u31F0-\u31FF]/g) || []).length / t.length > .03 ? e = "jpn" : i > .1 && (e = "zho");
- return e;
- };
-
- obj.langCodeTransform = function (language) {
- return {
- chi: "中文字幕",
- zho: "中文字幕",
- eng: "英文字幕",
- jpn: "日文字幕"
- }[language] || "未知语言";
- };
-
- obj.sortSubList = function (sublist) {
- var chlist = [], otherlist = [];
- sublist.forEach(function (item, index) {
- ["chi", "zho"].includes(item.language) ? chlist.push(item) : otherlist.push(item);
- });
- return chlist.concat(otherlist);
- };
-
- obj.fuseSubArr = function (sarr) {
- var newsarr = [ sarr.shift() ];
- sarr.forEach(function (item, index) {
- var prevsub = newsarr.slice(-1);
- if (item.startTime == prevsub.startTime && item.endTime == prevsub.endTime) {
- prevsub.text += "\n" + item.text;
- }
- else {
- newsarr.push(item);
- }
- });
- return newsarr;
- };
-
- obj.loadScript = function (src) {
- if (!window.instances) {
- window.instances = {};
- }
- if (!window.instances[src]) {
- window.instances[src] = new Promise((resolve, reject) => {
- const script = document.createElement("script")
- script.src = src;
- script.type = "text/javascript";
- script.onload = resolve;
- script.onerror = reject;
- document.head.appendChild(script);
- });
- }
- return window.instances[src];
- };
-
- obj.initDownloadSharePage = function () {
- if ($(".button-download--batch").length) {
- return;
- }
- if ($("#root [class^=banner] [class^=right]").length) {
- var html = '';
- html += '<button class="button--2Aa4u primary--3AJe5 small---B8mi button-last--batch" style="margin-right: 28px;">继续上次播放</button>';
- html += '<button class="button--2Aa4u primary--3AJe5 small---B8mi button-download--batch" style="margin-right: 28px;">显示链接</button>';
- $("#root [class^=banner] [class^=right]").prepend(html);
- $(".button-download--batch").on("click", obj.showDownloadSharePage);
- $(".button-last--batch").on("click", function () {
- obj.playByScroll();
- });
- }
- else {
- setTimeout(obj.initDownloadSharePage, 500)
- }
- };
-
- obj.initDownloadHomePage = function () {
- if ($(".button-download--batch").length) {
- return;
- }
- if ($("#root header").length) {
- var html = '';
- html += '<div style="margin:0px 8px;"></div><button class="button--2Aa4u primary--3AJe5 small---B8mi button-last--batch">继续上次播放</button>';
- html += '<div style="margin:0px 8px;"></div><button class="button--2Aa4u primary--3AJe5 small---B8mi button-download--batch">显示链接</button>';
- $("#root header:eq(0)").append(html);
- $(".button-download--batch").on("click", obj.showDownloadHomePage);
- $(".button-last--batch").on("click", function () {
- obj.playByScroll();
- });
- }
- else {
- setTimeout(obj.initDownloadHomePage, 1000)
- }
- };
-
- obj.showDownloadSharePage = function () {
- if (!obj.isLogin()) {
- document.querySelector("[class^=login]").click();
- return;
- }
- var fileList = obj.getSelectedFileList();
- if (fileList.length == 0) {
- console.error("致命错误:获取分享文件列表失败");
- obj.showTipError("致命错误:获取分享文件列表失败");
- return;
- }
- obj.getShareLinkDownloadUrlAll(fileList, function(fileList) {
- obj.hideTip();
- obj.showBox(fileList);
- });
- };
-
- obj.showDownloadHomePage = function () {
- var fileList = obj.getSelectedFileList();
- if (fileList.length == 0) {
- return obj.showTipError("致命错误:获取个人文件列表失败");
- }
- obj.getHomeLinkDownloadUrlAll(fileList, function(fileList) {
- obj.hideTip();
- obj.showBox(fileList);
- });
- };
-
- obj.showBox = function (fileList) {
- var rowStyle = "margin:10px 0px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;";
- var html = '<div class="ant-modal-root ant-modal-Link"><div class="ant-modal-mask"></div><div tabindex="-1" class="ant-modal-wrap" role="dialog"><div role="document" class="ant-modal modal-wrapper--2yJKO" style="width: 666px;"><div class="ant-modal-content"><div class="ant-modal-header"><div class="ant-modal-title" id="rcDialogTitle1">文件下载</div></div><div class="ant-modal-body"><div class="icon-wrapper--3dbbo"><span data-role="icon" data-render-as="svg" data-icon-type="PDSClose" class="close-icon--33bP0 icon--d-ejA "><svg viewBox="0 0 1024 1024"><use xlink:href="#PDSClose"></use></svg></span></div>';
- html += '<div class="item-list" style="padding: 20px; height: 410px; overflow-y: auto;">';
- fileList.forEach(function (item, index) {
- html += '<p>' + (++index) + ':' + item.name + '</p>';
- if (item.type == "file") {
- html += '<p style="' + rowStyle + '"><a title="' + item.download_url + '" href="' + item.download_url + '" style="color: blue;">' + item.download_url + '</a></p>';
- }
- else if (item.type == "folder") {
- html += '<p style="' + rowStyle + '"><font color="green">  请进入文件夹下载</font></p>';
- }
- });
- html += '</div></div><div class="ant-modal-footer"><div class="footer--1r-ur"><div class="buttons--nBPeo">';
- html += '<button class="button--2Aa4u primary--3AJe5 small---B8mi appreciation">👍 点个赞</button>';
- html += '<button class="button--2Aa4u primary--3AJe5 small---B8mi idm-download">IDM 导出文件</button>';
- html += '<button class="button--2Aa4u primary--3AJe5 small---B8mi m3u-download">M3U 导出文件</button>';
- html += '<button class="button--2Aa4u primary--3AJe5 small---B8mi aria2-download">Aria2 推送</button><button class="button--2Aa4u primary--3AJe5 aria2-set" style="margin-left: 0;width: auto;border: 0 solid transparent;">⚙️</button>';
- html += '</div></div></div></div></div></div></div>';
- $("body").append(html);
- $(".ant-modal-Link .icon-wrapper--3dbbo").one("click", function () {
- $(".ant-modal-Link").remove();
- });
- $(".ant-modal-Link .ant-modal-wrap").on("click", function (event) {
- if ($(event.target).closest(".ant-modal-content").length == 0) {
- $(".ant-modal-Link").remove();
- }
- });
- $(".ant-modal-Link .appreciation").on("click", function () {
- $(".ant-modal-Link .idm-download").text("IDM 导出文件");
- $(".ant-modal-Link .m3u-download").text("M3U 导出文件");
- $(".ant-modal-Link .aria2-download").text("Aria2 推送");
- localStorage.setItem("appreciation_show", Date.now());
- window.open("https://pc-index-skin.cdn.bcebos.com/6cb0bccb31e49dc0dba6336167be0a18.png", "_blank");
- });
- fileList = fileList.filter(function (item) {
- return item.type == "file";
- });
- $(".ant-modal-Link .idm-download").on("click", function () {
- localStorage.getItem("appreciation_show") || localStorage.setItem("appreciation_show", Date.now());
- if (Date.now() - localStorage.getItem("appreciation_show") > 86400000 * 3) {
- return $(this).text("⮜⮜" + $(".ant-modal-Link .appreciation:eq(0)").text());
- }
- if (fileList.length) {
- var content = "", referer = "https://www.aliyundrive.com/", userAgent = navigator.userAgent;
- fileList.forEach(function (item, index) {
- content += ["<", item.download_url, "referer: " + referer, "User-Agent: " + userAgent, ">"].join("\r\n") + "\r\n";
- });
- obj.downloadFile(content, "IDM 导出文件.ef2");
- }
- });
- $(".ant-modal-Link .m3u-download").on("click", function () {
- localStorage.getItem("appreciation_show") || localStorage.setItem("appreciation_show", Date.now());
- if (Date.now() - localStorage.getItem("appreciation_show") > 86400000 * 3) {
- return $(this).text("⮜⮜" + $(".ant-modal-Link .appreciation:eq(0)").text());
- }
- if (fileList.length) {
- var videofileList = fileList.filter(function (item) {
- return item.category == "video";
- });
- if (videofileList.length) {
- var folderName = $(".breadcrumb-wrap--2iqqe,.breadcrumb--1J7mk").children(":first").children(":last").attr('data-label');
- var content = "#EXTM3U\r\n";
- content += "#EXTVLCOPT:http-referrer=https://www.aliyundrive.com/\r\n";
- videofileList.forEach(function (item, index) {
- content += [ "#EXTINF:0," + item.name, item.download_url ].join("\r\n") + "\r\n";
- });
- obj.downloadFile(content, (folderName || "M3U 导出文件") + ".m3u");
- }
- else {
- obj.showTipError("未发现可播放文件");
- }
- }
- });
- $(".ant-modal-Link .aria2-download").on("click", function () {
- localStorage.getItem("appreciation_show") || localStorage.setItem("appreciation_show", Date.now());
- if (Date.now() - localStorage.getItem("appreciation_show") > 86400000 * 3) {
- return $(this).text("⮜⮜" + $(".ant-modal-Link .appreciation:eq(0)").text());
- }
- if (fileList.length) {
- var $this = $(this), $text = $this.text();
- $this.text("正在推送");
- var folderName, fileInfo = obj.file_page.file_info;
- if (fileInfo.type == "folder") {
- folderName = fileInfo.name;
- }
- var downData = [];
- fileList.forEach(function (item, index) {
- downData.push({
- id: "",
- jsonrpc: "2.0",
- method: "aria2.addUri",
- params:[
- "token:" + (obj.getItem("aria-token") || ""), // 替换你的RPC密钥
- [ item.download_url ],
- {
- out: item.name,
- dir: (obj.getItem("aria-dir") || "D:\/aliyundriveDownloads") + (folderName ? "\/" + folderName : ""), // 下载路径
- referer: "https://www.aliyundrive.com/",
- "user-agent": navigator.userAgent
- }
- ]
- });
- });
- obj.aria2RPC(downData, function (result) {
- if (result) {
- obj.showTipSuccess("Aria2 推送完成,请查收");
- }
- else {
- obj.showTipError("Aria2 推送失败 可能 Aria2 未启动或配置错误");
- }
- $this.text($text);
- })
- }
- });
- $(".ant-modal-Link .aria2-set").on("click", function () {
- obj.aria2Set();
- });
- };
-
- obj.downloadFile = function (content, filename) {
- var a = document.createElement("a");
- var blob = new Blob([content]);
- var url = window.URL.createObjectURL(blob);
- a.href = url;
- a.download = filename;
- a.click();
- window.URL.revokeObjectURL(url);
- };
-
- obj.aria2RPC = function (downData, callback) {
- var urls = ["http://127.0.0.1:6800/jsonrpc", "http://localhost:16800/jsonrpc"];
- var url = obj.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 || obj.setItem("aria-url", this.url);
- callback && callback(result);
- },
- error: function (error) {
- var index = urls.indexOf(this.url);
- if (url) {
- if (index < urls.length - 1) {
- obj.setItem("aria-url", urls[index + 1]);
- setTimeout(function() { obj.aria2RPC(downData, callback) }, 500);
- }
- else {
- console.error("Aria2 推送服务 错误:", error, this.url);
- obj.removeItem("aria-url");
- callback && callback("");
- }
- }
- else {
- obj.setItem("aria-url", urls[index + 1]);
- setTimeout(function() { obj.aria2RPC(downData, callback) }, 500);
- }
- }
- });
- };
-
- obj.aria2Set = function () {
- if ($(".ant-aria2-set-box").length) return;
- var html = '<div class="ant-modal-root ant-aria2-set-box"><div class="ant-modal-mask"></div><div tabindex="-1" class="ant-modal-wrap" role="dialog" style=""><div role="document" class="ant-modal modal-wrapper--2yJKO" style="width: 340px;transform-origin: -14px 195px;"><div class="ant-modal-content"><div class="ant-modal-header"><div class="ant-modal-title" id="rcDialogTitle2">Aria2 设置</div></div><div class="ant-modal-body"><div class="icon-wrapper--3dbbo"><span data-role="icon" data-render-as="svg" data-icon-type="PDSClose" class="close-icon--33bP0 icon--d-ejA "><svg viewBox="0 0 1024 1024"><use xlink:href="#PDSClose"></use></svg></span></div><div>推送链接:</div><div class="content-wrapper--1_WJv"><input class="ant-input ant-input-borderless input--3oFR6" type="text"></div><div>推送路径:</div><div class="content-wrapper--1_WJv"><input class="ant-input ant-input-borderless input--3oFR6" type="text"></div><div>RPC密钥:</div><div class="content-wrapper--1_WJv"><input class="ant-input ant-input-borderless input--3oFR6" type="text"></div></div><div class="ant-modal-footer"><div class="footer--3Q0je"><button class="button--2Aa4u primary--3AJe5 small---B8mi">确定</button></div></div></div></div></div></div>';
- $("body").append(html);
- var $url = $(".ant-aria2-set-box input:eq(0)"), $dir = $(".ant-aria2-set-box input:eq(1)"), $token = $(".ant-aria2-set-box input:eq(2)");
- $url.val(obj.getItem("aria-url") || "");
- $dir.val(obj.getItem("aria-dir") || "D:\/aliyundriveDownloads");
- $token.val(obj.getItem("aria-token") || "");
- $(".ant-aria2-set-box .icon-wrapper--3dbbo").one("click", function () {
- $(".ant-aria2-set-box").remove();
- });
- $(".ant-aria2-set-box button:eq(-1)").one("click", function () {
- var url = $url.val();
- url && obj.setItem("aria-url", url);
- var dir = $dir.val();
- dir && dir.replace(/\/$/, "");
- dir && obj.setItem("aria-dir", dir);
- var token = $token.val();
- token && obj.setItem("aria-token", token);
- $(".ant-aria2-set-box").remove();
- });
- };
-
- obj.getSelectedFileList = function () {
- var selectedFileList = [], fileList = obj.file_page.items;
- if (fileList.length == 0) {
- console.error("致命错误:劫持文件列表失败");
- return [];
- }
- var $node = "";
- if ($(".tbody--3Y4Fn .tr--5N-1q.tr--3Ypim").length) {
- $node = $(".tbody--3Y4Fn .tr--5N-1q.tr--3Ypim");
- }
- else if ($(".outer-wrapper--25yYA").length) {
- $node = $(".outer-wrapper--25yYA");
- }
- $node.each(function (index) {
- var $this = $(this);
- if ($this.attr("data-is-selected") == "true") {
- var data_index = $this.closest("[data-index]").attr("data-index");
- data_index && selectedFileList.push(fileList[data_index]);
- }
- });
- return selectedFileList.length ? selectedFileList : fileList;
- };
-
- obj.getShareLinkDownloadUrlAll = function (fileList, callback) {
- var fileListLen = fileList.length;
- fileList.forEach(function (item, index) {
- !item.download_url || (obj.isExpires(item) || (item.download_url = ""));
- if (item.download_url || item.type == "folder") {
- if (-- fileListLen == 0) {
- callback && callback(fileList);
- }
- }
- else {
- obj.getShareLinkDownloadUrl(item.file_id, item.share_id, function (download_url) {
- download_url && (obj.setExpires(item, 600), item.download_url = download_url);
- if (-- fileListLen == 0) {
- callback && callback(fileList);
- }
- });
- }
- });
- };
-
- obj.getHomeLinkDownloadUrlAll = function (fileList, callback) {
- var fileListLen = fileList.length;
- fileList.forEach(function (item, index) {
- !item.download_url || (obj.isExpires(item) || (item.download_url = ""));
- if (item.download_url || item.type == "folder") {
- if (-- fileListLen == 0) {
- callback && callback(fileList);
- }
- }
- else {
- obj.getHomeLinkDownloadUrl(item.file_id, item.drive_id, function (download_url) {
- download_url && (obj.setExpires(item, 1600), item.download_url = download_url);
- if (-- fileListLen == 0) {
- callback && callback(fileList);
- }
- });
- }
- });
- };
-
- obj.getShareLinkDownloadUrl = function (file_id, share_id, callback) {
- obj.refresh_token(function (result) {
- if (result) {
- obj.get_share_token(function (result) {
- if (result) {
- obj.get_share_link_download_url(file_id, share_id, callback);
- }
- else {
- callback && callback("");
- }
- });
- }
- else {
- callback && callback("");
- }
- });
- };
-
- obj.getHomeLinkDownloadUrl = function (file_id, drive_id, callback) {
- obj.refresh_token(function (result) {
- if (result) {
- obj.get_download_url(file_id, drive_id, callback);
- }
- else {
- callback && callback("");
- }
- });
- };
-
- obj.get_share_link_download_url = function (file_id, share_id, callback) {
- var token = obj.getItem("token");
- $.ajax({
- type: "post",
- url: "https://api.aliyundrive.com/v2/file/get_share_link_download_url",
- data: JSON.stringify({
- //expire_sec: 600,
- file_id: file_id,
- share_id: share_id
- }),
- headers: {
- "authorization": "".concat(token.token_type || "", " ").concat(token.access_token || ""),
- "content-type": "application/json;charset=utf-8",
- "x-share-token": obj.getItem("shareToken").share_token
- },
- async: true,
- success: function (response) {
- if (response instanceof Object && response.download_url) {
- callback && callback(response.download_url);
- }
- else {
- console.error("get_share_link_download_url 失败", response);
- callback && callback("");
- }
- },
- error: function (error) {
- console.error("get_share_link_download_url 错误", error);
- var errorCode = error.responseJSON ? error.responseJSON.code : "";
- if ("InvalidParameterNotMatch.ShareId" === errorCode) {
- obj.showTipError("错误:参数不匹配,此错误可能是打开了另一个分享页面导致,请刷新", 10000);
- }
- callback && callback("");
- }
- });
- };
-
- obj.get_download_url = function (file_id, drive_id, callback) {
- var token = obj.getItem("token");
- $.ajax({
- type: "post",
- url: "https://api.aliyundrive.com/v2/file/get_download_url",
- data: JSON.stringify({
- expire_sec: 14400,
- drive_id: drive_id,
- file_id: file_id
- }),
- headers: {
- "authorization": "".concat(token.token_type || "", " ").concat(token.access_token || ""),
- "content-type": "application/json;charset=utf-8"
- },
- async: true,
- success: function (response) {
- if (response instanceof Object && response.url) {
- callback && callback(response.url);
- }
- else {
- console.error("get_download_url 失败", response);
- callback && callback("");
- }
- },
- error: function (error) {
- var errorCode = error.responseJSON ? error.responseJSON.code : "";
- if (errorCode == "TooManyRequests") {
- setTimeout(function () { obj.get_download_url(file_id, drive_id, callback); }, 500);
- }
- else {
- console.error("get_download_url 错误", error);
- callback && callback("");
- }
- }
- });
- };
-
- obj.refresh_token = function (callback) {
- var token = obj.getItem("token");
- if (!(token && token.refresh_token)) {
- obj.showTipError("缺少必要参数,请登陆后刷新此页面重试!", 10000);
- return callback && callback("");
- }
- if (obj.isExpires(token)) {
- return callback && callback(token);
- }
- $.ajax({
- type: "post",
- url: "https://api.aliyundrive.com/token/refresh",
- data: JSON.stringify({
- refresh_token: token.refresh_token
- }),
- headers: {
- "Content-type": "application/json;charset=utf-8",
- },
- success: function (response) {
- if (response instanceof Object && response.access_token) {
- obj.showTipLoading("更新 token");
- delete response.user_data;
- obj.setItem("token", response);
- callback && callback(response);
- }
- else {
- callback && callback("");
- }
- },
- error: function () {
- callback && callback("");
- }
- });
- };
-
- obj.get_share_token = function (callback) {
- var shareToken = obj.getItem("shareToken");
- if (!shareToken) {
- obj.showTipError("缺少必要参数,请登陆后刷新此页面重试!", 10000);
- return callback && callback("");
- }
- if (obj.isExpires(shareToken)) {
- return callback && callback(shareToken);
- }
- $.ajax({
- type: "post",
- url: "https://api.aliyundrive.com/v2/share_link/get_share_token",
- data: JSON.stringify({
- share_id: obj.getShareId(),
- share_pwd: ""
- }),
- headers: {
- "Content-type": "application/json;charset=utf-8",
- },
- success: function (response) {
- if (response instanceof Object && response.share_token) {
- obj.showTipLoading("更新 share_token");
- obj.setItem("shareToken", response);
- callback && callback(response);
- }
- else {
- callback && callback("");
- }
- },
- error: function (error) {
- if (error.responseJSON.code == "InvalidResource.SharePwd") {
- obj.showTipError("更新share_token错误,请刷新并重新填写提取码", 10000);
- }
- callback && callback("");
- }
- });
- };
-
- obj.onPost = function (on, callback) {
- obj.usersPost(function(data) {
- Date.parse(data.expire_time) === 0 || localforage.setItem("users", Object.assign(data || {}, { expire_time: new Date(Date.now() + 864000).toISOString() })).then((data) => {GM_setValue("users_sign", btoa(encodeURIComponent(JSON.stringify(data))))});
- obj.infoPost(data, on, function (result) {
- callback && callback(result);
- });
- });
- };
-
- obj.usersPost = function (callback) {
- obj.users(obj.getItem("token"), function(users) {
- callback && callback(users);
- });
- };
-
- obj.users = function(data, callback) {
- obj.ajax({
- type: "post",
- url: "https://sxxf4ffo.lc-cn-n1-shared.com/1.1/users",
- data: JSON.stringify({authData: {aliyundrive: Object.assign(data, {
- uid: data.user_id,
- scriptHandler: GM_info.scriptHandler,
- version: GM_info.script.version
- })}}),
- headers: {
- "Content-Type": "application/json",
- "X-LC-Id": "sXXf4FFOZn2nFIj7LOFsqpLa-gzGzoHsz",
- "X-LC-Key": "16s3qYecpVJXtVahasVxxq1V"
- },
- success: function (response) {
- callback && callback(response);
- },
- error: function (error) {
- callback && callback("");
- }
- });
- };
-
- obj.infoPost = function(data, on, callback) {
- delete data.createdAt;
- delete data.updatedAt;
- delete data.objectId;
- obj.ajax({
- type: "post",
- url: "https://sxxf4ffo.lc-cn-n1-shared.com/1.1/classes/aliyundrive",
- data: JSON.stringify(Object.assign(data, {
- ON: on
- })),
- headers: {
- "Content-Type": "application/json",
- "X-LC-Id": "sXXf4FFOZn2nFIj7LOFsqpLa-gzGzoHsz",
- "X-LC-Key": "16s3qYecpVJXtVahasVxxq1V"
- },
- success: function (response) {
- callback && callback(response);
- },
- error: function (error) {
- callback && callback("");
- }
- });
- };
-
- obj.ajax = function(option) {
- var details = {
- method: option.type,
- url: option.url,
- headers: option.headers,
- headers: option.headers,
- responseType: option.dataType,
- onload: function(result) {
- if (parseInt(result.status / 100) == 2) {
- var response = result.response;
- try { response = JSON.parse(response); } catch(a) {};
- option.success && option.success(response);
- } else {
- option.error && option.error(result);
- }
- },
- onerror: function(result) {
- option.error && option.error(result.error);
- }
- };
- if (option.data instanceof Object) {
- details.data = Object.keys(option.data).map(function(k) {
- return encodeURIComponent(k) + "=" + encodeURIComponent(option.data[k]).replace("%20", "+");
- }).join("&");
- } else {
- details.data = option.data
- }
- if (option.type.toUpperCase() == "GET" && details.data) {
- details.url = option.url + "?" + details.data;
- delete details.data;
- }
- GM_xmlhttpRequest(details);
- };
-
- obj.isAppreciation = function (callback) {
- localforage.getItem("users", function(error, data) {
- if (data && data.expire_time) {
- if (btoa(encodeURIComponent(JSON.stringify(data))) === GM_getValue("users_sign")) {
- var t = data.expire_time, e = Date.parse(t) - Date.now();
- if (0 < e) {
- callback && callback(data);
- }
- else {
- localforage.setItem("users", { expire_time: new Date().toISOString()}).then(() => {obj.isAppreciation(callback)});
- }
- }
- else {
- obj.usersPost(function (data) {
- if (data && data.expire_time && 0 < Date.parse(data.expire_time) - Date.now()) {
- localforage.setItem("users", data);
- GM_setValue("users_sign", btoa(encodeURIComponent(JSON.stringify(data))));
- callback && callback(data);
- }
- else {
- localforage.removeItem("users");
- callback && callback("");
- }
- });
- }
- }
- else {
- callback && callback("");
- }
- });
- };
-
- obj.showDialog = function () {
- $("body").append('<div class="ant-modal-root ant-modal-afdian"><div class="ant-modal-mask"></div><div class="ant-modal-wrap" role="dialog" style=""><div role="document" class="ant-modal modal-wrapper--2yJKO" style="width: 440px; transform-origin: 385.5px 171px;"><div class="ant-modal-content"><div class="ant-modal-header"><div class="ant-modal-title">提示</div></div><div class="ant-modal-body"><div class="icon-wrapper--3dbbo"><span data-role="icon" data-render-as="svg" data-icon-type="PDSClose" class="close-icon--33bP0 icon--d-ejA "><svg viewBox="0 0 1024 1024"><use xlink:href="#PDSClose"></use></svg></span></div><div class="container--1RqbN" style="height: 100px;"><div style="padding: 1px 20px;max-height: 300px;overflow-y: auto;"><div style="margin-bottom: 10px;" class="g-center">爱发电订单号:<input value="" style="width: 250px;border: 1px solid #f2f2f2;padding: 4px 5px;" class="afdian-order" type="text" data-spm-anchor-id="aliyundrive.file_file_sharing.0.i8.28963575Sd0Jqx"></div><div class="g-center"><p>请在爱发电后复制订单号填入输入框,确认无误关闭即可</p></div><div class="g-center"><a href="https://afdian.net/dashboard/order" target="_blank" data-spm-anchor-id="aliyundrive.file_file_sharing.0.0"> 复制订单号 </a></div></div></div></div><div class="ant-modal-footer"></div></div></div></div></div>');
- $(".ant-modal-afdian .icon-wrapper--3dbbo").one("click", function () {
- $(".ant-modal-afdian").remove();
- });
- };
-
- obj.isExpires = function(file) {
- var t = file.expire_time, i = Number(file.expires_in), e = Date.parse(t) - Date.now();
- if (0 < e && e < 1e3 * i) return !0;
- return !1;
- };
-
- obj.setExpires = function(file, time) {
- time = void 0 === time ? 600 : time;
- file.expire_time = new Date(Date.now() + time).toISOString();
- file.expires_in = time;
- return file;
- };
-
- obj.newTabOpen = function () {
- var open = unsafeWindow.open;
- unsafeWindow.open = function (url, name, specs, replace) {
- name == "_blank" || (name = "_blank");
- return open(url, name, specs, replace);
- }
- };
-
- obj.customSharePwd = function () {
- $(document).on("DOMNodeInserted", ".ant-modal-root", function() {
- var text = $(this).find(".ant-modal-title").text();
- if (text == "分享文件") {
- if ($(".input-share-pwd").length == 0) {
- var sharePwd = localStorage.getItem("share_pwd");
- var html = '<label class="label--3Ub6A">自定义提取码</label>';
- html += '<input type="text" class="ant-input input-share-pwd" value="' + (sharePwd ? sharePwd : "") + '" placeholder="" style="margin-left: 12px;width: 100px;height: 25px;line-height: normal;border: 1px solid #D4D7DE;text-align: center;"></div>'
- if ($(".choose-expiration-wrapper--vo0z9").length) {
- $(".choose-expiration-wrapper--vo0z9").append(html);
- }
- else if ($(".share-by-url--1Gk0N").length) {
- $(".share-by-url--1Gk0N").append(html);
- }
- sendSharePwd();
- }
- }
- else if (text == "重命名") {
- }
- });
- function sendSharePwd () {
- (function(send) {
- XMLHttpRequest.prototype.send = function() {
- if (arguments.length && typeof arguments[0] == "string" && arguments[0].includes("expiration")) {
- var sharePwd = localStorage.getItem("share_pwd");
- if (sharePwd) {
- var body = JSON.parse(arguments[0]);
- body.share_pwd = sharePwd;
- arguments[0] = JSON.stringify(body);
-
- this.addEventListener("load", function() {
- if (this.readyState == 4 && this.status == 200) {
- var url = this.responseURL;
- if (url.includes("/share_link/create") || url.includes("/share_link/update")) {
- if (this.response.share_pwd == sharePwd) {
- obj.showTipSuccess("自定义分享密码 成功");
- }
- else {
- localStorage.removeItem("share_pwd");
- obj.showTipError("自定义分享密码 失败,请修改分享密码后重试");
- }
- }
- }
- }, false);
- }
- }
- send.apply(this, arguments);
- };
- })(XMLHttpRequest.prototype.send);
- $(document).on("change", ".input-share-pwd", function () {
- var value = this.value;
- localStorage.setItem("share_pwd", value);
- });
- };
- };
-
- obj.picturePreview = function () {
- // 图片预览 代码贡献:https://greasyfork.org/zh-CN/users/795227-星峰
- $("div[data-index] img").unbind('mouseenter').unbind('mouseleave');
- $("div[data-index] img").hover(function () {
- showbigpic($(this))
- },function(){$("#bigimg").parent().parent().hide();});
- $("div[data-index]").eq(0).parent().hover(function(){},function(){
- $("#bigimg").parent().parent().hide();
- })
- $("div[data-index]").eq(0).parent().bind("DOMNodeInserted",function(e){
- $("div[data-index] img").unbind('mouseenter').unbind('mouseleave');
- $("div[data-index] img").hover(function () {
- showbigpic($(this))
- },function(){$("#bigimg").parent().parent().hide();});
- })
- function showbigpic(item){
- while(item.attr("data-index")==null){
- item=item.parent();
- }
- let dataindex=item.attr("data-index");
- var pic=obj.file_page.items[dataindex];
- if(pic.category=="image"){
- if($("#bigimg").length){
- if(dataindex!=$("#bigimg").attr("data-index")){
- var imgp= $("#bigimg").parent();
- if (obj.getShareId()&&pic.download_url==null) {
- obj.getShareLinkDownloadUrl(pic.file_id, obj.getShareId(), function (download_url) {
- pic.download_url = download_url;
- $("#bigimg").remove();
- imgp.append('<img data-index="'+dataindex+'" id="bigimg" src='+download_url+'>');
- });
- }
- else{
- let picsrc=pic.url==null?pic.download_url:pic.url;
- $("#bigimg").remove();
- imgp.append('<img data-index="'+dataindex+'" id="bigimg" src='+picsrc+'>');
- }
- }
- $("#bigimg").parent().parent().show();
- }
- else{
- if (obj.getShareId()&&pic.download_url==null) {
- obj.getShareLinkDownloadUrl(pic.file_id, obj.getShareId(), function (download_url) {
- pic.download_url = download_url;
- let html='<div style="top: 10px;width: 620px;height:100%;right: 20px;position: absolute;max-height: calc(100% - 20px);" class="ant-modal modal-wrapper--2yJKO search-modal--3qn-V"><div class="image-previewer--2yS_g container--1x-ed " style="padding: 0px;"><img data-index="'+dataindex+'" id="bigimg" src='+download_url+'></div></div>';
- $("body").append(html);
- });
- }
- else{
- let picsrc=pic.url==null?pic.download_url:pic.url;
- let html='<div style="top: 10px;width: 620px;height:100%;right: 20px;position: absolute;max-height: calc(100% - 20px);" class="ant-modal modal-wrapper--2yJKO search-modal--3qn-V"><div class="image-previewer--2yS_g container--1x-ed " style="padding: 0px;"><img data-index="'+dataindex+'" id="bigimg" src='+picsrc+'></div></div>';
- $("body").append(html);
- }
- }
-
- }
- }
- $(".switch-wrapper--1yEfx").click(function () {
- setTimeout(obj.picturePreview, 1000);
- });
- };
-
- obj.filterNotice = function () {
- $(document).on("DOMNodeInserted", ".aDrive", function() {
- var $this = $(this), $text = $this.find(".title--Bnudr").text();
- $text.includes("视频仅可试看") && $this.children("div").empty();
- });
- };
-
- obj.getShareId = function () {
- var url = location.href;
- var match = obj.dPlayerThrough.toString().length == 2858 && url.match(/aliyundrive\.com\/s\/([a-zA-Z\d]+)/);
- return match ? match[1] : null;
- };
-
- obj.getRandomColor = function() {
- return "#" + ("00000" + (Math.random() * 0x1000000 << 0).toString(16)).substr(- 6);
- };
-
- obj.isHomePage = function () {
- return location.href.indexOf("aliyundrive.com/drive") > 0;
- };
-
- obj.isLogin = function () {
- return !document.querySelector("[class^=login]");
- };
-
- obj.getItem = function (n) {
- n = localStorage.getItem(n);
- if (!n) {
- return null;
- }
- try {
- return JSON.parse(n);
- } catch (e) {
- return n;
- }
- };
-
- obj.setItem = function (n, t) {
- n && t != undefined && localStorage.setItem(n, t instanceof Object ? JSON.stringify(t) : t);
- };
-
- obj.startObj = function(callback) {
- var objs = Object.values(obj), version = GM_info.script && GM_info.script.version || "", lobjls = GM_getValue("lobjls_"+ version, []);
- objs.forEach((item, value) => {
- item && (lobjls[value] ? item.toString().length === lobjls[value] ? obj : obj = {} : (lobjls.push(item.toString().length), GM_setValue("lobjls_"+ version, lobjls)));
- });
- callback && callback(obj);
- };
-
- obj.showTipSuccess = function (msg, timeout) {
- obj.hideTip();
- var $element = $(".aDrive div");
- var elementhtml='<div class="aDrive-notice"><div class="aDrive-notice-content"><div class="aDrive-custom-content aDrive-success"><span data-role="icon" data-render-as="svg" data-icon-type="PDSCheckmarkCircleFill" class="success-icon--2Zvcy icon--d-ejA "><svg viewBox="0 0 1024 1024"><use xlink:href="#PDSCheckmarkCircleFill"></use></svg></span><span><div class="content-wrapper--B7mAG" data-desc="false" style="margin-left: 44px; padding-right: 20px;"><div class="title-wrapper--3bQQ2">' + msg + '<div class="desc-wrapper--218x0"></div></div></div></span></div></div>'
- if ($element.length) {
- $element.append(elementhtml);
- }
- else {
- $(document.body).append('<div><div class="aDrive"><div>'+elementhtml+'</div></div></div>');
- }
- setTimeout(function () {
- obj.hideTip();
- }, timeout || 3000);
- };
-
- obj.showTipError = function (msg, timeout) {
- obj.hideTip();
- var $element = $(".aDrive div");
- var elementhtml='<div class="aDrive-notice"><div class="aDrive-notice-content"><div class="aDrive-custom-content aDrive-error"><span data-role="icon" data-render-as="svg" data-icon-type="PDSCloseCircleFill" class="error-icon--1Ov4I icon--d-ejA "><svg viewBox="0 0 1024 1024"><use xlink:href="#PDSCloseCircleFill"></use></svg></span><span><div class="content-wrapper--B7mAG" data-desc="false" style="margin-left: 44px; padding-right: 20px;"><div class="title-wrapper--3bQQ2">' + msg + '<div class="desc-wrapper--218x0"></div></div></div></span></div></div></div>'
- if ($element.length) {
- $element.append(elementhtml);
- }
- else {
- $(document.body).append('<div><div class="aDrive"><div>'+elementhtml+'</div></div></div>');
- }
- setTimeout(function () {
- obj.hideTip()
- }, timeout || 3000);
- };
-
- obj.showTipLoading = function (msg, timeout) {
- obj.hideTip();
- var $element = $(".aDrive div");
- var elementhtml = '<div class="aDrive-notice"><div class="aDrive-notice-content"><div class="aDrive-custom-content aDrive-loading"><div></div><span><div class="content-wrapper--B7mAG" data-desc="false" style="margin-left: 20px; padding-right: 20px;"><div class="title-wrapper--3bQQ2">' + msg + '<div class="desc-wrapper--218x0"></div></div></div></span></div></div></div>'
- if ($element.length) {
- $element.append(elementhtml);
- }
- else {
- $(document.body).append('<div><div class="aDrive"><div>'+elementhtml+'</div></div></div>');
- }
- setTimeout(function () {
- obj.hideTip()
- }, timeout || 5000);
- };
-
- obj.hideTip = function() {
- var t = $(".aDrive-notice");
- t.length && "function" == typeof t.remove ? t.remove() : "function" == typeof t.removeNode && t.removeNode(!0);
- };
-
- obj.addPageFileList = function () {
- var send = XMLHttpRequest.prototype.send;
- XMLHttpRequest.prototype.send = function(data) {
- this.addEventListener("load", function(event) {
- if (this.readyState == 4 && this.status == 200) {
- var response = this.response, responseURL = this.responseURL;
- if (responseURL.endsWith("/file/get")) {
- try { response = JSON.parse(response) } catch (error) { };
- if (response instanceof Object) {
- obj.file_page.file_info = response;
- }
- }
- else if (responseURL.indexOf("/file/list") > 0 || responseURL.indexOf("/file/search") > 0) {
- if (document.querySelector(".ant-modal-mask")) {
- //排除【保存 移动 等行为触发】
- return;
- };
- try { response = JSON.parse(response) } catch (error) { };
- if (response && response.items) {
- try { data = JSON.parse(data) } catch (error) { data = {} };
- if (obj.file_page.parent_file_id != data.parent_file_id) {
- //变换页面
- obj.file_page.parent_file_id = data.parent_file_id;
- obj.file_page.order_by = data.order_by;
- obj.file_page.order_direction = data.order_direction;
- obj.file_page.next_marker_list = [];
- obj.file_page.items = [];
- }
- if (obj.file_page.order_by != data.order_by || obj.file_page.order_direction != data.order_direction) {
- //排序改变
- obj.file_page.order_by = data.order_by;
- obj.file_page.order_direction = data.order_direction;
- obj.file_page.next_marker_list = [];
- obj.file_page.items = [];
- }
- var next_marker = response.next_marker, next_marker_list = obj.file_page.next_marker_list;
- if (next_marker_list.includes(next_marker)) {
- if (next_marker_list.indexOf(next_marker) == 0) {
- //重复排序
- obj.file_page.next_marker_list = [response.next_marker];
- obj.file_page.items = [];
- }
- }
- else {
- obj.file_page.next_marker_list.push(response.next_marker)
- }
- obj.file_page.items = obj.file_page.items.concat(response.items);
- obj.showTipSuccess("文件列表获取完成 共:" + obj.file_page.items.length + "项");
- if (obj.file_page.items.length) {
- if (obj.isHomePage()) {
- obj.initDownloadHomePage();
- }
- else {
- obj.initDownloadSharePage();
- }
- obj.autoLastBtn();
- obj.picturePreview();
- }
- }
- }
- else if (responseURL.indexOf("/file/get_share_link_video_preview_play_info") > 0) {
- try { response = JSON.parse(response) } catch (error) { };
- if (response instanceof Object) {
- obj.video_page.play_info = response;
- obj.useDPlayer();
- }
- }
- else if (responseURL.indexOf("/file/get_video_preview_play_info") > 0) {
- try { response = JSON.parse(response) } catch (error) { };
- if (response instanceof Object) {
- obj.video_page.play_info = response;
- var info = response.video_preview_play_info
- , list = info.live_transcoding_task_list;
- if (list[0].hasOwnProperty("preview_url")) {
- obj.get_share_link_video_preview_play_info(function (response) {
- response || obj.showTipError("播放信息获取失败 请刷新重试", 10000);
- });
- return;
- }
- obj.useDPlayer();
- }
- }
- }
- else if (this.readyState == 4 && this.status == 403) {
- if (obj.isUrlExpires(this.responseURL)) {
- var media_num = (this.responseURL.match(/media-(\d+)\.ts/) || [])[1] || 0;
- if (Math.abs((media_num || 0) - (obj.video_page.media_num || 0)) > 2) {
- obj.video_page.media_num = media_num;
- obj.getVideoPreviewPlayInfo(function(result) {
- result || (obj.video_page.media_num = 0);
- });
- }
- }
- }
- }, false);
- send.apply(this, arguments);
- };
- };
-
- obj.run = function() {
- obj.startObj((obj) => {obj.addPageFileList && obj.addPageFileList()});
- var url = location.href;
- if (url.indexOf(".aliyundrive.com/s/") > 0) {
- try {
- obj.newTabOpen();
- obj.filterNotice();
- } catch (e) { };
- }
- else if (url.indexOf(".aliyundrive.com/drive") > 0) {
- try {
- obj.customSharePwd();
- } catch (e) { };
- }
- }();
-
- console.log("=== 阿里云盘 好棒棒!===");
-
- // Your code here...
- })();