// ==UserScript==
// @name bilibili视频下载
// @namespace https://github.com/injahow
// @version 2.6.3
// @description 支持Web、RPC、Blob、Aria等下载方式;支持下载flv、dash、mp4视频格式;支持下载港区番剧;支持下载字幕弹幕;支持换源播放等功能
// @author injahow
// @copyright 2021, injahow (https://github.com/injahow)
// @license MIT
// @source https://github.com/injahow/user.js
// @supportURL https://github.com/injahow/user.js/issues
// @match *://www.bilibili.com/video/av*
// @match *://www.bilibili.com/video/BV*
// @match *://www.bilibili.com/list/*
// @match *://www.bilibili.com/festival/*
// @match *://www.bilibili.com/bangumi/play/ep*
// @match *://www.bilibili.com/bangumi/play/ss*
// @match *://www.bilibili.com/cheese/play/ep*
// @match *://www.bilibili.com/cheese/play/ss*
// @require https://static.hdslb.com/js/jquery.min.js
// @icon https://static.hdslb.com/images/favicon.ico
// @compatible chrome
// @compatible firefox
// @grant none
// @downloadURL none
// ==/UserScript==
/* globals $ waitForKeyElements */
// @[ You can find all source codes in GitHub repo ]
!function() {
"use strict";
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0,
"value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor);
}
}
var user = new (function() {
function User() {
!function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
}(this, User), this.is_login = !1, this.vip_status = 0, this.mid = "", this.uname = "",
this.has_init = !1, this.lazyInit();
}
return function _createClass(Constructor, protoProps, staticProps) {
return protoProps && _defineProperties(Constructor.prototype, protoProps), staticProps && _defineProperties(Constructor, staticProps),
Object.defineProperty(Constructor, "prototype", {
writable: !1
}), Constructor;
}(User, [ {
key: "needReplace",
value: function needReplace() {
return !this.is_login || !this.vip_status && video.base().needVip();
}
}, {
key: "isVIP",
value: function isVIP() {
return 1 === this.vip_status;
}
}, {
key: "lazyInit",
value: function lazyInit(last_init) {
this.has_init || (window.__BILI_USER_INFO__ ? (this.is_login = window.__BILI_USER_INFO__.isLogin,
this.vip_status = window.__BILI_USER_INFO__.vipStatus, this.mid = window.__BILI_USER_INFO__.mid || "",
this.uname = window.__BILI_USER_INFO__.uname || "") : window.__BiliUser__ && (this.is_login = window.__BiliUser__.isLogin,
window.__BiliUser__.cache ? (this.vip_status = window.__BiliUser__.cache.data.vipStatus,
this.mid = window.__BiliUser__.cache.data.mid || "", this.uname = window.__BiliUser__.cache.data.uname || "") : (this.vip_status = 0,
this.mid = "", this.uname = "")), this.has_init = last_init);
}
} ]), User;
}());
function _slicedToArray(arr, i) {
return function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr;
}(arr) || function _iterableToArrayLimit(arr, i) {
var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
if (null == _i) return;
var _s, _e, _arr = [], _n = !0, _d = !1;
try {
for (_i = _i.call(arr); !(_n = (_s = _i.next()).done) && (_arr.push(_s.value), !i || _arr.length !== i); _n = !0) ;
} catch (err) {
_d = !0, _e = err;
} finally {
try {
_n || null == _i.return || _i.return();
} finally {
if (_d) throw _e;
}
}
return _arr;
}(arr, i) || function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if ("string" == typeof o) return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
"Object" === n && o.constructor && (n = o.constructor.name);
if ("Map" === n || "Set" === n) return Array.from(o);
if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}(arr, i) || function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}();
}
function _arrayLikeToArray(arr, len) {
(null == len || len > arr.length) && (len = arr.length);
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function cache_classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
}
function cache_defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0,
"value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor);
}
}
function cache_createClass(Constructor, protoProps, staticProps) {
return protoProps && cache_defineProperties(Constructor.prototype, protoProps),
staticProps && cache_defineProperties(Constructor, staticProps), Object.defineProperty(Constructor, "prototype", {
writable: !1
}), Constructor;
}
var CacheFactory = function() {
function CacheFactory() {
cache_classCallCheck(this, CacheFactory);
}
return cache_createClass(CacheFactory, null, [ {
key: "get",
value: function get() {
var name = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "default", cache = CacheFactory.map[name];
return cache instanceof Cache || (cache = new Cache, CacheFactory.map[name] = cache),
cache;
}
}, {
key: "setValue",
value: function setValue() {
var key = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", value = arguments.length > 1 ? arguments[1] : void 0, _key$split = key.split(".", 2), _key$split2 = _slicedToArray(_key$split, 2), cacheName = _key$split2[0], cacheKey = _key$split2[1];
if (cacheName && cacheKey) {
var cache = CacheFactory.get(cacheName);
cache instanceof Cache && cache.set(cacheKey, value);
}
}
}, {
key: "clear",
value: function clear(name) {
name ? CacheFactory.get(name).clear() : CacheFactory.map = {};
}
} ]), CacheFactory;
}();
!function _defineProperty(obj, key, value) {
return key in obj ? Object.defineProperty(obj, key, {
value: value,
enumerable: !0,
configurable: !0,
writable: !0
}) : obj[key] = value, obj;
}(CacheFactory, "map", {});
var Cache = function() {
function Cache() {
cache_classCallCheck(this, Cache), this.data = {};
}
return cache_createClass(Cache, [ {
key: "get",
value: function get() {
var key = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";
return this.data[key];
}
}, {
key: "set",
value: function set() {
var key = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", value = arguments.length > 1 ? arguments[1] : void 0;
this.data[key] = value;
}
}, {
key: "clear",
value: function clear() {
this.data = {};
}
} ]), Cache;
}(), cache = CacheFactory;
var scroll_scroll = {
show: function show_scroll() {
$("div#bp_config").is(":hidden") && $("div#message_box").is(":hidden") && $("body").css("overflow", "auto");
},
hide: function hide_scroll() {
$("body").css("overflow", "hidden");
}
}, message = '
';
function messageBox(ctx, type) {
"confirm" === type ? $('.message-box-btn button[name="cancel"]').show() : "alert" === type && $('.message-box-btn button[name="cancel"]').hide(),
ctx.html ? $("#message_box_context").html(''.concat(ctx.html, "
")) : $("#message_box_context").html('╰( ̄▽ ̄)╮
'),
scroll_scroll.hide(), $("#message_box").show(), $("#message_box").animate({
opacity: "1"
}, 300);
var option = {
affirm: function affirm() {
$("#message_box").hide(), $("#message_box").css("opacity", 0), scroll_scroll.show(),
ctx.callback && ctx.callback.affirm && ctx.callback.affirm();
},
cancel: function cancel() {
$("#message_box").hide(), $("#message_box").css("opacity", 0), scroll_scroll.show(),
ctx.callback && ctx.callback.cancel && ctx.callback.cancel();
}
};
return $('.message-box-btn button[name="affirm"]')[0].onclick = option.affirm, $('.message-box-btn button[name="cancel"]')[0].onclick = option.cancel,
option;
}
var id = 0;
function message_message(html, type) {
(function messageEnQueue(message, id) {
$(".message-bg").append(message), $("#message_".concat(id)).animate({
"margin-top": "+=70px",
opacity: "1"
}, 300);
})('').concat(type, ":
").concat(html, "
"), id),
function messageDeQueue(id) {
var time = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 3;
setTimeout((function() {
var e = "div#message_".concat(id);
$(e).animate({
"margin-top": "-=70px",
opacity: "0"
}, 300, (function() {
$(e).remove();
}));
}), 1e3 * time);
}(id, 3);
}
var message_Message_success = function success(html) {
return message_message(html, "success");
}, message_Message_warning = function warning(html) {
return message_message(html, "warning");
}, message_Message_error = function error(html) {
return message_message(html, "error");
}, message_Message_info = function info(html) {
return message_message(html, "info");
}, message_Message_miaow = function miaow() {
return message_message("(^・ω・^)~喵喵喵~", "info");
}, MessageBox_alert = function alert(html, affirm) {
return messageBox({
html: html,
callback: {
affirm: affirm
}
}, "alert");
}, MessageBox_confirm = function confirm(html, affirm, cancel) {
return messageBox({
html: html,
callback: {
affirm: affirm,
cancel: cancel
}
}, "confirm");
};
function ajax(obj) {
return new Promise((function(resolve, reject) {
obj.success = function(res) {
res && res.code && message_Message_warning("".concat(res.message || "CODE:".concat(res.code))),
resolve(res);
}, obj.error = function(err) {
message_Message_error("网络异常"), reject(err);
}, $.ajax(obj);
}));
}
function _ajax(obj) {
return new Promise((function(resolve, reject) {
var _success = obj.success;
obj.success = function(res) {
resolve(_success ? _success(res) : res);
};
var _error = obj.error;
obj.error = function(res) {
reject(_error ? _error(res) : res);
}, $.ajax(obj);
}));
}
function _typeof(obj) {
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
return typeof obj;
} : function(obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}, _typeof(obj);
}
function _toConsumableArray(arr) {
return function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return video_base_arrayLikeToArray(arr);
}(arr) || function _iterableToArray(iter) {
if ("undefined" != typeof Symbol && null != iter[Symbol.iterator] || null != iter["@@iterator"]) return Array.from(iter);
}(arr) || video_base_unsupportedIterableToArray(arr) || function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}();
}
function _createForOfIteratorHelper(o, allowArrayLike) {
var it = "undefined" != typeof Symbol && o[Symbol.iterator] || o["@@iterator"];
if (!it) {
if (Array.isArray(o) || (it = video_base_unsupportedIterableToArray(o)) || allowArrayLike && o && "number" == typeof o.length) {
it && (o = it);
var i = 0, F = function F() {};
return {
s: F,
n: function n() {
return i >= o.length ? {
done: !0
} : {
done: !1,
value: o[i++]
};
},
e: function e(_e) {
throw _e;
},
f: F
};
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var err, normalCompletion = !0, didErr = !1;
return {
s: function s() {
it = it.call(o);
},
n: function n() {
var step = it.next();
return normalCompletion = step.done, step;
},
e: function e(_e2) {
didErr = !0, err = _e2;
},
f: function f() {
try {
normalCompletion || null == it.return || it.return();
} finally {
if (didErr) throw err;
}
}
};
}
function video_base_unsupportedIterableToArray(o, minLen) {
if (o) {
if ("string" == typeof o) return video_base_arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
return "Object" === n && o.constructor && (n = o.constructor.name), "Map" === n || "Set" === n ? Array.from(o) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? video_base_arrayLikeToArray(o, minLen) : void 0;
}
}
function video_base_arrayLikeToArray(arr, len) {
(null == len || len > arr.length) && (len = arr.length);
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _inherits(subClass, superClass) {
if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function");
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: !0,
configurable: !0
}
}), Object.defineProperty(subClass, "prototype", {
writable: !1
}), superClass && _setPrototypeOf(subClass, superClass);
}
function _setPrototypeOf(o, p) {
return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
return o.__proto__ = p, o;
}, _setPrototypeOf(o, p);
}
function _createSuper(Derived) {
var hasNativeReflectConstruct = function _isNativeReflectConstruct() {
if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
if (Reflect.construct.sham) return !1;
if ("function" == typeof Proxy) return !0;
try {
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}))),
!0;
} catch (e) {
return !1;
}
}();
return function _createSuperInternal() {
var result, Super = _getPrototypeOf(Derived);
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else result = Super.apply(this, arguments);
return _possibleConstructorReturn(this, result);
};
}
function _possibleConstructorReturn(self, call) {
if (call && ("object" === _typeof(call) || "function" == typeof call)) return call;
if (void 0 !== call) throw new TypeError("Derived constructors may only return object or undefined");
return _assertThisInitialized(self);
}
function _assertThisInitialized(self) {
if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return self;
}
function set(target, property, value, receiver) {
return set = "undefined" != typeof Reflect && Reflect.set ? Reflect.set : function set(target, property, value, receiver) {
var desc, base = function _superPropBase(object, property) {
for (;!Object.prototype.hasOwnProperty.call(object, property) && null !== (object = _getPrototypeOf(object)); ) ;
return object;
}(target, property);
if (base) {
if ((desc = Object.getOwnPropertyDescriptor(base, property)).set) return desc.set.call(receiver, value),
!0;
if (!desc.writable) return !1;
}
if (desc = Object.getOwnPropertyDescriptor(receiver, property)) {
if (!desc.writable) return !1;
desc.value = value, Object.defineProperty(receiver, property, desc);
} else video_base_defineProperty(receiver, property, value);
return !0;
}, set(target, property, value, receiver);
}
function _getPrototypeOf(o) {
return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
}, _getPrototypeOf(o);
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
enumerableOnly && (symbols = symbols.filter((function(sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
}))), keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = null != arguments[i] ? arguments[i] : {};
i % 2 ? ownKeys(Object(source), !0).forEach((function(key) {
video_base_defineProperty(target, key, source[key]);
})) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach((function(key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
}));
}
return target;
}
function video_base_defineProperty(obj, key, value) {
return key in obj ? Object.defineProperty(obj, key, {
value: value,
enumerable: !0,
configurable: !0,
writable: !0
}) : obj[key] = value, obj;
}
function video_base_classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
}
function video_base_defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0,
"value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor);
}
}
function video_base_createClass(Constructor, protoProps, staticProps) {
return protoProps && video_base_defineProperties(Constructor.prototype, protoProps),
staticProps && video_base_defineProperties(Constructor, staticProps), Object.defineProperty(Constructor, "prototype", {
writable: !1
}), Constructor;
}
var clazzMap = {}, VideoBase = function() {
function VideoBase(video_type, main_title, state) {
video_base_classCallCheck(this, VideoBase), this.constructor.name in clazzMap || (clazzMap[this.constructor.name] = this.constructor),
this.video_type = video_type || "video", this.main_title = main_title || "", this.state = state,
this.page = state && parseInt(state.p) || 1;
}
return video_base_createClass(VideoBase, [ {
key: "getVideo",
value: function getVideo(p) {
var _this = this, prop = {
p: p,
id: 0,
title: "",
filename: "",
aid: 0,
bvid: "",
cid: 0,
epid: 0,
needVip: !1,
vipNeedPay: !1,
isLimited: !1
}, clazz = clazzMap[this.constructor.name];
return prop = _objectSpread(_objectSpread({}, prop), Object.fromEntries(Object.getOwnPropertyNames(VideoBase.prototype).filter((function(key) {
return key in prop;
})).map((function(key) {
return [ key, clazz.prototype[key].call(_this, p) ];
}))));
}
}, {
key: "type",
value: function type() {
return this.video_type;
}
}, {
key: "getName",
value: function getName() {
return this.main_title || "";
}
}, {
key: "getFilename",
value: function getFilename() {
return this.getName().replace(/[\/\\:*?"<>|]+/g, "");
}
}, {
key: "p",
value: function p(_p) {
return (_p = parseInt(_p) || 0) > 0 && _p <= this.total() ? _p : this.page;
}
}, {
key: "id",
value: function id(p) {
return this.p(p) - 1;
}
}, {
key: "total",
value: function total() {
return 0;
}
}, {
key: "title",
value: function title() {
return "";
}
}, {
key: "filename",
value: function filename() {
return "";
}
}, {
key: "aid",
value: function aid() {
return 0;
}
}, {
key: "bvid",
value: function bvid() {
return "";
}
}, {
key: "cid",
value: function cid() {
return 0;
}
}, {
key: "epid",
value: function epid() {
return "";
}
}, {
key: "needVip",
value: function needVip() {
return !1;
}
}, {
key: "vipNeedPay",
value: function vipNeedPay() {
return !1;
}
}, {
key: "isLimited",
value: function isLimited() {
return !1;
}
} ]), VideoBase;
}(), Video = function(_VideoBase) {
_inherits(Video, _VideoBase);
var _super = _createSuper(Video);
function Video(main_title, state) {
var _state$sectionsInfo, _thisSuper, _this2;
video_base_classCallCheck(this, Video), (_this2 = _super.call(this, "video", main_title, state)).video_list = [];
var sections = state.sections || (null === (_state$sectionsInfo = state.sectionsInfo) || void 0 === _state$sectionsInfo ? void 0 : _state$sectionsInfo.sections) || [];
if (!sections.length) return _possibleConstructorReturn(_this2);
var _step, new_page = 0, i = 1, _iterator = _createForOfIteratorHelper(sections);
try {
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
var _step2, _iterator2 = _createForOfIteratorHelper(_step.value.episodes || []);
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
var ep = _step2.value;
_this2.video_list.push(ep), state.videoData.bvid == ep.bvid && (new_page = i), i++;
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
return new_page < 1 ? _this2.video_list = [] : function _set(target, property, value, receiver, isStrict) {
if (!set(target, property, value, receiver || target) && isStrict) throw new Error("failed to set property");
return value;
}((_thisSuper = _assertThisInitialized(_this2), _getPrototypeOf(Video.prototype)), "page", new_page, _thisSuper, !0),
_this2;
}
return video_base_createClass(Video, [ {
key: "total",
value: function total() {
return this.video_list.length > 0 ? this.video_list.length : this.state.videoData.pages.length;
}
}, {
key: "title",
value: function title(p) {
var id = this.id(p);
return this.video_list.length > 0 ? this.video_list[id].title : this.state.videoData.pages[id].part;
}
}, {
key: "filename",
value: function filename(p) {
if (this.video_list.length > 0) return this.title(p).replace(/[\/\\:*?"<>|]+/g, "");
var id = this.id(p);
return (this.main_title + (this.total() > 1 ? " P".concat(id + 1, " ").concat(this.state.videoData.pages[id].part || "") : "")).replace(/[\/\\:*?"<>|]+/g, "");
}
}, {
key: "aid",
value: function aid(p) {
return this.video_list.length > 0 ? this.video_list[this.id(p)].aid : this.state.videoData.aid;
}
}, {
key: "bvid",
value: function bvid(p) {
return this.video_list.length > 0 ? this.video_list[this.id(p)].bvid : this.state.videoData.bvid;
}
}, {
key: "cid",
value: function cid(p) {
return this.video_list.length > 0 ? this.video_list[this.id(p)].cid : this.state.videoData.pages[this.id(p)].cid;
}
} ]), Video;
}(VideoBase), VideoList = function(_VideoBase2) {
_inherits(VideoList, _VideoBase2);
var _super2 = _createSuper(VideoList);
function VideoList(main_title, state) {
var _this3;
video_base_classCallCheck(this, VideoList), (_this3 = _super2.call(this, "video", main_title, state)).video = new Video(state.videoData.title, state);
var _step3, video_list = [], _iterator3 = _createForOfIteratorHelper(state.resourceList || []);
try {
for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) for (var video = _step3.value, i = 0, length = video.pages && video.pages.length || 0; i < length; ) {
var _video = Object.assign({}, video);
_video.title = video.title + (length > 1 ? " P".concat(i + 1, " ").concat(video.pages[i].title) : ""),
_video.cid = video.pages[i].cid || 0, video_list.push(_video), i++;
}
} catch (err) {
_iterator3.e(err);
} finally {
_iterator3.f();
}
return _this3.video_list = video_list, _this3;
}
return video_base_createClass(VideoList, [ {
key: "total",
value: function total() {
return this.video_list.length;
}
}, {
key: "title",
value: function title(p) {
return p ? this.video_list[this.id(p)].title : this.video.title();
}
}, {
key: "filename",
value: function filename(p) {
if (!p) return this.video.filename();
var id = this.id(p);
return (this.main_title + (this.total() > 1 ? " P".concat(id + 1, " ").concat(this.video_list[id].title) : "")).replace(/[\/\\:*?"<>|]+/g, "");
}
}, {
key: "aid",
value: function aid(p) {
return p ? this.video_list[this.id(p)].aid : this.video.aid();
}
}, {
key: "bvid",
value: function bvid(p) {
return p ? this.video_list[this.id(p)].bvid : this.video.bvid();
}
}, {
key: "cid",
value: function cid(p) {
return p ? this.video_list[this.id(p)].cid : this.video.cid();
}
} ]), VideoList;
}(VideoBase), VideoFestival = function(_VideoBase3) {
_inherits(VideoFestival, _VideoBase3);
var _super3 = _createSuper(VideoFestival);
function VideoFestival(main_title, state) {
var _this4;
return video_base_classCallCheck(this, VideoFestival), (_this4 = _super3.call(this, "video", main_title, state)).video_info = state.videoInfo,
_this4.video_list = state.sectionEpisodes || [], _this4;
}
return video_base_createClass(VideoFestival, [ {
key: "total",
value: function total() {
return this.video_list.length;
}
}, {
key: "title",
value: function title(p) {
return p ? this.video_list[this.id(p)].title : this.video_info.title;
}
}, {
key: "filename",
value: function filename(p) {
var title;
if (p) {
var id = this.id(p);
title = this.main_title + (this.total() > 1 ? " P".concat(id + 1, " ").concat(this.video_list[id].title) : "");
} else title = this.video_info.title;
return title.replace(/[\/\\:*?"<>|]+/g, "");
}
}, {
key: "aid",
value: function aid(p) {
return p ? this.video_list[this.id(p)].id : this.video_info.aid;
}
}, {
key: "bvid",
value: function bvid(p) {
return p ? this.video_list[this.id(p)].bvid : this.video_info.bvid;
}
}, {
key: "cid",
value: function cid(p) {
return p ? this.video_list[this.id(p)].cid : this.video_info.cid;
}
} ]), VideoFestival;
}(VideoBase), Bangumi = function(_VideoBase4) {
_inherits(Bangumi, _VideoBase4);
var _super4 = _createSuper(Bangumi);
function Bangumi(main_title, state) {
var _this5;
return video_base_classCallCheck(this, Bangumi), (_this5 = _super4.call(this, "bangumi", main_title, state)).epInfo = state.epInfo,
_this5.epList = state.epList, _this5.epId = state.epId, _this5.epMap = state.epMap,
_this5.isEpMap = state.isEpMap, _this5;
}
return video_base_createClass(Bangumi, [ {
key: "total",
value: function total() {
return this.epList.length;
}
}, {
key: "getEpisode",
value: function getEpisode(p) {
return p ? this.epList[this.id(p)] : this.epMap[this.epId] || this.epInfo || {};
}
}, {
key: "getEpPadLen",
value: function getEpPadLen() {
for (var n = Object.keys(this.isEpMap).length, len = n < 10 ? 1 : 0; n >= 1; ) n /= 10,
len++;
return len;
}
}, {
key: "title",
value: function title(p) {
var ep = this.getEpisode(p), title = "";
if (this.isEpMap[ep.id]) {
var epNum = Object.keys(this.isEpMap).length > 1 ? "EP".concat(("" + this.p(p)).padStart(this.getEpPadLen(), "0")) : "";
title = "".concat(this.main_title, " ").concat(epNum, " ").concat(ep.long_title);
} else ep.share_copy ? (title = ep.share_copy.split("》", 2), title = title.length > 1 ? "".concat(this.main_title, " ").concat(title[1]) : "".concat(this.main_title, " ").concat(ep.title, " ").concat(ep.long_title)) : title = "".concat(ep.title, " ").concat(ep.long_title);
return title.replaceAll("undefined", "").replaceAll(" ", " ").trim();
}
}, {
key: "filename",
value: function filename(p) {
return this.title(p).replace(/[\/\\:*?"<>|]+/g, "");
}
}, {
key: "aid",
value: function aid(p) {
return this.getEpisode(p).aid;
}
}, {
key: "bvid",
value: function bvid(p) {
return this.getEpisode(p).bvid;
}
}, {
key: "cid",
value: function cid(p) {
return this.getEpisode(p).cid;
}
}, {
key: "epid",
value: function epid(p) {
return this.getEpisode(p).id;
}
}, {
key: "needVip",
value: function needVip(p) {
return "会员" === this.getEpisode(p).badge;
}
}, {
key: "vipNeedPay",
value: function vipNeedPay(p) {
return "付费" === this.getEpisode(p).badge;
}
}, {
key: "isLimited",
value: function isLimited() {
return !1;
}
} ], [ {
key: "build",
value: function build() {
var bangumiCache = cache.get("Bangumi");
if (location.href == bangumiCache.get("href") && bangumiCache.get("build")) return bangumiCache.get("build");
bangumiCache.set("build", null);
var main_title, sid, epid, epMap = {}, pathname = location.pathname.toLowerCase();
pathname.startsWith("/bangumi/play/ss") ? (sid = pathname.match(/ss(\d+)/), sid = parseInt(sid[1])) : pathname.startsWith("/bangumi/play/ep") && (epid = pathname.match(/ep(\d+)/),
epid = parseInt(epid[1]));
try {
console.log("location sid:", sid, "epid:", epid);
var page_data = JSON.parse($(".toolbar").attr("mr-show"));
main_title = page_data.msg.title, sid = sid || page_data.msg.season_id, epid = epid || page_data.msg.ep_id,
console.log("mr-show get sid:", sid, "epid:", epid);
} catch (_unused) {
console.warn("mr-show get err");
}
if (sid != bangumiCache.get("sid") && (bangumiCache.set("sid", sid), bangumiCache.set("epid", ""),
bangumiCache.set("hasData", !1)), sid && !epid && _ajax({
type: "GET",
url: "https://api.bilibili.com/pgc/player/web/v2/playurl?support_multi_audio=true&qn=80&fnver=0&fnval=4048&fourk=1&gaia_source=&from_client=BROWSER&is_main_page=true&need_fragment=true&season_id=".concat(sid, "&isGaiaAvoided=false&voice_balance=1&drm_tech_type=2"),
dataType: "json",
xhrFields: {
withCredentials: !0
}
}).then((function(res) {
res && !res.code && bangumiCache.set("epid", res.result.view_info.report.ep_id);
})), bangumiCache.get("lock")) throw "bangumiCache request waiting !";
if (bangumiCache.set("lock", !0), epid = epid || "", _ajax({
type: "GET",
url: "https://api.bilibili.com/pgc/view/web/ep/list?season_id=".concat(sid = sid || "", "&ep_id=").concat(epid),
dataType: "json",
cache: !0
}).then((function(res) {
res && !res.code && (bangumiCache.set("hasData", !0), bangumiCache.set("episodes", res.result.episodes || []),
bangumiCache.set("section", res.result.section || []));
})).finally((function() {
bangumiCache.set("lock", !1);
})), bangumiCache.set("href", location.href), !epid && !bangumiCache.get("epid")) throw "epid not found !";
if (!bangumiCache.get("hasData")) throw "bangumiCache no data !";
var _step4, episodes = bangumiCache.get("episodes") || [], isEpMap = {}, _iterator4 = _createForOfIteratorHelper(episodes = [].concat(_toConsumableArray(episodes.filter((function(a) {
return 1 != a.badge_type;
}))), _toConsumableArray(episodes.filter((function(a) {
return 1 == a.badge_type;
})))));
try {
for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) {
var ep = _step4.value;
[ 0, 2, 3 ].includes(ep.badge_type) && (isEpMap[ep.id] = !0);
}
} catch (err) {
_iterator4.e(err);
} finally {
_iterator4.f();
}
var _step5, _iterator5 = _createForOfIteratorHelper(bangumiCache.get("section") || []);
try {
for (_iterator5.s(); !(_step5 = _iterator5.n()).done; ) {
var item = _step5.value;
if (item.episodes) {
var _step6, _iterator6 = _createForOfIteratorHelper(item.episodes);
try {
for (_iterator6.s(); !(_step6 = _iterator6.n()).done; ) {
var _ep = _step6.value;
episodes.push(_ep);
}
} catch (err) {
_iterator6.e(err);
} finally {
_iterator6.f();
}
}
}
} catch (err) {
_iterator5.e(err);
} finally {
_iterator5.f();
}
epid = epid || bangumiCache.get("epid");
for (var _id = 0, i = 0; i < episodes.length; i++) epMap[episodes[i].id] = episodes[i],
episodes[i].id == epid && (_id = i);
var bangumi = new Bangumi(main_title, {
p: _id + 1,
epId: epid,
epList: episodes,
isEpMap: isEpMap,
epMap: epMap,
epInfo: epMap[epid]
});
return bangumiCache.set("build", bangumi), bangumi;
}
} ]), Bangumi;
}(VideoBase), Cheese = function(_VideoBase5) {
_inherits(Cheese, _VideoBase5);
var _super5 = _createSuper(Cheese);
function Cheese(main_title, state) {
var _this6;
return video_base_classCallCheck(this, Cheese), (_this6 = _super5.call(this, "cheese", main_title, state)).episodes = state.episodes,
_this6;
}
return video_base_createClass(Cheese, [ {
key: "total",
value: function total() {
return this.episodes.length;
}
}, {
key: "title",
value: function title(p) {
return this.episodes[this.id(p)].title;
}
}, {
key: "filename",
value: function filename(p) {
return "".concat(this.main_title, " EP").concat(this.p(p), " ").concat(this.title(p)).replace(/[\/\\:*?"<>|]+/g, "");
}
}, {
key: "aid",
value: function aid(p) {
return this.episodes[this.id(p)].aid;
}
}, {
key: "cid",
value: function cid(p) {
return this.episodes[this.id(p)].cid;
}
}, {
key: "epid",
value: function epid(p) {
return this.episodes[this.id(p)].id;
}
} ], [ {
key: "build",
value: function build() {
var epid, cheeseCache = cache.get("Cheese"), sid = (location.href.match(/\/cheese\/play\/ss(\d+)/i) || [ "", "" ])[1];
if (sid || (epid = (location.href.match(/\/cheese\/play\/ep(\d+)/i) || [ "", "" ])[1]),
epid || (epid = parseInt($(".bpx-state-active").eq(0).attr("data-episodeid"))),
sid && sid != cheeseCache.get("sid") && (cheeseCache.set("sid", sid), cheeseCache.set("episodes", null)),
!cheeseCache.get("episodes")) {
if (cheeseCache.get("lock")) throw "cheese request waiting !";
if (cheeseCache.set("lock", !0), !sid && !epid) return void console.log("get_season error");
_ajax({
url: "https://api.bilibili.com/pugv/view/web/season?season_id=".concat(sid || "", "&ep_id=").concat(epid || ""),
xhrFields: {
withCredentials: !0
},
dataType: "json"
}).then((function(res) {
res.code ? Message.warning("获取剧集信息失败") : cheeseCache.set("episodes", res.data.episodes);
})).finally((function() {
cheeseCache.set("lock", !1);
}));
}
var episodes = cheeseCache.get("episodes");
if (!episodes) throw "cheese has not data !";
for (var _id = -1, i = 0; i < episodes.length; i++) {
if (!epid) {
epid = episodes[i].id, _id = 0;
break;
}
if (episodes[i].id == epid) {
_id = i;
break;
}
}
if (_id < 0) throw cheeseCache.set("episodes", null), "episodes need reload !";
return new Cheese(($("div.archive-title-box").text() || "unknown").replace(/[\/\\:*?"<>|]+/g, ""), {
p: _id + 1,
episodes: episodes
});
}
} ]), Cheese;
}(VideoBase);
function type() {
var routerMap = {
video: "/video/",
list: "/list/",
festival: "/festival/",
bangumi: "/bangumi/play/",
cheese: "/cheese/play/"
};
for (var key in routerMap) if (location.pathname.startsWith(routerMap[key])) return key;
return "?";
}
var q_map = {
"8K 超高清": 127,
"4K 超清": 120,
"1080P 60帧": 116,
"1080P 高码率": 112,
"1080P 高清": 80,
"720P 高清": 64,
"480P 清晰": 32,
"360P 流畅": 16,
"自动": 32
};
var video = {
type: type,
base: function base() {
var _type = type(), vb = new VideoBase;
if ("video" === _type) {
var state = window.__INITIAL_STATE__, main_title = state.videoData && state.videoData.title;
vb = new Video(main_title, state);
} else if ("list" === _type) {
var _state = window.__INITIAL_STATE__, _main_title = _state.mediaListInfo && _state.mediaListInfo.upper.name + "-" + _state.mediaListInfo.title;
vb = new VideoList(_main_title, _state);
} else if ("festival" === _type) {
var _state2 = window.__INITIAL_STATE__, _main_title2 = _state2.title;
vb = new VideoFestival(_main_title2, _state2);
} else "bangumi" === _type ? vb = Bangumi.build() : "cheese" === _type && (vb = Cheese.build());
return vb;
},
get_quality: function get_quality() {
var _q = 0, _q_max = 0, _type = type();
if ("cheese" === _type) {
var q = $("div.edu-player-quality-item.active span").text(), q_max = $($("div.edu-player-quality-item span").get(0)).text();
_q = q in q_map ? q_map[q] : 0, _q_max = q_max in q_map ? q_map[q_max] : 0;
} else {
var keys = Object.keys(videoQualityMap), _q2 = parseInt(("video" === _type ? $("li.bpx-player-ctrl-quality-menu-item.bpx-state-active") : $("li.squirtle-select-item.active")).attr("data-value")), _q_max2 = parseInt($(("video" === _type ? $("li.bpx-player-ctrl-quality-menu-item") : $("li.squirtle-select-item")).get(0)).attr("data-value"));
_q = keys.indexOf("".concat(_q2)) > -1 ? _q2 : 0, _q_max = keys.indexOf("".concat(_q_max2)) > -1 ? _q_max2 : 0;
}
return !_q && (_q = 80), !_q_max && (_q_max = 80), user.isVIP() || (_q = _q > 80 ? 80 : _q),
{
q: _q,
q_max: _q_max
};
},
get_quality_support: function get_quality_support() {
var list, quality_list = [], _type = type();
if ("cheese" === _type) (list = $("div.edu-player-quality-item span")).each((function() {
var k = $(this).text();
q_map[k] && quality_list.push(q_map[k]);
})); else {
var keys = Object.keys(videoQualityMap);
(list = [ "video", "list" ].includes(_type) ? $("li.bpx-player-ctrl-quality-menu-item") : $("li.squirtle-select-item")) && list.length && list.each((function() {
var q = "".concat(parseInt($(this).attr("data-value")));
keys.indexOf(q) > -1 && quality_list.push(q);
}));
}
return quality_list.length ? quality_list : [ "80", "64", "32", "16" ];
}
};
function store_defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0,
"value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor);
}
}
var Store = function() {
function Store() {
!function store_classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
}(this, Store), this.prefix = "bp_";
}
return function store_createClass(Constructor, protoProps, staticProps) {
return protoProps && store_defineProperties(Constructor.prototype, protoProps),
staticProps && store_defineProperties(Constructor, staticProps), Object.defineProperty(Constructor, "prototype", {
writable: !1
}), Constructor;
}(Store, [ {
key: "get",
value: function get() {
var key = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";
return localStorage.getItem(this.prefix + key) || "";
}
}, {
key: "set",
value: function set() {
var key = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", value = arguments.length > 1 ? arguments[1] : void 0;
localStorage.setItem(this.prefix + key, value);
}
} ]), Store;
}(), store = new Store;
function api_typeof(obj) {
return api_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
return typeof obj;
} : function(obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}, api_typeof(obj);
}
function api_createForOfIteratorHelper(o, allowArrayLike) {
var it = "undefined" != typeof Symbol && o[Symbol.iterator] || o["@@iterator"];
if (!it) {
if (Array.isArray(o) || (it = api_unsupportedIterableToArray(o)) || allowArrayLike && o && "number" == typeof o.length) {
it && (o = it);
var i = 0, F = function F() {};
return {
s: F,
n: function n() {
return i >= o.length ? {
done: !0
} : {
done: !1,
value: o[i++]
};
},
e: function e(_e) {
throw _e;
},
f: F
};
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var err, normalCompletion = !0, didErr = !1;
return {
s: function s() {
it = it.call(o);
},
n: function n() {
var step = it.next();
return normalCompletion = step.done, step;
},
e: function e(_e2) {
didErr = !0, err = _e2;
},
f: function f() {
try {
normalCompletion || null == it.return || it.return();
} finally {
if (didErr) throw err;
}
}
};
}
function api_toConsumableArray(arr) {
return function api_arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return api_arrayLikeToArray(arr);
}(arr) || function api_iterableToArray(iter) {
if ("undefined" != typeof Symbol && null != iter[Symbol.iterator] || null != iter["@@iterator"]) return Array.from(iter);
}(arr) || api_unsupportedIterableToArray(arr) || function api_nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}();
}
function api_unsupportedIterableToArray(o, minLen) {
if (o) {
if ("string" == typeof o) return api_arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
return "Object" === n && o.constructor && (n = o.constructor.name), "Map" === n || "Set" === n ? Array.from(o) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? api_arrayLikeToArray(o, minLen) : void 0;
}
}
function api_arrayLikeToArray(arr, len) {
(null == len || len > arr.length) && (len = arr.length);
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _regeneratorRuntime() {
_regeneratorRuntime = function _regeneratorRuntime() {
return exports;
};
var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
function define(obj, key, value) {
return Object.defineProperty(obj, key, {
value: value,
enumerable: !0,
configurable: !0,
writable: !0
}), obj[key];
}
try {
define({}, "");
} catch (err) {
define = function define(obj, key, value) {
return obj[key] = value;
};
}
function wrap(innerFn, outerFn, self, tryLocsList) {
var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []);
return generator._invoke = function(innerFn, self, context) {
var state = "suspendedStart";
return function(method, arg) {
if ("executing" === state) throw new Error("Generator is already running");
if ("completed" === state) {
if ("throw" === method) throw arg;
return doneResult();
}
for (context.method = method, context.arg = arg; ;) {
var delegate = context.delegate;
if (delegate) {
var delegateResult = maybeInvokeDelegate(delegate, context);
if (delegateResult) {
if (delegateResult === ContinueSentinel) continue;
return delegateResult;
}
}
if ("next" === context.method) context.sent = context._sent = context.arg; else if ("throw" === context.method) {
if ("suspendedStart" === state) throw state = "completed", context.arg;
context.dispatchException(context.arg);
} else "return" === context.method && context.abrupt("return", context.arg);
state = "executing";
var record = tryCatch(innerFn, self, context);
if ("normal" === record.type) {
if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
return {
value: record.arg,
done: context.done
};
}
"throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
}
};
}(innerFn, self, context), generator;
}
function tryCatch(fn, obj, arg) {
try {
return {
type: "normal",
arg: fn.call(obj, arg)
};
} catch (err) {
return {
type: "throw",
arg: err
};
}
}
exports.wrap = wrap;
var ContinueSentinel = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
var IteratorPrototype = {};
define(IteratorPrototype, iteratorSymbol, (function() {
return this;
}));
var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([])));
NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
function defineIteratorMethods(prototype) {
[ "next", "throw", "return" ].forEach((function(method) {
define(prototype, method, (function(arg) {
return this._invoke(method, arg);
}));
}));
}
function AsyncIterator(generator, PromiseImpl) {
function invoke(method, arg, resolve, reject) {
var record = tryCatch(generator[method], generator, arg);
if ("throw" !== record.type) {
var result = record.arg, value = result.value;
return value && "object" == api_typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then((function(value) {
invoke("next", value, resolve, reject);
}), (function(err) {
invoke("throw", err, resolve, reject);
})) : PromiseImpl.resolve(value).then((function(unwrapped) {
result.value = unwrapped, resolve(result);
}), (function(error) {
return invoke("throw", error, resolve, reject);
}));
}
reject(record.arg);
}
var previousPromise;
this._invoke = function(method, arg) {
function callInvokeWithMethodAndArg() {
return new PromiseImpl((function(resolve, reject) {
invoke(method, arg, resolve, reject);
}));
}
return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
};
}
function maybeInvokeDelegate(delegate, context) {
var method = delegate.iterator[context.method];
if (void 0 === method) {
if (context.delegate = null, "throw" === context.method) {
if (delegate.iterator.return && (context.method = "return", context.arg = void 0,
maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel;
context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method");
}
return ContinueSentinel;
}
var record = tryCatch(method, delegate.iterator, context.arg);
if ("throw" === record.type) return context.method = "throw", context.arg = record.arg,
context.delegate = null, ContinueSentinel;
var info = record.arg;
return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc,
"return" !== context.method && (context.method = "next", context.arg = void 0),
context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"),
context.delegate = null, ContinueSentinel);
}
function pushTryEntry(locs) {
var entry = {
tryLoc: locs[0]
};
1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2],
entry.afterLoc = locs[3]), this.tryEntries.push(entry);
}
function resetTryEntry(entry) {
var record = entry.completion || {};
record.type = "normal", delete record.arg, entry.completion = record;
}
function Context(tryLocsList) {
this.tryEntries = [ {
tryLoc: "root"
} ], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);
}
function values(iterable) {
if (iterable) {
var iteratorMethod = iterable[iteratorSymbol];
if (iteratorMethod) return iteratorMethod.call(iterable);
if ("function" == typeof iterable.next) return iterable;
if (!isNaN(iterable.length)) {
var i = -1, next = function next() {
for (;++i < iterable.length; ) if (hasOwn.call(iterable, i)) return next.value = iterable[i],
next.done = !1, next;
return next.value = void 0, next.done = !0, next;
};
return next.next = next;
}
}
return {
next: doneResult
};
}
function doneResult() {
return {
value: void 0,
done: !0
};
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype),
define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"),
exports.isGeneratorFunction = function(genFun) {
var ctor = "function" == typeof genFun && genFun.constructor;
return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
}, exports.mark = function(genFun) {
return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype,
define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp),
genFun;
}, exports.awrap = function(arg) {
return {
__await: arg
};
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, (function() {
return this;
})), exports.AsyncIterator = AsyncIterator, exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {
void 0 === PromiseImpl && (PromiseImpl = Promise);
var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then((function(result) {
return result.done ? result.value : iter.next();
}));
}, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, (function() {
return this;
})), define(Gp, "toString", (function() {
return "[object Generator]";
})), exports.keys = function(object) {
var keys = [];
for (var key in object) keys.push(key);
return keys.reverse(), function next() {
for (;keys.length; ) {
var key = keys.pop();
if (key in object) return next.value = key, next.done = !1, next;
}
return next.done = !0, next;
};
}, exports.values = values, Context.prototype = {
constructor: Context,
reset: function reset(skipTempReset) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = void 0, this.done = !1,
this.delegate = null, this.method = "next", this.arg = void 0, this.tryEntries.forEach(resetTryEntry),
!skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = void 0);
},
stop: function stop() {
this.done = !0;
var rootRecord = this.tryEntries[0].completion;
if ("throw" === rootRecord.type) throw rootRecord.arg;
return this.rval;
},
dispatchException: function dispatchException(exception) {
if (this.done) throw exception;
var context = this;
function handle(loc, caught) {
return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next",
context.arg = void 0), !!caught;
}
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i], record = entry.completion;
if ("root" === entry.tryLoc) return handle("end");
if (entry.tryLoc <= this.prev) {
var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc");
if (hasCatch && hasFinally) {
if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
} else if (hasCatch) {
if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
} else {
if (!hasFinally) throw new Error("try statement without catch or finally");
if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
}
}
}
},
abrupt: function abrupt(type, arg) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
var finallyEntry = entry;
break;
}
}
finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
var record = finallyEntry ? finallyEntry.completion : {};
return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next",
this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
},
complete: function complete(record, afterLoc) {
if ("throw" === record.type) throw record.arg;
return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg,
this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc),
ContinueSentinel;
},
finish: function finish(finallyLoc) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc),
resetTryEntry(entry), ContinueSentinel;
}
},
catch: function _catch(tryLoc) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.tryLoc === tryLoc) {
var record = entry.completion;
if ("throw" === record.type) {
var thrown = record.arg;
resetTryEntry(entry);
}
return thrown;
}
}
throw new Error("illegal catch attempt");
},
delegateYield: function delegateYield(iterable, resultName, nextLoc) {
return this.delegate = {
iterator: values(iterable),
resultName: resultName,
nextLoc: nextLoc
}, "next" === this.method && (this.arg = void 0), ContinueSentinel;
}
}, exports;
}
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg), value = info.value;
} catch (error) {
return void reject(error);
}
info.done ? resolve(value) : Promise.resolve(value).then(_next, _throw);
}
function get_url_base(page, quality, video_format, success, error, request_type) {
var _success, _error;
_success = "function" == typeof success ? function _success(e) {
success(e);
} : function _success(res) {
return console.log(res);
}, _error = "function" == typeof error ? function _error(e) {
message_Message_error("请求失败"), error(e);
} : function _error(err) {
return console.error(err);
};
var vb = video.base(), _ref = [ vb.aid(page), vb.bvid(page), vb.cid(page), vb.epid(page), quality || video.get_quality().q, vb.type() ], aid = _ref[0], bvid = _ref[1], cid = _ref[2], epid = _ref[3], q = _ref[4], type = _ref[5], format = video_format || config_config.format;
"auto" === request_type && user.needReplace() && (request_type = "remote");
var base_api, url_replace_cdn = function url_replace_cdn(url) {
if ("0" === config_config.host_key) return url;
var url_tmp = url.split("/"), mapping = hostMap[config_config.host_key];
return "string" == typeof mapping && mapping.length ? mapping.at(0).match(/[a-z]/) && (url_tmp[2] = mapping) : "function" == typeof mapping && (url_tmp[2] = mapping()),
url = url_tmp.join("/");
}, ajax_obj = {
type: "GET",
dataType: "json"
};
if ("auto" === request_type || "local" === request_type) {
var fnver, fnval;
"cheese" === type ? (base_api = "https://api.bilibili.com/pugv/player/web/playurl",
fnver = "mp4" === format ? 1 : 0, fnval = 80) : (base_api = "video" === type ? "https://api.bilibili.com/x/player/playurl" : "https://api.bilibili.com/pgc/player/web/playurl",
fnver = 0, fnval = {
dash: 4048,
flv: 4049,
mp4: 0
}[format] || 0), base_api += "?avid=".concat(aid, "&bvid=").concat(bvid, "&cid=").concat(cid, "&qn=").concat(q, "&fnver=").concat(fnver, "&fnval=").concat(fnval, "&fourk=1&ep_id=").concat(epid, "&type=").concat(format, "&otype=json"),
base_api += "mp4" === format ? "&platform=html5&high_quality=1" : "", ajax_obj.xhrFields = {
withCredentials: !0
};
} else {
base_api = config_config.base_api, base_api += "?av=".concat(aid, "&bv=").concat(bvid, "&cid=").concat(cid, "&ep=").concat(epid, "&q=").concat(q, "&type=").concat(type, "&format=").concat(format, "&otype=json"),
page && (base_api += "&s");
var _ref2 = [ store.get("auth_id"), store.get("auth_sec") ], auth_id = _ref2[0], auth_sec = _ref2[1];
auth_id && auth_sec && (base_api += "&auth_id=".concat(auth_id, "&auth_sec=").concat(auth_sec));
}
var resultConvertor = function resultConvertor(data, _success) {
var checkTask = function checkTask(key, backup_key) {
return data[backup_key] ? _ajax({
type: "GET",
url: data[key],
cache: !1,
timeout: 1e3,
success: function success(res) {
return key;
},
error: function error(res) {
return "timeout" == res.statusText ? key : backup_key;
}
}) : Promise.resolve(key);
};
new Promise((function(resolve, reject) {
var promiseList = [], valueList = [];
data.url ? promiseList.push(checkTask("url", "backup_url")) : (promiseList.push(checkTask("video", "backup_video")),
promiseList.push(checkTask("audio", "backup_audio")));
var timer = setTimeout((function() {
resolve(valueList);
}), 1500), index = 0;
promiseList.forEach(function() {
var _ref3 = function _asyncToGenerator(fn) {
return function() {
var self = this, args = arguments;
return new Promise((function(resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(void 0);
}));
};
}(_regeneratorRuntime().mark((function _callee(promise) {
var result;
return _regeneratorRuntime().wrap((function _callee$(_context) {
for (;;) switch (_context.prev = _context.next) {
case 0:
return _context.prev = 0, _context.next = 3, promise;
case 3:
result = _context.sent, _context.next = 9;
break;
case 6:
_context.prev = 6, _context.t0 = _context.catch(0), result = _context.t0;
case 9:
console.log("use " + result), valueList[index++] = result, index == promiseList.length && (clearInterval(timer),
resolve(valueList));
case 12:
case "end":
return _context.stop();
}
}), _callee, null, [ [ 0, 6 ] ]);
})));
return function(_x) {
return _ref3.apply(this, arguments);
};
}());
})).then((function(resList) {
if (console.log("use data key: ", resList), resList) {
var _step, _iterator = api_createForOfIteratorHelper(resList = api_toConsumableArray(resList));
try {
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
var key = _step.value;
data[key] && ([ "url", "backup_url" ].includes(key) ? data.url = data[key] : [ "video", "backup_video" ].includes(key) ? data.video = data[key] : [ "audio", "backup_audio" ].includes(key) && (data.audio = data[key]));
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
})).finally((function() {
_success(data);
}));
};
ajax_obj.url = base_api, ajax(ajax_obj).then((function(res) {
var data;
if (res.code || (data = res.result || res.data), !data) return "auto" === request_type ? void get_url_base(page, quality, video_format, success, error, "remote") : (res.url && (res.url = url_replace_cdn(res.url)),
res.video && (res.video = url_replace_cdn(res.video)), res.audio && (res.audio = url_replace_cdn(res.audio)),
void resultConvertor(res, _success));
if (data.dash) {
for (var result = {
code: 0,
quality: data.quality,
accept_quality: data.accept_quality,
video: "",
audio: ""
}, videos = data.dash.video, i = 0; i < videos.length; i++) {
var _video = videos[i];
if (_video.id <= q) {
result.video = url_replace_cdn(_video.base_url), result.audio = url_replace_cdn(data.dash.audio[0].base_url),
result.backup_video = _video.backup_url && url_replace_cdn(_video.backup_url[0]),
result.backup_audio = data.dash.audio[0].backup_url && url_replace_cdn(data.dash.audio[0].backup_url[0]);
break;
}
}
resultConvertor(result, _success);
} else resultConvertor({
code: 0,
quality: data.quality,
accept_quality: data.accept_quality,
url: url_replace_cdn(data.durl[0].url),
backup_url: data.durl[0].backup_url && url_replace_cdn(data.durl[0].backup_url[0])
}, _success);
})).catch((function(err) {
return _error(err);
}));
}
function _get_subtitle(p, callback) {
var to_blob_url = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2], vb = video.base(), _ref4 = [ vb.aid(p), vb.cid(p), vb.epid(p) ], aid = _ref4[0], cid = _ref4[1], epid = _ref4[2];
ajax({
url: "https://api.bilibili.com/x/player/v2?aid=".concat(aid, "&cid=").concat(cid, "&ep_id=").concat(epid),
dataType: "json"
}).then((function(res) {
!res.code && res.data.subtitle.subtitles[0] ? ajax({
url: "".concat(res.data.subtitle.subtitles[0].subtitle_url),
dataType: "json"
}).then((function(res) {
var _step2, webvtt = "WEBVTT\n\n", _iterator2 = api_createForOfIteratorHelper(res.body || [ {
from: 0,
to: 0,
content: ""
} ]);
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
var data = _step2.value, a = new Date(1e3 * (parseInt(data.from) - 28800)).toTimeString().split(" ")[0] + "." + (data.from.toString().split(".")[1] || "000").padEnd(3, "0"), b = new Date(1e3 * (parseInt(data.to) - 28800)).toTimeString().split(" ")[0] + "." + (data.to.toString().split(".")[1] || "000").padEnd(3, "0");
webvtt += "".concat(a, " --\x3e ").concat(b, "\n").concat(data.content.trim(), "\n\n");
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
callback(to_blob_url ? URL.createObjectURL(new Blob([ webvtt ], {
type: "text/vtt"
})) : webvtt);
})).catch(callback) : callback();
})).catch(callback);
}
var api = {
get_url: function get_url(success, error) {
var request_type = config_config.request_type, format = config_config.format;
get_url_base(0, parseInt(config_config.video_quality), format, success, error, request_type);
},
get_urls: function get_urls(page, quality, format, success, error) {
get_url_base(page, quality, format, success, error, config_config.request_type);
},
get_subtitle_url: function get_subtitle_url(p, callback) {
_get_subtitle(p, callback, !0);
},
get_subtitle_data: function get_subtitle_data(p, callback) {
_get_subtitle(p, callback, !1);
}
};
function runtime_lib_typeof(obj) {
return runtime_lib_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
return typeof obj;
} : function(obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}, runtime_lib_typeof(obj);
}
function runtime_lib_createForOfIteratorHelper(o, allowArrayLike) {
var it = "undefined" != typeof Symbol && o[Symbol.iterator] || o["@@iterator"];
if (!it) {
if (Array.isArray(o) || (it = function runtime_lib_unsupportedIterableToArray(o, minLen) {
if (!o) return;
if ("string" == typeof o) return runtime_lib_arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
"Object" === n && o.constructor && (n = o.constructor.name);
if ("Map" === n || "Set" === n) return Array.from(o);
if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return runtime_lib_arrayLikeToArray(o, minLen);
}(o)) || allowArrayLike && o && "number" == typeof o.length) {
it && (o = it);
var i = 0, F = function F() {};
return {
s: F,
n: function n() {
return i >= o.length ? {
done: !0
} : {
done: !1,
value: o[i++]
};
},
e: function e(_e) {
throw _e;
},
f: F
};
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var err, normalCompletion = !0, didErr = !1;
return {
s: function s() {
it = it.call(o);
},
n: function n() {
var step = it.next();
return normalCompletion = step.done, step;
},
e: function e(_e2) {
didErr = !0, err = _e2;
},
f: function f() {
try {
normalCompletion || null == it.return || it.return();
} finally {
if (didErr) throw err;
}
}
};
}
function runtime_lib_arrayLikeToArray(arr, len) {
(null == len || len > arr.length) && (len = arr.length);
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function runtime_lib_regeneratorRuntime() {
runtime_lib_regeneratorRuntime = function _regeneratorRuntime() {
return exports;
};
var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
function define(obj, key, value) {
return Object.defineProperty(obj, key, {
value: value,
enumerable: !0,
configurable: !0,
writable: !0
}), obj[key];
}
try {
define({}, "");
} catch (err) {
define = function define(obj, key, value) {
return obj[key] = value;
};
}
function wrap(innerFn, outerFn, self, tryLocsList) {
var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []);
return generator._invoke = function(innerFn, self, context) {
var state = "suspendedStart";
return function(method, arg) {
if ("executing" === state) throw new Error("Generator is already running");
if ("completed" === state) {
if ("throw" === method) throw arg;
return doneResult();
}
for (context.method = method, context.arg = arg; ;) {
var delegate = context.delegate;
if (delegate) {
var delegateResult = maybeInvokeDelegate(delegate, context);
if (delegateResult) {
if (delegateResult === ContinueSentinel) continue;
return delegateResult;
}
}
if ("next" === context.method) context.sent = context._sent = context.arg; else if ("throw" === context.method) {
if ("suspendedStart" === state) throw state = "completed", context.arg;
context.dispatchException(context.arg);
} else "return" === context.method && context.abrupt("return", context.arg);
state = "executing";
var record = tryCatch(innerFn, self, context);
if ("normal" === record.type) {
if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
return {
value: record.arg,
done: context.done
};
}
"throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
}
};
}(innerFn, self, context), generator;
}
function tryCatch(fn, obj, arg) {
try {
return {
type: "normal",
arg: fn.call(obj, arg)
};
} catch (err) {
return {
type: "throw",
arg: err
};
}
}
exports.wrap = wrap;
var ContinueSentinel = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
var IteratorPrototype = {};
define(IteratorPrototype, iteratorSymbol, (function() {
return this;
}));
var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([])));
NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
function defineIteratorMethods(prototype) {
[ "next", "throw", "return" ].forEach((function(method) {
define(prototype, method, (function(arg) {
return this._invoke(method, arg);
}));
}));
}
function AsyncIterator(generator, PromiseImpl) {
function invoke(method, arg, resolve, reject) {
var record = tryCatch(generator[method], generator, arg);
if ("throw" !== record.type) {
var result = record.arg, value = result.value;
return value && "object" == runtime_lib_typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then((function(value) {
invoke("next", value, resolve, reject);
}), (function(err) {
invoke("throw", err, resolve, reject);
})) : PromiseImpl.resolve(value).then((function(unwrapped) {
result.value = unwrapped, resolve(result);
}), (function(error) {
return invoke("throw", error, resolve, reject);
}));
}
reject(record.arg);
}
var previousPromise;
this._invoke = function(method, arg) {
function callInvokeWithMethodAndArg() {
return new PromiseImpl((function(resolve, reject) {
invoke(method, arg, resolve, reject);
}));
}
return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
};
}
function maybeInvokeDelegate(delegate, context) {
var method = delegate.iterator[context.method];
if (void 0 === method) {
if (context.delegate = null, "throw" === context.method) {
if (delegate.iterator.return && (context.method = "return", context.arg = void 0,
maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel;
context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method");
}
return ContinueSentinel;
}
var record = tryCatch(method, delegate.iterator, context.arg);
if ("throw" === record.type) return context.method = "throw", context.arg = record.arg,
context.delegate = null, ContinueSentinel;
var info = record.arg;
return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc,
"return" !== context.method && (context.method = "next", context.arg = void 0),
context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"),
context.delegate = null, ContinueSentinel);
}
function pushTryEntry(locs) {
var entry = {
tryLoc: locs[0]
};
1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2],
entry.afterLoc = locs[3]), this.tryEntries.push(entry);
}
function resetTryEntry(entry) {
var record = entry.completion || {};
record.type = "normal", delete record.arg, entry.completion = record;
}
function Context(tryLocsList) {
this.tryEntries = [ {
tryLoc: "root"
} ], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);
}
function values(iterable) {
if (iterable) {
var iteratorMethod = iterable[iteratorSymbol];
if (iteratorMethod) return iteratorMethod.call(iterable);
if ("function" == typeof iterable.next) return iterable;
if (!isNaN(iterable.length)) {
var i = -1, next = function next() {
for (;++i < iterable.length; ) if (hasOwn.call(iterable, i)) return next.value = iterable[i],
next.done = !1, next;
return next.value = void 0, next.done = !0, next;
};
return next.next = next;
}
}
return {
next: doneResult
};
}
function doneResult() {
return {
value: void 0,
done: !0
};
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype),
define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"),
exports.isGeneratorFunction = function(genFun) {
var ctor = "function" == typeof genFun && genFun.constructor;
return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
}, exports.mark = function(genFun) {
return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype,
define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp),
genFun;
}, exports.awrap = function(arg) {
return {
__await: arg
};
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, (function() {
return this;
})), exports.AsyncIterator = AsyncIterator, exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {
void 0 === PromiseImpl && (PromiseImpl = Promise);
var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then((function(result) {
return result.done ? result.value : iter.next();
}));
}, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, (function() {
return this;
})), define(Gp, "toString", (function() {
return "[object Generator]";
})), exports.keys = function(object) {
var keys = [];
for (var key in object) keys.push(key);
return keys.reverse(), function next() {
for (;keys.length; ) {
var key = keys.pop();
if (key in object) return next.value = key, next.done = !1, next;
}
return next.done = !0, next;
};
}, exports.values = values, Context.prototype = {
constructor: Context,
reset: function reset(skipTempReset) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = void 0, this.done = !1,
this.delegate = null, this.method = "next", this.arg = void 0, this.tryEntries.forEach(resetTryEntry),
!skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = void 0);
},
stop: function stop() {
this.done = !0;
var rootRecord = this.tryEntries[0].completion;
if ("throw" === rootRecord.type) throw rootRecord.arg;
return this.rval;
},
dispatchException: function dispatchException(exception) {
if (this.done) throw exception;
var context = this;
function handle(loc, caught) {
return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next",
context.arg = void 0), !!caught;
}
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i], record = entry.completion;
if ("root" === entry.tryLoc) return handle("end");
if (entry.tryLoc <= this.prev) {
var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc");
if (hasCatch && hasFinally) {
if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
} else if (hasCatch) {
if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
} else {
if (!hasFinally) throw new Error("try statement without catch or finally");
if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
}
}
}
},
abrupt: function abrupt(type, arg) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
var finallyEntry = entry;
break;
}
}
finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
var record = finallyEntry ? finallyEntry.completion : {};
return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next",
this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
},
complete: function complete(record, afterLoc) {
if ("throw" === record.type) throw record.arg;
return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg,
this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc),
ContinueSentinel;
},
finish: function finish(finallyLoc) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc),
resetTryEntry(entry), ContinueSentinel;
}
},
catch: function _catch(tryLoc) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.tryLoc === tryLoc) {
var record = entry.completion;
if ("throw" === record.type) {
var thrown = record.arg;
resetTryEntry(entry);
}
return thrown;
}
}
throw new Error("illegal catch attempt");
},
delegateYield: function delegateYield(iterable, resultName, nextLoc) {
return this.delegate = {
iterator: values(iterable),
resultName: resultName,
nextLoc: nextLoc
}, "next" === this.method && (this.arg = void 0), ContinueSentinel;
}
}, exports;
}
function runtime_lib_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg), value = info.value;
} catch (error) {
return void reject(error);
}
info.done ? resolve(value) : Promise.resolve(value).then(_next, _throw);
}
function runtime_lib_asyncToGenerator(fn) {
return function() {
var self = this, args = arguments;
return new Promise((function(resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
runtime_lib_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
runtime_lib_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(void 0);
}));
};
}
function runtime_lib_defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0,
"value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor);
}
}
var RuntimeLib = function() {
function RuntimeLib(config) {
!function runtime_lib_classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
}(this, RuntimeLib), this.config = config, this.moduleAsync, this.anyResolved = !1;
}
return function runtime_lib_createClass(Constructor, protoProps, staticProps) {
return protoProps && runtime_lib_defineProperties(Constructor.prototype, protoProps),
staticProps && runtime_lib_defineProperties(Constructor, staticProps), Object.defineProperty(Constructor, "prototype", {
writable: !1
}), Constructor;
}(RuntimeLib, [ {
key: "getModulePromise",
value: function getModulePromise() {
var _this = this, _this$config = this.config, urls = _this$config.urls, errs = (_this$config.getModule,
[]);
return new Promise((function(resolve, reject) {
var i = 0;
urls.forEach((function(url) {
setTimeout(runtime_lib_asyncToGenerator(runtime_lib_regeneratorRuntime().mark((function _callee() {
var code;
return runtime_lib_regeneratorRuntime().wrap((function _callee$(_context) {
for (;;) switch (_context.prev = _context.next) {
case 0:
if (_context.prev = 0, !_this.anyResolved) {
_context.next = 3;
break;
}
return _context.abrupt("return");
case 3:
return console.log("[Runtime Library] Start download from ".concat(url)), _context.next = 6,
_ajax({
url: url,
type: "GET",
dataType: "text",
cache: !0
});
case 6:
if (code = _context.sent, !_this.anyResolved) {
_context.next = 9;
break;
}
return _context.abrupt("return");
case 9:
console.log("[Runtime Library] Downloaded from ".concat(url, " , length = ").concat(code.length)),
_this.anyResolved = !0, resolve(code), _context.next = 20;
break;
case 14:
if (_context.prev = 14, _context.t0 = _context.catch(0), !_this.anyResolved) {
_context.next = 18;
break;
}
return _context.abrupt("return");
case 18:
errs.push({
url: url,
err: _context.t0
}), 0 == --i && (console.error(errs), reject(errs));
case 20:
case "end":
return _context.stop();
}
}), _callee, null, [ [ 0, 14 ] ]);
}))), 1e3 * i++);
}));
}));
}
} ]), RuntimeLib;
}(), cdn_map = {
cloudflare: function cloudflare(name, ver, filename) {
return "https://cdnjs.cloudflare.com/ajax/libs/".concat(name, "/").concat(ver, "/").concat(filename);
},
bootcdn: function bootcdn(name, ver, filename) {
return "https://cdn.bootcdn.net/ajax/libs/".concat(name, "/").concat(ver, "/").concat(filename);
},
jsdelivr: function jsdelivr(name, ver, filename) {
return "https://cdn.jsdelivr.net/npm/".concat(name, "@").concat(ver, "/").concat(filename);
},
staticfile: function staticfile(name, ver, filename) {
return "https://cdn.staticfile.org/".concat(name, "/").concat(ver, "/").concat(filename);
}
}, urls = function urls(_ref2) {
var name = _ref2.name, ver = _ref2.ver, filename = _ref2.filename, cdn_keys = _ref2.cdn_keys;
return (cdn_keys = cdn_keys ? cdn_keys.filter((function(key) {
return key in cdn_map;
})) : Object.keys(cdn_map)).map((function(k) {
return cdn_map[k](name, ver, filename);
}));
}, runtime_div = document.createElement("div");
runtime_div.id = "bp_runtime_div", runtime_div.style.display = "none", document.getElementById(runtime_div.id) || document.body.appendChild(runtime_div);
var JSZip, DPlayer, QRCode, md5, count = 0, scripts = [], getModules = [], initIframe = function initIframe(name, ver, filename, getModule) {
count++, new RuntimeLib({
urls: urls({
name: name,
ver: ver,
filename: filename
}),
getModule: getModule
}).getModulePromise().then((function(script) {
scripts.push(script), getModules.push(getModule);
})).catch((function(err) {
console.error("[Runtime Library] Failed to load ".concat(name, " from CDN"), err);
})).finally((function() {
0 == --count && (!function iframeInvoke(scripts, getModules) {
console.log("[Runtime Library] iframe invoke scripts, size =", scripts.length);
var scriptTags = scripts.map((function(code) {
return "