From c452450cde301f260a6f735e97c0197365b62906 Mon Sep 17 00:00:00 2001 From: the1812 Date: Mon, 27 Jan 2020 10:54:29 +0800 Subject: [PATCH] Add bnj download support --- bilibili-evolved.offline.user.js | 9 +++-- bilibili-evolved.preview-offline.user.js | 9 +++-- bilibili-evolved.preview.user.js | 7 ++-- bilibili-evolved.user.js | 7 ++-- min/batch-download.min.js | 2 +- min/bundle.json | 7 ++-- min/bundle.zip | Bin 1635836 -> 1622250 bytes min/download-video.min.css | 2 +- min/download-video.min.js | 2 +- src/video/download-video/batch-download.ts | 34 +++++++++++++++---- src/video/download-video/download-video.scss | 1 + src/video/download-video/download-video.ts | 5 +-- 12 files changed, 52 insertions(+), 33 deletions(-) diff --git a/bilibili-evolved.offline.user.js b/bilibili-evolved.offline.user.js index 427aa7535..951ac20d8 100644 --- a/bilibili-evolved.offline.user.js +++ b/bilibili-evolved.offline.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name Bilibili Evolved (Offline) -// @version 558.80 +// @version 559.80 // @description Bilibili Evolved 的离线版, 所有功能都已内置于脚本中. // @author Grant Howard, Coulomb-G // @copyright 2019, Grant Howard (https://github.com/the1812) & Coulomb-G (https://github.com/Coulomb-G) @@ -1131,7 +1131,7 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/auto-draw.min.js"] = (()=>{return(t,n)=>{(async()=>{if(!/^https:\/\/live\.bilibili\.com\/[\d]+/.test(document.URL)){return}const t=await SpinQuery.condition(()=>dq(".chat-popups-section"),t=>t.querySelector("chat-draw-area")===null);if(!t){console.warn("[自动领奖] 未能找到弹窗容器");return}Observer.childListSubtree(t,()=>{let t;console.log("draw button = ",dq(".chat-popups-section .draw>span:nth-child(3)"));t=dq(".chat-popups-section .draw>span:nth-child(3)");if(t===null){const t=dq(".chat-popups-section .function-bar>span:nth-child(3)");if(t!==null){const n=Observer.attributes(t,()=>{if(t.style.display!=="none"){n.forEach(t=>t.stop());t.click()}})}}if(t!==null){t.click()}})})()}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/auto-play.min.js"] = (()=>{return(e,d)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}SpinQuery.condition(()=>document.querySelector(".bilibili-player-video video"),e=>e&&e.paused===true,e=>e.play())}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/bangumi-timeline.vue.min.js"] = (()=>{return(e,i)=>{const n=`
时间表
{{t.date}}
{{t.dayOfWeekText}}
`;i.applyStyleFromText(`.simple-home .bangumi-timeline-container{width:100%}.simple-home .bangumi-timeline-container .bangumi-timeline{display:flex;align-items:flex-start;overflow:auto;scrollbar-width:none!important;scroll-behavior:smooth;scroll-snap-type:x mandatory;--column-count:1;--column-width:250px;--column-gap:24px;width:calc(var(--column-count) * (var(--column-width) + var(--column-gap)) - .5 * var(--column-gap))}.simple-home .bangumi-timeline-container .bangumi-timeline::-webkit-scrollbar{height:0!important;width:0!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day{scroll-snap-align:start;width:var(--column-width);max-height:calc(var(--total-height) - 32px);overflow:auto;flex:0 0 auto;padding-bottom:16px;scroll-behavior:smooth;scrollbar-width:none!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day::-webkit-scrollbar{height:0!important;width:0!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container{display:grid;grid-template:"icon date" 1fr "icon dow" 1fr/auto 1fr;grid-column-gap:8px;column-gap:8px;height:60px;padding-bottom:12px;cursor:pointer;position:sticky;top:0;z-index:1;background-color:#f4f4f4}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container{background-color:#181818}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon{grid-area:icon;justify-self:center;align-self:center;background-image:url(//s1.hdslb.com/bfs/static/bangumi-timeline/asserts/icons.png);background-size:247px 663px;width:38px;height:36px;background-position-x:-146px;filter:brightness(.5)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-1{background-position-y:-36px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-2{background-position-y:-108px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-3{background-position-y:-180px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-4{background-position-y:-252px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-5{background-position-y:-324px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-6{background-position-y:-396px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-7{background-position-y:-468px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .date{grid-area:date;align-self:end;opacity:.75}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .day-of-week{grid-area:dow;align-self:start;font-weight:700;font-size:15px;opacity:.75}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .icon{width:50px;height:48px;background-position-x:-56px;filter:none}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .date{font-size:14px;opacity:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .day-of-week{font-size:18px;opacity:1}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon{filter:brightness(.8)}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .icon{filter:invert(1)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container{margin-top:18px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container>:not(:last-child){margin-bottom:8px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time{display:flex;align-items:center;font-weight:700}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent{color:var(--theme-color)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent~.bangumi-item{box-shadow:0 4px 8px 0 #0001,inset 0 0 0 2px var(--theme-color)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent~.bangumi-item .cover-container{margin:2px;border-radius:6px 0 0 6px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time .be-icon{margin-right:6px;font-size:18px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item{display:grid;height:72px;grid-template:"cover title" auto "cover ep" auto/72px 1fr;background-color:#fff;color:inherit;box-shadow:0 4px 8px 0 #0001;border-radius:8px;grid-row-gap:8px;row-gap:8px}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item{background-color:#282828}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .cover-container{grid-area:cover;overflow:hidden;border-radius:8px 0 0 8px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .cover-container img{width:100%;height:100%}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item.delay{opacity:.4}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item.delay:hover{opacity:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item:hover{color:var(--theme-color)!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item:hover .cover-container img{transform:scale(1.05)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .title{grid-area:title;align-self:end;font-size:13px;font-weight:700;margin:0 12px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;max-height:2.6em;word-break:break-all;line-height:1.3;overflow:hidden}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .ep-title{grid-area:ep;align-self:start;margin:0 12px;display:flex;align-items:center}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .ep-title .be-icon{color:var(--theme-color);margin-right:4px;font-size:18px;line-height:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day:not(:last-child){margin-right:var(--column-gap)}@media screen and (min-width:1000px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:2}}@media screen and (min-width:1300px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:3}}@media screen and (min-width:1550px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:4}}`,"bangumi-timeline-style");const t={global:"https://bangumi.bilibili.com/web_api/timeline_global",chinese:"https://bangumi.bilibili.com/web_api/timeline_cn"};return{export:Object.assign({template:n},{components:{Icon:()=>i.importAsync("icon.vue"),DpiImg:()=>i.importAsync("dpi-img.vue")},props:{type:{type:String,default:"global",required:false}},data(){return{timeline:[],recentTime:""}},computed:{apiUrl(){return t[this.type]||t.global}},watch:{type(){this.updateTimeline()}},methods:{calculateRecentTime(){const e=this.timeline.find(e=>e.isToday);const i=Number(new Date);const n=Object.entries(e.bangumis).map(([e,i])=>{return{time:e,timestamp:i[0].timestamp,bangumis:i}});const t=n.filter(e=>e.timestampe.time)}},moveTimeline(e){const i=e.currentTarget;const n=i.parentElement;const t=n.parentElement;const a=getComputedStyle(t);const m=parseInt(a.getPropertyValue("--column-width").match(/(.+)px/)[1])+parseInt(a.getPropertyValue("--column-gap").match(/(.+)px/)[1]);const o=n.offsetLeft-t.scrollLeft;if(o=m*2){t.scrollLeft+=m}console.log(e,i,n,t);console.log(m,m*2,n.offsetLeft,t.scrollLeft,o)},async updateTimeline(){try{const e=await Ajax.getJsonWithCredentials(this.apiUrl);if(e.code!==0){throw new Error(e.message)}const i=e.result.map(e=>{return{date:e.date,dayOfWeek:e.day_of_week,dayOfWeekText:"周"+[,"一","二","三","四","五","六","日"][e.day_of_week],isToday:Boolean(e.is_today),bangumis:_.groupBy(e.seasons.map(e=>{return{coverUrl:e.cover.replace("http:","https:"),squareCoverUrl:e.square_cover.replace("http:","https:"),time:e.pub_time,timestamp:e.pub_ts*1e3,url:e.url,follow:Boolean(e.follow),epTitle:e.pub_index||e.delay_reason+" "+e.delay_index,title:e.title,delay:Boolean(e.delay),published:Boolean(e.is_published)}}),e=>e.time)}});this.timeline=i;this.calculateRecentTime();setInterval(()=>{if(document.hasFocus()){this.calculateRecentTime()}},60*1e3);await this.$nextTick();const n=this.$el;const t=this.$el.querySelector(".bangumi-timeline");const a=getComputedStyle(t);const m=parseInt(a.getPropertyValue("--column-width").match(/(.+)px/)[1]);const o=parseInt(a.getPropertyValue("--column-gap").match(/(.+)px/)[1]);t.scrollLeft=5*(m+o)}catch(e){logError(e);this.$emit("error")}finally{this.$emit("load")}}},async mounted(){await this.updateTimeline()}})}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/batch-download.min.js"] = (()=>{return(t,e)=>{const{formatTitle:i}=e.import("title");const s=12;const n=[".mp4",".m4a"];class r{constructor(t){this.config=t;this.itemList=[]}formatTitle(e){const s=t.batchFilenameFormat;const n=i(s,true,e);return escapeFilename(n," ")}async getRawItems(t){return JSON.parse(await this.collectData(t))}extension(t,e){const i=[".flv",".mp4"].find(e=>t.includes(e));if(i){return i}else if(t.includes(".m4s")){return n[e]}else{return".flv"}}async collectAria2(i,n){const r=await this.getRawItems(i);if(n){const i=t.aria2RpcOption;const{sendRpc:n}=await e.importAsync("aria2-rpc");for(const t of r){const e=t.fragments.map((e,n)=>{let r="";if(t.fragments.length>1&&!e.url.includes(".m4s")){r=" - "+(n+1)}const a=[];if(i.secretKey!==""){a.push(`token:${i.secretKey}`)}a.push([e.url]);a.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${t.title}${r}${this.extension(e.url,n)}`,split:s,dir:i.baseDir+i.dir||undefined,"max-download-limit":i.maxDownloadLimit||undefined});const o=encodeURIComponent(`${t.title}${r}`);return{params:a,id:o}});await n(e,true)}}else{return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${r.map(t=>{return t.fragments.map((e,i)=>{let n="";if(t.fragments.length>1&&!e.url.includes(".m4s")){n=` - ${i+1}`}return`\n${e.url}\n referer=${t.referer}\n user-agent=${UserAgent}\n out=${t.title}${n}${this.extension(e.url,i)}\n split=${s}\n`.trim()}).join("\n")}).join("\n")}\n`.trim()}}}class a extends r{static async test(){if(!document.URL.includes("/www.bilibili.com/video/av")){return false}return await SpinQuery.select("#multi_page")!==null}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=`https://api.bilibili.com/x/web-interface/view?aid=${unsafeWindow.aid}`;const e=await Ajax.getJson(t);if(e.code!==0){Toast.error(`获取视频选集列表失败, message=${e.message}`,"批量下载");return[]}const i=e.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return[]}this.itemList=i.map(t=>{return{title:`P${t.page} ${t.part}`,titleParameters:{n:t.page,ep:t.part},cid:t.cid,aid:unsafeWindow.aid}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const n=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/x/player/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const r=await Ajax.getJsonWithCredentials(n);const a=r.data||r.result||r;if(a.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${a.quality})`)}let o;if(a.durl){o=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const r=await i(n,typeof t==="string"?parseInt(t):t);o=s(r)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}class o extends r{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=document.querySelector("meta[property='og:url']");if(t===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return[]}const e=t.getAttribute("content").match(/play\/ss(\d+)/)[1];if(e===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return[]}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${e}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return[]}this.itemList=i.result.main_section.episodes.map((t,e)=>{const i=t.long_title?t.title:(e+1).toString();const s=t.long_title?t.long_title:t.title;return{aid:t.aid,cid:t.cid,title:`${i} - ${s}`,titleParameters:{n:i,ep:s}}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const n=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/pgc/player/web/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const r=await Ajax.getJsonWithCredentials(n);const a=r.data||r.result||r;if(a.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${a.quality})`)}let o;if(a.durl){o=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const r=await i(n,typeof t==="string"?parseInt(t):t);o=s(r)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}const c=[o,a];let l;class u{constructor(t){this.config=Object.assign({itemFilter:()=>true},t)}static async test(){for(const t of c){if(await t.test()===true){l=t;return true}}return false}getExtractor(){if(l===null){logError("[批量下载] 未找到合适的解析模块.");throw new Error(`[Batch Download] module not found.`)}const t=new l(this.config);return t}async getItemList(){const t=this.getExtractor();return await t.getItemList()}async getRawItems(t){const e=this.getExtractor();return await e.getRawItems(t.quality)}async collectData(t,e){const i=this.getExtractor();const s=await i.collectData(t.quality);e.dismiss();return s}async collectAria2(t,e,i=false){const s=this.getExtractor();const n=await s.collectAria2(t.quality,i);e.dismiss();return n}}return{export:{BatchExtractor:u}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/batch-download.min.js"] = (()=>{return(t,e)=>{const{formatTitle:i}=e.import("title");const s=12;const a=[".mp4",".m4a"];class n{constructor(t){this.config=t;this.itemList=[]}formatTitle(e){const s=t.batchFilenameFormat;const a=i(s,true,e);return escapeFilename(a," ")}async getRawItems(t){return JSON.parse(await this.collectData(t))}extension(t,e){const i=[".flv",".mp4"].find(e=>t.includes(e));if(i){return i}else if(t.includes(".m4s")){return a[e]}else{return".flv"}}async collectAria2(i,a){const n=await this.getRawItems(i);if(a){const i=t.aria2RpcOption;const{sendRpc:a}=await e.importAsync("aria2-rpc");for(const t of n){const e=t.fragments.map((e,a)=>{let n="";if(t.fragments.length>1&&!e.url.includes(".m4s")){n=" - "+(a+1)}const r=[];if(i.secretKey!==""){r.push(`token:${i.secretKey}`)}r.push([e.url]);r.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${t.title}${n}${this.extension(e.url,a)}`,split:s,dir:i.baseDir+i.dir||undefined,"max-download-limit":i.maxDownloadLimit||undefined});const o=encodeURIComponent(`${t.title}${n}`);return{params:r,id:o}});await a(e,true)}}else{return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${n.map(t=>{return t.fragments.map((e,i)=>{let a="";if(t.fragments.length>1&&!e.url.includes(".m4s")){a=` - ${i+1}`}return`\n${e.url}\n referer=${t.referer}\n user-agent=${UserAgent}\n out=${t.title}${a}${this.extension(e.url,i)}\n split=${s}\n`.trim()}).join("\n")}).join("\n")}\n`.trim()}}}class r extends n{constructor(){super(...arguments);this.aid=unsafeWindow.aid}static async test(){if(document.URL.includes("//www.bilibili.com/video/av")){return await SpinQuery.select("#multi_page")!==null}return false}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=`https://api.bilibili.com/x/web-interface/view?aid=${this.aid}`;const e=await Ajax.getJson(t);if(e.code!==0){Toast.error(`获取视频选集列表失败, message=${e.message}`,"批量下载");return[]}const i=e.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return[]}this.itemList=i.map(t=>{return{title:`P${t.page} ${t.part}`,titleParameters:{n:t.page,ep:t.part},cid:t.cid,aid:this.aid}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const a=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/x/player/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const n=await Ajax.getJsonWithCredentials(a);const r=n.data||n.result||n;if(r.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${r.quality})`)}let o;if(r.durl){o=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const n=await i(a,typeof t==="string"?parseInt(t):t);o=s(n)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}class o extends n{constructor(t){super(t);this.mainVideo=new r(t);this.mainVideo.aid="78976165";this.spVideo=new r(t);this.spVideo.aid="78979124"}static async test(){return document.URL.includes("//www.bilibili.com/blackboard/bnj2020.html")}async getItemList(){return(await this.mainVideo.getItemList()).concat(await this.spVideo.getItemList())}async collectData(t){return(await this.mainVideo.collectData(t)).concat(await this.spVideo.collectData(t))}}class c extends n{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=document.querySelector("meta[property='og:url']");if(t===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return[]}const e=t.getAttribute("content").match(/play\/ss(\d+)/)[1];if(e===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return[]}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${e}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return[]}this.itemList=i.result.main_section.episodes.map((t,e)=>{const i=t.long_title?t.title:(e+1).toString();const s=t.long_title?t.long_title:t.title;return{aid:t.aid,cid:t.cid,title:`${i} - ${s}`,titleParameters:{n:i,ep:s}}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const a=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/pgc/player/web/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const n=await Ajax.getJsonWithCredentials(a);const r=n.data||n.result||n;if(r.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${r.quality})`)}let o;if(r.durl){o=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const n=await i(a,typeof t==="string"?parseInt(t):t);o=s(n)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}const l=[c,r,o];let u;class d{constructor(t){this.config=Object.assign({itemFilter:()=>true},t)}static async test(){for(const t of l){if(await t.test()===true){u=t;return true}}return false}getExtractor(){if(u===null){logError("[批量下载] 未找到合适的解析模块.");throw new Error(`[Batch Download] module not found.`)}const t=new u(this.config);return t}async getItemList(){const t=this.getExtractor();return await t.getItemList()}async getRawItems(t){const e=this.getExtractor();return await e.getRawItems(t.quality)}async collectData(t,e){const i=this.getExtractor();const s=await i.collectData(t.quality);e.dismiss();return s}async collectAria2(t,e,i=false){const s=this.getExtractor();const a=await s.collectAria2(t.quality,i);e.dismiss();return a}}return{export:{BatchExtractor:d}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/biliplus-redirect.min.js"] = (()=>{return(i,e)=>{const n=`hd.biliplus.com`;const c=["bilibili.com/video/av","bilibili.com/bangumi/play","bilibili.com/bangumi/media","space.bilibili.com"];return{widget:{condition:()=>{return c.some(i=>document.URL.includes(i))},content:`\n`,success:()=>{const i=document.querySelector("#biliplus-redirect");i.addEventListener("click",()=>{if(location.host==="space.bilibili.com"){location.assign(document.URL.replace("space.bilibili.com/",`${n}/space/`))}else if(document.URL.includes("/bangumi/")){const i=unsafeWindow.aid||document.querySelector(".av-link,.info-sec-av").innerText.replace(/[aAvV]/g,"");location.assign(`https://${n}/video/av${i}/`)}else{location.host=n}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blackboard.min.js"] = (()=>{return(e,t)=>{const r=async()=>{if(dq(".international-home")){const e=await SpinQuery.condition(()=>unsafeWindow["__INITIAL_STATE__"],e=>e!==undefined);return dqa(".home-slide .item").slice(0,5).map((t,r)=>{const i=t.querySelector("a").getAttribute("data-loc-id");return{url:e.locsData[i][r].url,title:t.querySelector(".title").innerText.trim(),isAd:Boolean(t.querySelector(".gg-icon")),imageUrl:t.querySelector("img").getAttribute("src").replace(/@.+$/,"")}})}else{const e=dq(".chief-recommend-module .panel");const t=e.querySelector(".pic");const r=e.querySelectorAll(".title > a");return[...t.querySelectorAll("li")].map((e,t)=>{const i=r[t];return{url:i.getAttribute("href"),title:i.innerText.trim(),isAd:Boolean(i.querySelector(".gg-pic")),imageUrl:e.querySelector("img").getAttribute("src").replace(/@.+$/,"")}})}};return{export:{getBlackboards:r}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blackboard.vue.min.js"] = (()=>{return(a,r)=>{const i=``;r.applyStyleFromText(`.simple-home .blackboards{display:grid;grid-template-areas:"header header" "dots cards";grid-template-columns:8px 1fr;grid-template-rows:1fr 250px;row-gap:16px;column-gap:16px;align-self:start}.simple-home .blackboards .blackboard-cards{grid-area:cards;--blackboard-width:568.5px;--blackboard-height:250px;width:var(--blackboard-width);height:var(--blackboard-height);border-radius:16px;overflow:hidden}.simple-home .blackboards .blackboard-cards .blackboard-card{width:100%;height:100%;position:relative;display:block;transition:.3s cubic-bezier(.65,.05,.36,1)}.simple-home .blackboards .blackboard-cards .blackboard-card img{width:100%;height:100%;object-fit:fill;display:block}.simple-home .blackboards .blackboard-cards .blackboard-card .title{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);padding:4px 16px;color:#fff;background-color:#000a;font-size:14px;font-weight:700;border-radius:14px;white-space:nowrap;opacity:0}.simple-home .blackboards .blackboard-cards .blackboard-card:hover .title{opacity:1}`,"blackboard-style");return{export:Object.assign({template:i},{components:{Icon:()=>r.importAsync("icon.vue"),"dpi-img":()=>r.importAsync("dpi-img.vue")},data(){return{blackboards:[],interval:0}},destroyed(){if(this.interval){clearInterval(this.interval)}},computed:{cardsContainer(){return this.$el.querySelector(".blackboard-cards")}},async mounted(){const{getBlackboards:a}=await r.importAsync("blackboard");this.blackboards=(await a()).filter(a=>!a.isAd);const i=dq(".blackboards");this.interval=setInterval(()=>{if(!document.hasFocus()||i.matches(".blackboards:hover")){return}const a=parseInt(dq(`.blackboard-radio:checked`).getAttribute("data-index"));let r;if(a===this.blackboards.length-1){r=0}else{r=a+1}dq(`.blackboard-radio[data-index='${r}']`).checked=true},5e3)}})}}})(); @@ -1172,7 +1172,6 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-important.min.css"] = `#disable-popup-modal .vip-exchange .months button.disabled,#vip-exchange-modal .vip-exchange .months button.disabled,.action-row .publish-btn.disabled,.action-row .publish-btn.publishing,.action-row .sch-pub-btn.disabled,.action-row .sch-pub-btn.publishing,.app-body .section-block,.bl-button--primary:disabled,.home-content .publish-btn.disabled,.link-footer,.live-skin-coloration-area .live-skin-separate-area,.live-skin-coloration-area .live-skin-separate-area-hover:hover,.payment-active,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-indicator,.tab-list .tab-item.active:before{background-color:#222!important}.app-body .section-block.with-bottom-radius,.app-body .section-block.with-radius,.bb-comment .no-login .comment-submit,.common .bb-comment .no-login .comment-submit,.container .pagination,.coupon-content-con .coupon-btn-disable,.customize-wrp .select,.f-list-hover:hover,.fjw-case-detail .ban-detail .content-box .video-model,.game-groom-m .num,.main-container .media-info .media-right .media-tool-bar .btn-follow.active,.main-container .pay-bar .vip .btn-pay.active,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled:hover,.pagination-container li.pagination,.status_box .status_btn.disabled,.wrapper .elec-btn.disabled{background-color:#444!important}.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap .bscroll-indicator{background-color:#555!important}.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap .bscroll-vertical-scrollbar.mousedown,.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap:hover .bscroll-vertical-scrollbar,.m-recommend-item div.box,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-vertical-scrollbar,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-vertical-scrollbar.mousedown,.player-auxiliary-area .player-auxiliary-bscrollbar:hover .bscroll-vertical-scrollbar{background-color:transparent!important}.live-skin-coloration-area .live-skin-normal-a-text,.live-skin-coloration-area .live-skin-normal-a-text:link,.live-skin-coloration-area .live-skin-normal-a-text:visited,.live-skin-coloration-area .live-skin-normal-text,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled:hover,.status_box .status_btn.disabled,blockquote,blockquote *,blockquote .color-blue-01,blockquote .color-blue-02,blockquote .color-blue-03,blockquote .color-blue-04,blockquote .color-gray-01,blockquote .color-gray-02,blockquote .color-gray-03,blockquote .color-gray-04,blockquote .color-green-01,blockquote .color-green-02,blockquote .color-green-03,blockquote .color-green-04,blockquote .color-lblue-01,blockquote .color-lblue-02,blockquote .color-lblue-03,blockquote .color-lblue-04,blockquote .color-pink-01,blockquote .color-pink-02,blockquote .color-pink-03,blockquote .color-pink-04,blockquote .color-purple-01,blockquote .color-purple-02,blockquote .color-purple-03,blockquote .color-purple-04,blockquote .color-yellow-01,blockquote .color-yellow-02,blockquote .color-yellow-03,blockquote .color-yellow-04{color:#aaa!important}#app .sticky-bar .bar-content .message,.bb-comment .no-login .comment-submit,.bp-popup-panel .title-ctnr .popup-title,.commnent-screen-wrap .el-input__inner,.common .bb-comment .no-login .comment-submit,.coupon-content-con .coupon-btn-disable,.cover .disabled-cover,.customize-wrp .select,.el-input__inner,.home-page .sticky-bar .bar-content .message,.invitation-record-warp .invtable .inputdone,.live-room-app .guard-rank-cntr .tabs.isHundred .item.active,.live-room-app .guard-rank-cntr.hundred .live-skin-highlight-text,.live-room-app .guard-rank-cntr.hundred .live-skin-main-a-text,.live-room-app .guard-rank-cntr.hundred .page-box .live-skin-main-text,.live-room-app .guard-rank-cntr.thousand .live-skin-highlight-text,.live-room-app .guard-rank-cntr.thousand .live-skin-main-a-text,.live-room-app .guard-rank-cntr.thousand .page-box .live-skin-main-text,.live-skin-coloration-area .live-skin-highlight-text,.live-skin-coloration-area .live-skin-main-text,.manga-detail .episode-list-component .episode-list .list-data .list-item.last-read,.popup-content-ctnr .bl-button--ghost,.s-paging>ul>a.current,.s-paging>ul>span.current,.score-info .go-movie,.tag-list li.tag-item.on{color:#eee!important}#rank-list-vm .tabs.isHundred .item,.bb-comment .no-login .comment-submit,.commnent-screen-wrap .el-input__inner,.common .bb-comment .no-login .comment-submit,.el-input__inner,.enter-failure .password-input .pink-border,.link-footer,.live-skin-coloration-area .live-skin-highlight-border,.live-skin-coloration-area .live-skin-separate-border,.popup-content-ctnr .bl-button--ghost:hover,.score-info .go-movie,.select-box-v2-container .select-box-v2-controller-disabled,.song-info .info-wrap .type-list .item-list .type-item.active,.tabs-bar,.ui-input-textarea.focus,.user-setting-warp .el-radio-button__orig-radio:checked+.el-radio-button__inner{border-color:transparent!important}#app .sticky-bar .bar-content .message:hover,.app-layout .style-section .tag-block .tag-containers .style-tag.selected,.container .video-panel .play-all .bilifont,.detail-wrp .detail-content[data-v-00c9b213] p a span,.drop-list-v2-container .drop-list-v2-item-selected .drop-list-v2-item-cont p.item-cont-main,.edit-button:hover>.icon-font,.edit-button:hover>span .left-nav-item-childed:hover,.el-select-dropdown__item.selected,.home-page .sticky-bar .bar-content .message:hover,.im-popup .bp-popup-panel .title-ctnr .popup-title,.left-nav-wrapper .active,.left-nav-wrapper .active .left-nav-item-child,.left-nav-wrapper .advice-btn:hover,.left-nav-wrapper .left-nav-item.active,.left-nav-wrapper .left-nav-item.active i.active,.left-nav-wrapper .left-nav-list.on .left-nav-item,.left-nav-wrapper .left-nav-list.on .left-nav-item .icon,.live-room-app .guard-rank-cntr.hundred .live-skin-main-a-text:hover,.live-room-app .guard-rank-cntr.thousand .live-skin-main-a-text:hover,.live-skin-coloration-area .live-skin-highlight-text,.live-skin-coloration-area .live-skin-normal-a-text:hover,.live-skin-normal-a-text:active,.manga-detail .episode-list-component .episode-list .list-header .header-item.selected,.more-data a:hover,.other a a:hover,.r-con .members-info .up-card .info-name.is-vip:hover,.rank-item .content .info .detail a a:hover,.rank-item .content .more-data:hover,.rank-item .content .other a:hover,.room-info-down-row .icon-label.hover-text-blue:hover .label,.room-introduction .edit-button:hover>.icon-font,.room-introduction .edit-button:hover>span,.round-corner .van-popper-favorite .play-all .bilifont,.up-info .u-info .name .username.is-vip:hover,.voucher-ing .voucher-left-money,.voucher-ing .voucher-left-money:before,.voucher-no-used .voucher-left-money,.voucher-no-used .voucher-left-money:before{color:var(--theme-color)!important}.aside-ctnr .author-info .communicate-btn,.live-skin-coloration-area .room-info-ctnr .info-section .live-skin-highlight-border,.manga-detail .episode-list-component .episode-list .list-data .list-item.last-read,.page-list-box .page-input:focus,.page-list-box .page-input:hover,.popup-content-ctnr .bl-button--ghost,.season-timeline .season-group.today,.season-timeline .season-group.today .group-time::before,.tag-list li.tag-item.on,.tag-list li.tag-item:hover{border-color:var(--theme-color)!important}.bg-blue,.el-date-table td.current:not(.disabled),.el-date-table td.end-date,.el-date-table td.start-date,.face-g-list#my-g-list .face-g-block .my-mp-block .mp-info .btn-white,.face-g-tab li.current,.live-skin-coloration-area .live-skin-highlight-bg,.popup-content-ctnr .bl-button--ghost:hover,.popup-content-ctnr .bl-button--primary,.season-timeline .season-group.today.is-published .group-time::before,.security-list .child-list li a.bg-blue:hover,.song-info .info-wrap .type-list .item-list .type-item.active,.tag-list li.tag-item.on,.user-my-btn .el-button--primary,.user-setting-warp .el-radio-button__orig-radio:checked+.el-radio-button__inner{background-color:var(--theme-color)!important}.current .tab-btn-link,.el-date-table td.current:not(.disabled),.el-date-table td.end-date,.el-date-table td.start-date,.face-g-tab li.current,.popup-content-ctnr .bl-button--ghost:hover,.style-section .tag-block .tag-containers .style-tag:active{color:var(--foreground-color)!important}#bilibiliPlayer{box-shadow:0 4px 8px 0 #0004;background-color:#222!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-navbar.min.css"] = `#link-navbar-vm>.link-navbar .nav-item:hover,.bili-header-m .nav-menu .nav-con .nav-item:hover,.link-navbar .nav-item:hover,.nav-header-wrapper .nav-header .nav-header-search-bar,.right-part>.shortcuts-ctnr .shortcut-item:hover,.search-bar-ctnr .search-bar,.shortcuts-ctnr .shortcut-item:hover,.uns_box ul.menu li:not(.b-post):hover,.z_top .z_top_nav ul li:hover{background-color:#222!important}#app>.link-navbar,#app>.nav-header-wrapper,#link-navbar-vm>.link-navbar,#navbar-vm>.link-navbar,.b-header-mask-wrp .b-header-mask,.bili-header-m .nav-menu .nav-mask,.bili-header-m .nav-menu.blur-black .nav-mask,.link-navbar{background-color:#444!important}.z_top .i-link:hover,.z_top .z_top_nav ul li.home:hover{background-color:transparent!important}#app>.nav-header-wrapper>.nav-header{background:0 0!important}#app>.link-navbar .main-ctnr .nav-logo,#app>.link-navbar .nav-item.selected .label,#app>.link-navbar .nav-item:hover .icon-font,#app>.nav-header-wrapper>.nav-header .nav-header-mainsite,#app>.nav-header-wrapper>.nav-header .order-center,#link-navbar-vm>.link-navbar .main-ctnr .nav-logo,#link-navbar-vm>.link-navbar .nav-item:hover,.bili-header-m .nav-menu .nav-con .nav-item .t,.link-navbar .main-ctnr .custom-link>a,.link-navbar .main-ctnr .nav-logo,.my-link-btn .label,.nav-header-wrapper .nav-header .nav-header-search-bar,.right-part>.shortcuts-ctnr,.right-part>.shortcuts-ctnr .shortcut-item:hover,.search-bar-ctnr .search-bar input,.shortcut-item .list-item span,.shortcuts-ctnr .shortcut-item,.uns_box li.u-i a.i-link,.z_top a,.z_top.b-header-blur .uns_box li.u-i a.i-link,.z_top.b-header-blur .z_top_nav li a.i-link{color:#eee!important}.search-bar-ctnr .search-bar .placeholder,.search-bar-ctnr .search-bar .search-btn,.search-bar-ctnr .search-bar input::placeholder{color:#878787!important}.uns_box li.u-i:hover a.i-link,.z_top .i-link:hover{color:var(--theme-color)}.link-navbar,.link-navbar-ctnr{box-shadow:none!important}.link-navbar .main-ctnr .nav-logo::before,.nav-header-wrapper .nav-header .order-icon{filter:brightness(0) invert(1)!important}.search-bar-ctnr .search-bar{border-color:transparent!important;box-shadow:0 2px 10px 1px #0002}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-schedule.min.js"] = (()=>{return(e,t)=>{class i{constructor(...e){if(e.length===0){const e=new Date;this.hour=e.getHours();this.minute=e.getMinutes()}else if(e.length===1){const[t]=e;[this.hour,this.minute]=t.split(":").slice(0,2).map(e=>this.validatePart(e));this.normalize()}else if(v.length===2){[this.hour,this.minute]=e}}validatePart(e){const t=parseInt(e);if(!isNaN(t)&&t>=0&&t<=59){return t}else{return null}}normalize(){while(this.minute<0){this.minute+=60;this.hour-=1}while(this.minute>=60){this.minute-=60;this.hour+=1}while(this.hour<0){this.hour+=24}while(this.hour>=24){this.hour-=24}}lessThan(e){if(this.houre.hour||this.hour===e.hour&&this.minute>e.minute){return true}return false}equals(e){return this.hour===e.hour&&this.minute===e.minute}isInRange(e,t){if(e.equals(t)){return false}let i=this.greaterThan(e)&&this.lessThan(t);if(e.greaterThan(t)){i=this.greaterThan(e)||this.lessThan(t)}const s=i||this.equals(e);return s}static millisecondsBefore(e){const t=new i;const s=(new Date).getSeconds();const r=1e3*(t.hour*3600+t.minute*60+s);const n=1e3*(e.hour*3600+e.minute*60);let h=n-r;if(t.greaterThan(e)||t.equals(e)&&s!==0){h+=24*3600*1e3}return h}}function s(){if(e.darkSchedule){const t=new i(e.darkScheduleStart);const r=new i(e.darkScheduleEnd);const n=new i;const h=n.isInRange(t,r);if(e.useDarkStyle!==h){e.useDarkStyle=h}let u=0;if(h){u=i.millisecondsBefore(r)}else{u=i.millisecondsBefore(t)}if(u!==0){setTimeout(()=>s(),u)}}}fullyLoaded(()=>s());return{export:{ScheduleTime:i}}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-slice-9.min.css"] = `.level-5{border-color:#74b0f6!important}.level-5 .label{background-color:#74b0f6!important}.level-5 .level{color:#74b0f6!important}.level-6{border-color:#74b0f6!important}.level-6 .label{background-color:#74b0f6!important}.level-6 .level{color:#74b0f6!important}.level-7{border-color:#74b0f6!important}.level-7 .label{background-color:#74b0f6!important}.level-7 .level{color:#74b0f6!important}.level-8{border-color:#74b0f6!important}.level-8 .label{background-color:#74b0f6!important}.level-8 .level{color:#74b0f6!important}.level-9{border-color:#ba94f2!important}.level-9 .label{background-color:#ba94f2!important}.level-9 .level{color:#ba94f2!important}.level-10{border-color:#ba94f2!important}.level-10 .label{background-color:#ba94f2!important}.level-10 .level{color:#ba94f2!important}.level-11{border-color:#ba94f2!important}.level-11 .label{background-color:#ba94f2!important}.level-11 .level{color:#ba94f2!important}.level-12{border-color:#ba94f2!important}.level-12 .label{background-color:#ba94f2!important}.level-12 .level{color:#ba94f2!important}.van-popover .level-bar .level-progress{background-color:#ffae00!important}#biliAppHomeSetting>div,.app-layout .manga-navbar,.container .play-all,.container .split-line .history-tip,.hover-panel-wrap,.hover-panel-wrapper,.lang-change .lang-intro,.manga-navbar .drop-list,.van-popover .container{background-color:#222!important}.container .level-intro,.container .play-all:hover,.international-header .bili-banner,.manga-navbar .drop-list .more-btn-container,.manga-navbar .search-bar .search-bar-bg,.manga-navbar .user-panel .drop-list .logout-btn-container,.message-list-content .notify-wrapper .notify-text,.recommend-area-ctnr .rec-area-item,.skeleton .skeleton-content,.skeleton .skeleton-focusbtn,.skeleton .skeleton-head,.skeleton .skeleton-time,.skeleton .skeleton-user-name,.van-popover .btn-box .btn.reg-btn:hover,.van-popover .upload-item:hover,.yzly-content-ctnr .btn{background-color:#333!important}.wide-members .avatar-list i{background-color:#444!important}.wide-members .avatar-list i:hover{color:var(--theme-color)!important}.grid-area-ctnr .hab-ctnr,.grid-area-ctnr .news-ctnr,.grid-area-ctnr .rank-ctnr{background-color:#444!important}.confirmorder-container{background-color:#444!important;box-shadow:none!important}.confirmorder-container h1{color:#eee!important}.confirmorder-container h1 span{color:#aaa!important}.confirmorder-container .card .card-bottom .delete{filter:brightness(0) invert(.7)!important}.confirmorder-container .card .card-bottom .delete:hover{filter:var(--pink-image-filter)!important}.confirmorder-container .card.active{border-color:var(--theme-color)!important}.confirmorder-container .card.active::before{filter:var(--pink-image-filter)!important}.confirmorder-container .discounts{border-color:#555!important}.confirmorder-container .discounts .discounts-list p{border-color:transparent!important;background-color:#111!important;color:#666!important}.confirmorder-container .total-container div span{color:#eee!important}.confirmorder-container .total-container div span.total{color:var(--theme-color)!important}.confirmorder-container .confirm-bottom .confirm-paybtn.active{filter:var(--pink-image-filter)!important}.confirmorder-container .confirm-bottom .service-term{color:#aaa!important}.confirmorder-container .confirm-bottom .service-term .check-icon,.confirmorder-container .confirm-bottom .service-term .check-icon.checked{filter:var(--pink-image-filter)!important}.confirmorder-container .confirm-bottom .service-term .term-content{color:var(--theme-color)!important}.eticket-container .top-box .header{border-color:transparent!important;background-color:#333!important}.eticket-container .top-box .header .header-back{filter:brightness(0) invert(1)!important}.eticket-container .top-box .header h1{color:#eee!important}.eticket-container .top-box .header::after{border-color:transparent!important}.eticket-container .eticket-info-container{background-color:#444!important;box-shadow:none!important}.eticket-container .eticket-info-right div{color:#eee!important}.eticket-container .eticket-info-right p{color:#aaa!important}.eticket-container .qrcode-container{background-color:#444!important}.eticket-container .qrcode-container .qrcode-tip{background-color:transparent!important;color:#eee!important}.eticket-container .qrcode-container .qrcode-container-item .qrcode-hide-tip{color:#eee!important}.eticket-container .qrcode-container .ticket-code,.eticket-container .qrcode-container .ticket-code .color-gray-light,.eticket-container .qrcode-container .ticket-type,.eticket-container .qrcode-container .ticket-type .color-gray-light{color:#aaa!important}.eticket-container .qrcode-container .ticket-code span,.eticket-container .qrcode-container .ticket-type span{color:#eee!important}.eticket-container .qrcode-container .addr-map{background-color:#383838!important}.eticket-container .qrcode-container .addr-map h1{color:#eee!important}.eticket-container .qrcode-container .addr-map p{color:#aaa!important}.eticket-container .qrcode-container .addr-map .map-icon{filter:var(--pink-image-filter)!important}.orderdetail-container .orderdetail-wrapper{color:#aaa!important}.orderdetail-container .orderdetail-wrapper .wrapper-ticket{color:#eee!important}.orderdetail-container .orderdetail-wrapper .wrapper-ticket .tip{color:var(--theme-color)!important}.orderdetail-container .total-container div span{color:#eee!important}.orderdetail-container .total-container div span.total{color:var(--theme-color)!important}#biliAppHomeSetting input,#biliAppHomeSetting select,.highlight-areas-ctnr .highlight-area-item,.s_tag .btn-add,.section-block .flip-view,.share-content .video-card,.van-popover .btn-box .btn.reg-btn,.van-popover .level-bar,.van-popper-history .view-all{background-color:#444!important}.love-card .header::after{background-color:#555!important}.s_tag .btn-add span{background-color:#eee!important}.coin-dialog-mask .coin-operated .mc .mc-box{background-color:#fff!important}.card .risk-tip-content{background-color:#624f27!important}.live-room-app .aside-area .chat-history-panel-top,.manga-navbar .nav-list,.news-content,.news-ctnr .more-link,.news-ctnr .more-link:hover,.text-info-ctnr{background-color:transparent!important}.manga-navbar .search-bar .placeholder-list .placeholder-item{color:#888!important}#biliAppHomeSetting label~span,.bb-comment .comment-list .list-item .blacklist-font-color,.center-box .line-3 .action-button,.comment-bilibili-fold .comment-list .list-item .blacklist-font-color,.container .split-line .history-tip,.follow-dialog-wrap .special-tip,.highlight-areas-ctnr .area-desc,.list-item .publish-time,.manga-navbar .data-list .list-container .empty-hinter,.manga-navbar .data-list .list-container .failure-hinter,.manga-navbar .data-list .list-container .loading-hinter,.rank-item .room-title,.share-content .video-card .up-info .name,.share-content .video-card .up-info .tip,.video-container .text-area .view-danmaku{color:#aaa!important}#biliAppHomeSetting a,#biliAppHomeSetting input,#biliAppHomeSetting select,.area-detail-ctnr .area-title,.banner-ctnr .banner-title,.bilibili-player-video-danmaku-setting-left-block-word,.center-box .line-1 .like-item,.center-box .line-1 .name-field,.center-box .line-1 .name-field a,.item-ctnr .item-title,.love-card .header,.manga-navbar .drop-list .more-btn-container .more-button,.manga-navbar .search-bar .search-input,.manga-navbar .user-info-panel .info-item,.manga-navbar .user-info-panel .user-name,.manga-navbar .user-panel .drop-list .logout-btn-container .logout-button,.manga-navbar-favourite-manga .action-button,.manga-navbar-history-list .action-button,.more-ctnr,.news-content,.news-ctnr .more-link,.rank-item .room-anchor,.recommend-area-ctnr .area-name,.recommend-area-ctnr .title-text,.tab-ctnr .tab-item,.van-popover .btn-box .btn.reg-btn,.van-popover .coins .info a,.van-popper-history .view-all,.van-popper-login .title,.van-popper-upload .upload-item .bilifont,.yzly-ctnr .yzly-title{color:#eee!important}.international-header .mini-upload:hover,.van-popover .vip:hover{color:#fff!important}.highlight-areas-ctnr .highlight-area-item:nth-child(1) .area-name{color:#a0a7dc!important}.highlight-areas-ctnr .highlight-area-item:nth-child(2) .area-name{color:#c7aade!important}.highlight-areas-ctnr .highlight-area-item:nth-child(3) .area-name{color:#deb29c!important}.highlight-areas-ctnr .highlight-area-item:nth-child(4) .area-name{color:#afb7e8!important}.highlight-areas-ctnr .highlight-area-item:nth-child(5) .area-name{color:#dcbf94!important}.highlight-areas-ctnr .highlight-area-item:nth-child(6) .area-name{color:#95c5a8!important}.live-room-app .aside-area .chat-control-panel{background-image:none!important}.bili-header-m .mini-type .nav-search #nav_searchform,.international-header .mini-type .nav-search #nav_searchform,.van-popover .mini-type .nav-search #nav_searchform{background-color:#333!important;border-color:transparent!important}.bili-header-m .mini-type .nav-search #nav_searchform .nav-search-keyword,.international-header .mini-type .nav-search #nav_searchform .nav-search-keyword,.van-popover .mini-type .nav-search #nav_searchform .nav-search-keyword{color:#aaa!important}.bili-header-m .mini-type .nav-search #nav_searchform .nav-search-keyword:focus,.international-header .mini-type .nav-search #nav_searchform .nav-search-keyword:focus,.van-popover .mini-type .nav-search #nav_searchform .nav-search-keyword:focus{color:#eee!important}.bili-header-m .mini-type .nav-search .nav-search-btn,.international-header .mini-type .nav-search .nav-search-btn,.van-popover .mini-type .nav-search .nav-search-btn{background-color:#444!important}.bili-header-m .mini-type .nav-search .nav-search-btn .nav-search-submit,.international-header .mini-type .nav-search .nav-search-btn .nav-search-submit,.van-popover .mini-type .nav-search .nav-search-btn .nav-search-submit{color:#eee!important}.bili-header-m .mini-type .nav-search .nav-search-btn:hover .nav-search-submit,.international-header .mini-type .nav-search .nav-search-btn:hover .nav-search-submit,.van-popover .mini-type .nav-search .nav-search-btn:hover .nav-search-submit{color:var(--theme-color)!important}.bilibili-search-history,.bilibili-search-suggest{background-color:#333!important;border-color:transparent!important}.module-game .rule .detail .content{color:#000!important}#biliAppHomeSetting input,#biliAppHomeSetting select{border-color:transparent!important;border-radius:4px}.at-popup,.chat-popups-section .draw-full-ctnr,.hover-panel-wrap,.hover-panel-wrapper,.recommend-area-ctnr .rec-area-item,.van-popover .btn-box .btn.reg-btn,.van-popper-history .view-all{border-color:transparent!important}.wide-members .avatar{border-color:#333!important}.van-popper-login .container{border-color:#444!important}.container .level-intro .svg-icon,.manga-navbar .search-bar .confirm-btn .search-icon{filter:brightness(0) invert(1)!important}.side-bar-btn .size-bar-text{filter:brightness(.6) invert(1) hue-rotate(180deg)!important;text-shadow:0 0 0}.confirmorder-container .confirm-bottom .confirm-paybtn.active,.whole-detail-info-wrapper .product-buy-wrapper .unsale-btn{box-shadow:0 3px 4px 0 #6e4752!important}.app-layout .manga-navbar{box-shadow:rgba(0,0,0,.2) 0 4px 8px 0!important}.highlight-areas-ctnr .highlight-area-item.hover{box-shadow:0 7px 11px 0 rgba(0,0,0,.18)!important}.hover-panel-wrap{box-shadow:0 13px 20px 0 rgba(0,0,0,.22)!important}.van-popper .popper__arrow{display:none!important}.nav-tab-bar .tab-item[data-tab-id="1"]:not(.on)::before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAQAAAACj/OVAAAD00lEQVRYw+2YbWhVdRzHb2aWsILo4UVC5Pd3drfdIZNW1sRod7eW1gSxLIxo5aWgB1GHbkNaDILoAaJYtKQNRDHQTcp6McQoISusXuSLZTXXICVoa3Nmtu0+nE8vdtzd1T3c7dzzzu/31b2X+//w+//+5/y+54RCVzSLKq+zqD1t9driPB4uCxjm3G+f6ILI2E7bu+ElgcB0u3UJIXcd23mT19jMqnHsiF6vXJjv2iqtX5S5HzDAZHWzFbnCjjq35BFnK21UxBlmKv3ESlfoRKQgf5vZL17F9QBDfMkRkpOQf1ON0Of5qm+/iHu4f2jEQYhDWVWeptwVzmN5wIVXiFL3LwB6qEAYMRou6SXsR1jvhqv919cq3gIgyVpEDT9P2UmXGMKiPnFcpT/FLwC0Ie5hiOn0DsJafAKLbhMrvAUfRbQxvX5A2Dd+O3i3WOcteC/ixxmAZxDq89vBKvGUt+Au6iYujak0jNCg3ztMRDxEbvoNYd1+gTfILXHHcgJ2IazL/2XxnTiSE3AbwqnzD9whanPA9RNxRdFS38BlN2pQfDUrsB5hB/Jz894qyt0/ZsQdQNhoofICbF6gz0SUnmlxnYRdYc/kbR5GCnRcLHP3kboMNkAjQjjNeY5O2itElBa6GfNG1VGaiLhCI1ab/0wTEzYRnpYTyUSpzqKiAEKU7RJvJz5idQZ1VsetySkNJo0utAHxKwCfIuzrisXBJtJqUe0dk+cQeiHgCKw28Z53VIpRym4NFFd+jQbFKQAOIuyLgOuzNWKNt6GbEPZ80MDd4n1vyFrCkuGbA8VFFums6Ju4Z+pwwPUV1ogab0NrEc6mvCPCZc5L1qp2zz1iOTFixHBQWnvVrnZrceJ5mQ6RAmuVO/kZcHrbmL3iO2vbx6KUnYl9dNBBB7tpyHKL9/0etiSUFtbkD7dalLl9Oea0b91CLGGOH+AesYonc/ZdiKU75/2cZMdy691lvTzo2Dwyto2JZTzAxjlU+ASVlCBsoDg8t+qW2DnR9N8Ic9cQ8YSw3sii2UbOtU6FnnXiTtyJO4dEufvycD3zcR02IuzD8bWsquj6qWq6T7/Pr2M5eEgbL+2YY+dFdbqBRuqTm89FU9FkllNV6ap0VTrmXnTm0/gvWf9IRVPRVHVy2/kdifrU+qSQW/hg9kDtFNtnfPjyo1aETk7CVSzWvw6DBKcKRGFJ5risFesJUg0INWZFvpZAgYcRdiwDPCO6AwVeoBilim8a39BScSen6A3Uj4wKZ0MoFAqFiu/Idd759sMXD82LOqGTAft7543mBVfeoAeg/wFlFeKImou+wAAAAABJRU5ErkJggg==)!important}.aside-item.active .item-border,.aside-item:hover .item-border{border-color:var(--theme-color)!important}.aside-item::after{border-right-color:var(--theme-color)!important}#bilibili_pbp,#bilibili_pbp_canvas{filter:var(--pink-image-filter)!important}#biliAppHomeSetting button,.interact-dialog .btn,.rookie-guide .close-button,.van-popover .btn-box .btn,.van-popper-history .view-all:hover,.video-control-show .bilibili-player-video-interactive-list .check:hover .big-round{background-color:var(--theme-color)!important}#biliAppHomeSetting h2,.bilibili-search-suggest .suggest-item .suggest_high_light,.more-ctnr:hover,.news-ctnr .more-link:hover,.tab-ctnr .tab-item.activated,.tab-ctnr .tab-item:hover,.van-popover .coins .info a:hover,.van-popper-upload .upload-item:hover .bilifont,.video-desc .subtitle a{color:var(--theme-color)!important}#biliAppHomeSetting button,.interact-dialog .btn,.rookie-guide .close-button,.van-popover .btn-box .btn,.van-popper-history .view-all:hover{color:var(--foreground-color)!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-styles.min.js"] = (()=>{return(e,t)=>{const l=()=>{SpinQuery.select(".custom-scrollbar").then(e=>e&&e.classList.remove("custom-scrollbar"))};const r=()=>{document.body.classList.add("dark");l();t.applyStyle("scrollbarStyle");t.applyImportantStyle("darkStyleNavBar");t.applyStyle("darkStyle");t.applyImportantStyle("darkStyleImportant")};r();return{reload:r,unload:()=>{document.body.classList.remove("dark");t.removeStyle("scrollbarStyle");t.removeStyle("darkStyleNavBar");t.removeStyle("darkStyle");t.removeStyle("darkStyleImportant")}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/debounce.min.js"] = (()=>{return(n,l)=>{function u(n,l,u){var e,t,i,r,f;if(null==l)l=100;function o(){var a=Date.now()-r;if(a=0){e=setTimeout(o,l-a)}else{e=null;if(!u){f=n.apply(i,t);i=t=null}}}var a=function(){i=this;t=arguments;r=Date.now();var a=u&&!e;if(!e)e=setTimeout(o,l);if(a){f=n.apply(i,t);i=t=null}return f};a.clear=function(){if(e){clearTimeout(e);e=null}};a.flush=function(){if(e){f=n.apply(i,t);i=t=null;clearTimeout(e);e=null}};return a}return{export:{debounce:u}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-danmaku-settings.min.css"] = `.bilibili-player-video-danmaku-setting-wrap{display:none!important}`; @@ -1185,9 +1184,9 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-audio.min.js"] = (()=>{return(e,t)=>{class n{constructor(){this.sid=null;this.progress=null}async getDownloadUrl(){const e=`https://www.bilibili.com/audio/music-service-c/web/url?sid=${this.sid}&privilege=2&quality=2`;const t=await Ajax.getJsonWithCredentials(e);if(t.code===0){return t.data.cdns.shift()}else{logError("获取下载链接失败, 请确保当前账号有下载权限.","下载音频",1e4);return null}}async download(){const e=await this.getDownloadUrl();return new Promise((t,n)=>{const s=new XMLHttpRequest;s.open("GET",e);s.responseType="blob";s.addEventListener("load",()=>t(s.response));s.addEventListener("error",()=>n(s.status));s.addEventListener("progress",e=>this.progress&&this.progress(100*e.loaded/e.total));s.send()})}}const s="下载音频";return{export:n,widget:{content:`\n\n\n${s}\n\n`,condition:()=>document.URL.includes("bilibili.com/audio"),success:async()=>{await SpinQuery.select(()=>document.querySelector("#app"));const e=document.querySelector("#download-audio");const t=e.querySelector("span");const o=new n;o.progress=(e=>{t.innerHTML=`${Math.round(e)}%`});const i=document.querySelector("#download-audio-link");e.addEventListener("click",async e=>{if(o.sid===null||e.target===i){return}const n=await o.download();t.innerHTML=s;const r=i.getAttribute("href");if(r){URL.revokeObjectURL(r)}i.setAttribute("href",URL.createObjectURL(n));const d=(()=>{const e=document.querySelector(".song-title");if(e){return e.getAttribute("title")}else{return"神秘音频"}})();i.setAttribute("download",d+".m4a");i.click()});Observer.childList("#app",()=>{const t=document.URL.match(/bilibili\.com\/audio\/au([\d]+)/);if(t&&t[1]){e.disabled=false;o.sid=t[1]}else{e.disabled=true}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:n}=e.import("title");const{DanmakuInfo:i}=e.import("video-info");const{DanmakuConverter:a}=e.import("danmaku-converter");async function o(t){const e=n();let i={title:e};try{await loadDanmakuSettingsPanel();const t=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));return e*4/188};const e=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[e];return n};i.font=dq(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;i.alpha=parseFloat(dq(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));i.duration=(()=>{const e=18-3*t(".bilibili-player-setting-speedplus .bui-thumb");return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();i.blockTypes=(()=>{let t=[];const e={".bilibili-player-block-filter-type[ftype=scroll]":[1,2,3],".bilibili-player-block-filter-type[ftype=top]":[5],".bilibili-player-block-filter-type[ftype=bottom]":[4],".bilibili-player-block-filter-type[ftype=color]":["color"]};for(const[n,i]of Object.entries(e)){if(dq(n).classList.contains("disabled")){t=t.concat(i)}}return t.concat(7,8)})();const n=1.4-.2*t(".bilibili-player-setting-fontsize .bui-thumb");i.resolution={x:1920*n,y:1080*n};i.bottomMarginPercent=[.75,.5,.25,0,0][e(".bilibili-player-setting-area .bui-thumb")];if(i.bottomMarginPercent===0&&dq(".bilibili-player-video-danmaku-setting-left-preventshade input").checked){i.bottomMarginPercent=.15}i.bold=dq(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){i={font:"微软雅黑",alpha:.6,duration:t=>{switch(t.type){case 4:case 5:return 4;default:return 6}},blockTypes:[7,8],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const o=new a(i);const l=o.convertToAssDocument(t);return l.generateAss()}async function l(t){const e=n();const a=new i((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){return new Blob([await o(a.rawXML)],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const s=dq("#danmaku-link");const c=s.getAttribute("href");if(c){URL.revokeObjectURL(c)}s.setAttribute("download",`${e}.${t?"ass":"xml"}`);s.setAttribute("href",r);s.click()}return{export:{downloadDanmaku:l,convertToAss:o},widget:{content:`\n\n\n下载弹幕\n\n`,condition:async()=>{let t=await SpinQuery.select(()=>(unsafeWindow||window).cid);return Boolean(t)},success:()=>{const t=dq("#danmaku-link");const e=dq("#download-danmaku");e.addEventListener("click",n=>{if(n.target!==t){try{e.disabled=true;l(n.shiftKey)}catch(t){logError(t)}finally{e.disabled=false}}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-subtitle.min.js"] = (()=>{return(t,e)=>{let i;const o=(t,e)=>{const o=document.createElement("a");const n=URL.createObjectURL(new Blob([t]));if(i){URL.revokeObjectURL(i)}i=n;o.setAttribute("href",n);o.setAttribute("download",escapeFilename(e));document.body.appendChild(o);o.click();o.remove()};return{widget:{content:`\n`,condition:videoCondition,success:()=>{const t=dq("#download-subtitle");t.addEventListener("click",async i=>{try{t.disabled=true;const{aid:n,cid:s}=unsafeWindow;if(!n||!s){logError("未找到视频AID和CID");return}const{VideoInfo:l}=await e.importAsync("video-info");const{getFriendlyTitle:c}=await e.importAsync("title");const r=new l(n);r.cid=parseInt(s);await r.fetchInfo();const a=r.subtitles;if(a.length===0){Toast.info("当前视频没有字幕.","下载字幕",3e3);return}const d=await loadSubtitleSettingsPanel();if(!d){logError("未找到字幕设置");return}const u=d.querySelector(".bilibili-player-video-subtitle-setting-lan .bui-select-result").innerHTML;const b=a.find(t=>t.language===u)||a[0];const f=await Ajax.getJson(b.url);const p=f.body;const y=c(true);if(i.shiftKey){const{SubtitleConverter:t,SubtitleSize:i,SubtitleLocation:n}=await e.importAsync("subtitle-converter");const s=d.querySelector(".bilibili-player-video-subtitle-setting-fontsize .bui-thumb");const l=parseFloat(s.style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const c={214:i.VeryLarge,163.5:i.Large,107:i.Medium,50.5:i.Small,0:i.VerySmall};const r=c[l];const a=d.querySelector(".bilibili-player-video-subtitle-setting-color .bui-select-result span:first-child");const u=a.getAttribute("style").match(/background:[ ]*(.+);/)[1];const b=d.querySelector(".bilibili-player-video-subtitle-setting-opacity .bui-bar");const f=parseFloat(b.style.transform.replace(/scaleX\(([\d\.]+)/,"$1"));const g=dq(".subtitle-position");const m={bc:n.BottomCenter,bl:n.BottomLeft,br:n.BottomRight,tc:n.TopCenter,tl:n.TopLeft,tr:n.TopRight};const h=Object.entries(m).filter(([t])=>{return g.classList.contains(`subtitle-position-${t}`)}).map(([,t])=>t).shift();const w=dq("video");const v={title:y,height:w.videoHeight,width:w.videoWidth,color:u,location:h,opacity:f,size:r};const S=new t(v);const L=await S.convertToAss(p);o(L,y+".ass")}else{o(JSON.stringify(p),y+".json")}}catch(t){logError(t)}finally{t.disabled=false}})}}}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.css"] = `.download-video{--download-video-background:white;--download-video-foreground:black;position:absolute;top:96px;left:50%;transform:translateX(-50%) scale(.95);background:var(--download-video-background);color:var(--download-video-foreground);box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;z-index:10001;pointer-events:none;opacity:0;padding:16px;width:300px;display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;box-sizing:content-box;line-height:normal}.download-video,.download-video *{transition:.2s ease-out;-webkit-tap-highlight-color:transparent!important}.download-video.opened{pointer-events:initial;opacity:1;transform:translateX(-50%) scale(1)}body.dark .download-video{--download-video-background:#222;--download-video-foreground:#eee}.round-corner .download-video,.round-corner .download-video .episode-list .v-checkbox,.round-corner .download-video .rpc-settings{border-radius:var(--large-corner-radius)}.round-corner .download-video .button,.round-corner .download-video .cover,.round-corner .download-video .direct-download .progress .background,.round-corner .download-video .direct-download .progress .foreground,.round-corner .download-video .rpc-settings input[type=text],.round-corner .download-video .size-warning-tip,.round-corner .download-video .title,.round-corner .download-video button{border-radius:var(--corner-radius)}.download-video .cover{min-height:100px;max-height:120px;object-fit:contain}.download-video h1{font-size:13pt;font-weight:700;color:var(--download-video-foreground)}.download-video h2{font-size:11pt;font-weight:700;color:var(--download-video-foreground)}.download-video .header{display:flex;justify-content:space-between;align-items:center}.download-video .header .grow{flex-grow:1}.download-video .header .mdi-download{font-size:16pt;color:var(--download-video-foreground);margin-right:8px}.download-video .header .mdi-close{font-size:16pt;color:var(--download-video-foreground);cursor:pointer}.download-video .header .mdi-close:hover{color:var(--theme-color)}.download-video .info{display:flex;flex-direction:column;align-items:center;margin-top:12px}.download-video .title{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-top:12px}.download-video .title .bold{width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.download-video .title .size{font-size:10pt;color:var(--download-video-foreground);align-self:center;display:flex;align-items:center;height:24px}.download-video .bold{color:var(--download-video-foreground);font-weight:700;font-size:12pt}.download-video .option-item{display:flex;justify-content:space-between;align-items:center;padding-top:12px;font-size:10pt}.download-video .tabs{display:flex;padding:12px 0;font-size:10pt}.download-video .tabs .tab{cursor:pointer;position:relative;opacity:.5}.download-video .tabs .tab.active{font-weight:700;opacity:1}.download-video .tabs .tab:not(:last-child){margin-right:16px}.download-video .tabs .tab::after{content:"";position:absolute;border-radius:2px;background-color:var(--theme-color);height:3px;width:80%;left:10%;bottom:-8px;transition:.2s ease-out;transform:scaleX(0)}.download-video .tabs .tab.active::after{transform:scaleX(1)}.download-video .separator{height:1px;background:#8884;width:100%;margin:12px 0;flex-shrink:0}.download-video .direct-download{display:flex;flex-direction:column;align-items:start;justify-content:space-between}.download-video .button,.download-video button{border:none;outline:0!important;padding:6px 16px;font-size:10pt;cursor:pointer;background:#8884;color:var(--download-video-foreground)}.download-video .button:hover,.download-video button:hover{background:#8886}.download-video .primary{background:var(--theme-color);color:var(--foreground-color);align-self:center}.download-video .primary:hover{background:var(--theme-color-90)}.download-video .busy .button,.download-video .busy .primary,.download-video .busy button,.download-video button:disabled{background-color:#0001;color:#8884;cursor:not-allowed}.download-video .busy .button,.download-video .busy button{cursor:wait!important}.download-video .direct-download .progress{align-self:stretch;display:flex;align-items:center;margin-top:8px}.download-video .direct-download .progress .background{flex-grow:1;height:4px;background:#8884;margin-right:4px;position:relative}.download-video .direct-download .progress .background .foreground{position:absolute;top:0;left:0;height:4px;background:linear-gradient(to right,var(--theme-color),var(--theme-color-60))}.download-video .direct-download .progress .percent{width:50px;text-align:right;font-size:12px}.download-video .actions{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8px -4px 0}.download-video .actions>*{margin:4px;flex-grow:1;flex-basis:calc(50% - 16px);display:flex;justify-content:center;align-items:center;white-space:nowrap}.download-video i.mdi-alert-circle{font-size:14pt;color:#ff9800}.download-video .size-warning{position:relative;padding:0 8px}.download-video .size-warning-tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--download-video-background);color:var(--download-video-foreground);border:1px dashed var(--theme-color);z-index:2;font-size:10pt;width:200px;padding:8px;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;pointer-events:none;opacity:0}.download-video .size-warning:hover .size-warning-tip{opacity:1}.download-video .episode-list .v-checkbox{padding:4px 8px;margin:4px 0;position:relative;background-color:transparent}.download-video .episode-list .v-checkbox.checked{background-color:#8882}.download-video .episode-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.download-video .episode-list{overflow:auto;max-height:320px}.download-video button.list-tool{padding:4px;line-height:1;font-size:12pt;margin:0 4px}.download-video .episode-header h2{flex-grow:1}.download-video .selected-count{width:64px;text-align:right}.download-video .aria2-rpc .mdi{margin-left:8px;font-size:14pt;line-height:1}.download-video .aria2-rpc{position:relative}.download-video .rpc-settings{position:absolute;display:flex;flex-direction:column;align-items:stretch;color:var(--download-video-foreground);background:#fff;bottom:120%;left:50%;cursor:initial;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;transform-origin:bottom;transform:translateX(-50%) scale(.9);opacity:0;pointer-events:none;padding:8px;z-index:3;transition:.3s cubic-bezier(.18,.89,.32,1.28);width:120%}body.dark .download-video .rpc-settings{background:#282828}.download-video .rpc-settings>*{margin:8px}.download-video .rpc-settings.show{opacity:1;transform:translateX(-50%) scale(1);pointer-events:initial}.download-video .rpc-settings input[type=text]{background:0 0;color:var(--download-video-foreground);border:1px solid #8884;padding:4px;margin-left:8px}.download-video .rpc-settings input[type=text]:focus{border-color:var(--theme-color)}.download-video .rpc-settings .operations{display:flex;align-items:center;justify-content:space-evenly}.download-video .final-dir{white-space:normal;word-break:break-all}.download-video .rpc-settings-item{display:flex;align-items:center;justify-content:space-between;white-space:nowrap}.download-video .rpc-settings-item input[type=text]{flex-grow:1;margin-left:24px}.download-video button.cancel-download,.download-video button.start-download{margin-top:8px}.download-video .direct-download-header{align-self:stretch;display:flex;justify-content:space-between;align-items:center}body.dark .download-video .direct-download .progress .foreground{background:linear-gradient(to right,var(--theme-color-70),var(--theme-color))}`; +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.css"] = `.download-video{--download-video-background:white;--download-video-foreground:black;position:absolute;top:96px;left:50%;transform:translateX(-50%) scale(.95);background:var(--download-video-background);color:var(--download-video-foreground);box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;z-index:10001;pointer-events:none;opacity:0;padding:16px;width:300px;display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;box-sizing:content-box;line-height:normal}.download-video,.download-video *{transition:.2s ease-out;-webkit-tap-highlight-color:transparent!important}.download-video.opened{pointer-events:initial;opacity:1;transform:translateX(-50%) scale(1)}body.dark .download-video{--download-video-background:#222;--download-video-foreground:#eee}.round-corner .download-video,.round-corner .download-video .episode-list .v-checkbox,.round-corner .download-video .rpc-settings{border-radius:var(--large-corner-radius)}.round-corner .download-video .button,.round-corner .download-video .cover,.round-corner .download-video .direct-download .progress .background,.round-corner .download-video .direct-download .progress .foreground,.round-corner .download-video .rpc-settings input[type=text],.round-corner .download-video .size-warning-tip,.round-corner .download-video .title,.round-corner .download-video button{border-radius:var(--corner-radius)}.download-video .cover{min-height:100px;max-height:120px;object-fit:contain}.download-video h1{font-size:13pt;font-weight:700;color:var(--download-video-foreground)}.download-video h2{font-size:11pt;font-weight:700;color:var(--download-video-foreground)}.download-video .header{display:flex;justify-content:space-between;align-items:center}.download-video .header .grow{flex-grow:1}.download-video .header .mdi-download{font-size:16pt;color:var(--download-video-foreground);margin-right:8px}.download-video .header .mdi-close{font-size:16pt;color:var(--download-video-foreground);cursor:pointer}.download-video .header .mdi-close:hover{color:var(--theme-color)}.download-video .info{display:flex;flex-direction:column;align-items:center;margin-top:12px}.download-video .title{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-top:12px}.download-video .title .bold{width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.download-video .title .size{font-size:10pt;color:var(--download-video-foreground);align-self:center;display:flex;align-items:center;height:24px}.download-video .bold{color:var(--download-video-foreground);font-weight:700;font-size:12pt}.download-video .option-item{display:flex;justify-content:space-between;align-items:center;padding-top:12px;font-size:10pt}.download-video .tabs{display:flex;padding:12px 0;font-size:10pt}.download-video .tabs .tab{cursor:pointer;position:relative;opacity:.5}.download-video .tabs .tab.active{font-weight:700;opacity:1}.download-video .tabs .tab:not(:last-child){margin-right:16px}.download-video .tabs .tab::after{content:"";position:absolute;border-radius:2px;background-color:var(--theme-color);height:3px;width:80%;left:10%;bottom:-8px;transition:.2s ease-out;transform:scaleX(0)}.download-video .tabs .tab.active::after{transform:scaleX(1)}.download-video .separator{height:1px;background:#8884;width:100%;margin:12px 0;flex-shrink:0}.download-video .direct-download{display:flex;flex-direction:column;align-items:start;justify-content:space-between}.download-video .button,.download-video button{border:none;outline:0!important;padding:6px 16px;font-size:10pt;cursor:pointer;background:#8884;color:var(--download-video-foreground)}.download-video .button:hover,.download-video button:hover{background:#8886}.download-video .primary{background:var(--theme-color);color:var(--foreground-color);align-self:center}.download-video .primary:hover{background:var(--theme-color-90)}.download-video .busy .button,.download-video .busy .primary,.download-video .busy button,.download-video button:disabled{background-color:#0001;color:#8884;cursor:not-allowed}.download-video .busy .button,.download-video .busy button{cursor:wait!important}.download-video .direct-download .progress{align-self:stretch;display:flex;align-items:center;margin-top:8px}.download-video .direct-download .progress .background{flex-grow:1;height:4px;background:#8884;margin-right:4px;position:relative}.download-video .direct-download .progress .background .foreground{position:absolute;top:0;left:0;height:4px;background:linear-gradient(to right,var(--theme-color),var(--theme-color-60))}.download-video .direct-download .progress .percent{width:50px;text-align:right;font-size:12px}.download-video .actions{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8px -4px 0}.download-video .actions>*{margin:4px;flex-grow:1;flex-basis:calc(50% - 16px);display:flex;justify-content:center;align-items:center;white-space:nowrap}.download-video i.mdi-alert-circle{font-size:14pt;color:#ff9800}.download-video .size-warning{position:relative;padding:0 8px}.download-video .size-warning-tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--download-video-background);color:var(--download-video-foreground);border:1px dashed var(--theme-color);z-index:2;font-size:10pt;width:200px;padding:8px;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;pointer-events:none;opacity:0}.download-video .size-warning:hover .size-warning-tip{opacity:1}.download-video .episode-list .v-checkbox{padding:4px 8px;margin:4px 0;position:relative;background-color:transparent}.download-video .episode-list .v-checkbox.checked{background-color:#8882}.download-video .episode-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.download-video .episode-list{overflow:auto;max-height:320px}.download-video button.list-tool{padding:4px;line-height:1;font-size:12pt;margin:0 4px}.download-video .episode-header h2{flex-grow:1}.download-video .selected-count{width:64px;font-size:12px;text-align:right}.download-video .aria2-rpc .mdi{margin-left:8px;font-size:14pt;line-height:1}.download-video .aria2-rpc{position:relative}.download-video .rpc-settings{position:absolute;display:flex;flex-direction:column;align-items:stretch;color:var(--download-video-foreground);background:#fff;bottom:120%;left:50%;cursor:initial;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;transform-origin:bottom;transform:translateX(-50%) scale(.9);opacity:0;pointer-events:none;padding:8px;z-index:3;transition:.3s cubic-bezier(.18,.89,.32,1.28);width:120%}body.dark .download-video .rpc-settings{background:#282828}.download-video .rpc-settings>*{margin:8px}.download-video .rpc-settings.show{opacity:1;transform:translateX(-50%) scale(1);pointer-events:initial}.download-video .rpc-settings input[type=text]{background:0 0;color:var(--download-video-foreground);border:1px solid #8884;padding:4px;margin-left:8px}.download-video .rpc-settings input[type=text]:focus{border-color:var(--theme-color)}.download-video .rpc-settings .operations{display:flex;align-items:center;justify-content:space-evenly}.download-video .final-dir{white-space:normal;word-break:break-all}.download-video .rpc-settings-item{display:flex;align-items:center;justify-content:space-between;white-space:nowrap}.download-video .rpc-settings-item input[type=text]{flex-grow:1;margin-left:24px}.download-video button.cancel-download,.download-video button.start-download{margin-top:8px}.download-video .direct-download-header{align-self:stretch;display:flex;justify-content:space-between;align-items:center}body.dark .download-video .direct-download .progress .foreground{background:linear-gradient(to right,var(--theme-color-70),var(--theme-color))}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.html"] = `

下载视频

单个视频
批量导出
警告: 过大的视频大小会在直接下载时占用大量内存, 并可能导致浏览器标签页崩溃. 请考虑降低清晰度或使用导出选项.
预计大小: {{displaySize}}
格式
清晰度
弹幕
首选编码

直接下载

{{speed}}
{{progressPercent}}%

选集

{{selectedEpisodeCount}}/{{episodeList.length}}

导出

{{showRpcSettings ? '取消' : 'aria2 RPC'}}

aria2 RPC

配置

主机
端口
密钥
限速
默认路径
路径
最终路径: {{rpcSettings.baseDir + rpcSettings.dir}}
方法
开始下载
{{saveRpcSettingsText}}
`; -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:s}=e.import("title");const{VideoInfo:a,DanmakuInfo:i}=e.import("video-info");const{DownloadVideoPackage:n}=e.import("download-video-package");class o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fnver=0&fnval=16`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json`}}}return e.bind(this)}async getDashUrl(t){return(await this.getApiGenerator(true))(c.aid,c.cid,t)}async getUrl(t){return(await this.getApiGenerator())(c.aid,c.cid,t)}}class r extends o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fourk=1&fnval=16`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&otype=json&fourk=1&fnval=16`}}else{if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=&otype=json`}}}return e.bind(this)}}class l extends o{constructor(t){super();this.ep=t}async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}`}}}return e.bind(this)}}const c={entity:new o,aid:"",cid:""};let d=[];let p=null;class h{constructor(t,e,s){this.quality=t;this.internalName=e;this.displayName=s}async downloadInfo(t=false){const e=new u(this);await e.fetchVideoInfo(t);return e}static parseFormats(t){const e=t.accept_quality;const s=t.accept_format.split(",");const a=t.accept_description;const i=e.map((t,e)=>{return new h(t,s[e],a[e])});return i}static async getAvailableDashFormats(){const t=await c.entity.getDashUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}return h.parseFormats(e.data||e.result||e)}static async getAvailableFormats(){const t=await c.entity.getUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}const s=e.data||e.result||e;return h.parseFormats(s)}}class u{constructor(t,e){this.fragmentSplitFactor=6*2;this.workingXhr=null;this.progressMap=new Map;this.format=t;this.fragments=e||[];this.videoSpeed=new f(this)}get danmakuOption(){return t.downloadVideoDefaultDanmaku}get isDash(){return this.fragments.some(t=>t.url.includes(".m4s"))}get totalSize(){return this.fragments.map(t=>t.size).reduce((t,e)=>t+e)}async fetchVideoInfo(t=false){if(!t){const t=await c.entity.getUrl(this.format.quality);const e=await Ajax.getTextWithCredentials(t);const s=JSON.parse(e.replace(/http:/g,"https:"));const a=s.data||s.result||s;if(a.quality!==this.format.quality){throw new Error("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const i=a.durl;this.fragments=i.map(t=>{return{length:t.length,size:t.size,url:t.url,backupUrls:t.backup_url}})}else{const{dashToFragments:t,getDashInfo:s}=await e.importAsync("video-dash");const a=await s(await c.entity.getDashUrl(this.format.quality),this.format.quality);this.fragments=t(a)}return this.fragments}updateProgress(){const t=this.progressMap?[...this.progressMap.values()].reduce((t,e)=>t+e,0)/this.totalSize:0;if(t>1||t<0){console.error(`[下载视频] 进度异常: ${t}`,this.progressMap.values())}this.progress&&this.progress(t)}cancelDownload(){this.videoSpeed.stopMeasure();if(this.workingXhr!==null){this.workingXhr.forEach(t=>t.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(t){const e=[];const s=this.isDash?4*1024*1024:16*1024*1024;let a;if(t.size<=s*6){a=t.size/this.fragmentSplitFactor}else{a=s}let i=0;const n=t=>[...this.progressMap.keys()].indexOf(t)+1;while(i{const a=new XMLHttpRequest;a.open("GET",t.url);a.responseType="arraybuffer";a.withCredentials=false;a.addEventListener("progress",t=>{console.log(`[下载视频] 视频片段${n(a)}下载进度: ${t.loaded}/${r} bytes loaded, ${o}`);this.progressMap.set(a,t.loaded);this.updateProgress()});a.addEventListener("load",()=>{if((""+a.status)[0]==="2"){console.log(`[下载视频] 视频片段${n(a)}下载完成`);e(a.response)}else{s(`视频片段${n(a)}请求失败, response = ${a.status}`)}});a.addEventListener("abort",()=>s("canceled"));a.addEventListener("error",()=>{console.error(`[下载视频] 视频片段${n(a)}下载失败: ${o}`);this.progressMap.set(a,0);this.updateProgress();a.open("GET",t.url);a.setRequestHeader("Range",o);a.send()});a.setRequestHeader("Range",o);this.progressMap.set(a,0);a.send();this.workingXhr.push(a)}));i=Math.round(i+a)+1}return Promise.all(e)}async copyUrl(){const t=this.fragments.map(t=>t.url).reduce((t,e)=>t+"\r\n"+e);GM.setClipboard(t,"text")}async showUrl(){const t=this.fragments.map(t=>`\n${t.url}\n`).reduce((t,e)=>t+"\r\n"+e);Toast.success(t+`复制全部`,"显示链接");const e=await SpinQuery.select("#copy-link");e.addEventListener("click",async()=>{await this.copyUrl()})}async exportData(t=false){const e=JSON.stringify([{fragments:this.fragments,title:s(),totalSize:this.fragments.map(t=>t.size).reduce((t,e)=>t+e),referer:document.URL.replace(window.location.search,"")}]);if(t){GM.setClipboard(e,"text")}else{const t=new Blob([e],{type:"text/json"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.json`,t);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}async exportAria2(a=false){if(a){const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,a);await i.emit();const o=t.aria2RpcOption;const r=this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}const i=[];if(o.secretKey!==""){i.push(`token:${o.secretKey}`)}i.push([t.url]);i.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${s()}${a}${this.extension(t)}`,split:this.fragmentSplitFactor,dir:o.baseDir+o.dir||undefined,"max-download-limit":o.maxDownloadLimit||undefined});const n=encodeURIComponent(`${s()}${a}`);return{params:i,id:n}});const{sendRpc:l}=await e.importAsync("aria2-rpc");await l(r)}else{const t=`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}return`\n${t.url}\n referer=${document.URL.replace(window.location.search,"")}\n user-agent=${UserAgent}\n out=${s()}${a}${this.extension(t)}\n split=${this.fragmentSplitFactor}\n`.trim()}).join("\n")}\n`.trim();const e=new Blob([t],{type:"text/plain"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.txt`,e);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}extension(t){const e=t||this.fragments[0];const s=[".flv",".mp4"].find(t=>e.url.includes(t));if(s){return s}else if(e.url.includes(".m4s")){return this.fragments.indexOf(e)===0?".mp4":".m4a"}else{console.warn("No extension detected.");return".flv"}}async downloadDanmaku(){if(this.danmakuOption!=="无"){const t=new i(c.cid);await t.fetchInfo();if(this.danmakuOption==="XML"){return t.rawXML}else{const{convertToAss:s}=await e.importAsync("download-danmaku");return s(t.rawXML)}}else{return null}}async download(){this.workingXhr=[];this.progressMap=new Map;this.updateProgress();const t=[];this.videoSpeed.startMeasure();for(const e of this.fragments){const s=await this.downloadFragment(e);t.push(s)}if(t.length<1){throw new Error("下载失败.")}const e=s();const a=new n;t.forEach((s,i)=>{let n;const o=this.fragments[i];if(t.length>1&&!this.isDash){n=`${e} - ${i+1}${this.extension(o)}`}else{n=`${e}${this.extension(o)}`}a.add(n,new Blob(Array.isArray(s)?s:[s]))});const i=await this.downloadDanmaku();a.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,i);await a.emit(e+".zip");this.progress&&this.progress(0);this.videoSpeed.stopMeasure()}}class f{constructor(t){this.lastProgress=0;this.measureInterval=1e3;this.workingDownloader=t}startMeasure(){this.intervalTimer=setInterval(()=>{const t=this.workingDownloader.progressMap?[...this.workingDownloader.progressMap.values()].reduce((t,e)=>t+e,0):0;const e=t-this.lastProgress;if(this.speedUpdate!==undefined){this.speedUpdate(formatFileSize(e)+"/s")}this.lastProgress=t},this.measureInterval)}stopMeasure(){clearInterval(this.intervalTimer)}}async function w(){const t=await SpinQuery.select(()=>(unsafeWindow||window).aid);const e=await SpinQuery.select(()=>(unsafeWindow||window).cid);if(!(t&&e)){return false}c.aid=t;c.cid=e;if(document.URL.includes("bangumi")){c.entity=new r}else if(document.URL.includes("cheese")){const t=document.URL.match(/cheese\/play\/ep([\d]+)/);c.entity=new l(t[1])}else{c.entity=new o}try{d=await h.getAvailableFormats()}catch(t){return false}return true}const m=e=>{const s=t.downloadVideoQuality;const a=e.find(t=>t.quality===s);if(a){return a}const i=e.filter(t=>t.quality{const t=dq(".download-video");t.classList.toggle("opened");window.scroll(0,0);dq(".gui-settings-mask").click()});document.body.insertAdjacentHTML("beforeend",e.import("downloadVideoHtml"));y()}async function y(){let o;const r=new Vue({el:".download-video",components:{VDropdown:()=>e.importAsync("v-dropdown.vue"),VCheckbox:()=>e.importAsync("v-checkbox.vue"),RpcProfiles:()=>e.importAsync("aria2-rpc-profiles.vue")},data:{downloadSingle:true,coverUrl:EmptyImageUrl,aid:c.aid,cid:c.cid,dashModel:{value:t.downloadVideoFormat,items:["flv","dash"]},qualityModel:{value:p.displayName,items:d.map(t=>t.displayName)},danmakuModel:{value:t.downloadVideoDefaultDanmaku,items:["无","XML","ASS"]},codecModel:{value:t.downloadVideoDashCodec,items:["AVC/H.264","HEVC/H.265"]},progressPercent:0,size:"获取大小中",blobUrl:"",episodeList:[],downloading:false,speed:"",batch:false,rpcSettings:t.aria2RpcOption,showRpcSettings:false,busy:false,saveRpcSettingsText:"保存配置",enableDash:t.enableDashDownload,lastDirectDownloadLink:""},computed:{displaySize(){if(typeof this.size==="string"){return this.size}return formatFileSize(this.size)},sizeWarning(){if(typeof this.size==="string"){return false}return this.size>1073741824},selectedEpisodeCount(){return this.episodeList.filter(t=>t.checked).length},dash(){return this.dashModel.value==="dash"}},methods:{close(){this.$el.classList.remove("opened")},danmakuOptionChange(){t.downloadVideoDefaultDanmaku=this.danmakuModel.value},async codecChange(){t.downloadVideoDashCodec=this.codecModel.value;await this.formatChange()},async dashChange(){console.log("dash change");const e=t.downloadVideoFormat=this.dashModel.value;let s=[];if(e==="flv"){s=await h.getAvailableFormats()}else{s=await h.getAvailableDashFormats()}d=s;p=m(d);this.qualityModel.items=s.map(t=>t.displayName);this.qualityModel.value=this.qualityModel.items[d.indexOf(p)];await this.formatChange()},async formatChange(e=false){console.log("format change");const s=this.getFormat();if(e){t.downloadVideoQuality=s.quality}try{this.size="获取大小中";const t=await s.downloadInfo(this.dash);this.size=t.totalSize}catch(t){this.size="获取大小失败";throw t}},getFormat(){const t=d.find(t=>t.displayName===this.qualityModel.value);if(!t){console.error(`No format found. model value = ${this.qualityModel.value}`);return null}return t},async exportData(t){if(this.busy===true){return}try{this.busy=true;if(!this.downloadSingle){await this.exportBatchData(t);return}const a=this.getFormat();const i=await a.downloadInfo(this.dash);switch(t){case"copyLink":await i.copyUrl();Toast.success("已复制链接到剪贴板.","下载视频",3e3);break;case"showLink":await i.showUrl();break;case"aria2":await i.exportAria2(false);break;case"aria2RPC":await i.exportAria2(true);break;case"copyVLD":await i.exportData(true);Toast.success("已复制VLD数据到剪贴板.","下载视频",3e3);break;case"exportVLD":await i.exportData(false);break;case"ffmpegFragments":if(i.fragments.length<2){Toast.info("当前视频没有分段.","分段列表",3e3)}else{const{getFragmentsList:t}=await e.importAsync("ffmpeg-support");const a=new n;a.add("ffmpeg-files.txt",t(i.fragments.length,s(),i.fragments.map(t=>i.extension(t))));await a.emit()}break;default:break}}catch(t){logError(t)}finally{this.busy=false}},async exportBatchData(t){const a=this.episodeList;if(a.every(t=>t.checked===false)){Toast.info("请至少选择1集或以上的数量!","批量导出",3e3);return}const o=t=>{const e=a.find(e=>e.cid===t.cid);if(e===undefined){return false}return e.checked};const r=this.getFormat();if(this.danmakuModel.value!=="无"){const t=Toast.info("下载弹幕中...","批量导出");const s=new n;try{if(this.danmakuModel.value==="XML"){for(const t of a.filter(o)){const e=new i(t.cid);await e.fetchInfo();s.add(t.title+".xml",e.rawXML)}}else{const{convertToAss:t}=await e.importAsync("download-danmaku");for(const e of a.filter(o)){const a=new i(e.cid);await a.fetchInfo();s.add(e.title+".ass",await t(a.rawXML))}}await s.emit(this.cid+".danmakus.zip")}catch(t){logError(`弹幕下载失败`);throw t}finally{t.dismiss()}}const l=Toast.info("获取链接中...","批量导出");const d=this.batchExtractor;d.config.itemFilter=o;d.config.api=await c.entity.getApiGenerator(this.dash);let p;try{switch(t){case"aria2":p=await d.collectAria2(r,l,false);await n.single(s(false)+".txt",new Blob([p],{type:"text/plain"}),{ffmpeg:this.ffmpegOption});return;case"aria2RPC":await d.collectAria2(r,l,true);Toast.success(`成功发送了批量请求.`,"aria2 RPC",3e3);return;case"copyVLD":GM.setClipboard(await d.collectData(r,l),{mimetype:"text/plain"});Toast.success("已复制批量vld数据到剪贴板.","批量导出",3e3);return;case"exportVLD":p=await d.collectData(r,l);await n.single(s(false)+".json",new Blob([p],{type:"text/json"}),{ffmpeg:this.ffmpegOption});return;case"ffmpegFragments":{const t=await d.getRawItems(r);const a=new u(r,t[0].fragments);const{getBatchFragmentsList:i}=await e.importAsync("ffmpeg-support");const o=i(t,this.dash||a.extension());if(!o){Toast.info("所有选择的分P都没有分段.","分段列表",3e3)}else{const t=new n;for(const[e,s]of o.entries()){t.add(e,s)}await t.emit(escapeFilename(`${s(false)}.zip`))}}break;case"ffmpegEpisodes":{const t=await d.getRawItems(r);const s=new u(r,t[0].fragments);const{getBatchEpisodesList:a}=await e.importAsync("ffmpeg-support");const i=a(t,this.dash||s.extension());const o=new n;o.add("ffmpeg-files.txt",i);await o.emit()}break;default:return}}catch(t){logError(t)}finally{l.dismiss()}},async checkBatch(){const t=["/www.bilibili.com/bangumi","/www.bilibili.com/video/av"];if(!t.some(t=>document.URL.includes(t))){this.batch=false;this.episodeList=[];return}const{BatchExtractor:s}=await e.importAsync("batch-download");if(await s.test()!==true){this.batch=false;this.episodeList=[];return}const a=this.batchExtractor=new s;this.batch=true;this.episodeList=(await a.getItemList()).map((t,e)=>{return{aid:t.aid,cid:t.cid,title:t.title,index:e,checked:true}})},cancelDownload(){if(o){o.cancelDownload()}},async startDownload(){const t=this.getFormat();try{this.downloading=true;const e=await t.downloadInfo(this.dash);e.videoSpeed.speedUpdate=(t=>this.speed=t);e.progress=(t=>{this.progressPercent=Math.trunc(t*100)});o=e;await e.download();this.lastDirectDownloadLink=n.lastPackageUrl}catch(t){if(t!=="canceled"){logError(t)}this.progressPercent=0}finally{this.downloading=false;this.speed=""}},selectAllEpisodes(){this.episodeList.forEach(t=>t.checked=true)},unselectAllEpisodes(){this.episodeList.forEach(t=>t.checked=false)},inverseAllEpisodes(){this.episodeList.forEach(t=>t.checked=!t.checked)},toggleRpcSettings(){this.showRpcSettings=!this.showRpcSettings},saveRpcSettings(){if(this.rpcSettings.host===""){this.rpcSettings.host="127.0.0.1"}if(this.rpcSettings.port===""){this.rpcSettings.port="6800"}t.aria2RpcOption=this.rpcSettings;const e=t.aria2RpcOptionProfiles.find(e=>e.name===t.aria2RpcOptionSelectedProfile);if(e){Object.assign(e,this.rpcSettings);t.aria2RpcOptionProfiles=t.aria2RpcOptionProfiles}this.saveRpcSettingsText="已保存";setTimeout(()=>this.saveRpcSettingsText="保存配置",2e3)},updateProfile(e){t.aria2RpcOption=this.rpcSettings=_.omit(e,"name")}},async mounted(){}});Observer.videoChange(async()=>{r.close();r.batch=false;r.downloadSingle=true;const t=dq("#download-video");const e=await w();t.style.display=e?"flex":"none";if(!e){return}r.aid=c.aid;r.cid=c.cid;try{const t=new a(c.aid);await t.fetchInfo();r.coverUrl=t.coverUrl.replace("http:","https:")}catch(t){r.coverUrl=EmptyImageUrl}r.dashChange();await r.checkBatch()})}return{widget:{content:`\n`,condition:w,success:g}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:s}=e.import("title");const{VideoInfo:a,DanmakuInfo:i}=e.import("video-info");const{DownloadVideoPackage:n}=e.import("download-video-package");class o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fnver=0&fnval=16`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json`}}}return e.bind(this)}async getDashUrl(t){return(await this.getApiGenerator(true))(c.aid,c.cid,t)}async getUrl(t){return(await this.getApiGenerator())(c.aid,c.cid,t)}}class r extends o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fourk=1&fnval=16`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&otype=json&fourk=1&fnval=16`}}else{if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=&otype=json`}}}return e.bind(this)}}class l extends o{constructor(t){super();this.ep=t}async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}`}}}return e.bind(this)}}const c={entity:new o,aid:"",cid:""};let d=[];let p=null;class h{constructor(t,e,s){this.quality=t;this.internalName=e;this.displayName=s}async downloadInfo(t=false){const e=new u(this);await e.fetchVideoInfo(t);return e}static parseFormats(t){const e=t.accept_quality;const s=t.accept_format.split(",");const a=t.accept_description;const i=e.map((t,e)=>{return new h(t,s[e],a[e])});return i}static async getAvailableDashFormats(){const t=await c.entity.getDashUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}return h.parseFormats(e.data||e.result||e)}static async getAvailableFormats(){const t=await c.entity.getUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}const s=e.data||e.result||e;return h.parseFormats(s)}}class u{constructor(t,e){this.fragmentSplitFactor=6*2;this.workingXhr=null;this.progressMap=new Map;this.format=t;this.fragments=e||[];this.videoSpeed=new f(this)}get danmakuOption(){return t.downloadVideoDefaultDanmaku}get isDash(){return this.fragments.some(t=>t.url.includes(".m4s"))}get totalSize(){return this.fragments.map(t=>t.size).reduce((t,e)=>t+e)}async fetchVideoInfo(t=false){if(!t){const t=await c.entity.getUrl(this.format.quality);const e=await Ajax.getTextWithCredentials(t);const s=JSON.parse(e.replace(/http:/g,"https:"));const a=s.data||s.result||s;if(a.quality!==this.format.quality){throw new Error("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const i=a.durl;this.fragments=i.map(t=>{return{length:t.length,size:t.size,url:t.url,backupUrls:t.backup_url}})}else{const{dashToFragments:t,getDashInfo:s}=await e.importAsync("video-dash");const a=await s(await c.entity.getDashUrl(this.format.quality),this.format.quality);this.fragments=t(a)}return this.fragments}updateProgress(){const t=this.progressMap?[...this.progressMap.values()].reduce((t,e)=>t+e,0)/this.totalSize:0;if(t>1||t<0){console.error(`[下载视频] 进度异常: ${t}`,this.progressMap.values())}this.progress&&this.progress(t)}cancelDownload(){this.videoSpeed.stopMeasure();if(this.workingXhr!==null){this.workingXhr.forEach(t=>t.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(t){const e=[];const s=this.isDash?4*1024*1024:16*1024*1024;let a;if(t.size<=s*6){a=t.size/this.fragmentSplitFactor}else{a=s}let i=0;const n=t=>[...this.progressMap.keys()].indexOf(t)+1;while(i{const a=new XMLHttpRequest;a.open("GET",t.url);a.responseType="arraybuffer";a.withCredentials=false;a.addEventListener("progress",t=>{console.log(`[下载视频] 视频片段${n(a)}下载进度: ${t.loaded}/${r} bytes loaded, ${o}`);this.progressMap.set(a,t.loaded);this.updateProgress()});a.addEventListener("load",()=>{if((""+a.status)[0]==="2"){console.log(`[下载视频] 视频片段${n(a)}下载完成`);e(a.response)}else{s(`视频片段${n(a)}请求失败, response = ${a.status}`)}});a.addEventListener("abort",()=>s("canceled"));a.addEventListener("error",()=>{console.error(`[下载视频] 视频片段${n(a)}下载失败: ${o}`);this.progressMap.set(a,0);this.updateProgress();a.open("GET",t.url);a.setRequestHeader("Range",o);a.send()});a.setRequestHeader("Range",o);this.progressMap.set(a,0);a.send();this.workingXhr.push(a)}));i=Math.round(i+a)+1}return Promise.all(e)}async copyUrl(){const t=this.fragments.map(t=>t.url).reduce((t,e)=>t+"\r\n"+e);GM.setClipboard(t,"text")}async showUrl(){const t=this.fragments.map(t=>`\n${t.url}\n`).reduce((t,e)=>t+"\r\n"+e);Toast.success(t+`复制全部`,"显示链接");const e=await SpinQuery.select("#copy-link");e.addEventListener("click",async()=>{await this.copyUrl()})}async exportData(t=false){const e=JSON.stringify([{fragments:this.fragments,title:s(),totalSize:this.fragments.map(t=>t.size).reduce((t,e)=>t+e),referer:document.URL.replace(window.location.search,"")}]);if(t){GM.setClipboard(e,"text")}else{const t=new Blob([e],{type:"text/json"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.json`,t);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}async exportAria2(a=false){if(a){const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,a);await i.emit();const o=t.aria2RpcOption;const r=this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}const i=[];if(o.secretKey!==""){i.push(`token:${o.secretKey}`)}i.push([t.url]);i.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${s()}${a}${this.extension(t)}`,split:this.fragmentSplitFactor,dir:o.baseDir+o.dir||undefined,"max-download-limit":o.maxDownloadLimit||undefined});const n=encodeURIComponent(`${s()}${a}`);return{params:i,id:n}});const{sendRpc:l}=await e.importAsync("aria2-rpc");await l(r)}else{const t=`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}return`\n${t.url}\n referer=${document.URL.replace(window.location.search,"")}\n user-agent=${UserAgent}\n out=${s()}${a}${this.extension(t)}\n split=${this.fragmentSplitFactor}\n`.trim()}).join("\n")}\n`.trim();const e=new Blob([t],{type:"text/plain"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.txt`,e);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}extension(t){const e=t||this.fragments[0];const s=[".flv",".mp4"].find(t=>e.url.includes(t));if(s){return s}else if(e.url.includes(".m4s")){return this.fragments.indexOf(e)===0?".mp4":".m4a"}else{console.warn("No extension detected.");return".flv"}}async downloadDanmaku(){if(this.danmakuOption!=="无"){const t=new i(c.cid);await t.fetchInfo();if(this.danmakuOption==="XML"){return t.rawXML}else{const{convertToAss:s}=await e.importAsync("download-danmaku");return s(t.rawXML)}}else{return null}}async download(){this.workingXhr=[];this.progressMap=new Map;this.updateProgress();const t=[];this.videoSpeed.startMeasure();for(const e of this.fragments){const s=await this.downloadFragment(e);t.push(s)}if(t.length<1){throw new Error("下载失败.")}const e=s();const a=new n;t.forEach((s,i)=>{let n;const o=this.fragments[i];if(t.length>1&&!this.isDash){n=`${e} - ${i+1}${this.extension(o)}`}else{n=`${e}${this.extension(o)}`}a.add(n,new Blob(Array.isArray(s)?s:[s]))});const i=await this.downloadDanmaku();a.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,i);await a.emit(e+".zip");this.progress&&this.progress(0);this.videoSpeed.stopMeasure()}}class f{constructor(t){this.lastProgress=0;this.measureInterval=1e3;this.workingDownloader=t}startMeasure(){this.intervalTimer=setInterval(()=>{const t=this.workingDownloader.progressMap?[...this.workingDownloader.progressMap.values()].reduce((t,e)=>t+e,0):0;const e=t-this.lastProgress;if(this.speedUpdate!==undefined){this.speedUpdate(formatFileSize(e)+"/s")}this.lastProgress=t},this.measureInterval)}stopMeasure(){clearInterval(this.intervalTimer)}}async function w(){const t=await SpinQuery.select(()=>(unsafeWindow||window).aid);const e=await SpinQuery.select(()=>(unsafeWindow||window).cid);if(!(t&&e)){return false}c.aid=t;c.cid=e;if(document.URL.includes("bangumi")){c.entity=new r}else if(document.URL.includes("cheese")){const t=document.URL.match(/cheese\/play\/ep([\d]+)/);c.entity=new l(t[1])}else{c.entity=new o}try{d=await h.getAvailableFormats()}catch(t){return false}return true}const m=e=>{const s=t.downloadVideoQuality;const a=e.find(t=>t.quality===s);if(a){return a}const i=e.filter(t=>t.quality{const t=dq(".download-video");t.classList.toggle("opened");window.scroll(0,0);dq(".gui-settings-mask").click()});document.body.insertAdjacentHTML("beforeend",e.import("downloadVideoHtml"));y()}async function y(){let o;const r=new Vue({el:".download-video",components:{VDropdown:()=>e.importAsync("v-dropdown.vue"),VCheckbox:()=>e.importAsync("v-checkbox.vue"),RpcProfiles:()=>e.importAsync("aria2-rpc-profiles.vue")},data:{downloadSingle:true,coverUrl:EmptyImageUrl,aid:c.aid,cid:c.cid,dashModel:{value:t.downloadVideoFormat,items:["flv","dash"]},qualityModel:{value:p.displayName,items:d.map(t=>t.displayName)},danmakuModel:{value:t.downloadVideoDefaultDanmaku,items:["无","XML","ASS"]},codecModel:{value:t.downloadVideoDashCodec,items:["AVC/H.264","HEVC/H.265"]},progressPercent:0,size:"获取大小中",blobUrl:"",episodeList:[],downloading:false,speed:"",batch:false,rpcSettings:t.aria2RpcOption,showRpcSettings:false,busy:false,saveRpcSettingsText:"保存配置",enableDash:t.enableDashDownload,lastDirectDownloadLink:""},computed:{displaySize(){if(typeof this.size==="string"){return this.size}return formatFileSize(this.size)},sizeWarning(){if(typeof this.size==="string"){return false}return this.size>1073741824},selectedEpisodeCount(){return this.episodeList.filter(t=>t.checked).length},dash(){return this.dashModel.value==="dash"}},methods:{close(){this.$el.classList.remove("opened")},danmakuOptionChange(){t.downloadVideoDefaultDanmaku=this.danmakuModel.value},async codecChange(){t.downloadVideoDashCodec=this.codecModel.value;await this.formatChange()},async dashChange(){console.log("dash change");const e=t.downloadVideoFormat=this.dashModel.value;let s=[];if(e==="flv"){s=await h.getAvailableFormats()}else{s=await h.getAvailableDashFormats()}d=s;p=m(d);this.qualityModel.items=s.map(t=>t.displayName);this.qualityModel.value=this.qualityModel.items[d.indexOf(p)];await this.formatChange()},async formatChange(e=false){console.log("format change");const s=this.getFormat();if(e){t.downloadVideoQuality=s.quality}try{this.size="获取大小中";const t=await s.downloadInfo(this.dash);this.size=t.totalSize}catch(t){this.size="获取大小失败";throw t}},getFormat(){const t=d.find(t=>t.displayName===this.qualityModel.value);if(!t){console.error(`No format found. model value = ${this.qualityModel.value}`);return null}return t},async exportData(t){if(this.busy===true){return}try{this.busy=true;if(!this.downloadSingle){await this.exportBatchData(t);return}const a=this.getFormat();const i=await a.downloadInfo(this.dash);switch(t){case"copyLink":await i.copyUrl();Toast.success("已复制链接到剪贴板.","下载视频",3e3);break;case"showLink":await i.showUrl();break;case"aria2":await i.exportAria2(false);break;case"aria2RPC":await i.exportAria2(true);break;case"copyVLD":await i.exportData(true);Toast.success("已复制VLD数据到剪贴板.","下载视频",3e3);break;case"exportVLD":await i.exportData(false);break;case"ffmpegFragments":if(i.fragments.length<2){Toast.info("当前视频没有分段.","分段列表",3e3)}else{const{getFragmentsList:t}=await e.importAsync("ffmpeg-support");const a=new n;a.add("ffmpeg-files.txt",t(i.fragments.length,s(),i.fragments.map(t=>i.extension(t))));await a.emit()}break;default:break}}catch(t){logError(t)}finally{this.busy=false}},async exportBatchData(t){const a=this.episodeList;if(a.every(t=>t.checked===false)){Toast.info("请至少选择1集或以上的数量!","批量导出",3e3);return}const o=t=>{const e=a.find(e=>e.cid===t.cid);if(e===undefined){return false}return e.checked};const r=this.getFormat();if(this.danmakuModel.value!=="无"){const t=Toast.info("下载弹幕中...","批量导出");const s=new n;try{if(this.danmakuModel.value==="XML"){for(const t of a.filter(o)){const e=new i(t.cid);await e.fetchInfo();s.add(t.title+".xml",e.rawXML)}}else{const{convertToAss:t}=await e.importAsync("download-danmaku");for(const e of a.filter(o)){const a=new i(e.cid);await a.fetchInfo();s.add(e.title+".ass",await t(a.rawXML))}}await s.emit(this.cid+".danmakus.zip")}catch(t){logError(`弹幕下载失败`);throw t}finally{t.dismiss()}}const l=Toast.info("获取链接中...","批量导出");const d=this.batchExtractor;d.config.itemFilter=o;d.config.api=await c.entity.getApiGenerator(this.dash);let p;try{switch(t){case"aria2":p=await d.collectAria2(r,l,false);await n.single(s(false)+".txt",new Blob([p],{type:"text/plain"}),{ffmpeg:this.ffmpegOption});return;case"aria2RPC":await d.collectAria2(r,l,true);Toast.success(`成功发送了批量请求.`,"aria2 RPC",3e3);return;case"copyVLD":GM.setClipboard(await d.collectData(r,l),{mimetype:"text/plain"});Toast.success("已复制批量vld数据到剪贴板.","批量导出",3e3);return;case"exportVLD":p=await d.collectData(r,l);await n.single(s(false)+".json",new Blob([p],{type:"text/json"}),{ffmpeg:this.ffmpegOption});return;case"ffmpegFragments":{const t=await d.getRawItems(r);const a=new u(r,t[0].fragments);const{getBatchFragmentsList:i}=await e.importAsync("ffmpeg-support");const o=i(t,this.dash||a.extension());if(!o){Toast.info("所有选择的分P都没有分段.","分段列表",3e3)}else{const t=new n;for(const[e,s]of o.entries()){t.add(e,s)}await t.emit(escapeFilename(`${s(false)}.zip`))}}break;case"ffmpegEpisodes":{const t=await d.getRawItems(r);const s=new u(r,t[0].fragments);const{getBatchEpisodesList:a}=await e.importAsync("ffmpeg-support");const i=a(t,this.dash||s.extension());const o=new n;o.add("ffmpeg-files.txt",i);await o.emit()}break;default:return}}catch(t){logError(t)}finally{l.dismiss()}},async checkBatch(){const t=["//www.bilibili.com/bangumi","//www.bilibili.com/video/av","//www.bilibili.com/blackboard/bnj2020.html"];if(!t.some(t=>document.URL.includes(t))){this.batch=false;this.episodeList=[];return}const{BatchExtractor:s}=await e.importAsync("batch-download");if(await s.test()!==true){this.batch=false;this.episodeList=[];return}const a=this.batchExtractor=new s;this.batch=true;this.episodeList=(await a.getItemList()).map((t,e)=>{return{aid:t.aid,cid:t.cid,title:t.title,index:e,checked:true}})},cancelDownload(){if(o){o.cancelDownload()}},async startDownload(){const t=this.getFormat();try{this.downloading=true;const e=await t.downloadInfo(this.dash);e.videoSpeed.speedUpdate=(t=>this.speed=t);e.progress=(t=>{this.progressPercent=Math.trunc(t*100)});o=e;await e.download();this.lastDirectDownloadLink=n.lastPackageUrl}catch(t){if(t!=="canceled"){logError(t)}this.progressPercent=0}finally{this.downloading=false;this.speed=""}},selectAllEpisodes(){this.episodeList.forEach(t=>t.checked=true)},unselectAllEpisodes(){this.episodeList.forEach(t=>t.checked=false)},inverseAllEpisodes(){this.episodeList.forEach(t=>t.checked=!t.checked)},toggleRpcSettings(){this.showRpcSettings=!this.showRpcSettings},saveRpcSettings(){if(this.rpcSettings.host===""){this.rpcSettings.host="127.0.0.1"}if(this.rpcSettings.port===""){this.rpcSettings.port="6800"}t.aria2RpcOption=this.rpcSettings;const e=t.aria2RpcOptionProfiles.find(e=>e.name===t.aria2RpcOptionSelectedProfile);if(e){Object.assign(e,this.rpcSettings);t.aria2RpcOptionProfiles=t.aria2RpcOptionProfiles}this.saveRpcSettingsText="已保存";setTimeout(()=>this.saveRpcSettingsText="保存配置",2e3)},updateProfile(e){t.aria2RpcOption=this.rpcSettings=_.omit(e,"name")}},async mounted(){}});Observer.videoChange(async()=>{r.close();r.batch=false;r.downloadSingle=true;const t=dq("#download-video");const e=await w();t.style.display=e?"flex":"none";if(!e){return}r.aid=c.aid;r.cid=c.cid;try{const t=new a(c.aid);await t.fetchInfo();r.coverUrl=t.coverUrl.replace("http:","https:")}catch(t){r.coverUrl=EmptyImageUrl}r.dashChange();await r.checkBatch()})}return{widget:{content:`\n`,condition:w,success:g}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video-package.min.js"] = (()=>{return(e,t)=>{class n{constructor(e={}){this.config=e;this.entries=[]}download(e,t){const a=document.createElement("a");const i=URL.createObjectURL(t);if(n.lastPackageUrl){URL.revokeObjectURL(n.lastPackageUrl)}n.lastPackageUrl=i;a.setAttribute("href",i);a.setAttribute("download",escapeFilename(e));document.body.appendChild(a);a.click();a.remove()}add(e,t){if(t===null||t===undefined){return}this.entries.push({name:escapeFilename(e),data:t})}async blob(){if(this.entries.length===0){return null}if(this.entries.length===1){const e=this.entries[0].data;return typeof e==="string"?new Blob([e]):e}const e=new JSZip;this.entries.forEach(({name:t,data:n})=>{e.file(t,n)});return await e.generateAsync({type:"blob"})}async emit(e){if(this.entries.length===0){return}if(!e||this.entries.length===1){e=this.entries[0].name}const t=await this.blob();if(!t){return}return this.download(e,t)}static async single(e,t,a={}){const i=new n(a);i.add(e,t);return await i.emit()}}n.lastPackageUrl="";return{export:{DownloadVideoPackage:n}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dpi-img.vue.min.js"] = (()=>{return(t,s)=>{const r=``;return{export:Object.assign({template:r},{props:["size","src","blur","root","rootMargin","threshold"],data(){return{srcset:null,actualSrc:null}},watch:{size(){this.sourceChange()},src(){this.sourceChange()}},methods:{sourceChange(){if(this.actualSrc===null||this.srcset===null){return}this.calcSrc()},calcSrc(){if(!this.src||!this.size){return}if(this.src.includes("//static.hdslb.com/images/member/noface.gif")){this.srcset=this.src;this.actualSrc=this.src;return}const t=this.src.substring(this.src.lastIndexOf(".")+1);this.srcset=getDpiSourceSet(this.src,this.size,t);this.actualSrc=this.src}},mounted(){const t={root:this.root,rootMargin:this.rootMargin||"200px",threshold:this.threshold};const s=new IntersectionObserver(t=>{t.forEach(t=>{if(t.isIntersecting){this.calcSrc();s.disconnect()}})},t);s.observe(this.$el)},computed:{width(){if(typeof this.size==="object"&&"width"in this.size){return this.size.width}return null},height(){if(typeof this.size==="object"&&"height"in this.size){return this.size.height}return null}}})}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/expand-danmaku.min.js"] = (()=>{return(e,a)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}Observer.videoChange(async()=>{const e=await SpinQuery.select(".bui-collapse-wrap");if(e&&e.classList.contains("bui-collapse-wrap-folded")){const e=await SpinQuery.select(".bui-collapse-header");e.click()}})}})(); diff --git a/bilibili-evolved.preview-offline.user.js b/bilibili-evolved.preview-offline.user.js index 84c93fe52..ebdb4d80e 100644 --- a/bilibili-evolved.preview-offline.user.js +++ b/bilibili-evolved.preview-offline.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name Bilibili Evolved (Preview Offline) -// @version 558.80 +// @version 559.80 // @description Bilibili Evolved 的预览离线版, 可以抢先体验新功能, 并且所有功能都已内置于脚本中. // @author Grant Howard, Coulomb-G // @copyright 2019, Grant Howard (https://github.com/the1812) & Coulomb-G (https://github.com/Coulomb-G) @@ -1131,7 +1131,7 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/auto-draw.min.js"] = (()=>{return(t,n)=>{(async()=>{if(!/^https:\/\/live\.bilibili\.com\/[\d]+/.test(document.URL)){return}const t=await SpinQuery.condition(()=>dq(".chat-popups-section"),t=>t.querySelector("chat-draw-area")===null);if(!t){console.warn("[自动领奖] 未能找到弹窗容器");return}Observer.childListSubtree(t,()=>{let t;console.log("draw button = ",dq(".chat-popups-section .draw>span:nth-child(3)"));t=dq(".chat-popups-section .draw>span:nth-child(3)");if(t===null){const t=dq(".chat-popups-section .function-bar>span:nth-child(3)");if(t!==null){const n=Observer.attributes(t,()=>{if(t.style.display!=="none"){n.forEach(t=>t.stop());t.click()}})}}if(t!==null){t.click()}})})()}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/auto-play.min.js"] = (()=>{return(e,d)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}SpinQuery.condition(()=>document.querySelector(".bilibili-player-video video"),e=>e&&e.paused===true,e=>e.play())}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/bangumi-timeline.vue.min.js"] = (()=>{return(e,i)=>{const n=`
时间表
{{t.date}}
{{t.dayOfWeekText}}
`;i.applyStyleFromText(`.simple-home .bangumi-timeline-container{width:100%}.simple-home .bangumi-timeline-container .bangumi-timeline{display:flex;align-items:flex-start;overflow:auto;scrollbar-width:none!important;scroll-behavior:smooth;scroll-snap-type:x mandatory;--column-count:1;--column-width:250px;--column-gap:24px;width:calc(var(--column-count) * (var(--column-width) + var(--column-gap)) - .5 * var(--column-gap))}.simple-home .bangumi-timeline-container .bangumi-timeline::-webkit-scrollbar{height:0!important;width:0!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day{scroll-snap-align:start;width:var(--column-width);max-height:calc(var(--total-height) - 32px);overflow:auto;flex:0 0 auto;padding-bottom:16px;scroll-behavior:smooth;scrollbar-width:none!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day::-webkit-scrollbar{height:0!important;width:0!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container{display:grid;grid-template:"icon date" 1fr "icon dow" 1fr/auto 1fr;grid-column-gap:8px;column-gap:8px;height:60px;padding-bottom:12px;cursor:pointer;position:sticky;top:0;z-index:1;background-color:#f4f4f4}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container{background-color:#181818}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon{grid-area:icon;justify-self:center;align-self:center;background-image:url(//s1.hdslb.com/bfs/static/bangumi-timeline/asserts/icons.png);background-size:247px 663px;width:38px;height:36px;background-position-x:-146px;filter:brightness(.5)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-1{background-position-y:-36px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-2{background-position-y:-108px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-3{background-position-y:-180px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-4{background-position-y:-252px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-5{background-position-y:-324px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-6{background-position-y:-396px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-7{background-position-y:-468px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .date{grid-area:date;align-self:end;opacity:.75}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .day-of-week{grid-area:dow;align-self:start;font-weight:700;font-size:15px;opacity:.75}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .icon{width:50px;height:48px;background-position-x:-56px;filter:none}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .date{font-size:14px;opacity:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .day-of-week{font-size:18px;opacity:1}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon{filter:brightness(.8)}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .icon{filter:invert(1)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container{margin-top:18px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container>:not(:last-child){margin-bottom:8px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time{display:flex;align-items:center;font-weight:700}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent{color:var(--theme-color)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent~.bangumi-item{box-shadow:0 4px 8px 0 #0001,inset 0 0 0 2px var(--theme-color)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent~.bangumi-item .cover-container{margin:2px;border-radius:6px 0 0 6px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time .be-icon{margin-right:6px;font-size:18px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item{display:grid;height:72px;grid-template:"cover title" auto "cover ep" auto/72px 1fr;background-color:#fff;color:inherit;box-shadow:0 4px 8px 0 #0001;border-radius:8px;grid-row-gap:8px;row-gap:8px}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item{background-color:#282828}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .cover-container{grid-area:cover;overflow:hidden;border-radius:8px 0 0 8px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .cover-container img{width:100%;height:100%}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item.delay{opacity:.4}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item.delay:hover{opacity:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item:hover{color:var(--theme-color)!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item:hover .cover-container img{transform:scale(1.05)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .title{grid-area:title;align-self:end;font-size:13px;font-weight:700;margin:0 12px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;max-height:2.6em;word-break:break-all;line-height:1.3;overflow:hidden}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .ep-title{grid-area:ep;align-self:start;margin:0 12px;display:flex;align-items:center}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .ep-title .be-icon{color:var(--theme-color);margin-right:4px;font-size:18px;line-height:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day:not(:last-child){margin-right:var(--column-gap)}@media screen and (min-width:1000px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:2}}@media screen and (min-width:1300px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:3}}@media screen and (min-width:1550px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:4}}`,"bangumi-timeline-style");const t={global:"https://bangumi.bilibili.com/web_api/timeline_global",chinese:"https://bangumi.bilibili.com/web_api/timeline_cn"};return{export:Object.assign({template:n},{components:{Icon:()=>i.importAsync("icon.vue"),DpiImg:()=>i.importAsync("dpi-img.vue")},props:{type:{type:String,default:"global",required:false}},data(){return{timeline:[],recentTime:""}},computed:{apiUrl(){return t[this.type]||t.global}},watch:{type(){this.updateTimeline()}},methods:{calculateRecentTime(){const e=this.timeline.find(e=>e.isToday);const i=Number(new Date);const n=Object.entries(e.bangumis).map(([e,i])=>{return{time:e,timestamp:i[0].timestamp,bangumis:i}});const t=n.filter(e=>e.timestampe.time)}},moveTimeline(e){const i=e.currentTarget;const n=i.parentElement;const t=n.parentElement;const a=getComputedStyle(t);const m=parseInt(a.getPropertyValue("--column-width").match(/(.+)px/)[1])+parseInt(a.getPropertyValue("--column-gap").match(/(.+)px/)[1]);const o=n.offsetLeft-t.scrollLeft;if(o=m*2){t.scrollLeft+=m}console.log(e,i,n,t);console.log(m,m*2,n.offsetLeft,t.scrollLeft,o)},async updateTimeline(){try{const e=await Ajax.getJsonWithCredentials(this.apiUrl);if(e.code!==0){throw new Error(e.message)}const i=e.result.map(e=>{return{date:e.date,dayOfWeek:e.day_of_week,dayOfWeekText:"周"+[,"一","二","三","四","五","六","日"][e.day_of_week],isToday:Boolean(e.is_today),bangumis:_.groupBy(e.seasons.map(e=>{return{coverUrl:e.cover.replace("http:","https:"),squareCoverUrl:e.square_cover.replace("http:","https:"),time:e.pub_time,timestamp:e.pub_ts*1e3,url:e.url,follow:Boolean(e.follow),epTitle:e.pub_index||e.delay_reason+" "+e.delay_index,title:e.title,delay:Boolean(e.delay),published:Boolean(e.is_published)}}),e=>e.time)}});this.timeline=i;this.calculateRecentTime();setInterval(()=>{if(document.hasFocus()){this.calculateRecentTime()}},60*1e3);await this.$nextTick();const n=this.$el;const t=this.$el.querySelector(".bangumi-timeline");const a=getComputedStyle(t);const m=parseInt(a.getPropertyValue("--column-width").match(/(.+)px/)[1]);const o=parseInt(a.getPropertyValue("--column-gap").match(/(.+)px/)[1]);t.scrollLeft=5*(m+o)}catch(e){logError(e);this.$emit("error")}finally{this.$emit("load")}}},async mounted(){await this.updateTimeline()}})}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/batch-download.min.js"] = (()=>{return(t,e)=>{const{formatTitle:i}=e.import("title");const s=12;const n=[".mp4",".m4a"];class r{constructor(t){this.config=t;this.itemList=[]}formatTitle(e){const s=t.batchFilenameFormat;const n=i(s,true,e);return escapeFilename(n," ")}async getRawItems(t){return JSON.parse(await this.collectData(t))}extension(t,e){const i=[".flv",".mp4"].find(e=>t.includes(e));if(i){return i}else if(t.includes(".m4s")){return n[e]}else{return".flv"}}async collectAria2(i,n){const r=await this.getRawItems(i);if(n){const i=t.aria2RpcOption;const{sendRpc:n}=await e.importAsync("aria2-rpc");for(const t of r){const e=t.fragments.map((e,n)=>{let r="";if(t.fragments.length>1&&!e.url.includes(".m4s")){r=" - "+(n+1)}const a=[];if(i.secretKey!==""){a.push(`token:${i.secretKey}`)}a.push([e.url]);a.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${t.title}${r}${this.extension(e.url,n)}`,split:s,dir:i.baseDir+i.dir||undefined,"max-download-limit":i.maxDownloadLimit||undefined});const o=encodeURIComponent(`${t.title}${r}`);return{params:a,id:o}});await n(e,true)}}else{return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${r.map(t=>{return t.fragments.map((e,i)=>{let n="";if(t.fragments.length>1&&!e.url.includes(".m4s")){n=` - ${i+1}`}return`\n${e.url}\n referer=${t.referer}\n user-agent=${UserAgent}\n out=${t.title}${n}${this.extension(e.url,i)}\n split=${s}\n`.trim()}).join("\n")}).join("\n")}\n`.trim()}}}class a extends r{static async test(){if(!document.URL.includes("/www.bilibili.com/video/av")){return false}return await SpinQuery.select("#multi_page")!==null}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=`https://api.bilibili.com/x/web-interface/view?aid=${unsafeWindow.aid}`;const e=await Ajax.getJson(t);if(e.code!==0){Toast.error(`获取视频选集列表失败, message=${e.message}`,"批量下载");return[]}const i=e.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return[]}this.itemList=i.map(t=>{return{title:`P${t.page} ${t.part}`,titleParameters:{n:t.page,ep:t.part},cid:t.cid,aid:unsafeWindow.aid}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const n=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/x/player/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const r=await Ajax.getJsonWithCredentials(n);const a=r.data||r.result||r;if(a.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${a.quality})`)}let o;if(a.durl){o=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const r=await i(n,typeof t==="string"?parseInt(t):t);o=s(r)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}class o extends r{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=document.querySelector("meta[property='og:url']");if(t===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return[]}const e=t.getAttribute("content").match(/play\/ss(\d+)/)[1];if(e===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return[]}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${e}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return[]}this.itemList=i.result.main_section.episodes.map((t,e)=>{const i=t.long_title?t.title:(e+1).toString();const s=t.long_title?t.long_title:t.title;return{aid:t.aid,cid:t.cid,title:`${i} - ${s}`,titleParameters:{n:i,ep:s}}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const n=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/pgc/player/web/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const r=await Ajax.getJsonWithCredentials(n);const a=r.data||r.result||r;if(a.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${a.quality})`)}let o;if(a.durl){o=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const r=await i(n,typeof t==="string"?parseInt(t):t);o=s(r)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}const c=[o,a];let l;class u{constructor(t){this.config=Object.assign({itemFilter:()=>true},t)}static async test(){for(const t of c){if(await t.test()===true){l=t;return true}}return false}getExtractor(){if(l===null){logError("[批量下载] 未找到合适的解析模块.");throw new Error(`[Batch Download] module not found.`)}const t=new l(this.config);return t}async getItemList(){const t=this.getExtractor();return await t.getItemList()}async getRawItems(t){const e=this.getExtractor();return await e.getRawItems(t.quality)}async collectData(t,e){const i=this.getExtractor();const s=await i.collectData(t.quality);e.dismiss();return s}async collectAria2(t,e,i=false){const s=this.getExtractor();const n=await s.collectAria2(t.quality,i);e.dismiss();return n}}return{export:{BatchExtractor:u}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/batch-download.min.js"] = (()=>{return(t,e)=>{const{formatTitle:i}=e.import("title");const s=12;const a=[".mp4",".m4a"];class n{constructor(t){this.config=t;this.itemList=[]}formatTitle(e){const s=t.batchFilenameFormat;const a=i(s,true,e);return escapeFilename(a," ")}async getRawItems(t){return JSON.parse(await this.collectData(t))}extension(t,e){const i=[".flv",".mp4"].find(e=>t.includes(e));if(i){return i}else if(t.includes(".m4s")){return a[e]}else{return".flv"}}async collectAria2(i,a){const n=await this.getRawItems(i);if(a){const i=t.aria2RpcOption;const{sendRpc:a}=await e.importAsync("aria2-rpc");for(const t of n){const e=t.fragments.map((e,a)=>{let n="";if(t.fragments.length>1&&!e.url.includes(".m4s")){n=" - "+(a+1)}const r=[];if(i.secretKey!==""){r.push(`token:${i.secretKey}`)}r.push([e.url]);r.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${t.title}${n}${this.extension(e.url,a)}`,split:s,dir:i.baseDir+i.dir||undefined,"max-download-limit":i.maxDownloadLimit||undefined});const o=encodeURIComponent(`${t.title}${n}`);return{params:r,id:o}});await a(e,true)}}else{return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${n.map(t=>{return t.fragments.map((e,i)=>{let a="";if(t.fragments.length>1&&!e.url.includes(".m4s")){a=` - ${i+1}`}return`\n${e.url}\n referer=${t.referer}\n user-agent=${UserAgent}\n out=${t.title}${a}${this.extension(e.url,i)}\n split=${s}\n`.trim()}).join("\n")}).join("\n")}\n`.trim()}}}class r extends n{constructor(){super(...arguments);this.aid=unsafeWindow.aid}static async test(){if(document.URL.includes("//www.bilibili.com/video/av")){return await SpinQuery.select("#multi_page")!==null}return false}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=`https://api.bilibili.com/x/web-interface/view?aid=${this.aid}`;const e=await Ajax.getJson(t);if(e.code!==0){Toast.error(`获取视频选集列表失败, message=${e.message}`,"批量下载");return[]}const i=e.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return[]}this.itemList=i.map(t=>{return{title:`P${t.page} ${t.part}`,titleParameters:{n:t.page,ep:t.part},cid:t.cid,aid:this.aid}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const a=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/x/player/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const n=await Ajax.getJsonWithCredentials(a);const r=n.data||n.result||n;if(r.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${r.quality})`)}let o;if(r.durl){o=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const n=await i(a,typeof t==="string"?parseInt(t):t);o=s(n)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}class o extends n{constructor(t){super(t);this.mainVideo=new r(t);this.mainVideo.aid="78976165";this.spVideo=new r(t);this.spVideo.aid="78979124"}static async test(){return document.URL.includes("//www.bilibili.com/blackboard/bnj2020.html")}async getItemList(){return(await this.mainVideo.getItemList()).concat(await this.spVideo.getItemList())}async collectData(t){return(await this.mainVideo.collectData(t)).concat(await this.spVideo.collectData(t))}}class c extends n{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=document.querySelector("meta[property='og:url']");if(t===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return[]}const e=t.getAttribute("content").match(/play\/ss(\d+)/)[1];if(e===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return[]}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${e}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return[]}this.itemList=i.result.main_section.episodes.map((t,e)=>{const i=t.long_title?t.title:(e+1).toString();const s=t.long_title?t.long_title:t.title;return{aid:t.aid,cid:t.cid,title:`${i} - ${s}`,titleParameters:{n:i,ep:s}}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const a=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/pgc/player/web/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const n=await Ajax.getJsonWithCredentials(a);const r=n.data||n.result||n;if(r.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${r.quality})`)}let o;if(r.durl){o=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const n=await i(a,typeof t==="string"?parseInt(t):t);o=s(n)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}const l=[c,r,o];let u;class d{constructor(t){this.config=Object.assign({itemFilter:()=>true},t)}static async test(){for(const t of l){if(await t.test()===true){u=t;return true}}return false}getExtractor(){if(u===null){logError("[批量下载] 未找到合适的解析模块.");throw new Error(`[Batch Download] module not found.`)}const t=new u(this.config);return t}async getItemList(){const t=this.getExtractor();return await t.getItemList()}async getRawItems(t){const e=this.getExtractor();return await e.getRawItems(t.quality)}async collectData(t,e){const i=this.getExtractor();const s=await i.collectData(t.quality);e.dismiss();return s}async collectAria2(t,e,i=false){const s=this.getExtractor();const a=await s.collectAria2(t.quality,i);e.dismiss();return a}}return{export:{BatchExtractor:d}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/biliplus-redirect.min.js"] = (()=>{return(i,e)=>{const n=`hd.biliplus.com`;const c=["bilibili.com/video/av","bilibili.com/bangumi/play","bilibili.com/bangumi/media","space.bilibili.com"];return{widget:{condition:()=>{return c.some(i=>document.URL.includes(i))},content:`\n`,success:()=>{const i=document.querySelector("#biliplus-redirect");i.addEventListener("click",()=>{if(location.host==="space.bilibili.com"){location.assign(document.URL.replace("space.bilibili.com/",`${n}/space/`))}else if(document.URL.includes("/bangumi/")){const i=unsafeWindow.aid||document.querySelector(".av-link,.info-sec-av").innerText.replace(/[aAvV]/g,"");location.assign(`https://${n}/video/av${i}/`)}else{location.host=n}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blackboard.min.js"] = (()=>{return(e,t)=>{const r=async()=>{if(dq(".international-home")){const e=await SpinQuery.condition(()=>unsafeWindow["__INITIAL_STATE__"],e=>e!==undefined);return dqa(".home-slide .item").slice(0,5).map((t,r)=>{const i=t.querySelector("a").getAttribute("data-loc-id");return{url:e.locsData[i][r].url,title:t.querySelector(".title").innerText.trim(),isAd:Boolean(t.querySelector(".gg-icon")),imageUrl:t.querySelector("img").getAttribute("src").replace(/@.+$/,"")}})}else{const e=dq(".chief-recommend-module .panel");const t=e.querySelector(".pic");const r=e.querySelectorAll(".title > a");return[...t.querySelectorAll("li")].map((e,t)=>{const i=r[t];return{url:i.getAttribute("href"),title:i.innerText.trim(),isAd:Boolean(i.querySelector(".gg-pic")),imageUrl:e.querySelector("img").getAttribute("src").replace(/@.+$/,"")}})}};return{export:{getBlackboards:r}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blackboard.vue.min.js"] = (()=>{return(a,r)=>{const i=``;r.applyStyleFromText(`.simple-home .blackboards{display:grid;grid-template-areas:"header header" "dots cards";grid-template-columns:8px 1fr;grid-template-rows:1fr 250px;row-gap:16px;column-gap:16px;align-self:start}.simple-home .blackboards .blackboard-cards{grid-area:cards;--blackboard-width:568.5px;--blackboard-height:250px;width:var(--blackboard-width);height:var(--blackboard-height);border-radius:16px;overflow:hidden}.simple-home .blackboards .blackboard-cards .blackboard-card{width:100%;height:100%;position:relative;display:block;transition:.3s cubic-bezier(.65,.05,.36,1)}.simple-home .blackboards .blackboard-cards .blackboard-card img{width:100%;height:100%;object-fit:fill;display:block}.simple-home .blackboards .blackboard-cards .blackboard-card .title{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);padding:4px 16px;color:#fff;background-color:#000a;font-size:14px;font-weight:700;border-radius:14px;white-space:nowrap;opacity:0}.simple-home .blackboards .blackboard-cards .blackboard-card:hover .title{opacity:1}`,"blackboard-style");return{export:Object.assign({template:i},{components:{Icon:()=>r.importAsync("icon.vue"),"dpi-img":()=>r.importAsync("dpi-img.vue")},data(){return{blackboards:[],interval:0}},destroyed(){if(this.interval){clearInterval(this.interval)}},computed:{cardsContainer(){return this.$el.querySelector(".blackboard-cards")}},async mounted(){const{getBlackboards:a}=await r.importAsync("blackboard");this.blackboards=(await a()).filter(a=>!a.isAd);const i=dq(".blackboards");this.interval=setInterval(()=>{if(!document.hasFocus()||i.matches(".blackboards:hover")){return}const a=parseInt(dq(`.blackboard-radio:checked`).getAttribute("data-index"));let r;if(a===this.blackboards.length-1){r=0}else{r=a+1}dq(`.blackboard-radio[data-index='${r}']`).checked=true},5e3)}})}}})(); @@ -1172,7 +1172,6 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-important.min.css"] = `#disable-popup-modal .vip-exchange .months button.disabled,#vip-exchange-modal .vip-exchange .months button.disabled,.action-row .publish-btn.disabled,.action-row .publish-btn.publishing,.action-row .sch-pub-btn.disabled,.action-row .sch-pub-btn.publishing,.app-body .section-block,.bl-button--primary:disabled,.home-content .publish-btn.disabled,.link-footer,.live-skin-coloration-area .live-skin-separate-area,.live-skin-coloration-area .live-skin-separate-area-hover:hover,.payment-active,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-indicator,.tab-list .tab-item.active:before{background-color:#222!important}.app-body .section-block.with-bottom-radius,.app-body .section-block.with-radius,.bb-comment .no-login .comment-submit,.common .bb-comment .no-login .comment-submit,.container .pagination,.coupon-content-con .coupon-btn-disable,.customize-wrp .select,.f-list-hover:hover,.fjw-case-detail .ban-detail .content-box .video-model,.game-groom-m .num,.main-container .media-info .media-right .media-tool-bar .btn-follow.active,.main-container .pay-bar .vip .btn-pay.active,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled:hover,.pagination-container li.pagination,.status_box .status_btn.disabled,.wrapper .elec-btn.disabled{background-color:#444!important}.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap .bscroll-indicator{background-color:#555!important}.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap .bscroll-vertical-scrollbar.mousedown,.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap:hover .bscroll-vertical-scrollbar,.m-recommend-item div.box,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-vertical-scrollbar,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-vertical-scrollbar.mousedown,.player-auxiliary-area .player-auxiliary-bscrollbar:hover .bscroll-vertical-scrollbar{background-color:transparent!important}.live-skin-coloration-area .live-skin-normal-a-text,.live-skin-coloration-area .live-skin-normal-a-text:link,.live-skin-coloration-area .live-skin-normal-a-text:visited,.live-skin-coloration-area .live-skin-normal-text,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled:hover,.status_box .status_btn.disabled,blockquote,blockquote *,blockquote .color-blue-01,blockquote .color-blue-02,blockquote .color-blue-03,blockquote .color-blue-04,blockquote .color-gray-01,blockquote .color-gray-02,blockquote .color-gray-03,blockquote .color-gray-04,blockquote .color-green-01,blockquote .color-green-02,blockquote .color-green-03,blockquote .color-green-04,blockquote .color-lblue-01,blockquote .color-lblue-02,blockquote .color-lblue-03,blockquote .color-lblue-04,blockquote .color-pink-01,blockquote .color-pink-02,blockquote .color-pink-03,blockquote .color-pink-04,blockquote .color-purple-01,blockquote .color-purple-02,blockquote .color-purple-03,blockquote .color-purple-04,blockquote .color-yellow-01,blockquote .color-yellow-02,blockquote .color-yellow-03,blockquote .color-yellow-04{color:#aaa!important}#app .sticky-bar .bar-content .message,.bb-comment .no-login .comment-submit,.bp-popup-panel .title-ctnr .popup-title,.commnent-screen-wrap .el-input__inner,.common .bb-comment .no-login .comment-submit,.coupon-content-con .coupon-btn-disable,.cover .disabled-cover,.customize-wrp .select,.el-input__inner,.home-page .sticky-bar .bar-content .message,.invitation-record-warp .invtable .inputdone,.live-room-app .guard-rank-cntr .tabs.isHundred .item.active,.live-room-app .guard-rank-cntr.hundred .live-skin-highlight-text,.live-room-app .guard-rank-cntr.hundred .live-skin-main-a-text,.live-room-app .guard-rank-cntr.hundred .page-box .live-skin-main-text,.live-room-app .guard-rank-cntr.thousand .live-skin-highlight-text,.live-room-app .guard-rank-cntr.thousand .live-skin-main-a-text,.live-room-app .guard-rank-cntr.thousand .page-box .live-skin-main-text,.live-skin-coloration-area .live-skin-highlight-text,.live-skin-coloration-area .live-skin-main-text,.manga-detail .episode-list-component .episode-list .list-data .list-item.last-read,.popup-content-ctnr .bl-button--ghost,.s-paging>ul>a.current,.s-paging>ul>span.current,.score-info .go-movie,.tag-list li.tag-item.on{color:#eee!important}#rank-list-vm .tabs.isHundred .item,.bb-comment .no-login .comment-submit,.commnent-screen-wrap .el-input__inner,.common .bb-comment .no-login .comment-submit,.el-input__inner,.enter-failure .password-input .pink-border,.link-footer,.live-skin-coloration-area .live-skin-highlight-border,.live-skin-coloration-area .live-skin-separate-border,.popup-content-ctnr .bl-button--ghost:hover,.score-info .go-movie,.select-box-v2-container .select-box-v2-controller-disabled,.song-info .info-wrap .type-list .item-list .type-item.active,.tabs-bar,.ui-input-textarea.focus,.user-setting-warp .el-radio-button__orig-radio:checked+.el-radio-button__inner{border-color:transparent!important}#app .sticky-bar .bar-content .message:hover,.app-layout .style-section .tag-block .tag-containers .style-tag.selected,.container .video-panel .play-all .bilifont,.detail-wrp .detail-content[data-v-00c9b213] p a span,.drop-list-v2-container .drop-list-v2-item-selected .drop-list-v2-item-cont p.item-cont-main,.edit-button:hover>.icon-font,.edit-button:hover>span .left-nav-item-childed:hover,.el-select-dropdown__item.selected,.home-page .sticky-bar .bar-content .message:hover,.im-popup .bp-popup-panel .title-ctnr .popup-title,.left-nav-wrapper .active,.left-nav-wrapper .active .left-nav-item-child,.left-nav-wrapper .advice-btn:hover,.left-nav-wrapper .left-nav-item.active,.left-nav-wrapper .left-nav-item.active i.active,.left-nav-wrapper .left-nav-list.on .left-nav-item,.left-nav-wrapper .left-nav-list.on .left-nav-item .icon,.live-room-app .guard-rank-cntr.hundred .live-skin-main-a-text:hover,.live-room-app .guard-rank-cntr.thousand .live-skin-main-a-text:hover,.live-skin-coloration-area .live-skin-highlight-text,.live-skin-coloration-area .live-skin-normal-a-text:hover,.live-skin-normal-a-text:active,.manga-detail .episode-list-component .episode-list .list-header .header-item.selected,.more-data a:hover,.other a a:hover,.r-con .members-info .up-card .info-name.is-vip:hover,.rank-item .content .info .detail a a:hover,.rank-item .content .more-data:hover,.rank-item .content .other a:hover,.room-info-down-row .icon-label.hover-text-blue:hover .label,.room-introduction .edit-button:hover>.icon-font,.room-introduction .edit-button:hover>span,.round-corner .van-popper-favorite .play-all .bilifont,.up-info .u-info .name .username.is-vip:hover,.voucher-ing .voucher-left-money,.voucher-ing .voucher-left-money:before,.voucher-no-used .voucher-left-money,.voucher-no-used .voucher-left-money:before{color:var(--theme-color)!important}.aside-ctnr .author-info .communicate-btn,.live-skin-coloration-area .room-info-ctnr .info-section .live-skin-highlight-border,.manga-detail .episode-list-component .episode-list .list-data .list-item.last-read,.page-list-box .page-input:focus,.page-list-box .page-input:hover,.popup-content-ctnr .bl-button--ghost,.season-timeline .season-group.today,.season-timeline .season-group.today .group-time::before,.tag-list li.tag-item.on,.tag-list li.tag-item:hover{border-color:var(--theme-color)!important}.bg-blue,.el-date-table td.current:not(.disabled),.el-date-table td.end-date,.el-date-table td.start-date,.face-g-list#my-g-list .face-g-block .my-mp-block .mp-info .btn-white,.face-g-tab li.current,.live-skin-coloration-area .live-skin-highlight-bg,.popup-content-ctnr .bl-button--ghost:hover,.popup-content-ctnr .bl-button--primary,.season-timeline .season-group.today.is-published .group-time::before,.security-list .child-list li a.bg-blue:hover,.song-info .info-wrap .type-list .item-list .type-item.active,.tag-list li.tag-item.on,.user-my-btn .el-button--primary,.user-setting-warp .el-radio-button__orig-radio:checked+.el-radio-button__inner{background-color:var(--theme-color)!important}.current .tab-btn-link,.el-date-table td.current:not(.disabled),.el-date-table td.end-date,.el-date-table td.start-date,.face-g-tab li.current,.popup-content-ctnr .bl-button--ghost:hover,.style-section .tag-block .tag-containers .style-tag:active{color:var(--foreground-color)!important}#bilibiliPlayer{box-shadow:0 4px 8px 0 #0004;background-color:#222!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-navbar.min.css"] = `#link-navbar-vm>.link-navbar .nav-item:hover,.bili-header-m .nav-menu .nav-con .nav-item:hover,.link-navbar .nav-item:hover,.nav-header-wrapper .nav-header .nav-header-search-bar,.right-part>.shortcuts-ctnr .shortcut-item:hover,.search-bar-ctnr .search-bar,.shortcuts-ctnr .shortcut-item:hover,.uns_box ul.menu li:not(.b-post):hover,.z_top .z_top_nav ul li:hover{background-color:#222!important}#app>.link-navbar,#app>.nav-header-wrapper,#link-navbar-vm>.link-navbar,#navbar-vm>.link-navbar,.b-header-mask-wrp .b-header-mask,.bili-header-m .nav-menu .nav-mask,.bili-header-m .nav-menu.blur-black .nav-mask,.link-navbar{background-color:#444!important}.z_top .i-link:hover,.z_top .z_top_nav ul li.home:hover{background-color:transparent!important}#app>.nav-header-wrapper>.nav-header{background:0 0!important}#app>.link-navbar .main-ctnr .nav-logo,#app>.link-navbar .nav-item.selected .label,#app>.link-navbar .nav-item:hover .icon-font,#app>.nav-header-wrapper>.nav-header .nav-header-mainsite,#app>.nav-header-wrapper>.nav-header .order-center,#link-navbar-vm>.link-navbar .main-ctnr .nav-logo,#link-navbar-vm>.link-navbar .nav-item:hover,.bili-header-m .nav-menu .nav-con .nav-item .t,.link-navbar .main-ctnr .custom-link>a,.link-navbar .main-ctnr .nav-logo,.my-link-btn .label,.nav-header-wrapper .nav-header .nav-header-search-bar,.right-part>.shortcuts-ctnr,.right-part>.shortcuts-ctnr .shortcut-item:hover,.search-bar-ctnr .search-bar input,.shortcut-item .list-item span,.shortcuts-ctnr .shortcut-item,.uns_box li.u-i a.i-link,.z_top a,.z_top.b-header-blur .uns_box li.u-i a.i-link,.z_top.b-header-blur .z_top_nav li a.i-link{color:#eee!important}.search-bar-ctnr .search-bar .placeholder,.search-bar-ctnr .search-bar .search-btn,.search-bar-ctnr .search-bar input::placeholder{color:#878787!important}.uns_box li.u-i:hover a.i-link,.z_top .i-link:hover{color:var(--theme-color)}.link-navbar,.link-navbar-ctnr{box-shadow:none!important}.link-navbar .main-ctnr .nav-logo::before,.nav-header-wrapper .nav-header .order-icon{filter:brightness(0) invert(1)!important}.search-bar-ctnr .search-bar{border-color:transparent!important;box-shadow:0 2px 10px 1px #0002}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-schedule.min.js"] = (()=>{return(e,t)=>{class i{constructor(...e){if(e.length===0){const e=new Date;this.hour=e.getHours();this.minute=e.getMinutes()}else if(e.length===1){const[t]=e;[this.hour,this.minute]=t.split(":").slice(0,2).map(e=>this.validatePart(e));this.normalize()}else if(v.length===2){[this.hour,this.minute]=e}}validatePart(e){const t=parseInt(e);if(!isNaN(t)&&t>=0&&t<=59){return t}else{return null}}normalize(){while(this.minute<0){this.minute+=60;this.hour-=1}while(this.minute>=60){this.minute-=60;this.hour+=1}while(this.hour<0){this.hour+=24}while(this.hour>=24){this.hour-=24}}lessThan(e){if(this.houre.hour||this.hour===e.hour&&this.minute>e.minute){return true}return false}equals(e){return this.hour===e.hour&&this.minute===e.minute}isInRange(e,t){if(e.equals(t)){return false}let i=this.greaterThan(e)&&this.lessThan(t);if(e.greaterThan(t)){i=this.greaterThan(e)||this.lessThan(t)}const s=i||this.equals(e);return s}static millisecondsBefore(e){const t=new i;const s=(new Date).getSeconds();const r=1e3*(t.hour*3600+t.minute*60+s);const n=1e3*(e.hour*3600+e.minute*60);let h=n-r;if(t.greaterThan(e)||t.equals(e)&&s!==0){h+=24*3600*1e3}return h}}function s(){if(e.darkSchedule){const t=new i(e.darkScheduleStart);const r=new i(e.darkScheduleEnd);const n=new i;const h=n.isInRange(t,r);if(e.useDarkStyle!==h){e.useDarkStyle=h}let u=0;if(h){u=i.millisecondsBefore(r)}else{u=i.millisecondsBefore(t)}if(u!==0){setTimeout(()=>s(),u)}}}fullyLoaded(()=>s());return{export:{ScheduleTime:i}}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-slice-9.min.css"] = `.level-5{border-color:#74b0f6!important}.level-5 .label{background-color:#74b0f6!important}.level-5 .level{color:#74b0f6!important}.level-6{border-color:#74b0f6!important}.level-6 .label{background-color:#74b0f6!important}.level-6 .level{color:#74b0f6!important}.level-7{border-color:#74b0f6!important}.level-7 .label{background-color:#74b0f6!important}.level-7 .level{color:#74b0f6!important}.level-8{border-color:#74b0f6!important}.level-8 .label{background-color:#74b0f6!important}.level-8 .level{color:#74b0f6!important}.level-9{border-color:#ba94f2!important}.level-9 .label{background-color:#ba94f2!important}.level-9 .level{color:#ba94f2!important}.level-10{border-color:#ba94f2!important}.level-10 .label{background-color:#ba94f2!important}.level-10 .level{color:#ba94f2!important}.level-11{border-color:#ba94f2!important}.level-11 .label{background-color:#ba94f2!important}.level-11 .level{color:#ba94f2!important}.level-12{border-color:#ba94f2!important}.level-12 .label{background-color:#ba94f2!important}.level-12 .level{color:#ba94f2!important}.van-popover .level-bar .level-progress{background-color:#ffae00!important}#biliAppHomeSetting>div,.app-layout .manga-navbar,.container .play-all,.container .split-line .history-tip,.hover-panel-wrap,.hover-panel-wrapper,.lang-change .lang-intro,.manga-navbar .drop-list,.van-popover .container{background-color:#222!important}.container .level-intro,.container .play-all:hover,.international-header .bili-banner,.manga-navbar .drop-list .more-btn-container,.manga-navbar .search-bar .search-bar-bg,.manga-navbar .user-panel .drop-list .logout-btn-container,.message-list-content .notify-wrapper .notify-text,.recommend-area-ctnr .rec-area-item,.skeleton .skeleton-content,.skeleton .skeleton-focusbtn,.skeleton .skeleton-head,.skeleton .skeleton-time,.skeleton .skeleton-user-name,.van-popover .btn-box .btn.reg-btn:hover,.van-popover .upload-item:hover,.yzly-content-ctnr .btn{background-color:#333!important}.wide-members .avatar-list i{background-color:#444!important}.wide-members .avatar-list i:hover{color:var(--theme-color)!important}.grid-area-ctnr .hab-ctnr,.grid-area-ctnr .news-ctnr,.grid-area-ctnr .rank-ctnr{background-color:#444!important}.confirmorder-container{background-color:#444!important;box-shadow:none!important}.confirmorder-container h1{color:#eee!important}.confirmorder-container h1 span{color:#aaa!important}.confirmorder-container .card .card-bottom .delete{filter:brightness(0) invert(.7)!important}.confirmorder-container .card .card-bottom .delete:hover{filter:var(--pink-image-filter)!important}.confirmorder-container .card.active{border-color:var(--theme-color)!important}.confirmorder-container .card.active::before{filter:var(--pink-image-filter)!important}.confirmorder-container .discounts{border-color:#555!important}.confirmorder-container .discounts .discounts-list p{border-color:transparent!important;background-color:#111!important;color:#666!important}.confirmorder-container .total-container div span{color:#eee!important}.confirmorder-container .total-container div span.total{color:var(--theme-color)!important}.confirmorder-container .confirm-bottom .confirm-paybtn.active{filter:var(--pink-image-filter)!important}.confirmorder-container .confirm-bottom .service-term{color:#aaa!important}.confirmorder-container .confirm-bottom .service-term .check-icon,.confirmorder-container .confirm-bottom .service-term .check-icon.checked{filter:var(--pink-image-filter)!important}.confirmorder-container .confirm-bottom .service-term .term-content{color:var(--theme-color)!important}.eticket-container .top-box .header{border-color:transparent!important;background-color:#333!important}.eticket-container .top-box .header .header-back{filter:brightness(0) invert(1)!important}.eticket-container .top-box .header h1{color:#eee!important}.eticket-container .top-box .header::after{border-color:transparent!important}.eticket-container .eticket-info-container{background-color:#444!important;box-shadow:none!important}.eticket-container .eticket-info-right div{color:#eee!important}.eticket-container .eticket-info-right p{color:#aaa!important}.eticket-container .qrcode-container{background-color:#444!important}.eticket-container .qrcode-container .qrcode-tip{background-color:transparent!important;color:#eee!important}.eticket-container .qrcode-container .qrcode-container-item .qrcode-hide-tip{color:#eee!important}.eticket-container .qrcode-container .ticket-code,.eticket-container .qrcode-container .ticket-code .color-gray-light,.eticket-container .qrcode-container .ticket-type,.eticket-container .qrcode-container .ticket-type .color-gray-light{color:#aaa!important}.eticket-container .qrcode-container .ticket-code span,.eticket-container .qrcode-container .ticket-type span{color:#eee!important}.eticket-container .qrcode-container .addr-map{background-color:#383838!important}.eticket-container .qrcode-container .addr-map h1{color:#eee!important}.eticket-container .qrcode-container .addr-map p{color:#aaa!important}.eticket-container .qrcode-container .addr-map .map-icon{filter:var(--pink-image-filter)!important}.orderdetail-container .orderdetail-wrapper{color:#aaa!important}.orderdetail-container .orderdetail-wrapper .wrapper-ticket{color:#eee!important}.orderdetail-container .orderdetail-wrapper .wrapper-ticket .tip{color:var(--theme-color)!important}.orderdetail-container .total-container div span{color:#eee!important}.orderdetail-container .total-container div span.total{color:var(--theme-color)!important}#biliAppHomeSetting input,#biliAppHomeSetting select,.highlight-areas-ctnr .highlight-area-item,.s_tag .btn-add,.section-block .flip-view,.share-content .video-card,.van-popover .btn-box .btn.reg-btn,.van-popover .level-bar,.van-popper-history .view-all{background-color:#444!important}.love-card .header::after{background-color:#555!important}.s_tag .btn-add span{background-color:#eee!important}.coin-dialog-mask .coin-operated .mc .mc-box{background-color:#fff!important}.card .risk-tip-content{background-color:#624f27!important}.live-room-app .aside-area .chat-history-panel-top,.manga-navbar .nav-list,.news-content,.news-ctnr .more-link,.news-ctnr .more-link:hover,.text-info-ctnr{background-color:transparent!important}.manga-navbar .search-bar .placeholder-list .placeholder-item{color:#888!important}#biliAppHomeSetting label~span,.bb-comment .comment-list .list-item .blacklist-font-color,.center-box .line-3 .action-button,.comment-bilibili-fold .comment-list .list-item .blacklist-font-color,.container .split-line .history-tip,.follow-dialog-wrap .special-tip,.highlight-areas-ctnr .area-desc,.list-item .publish-time,.manga-navbar .data-list .list-container .empty-hinter,.manga-navbar .data-list .list-container .failure-hinter,.manga-navbar .data-list .list-container .loading-hinter,.rank-item .room-title,.share-content .video-card .up-info .name,.share-content .video-card .up-info .tip,.video-container .text-area .view-danmaku{color:#aaa!important}#biliAppHomeSetting a,#biliAppHomeSetting input,#biliAppHomeSetting select,.area-detail-ctnr .area-title,.banner-ctnr .banner-title,.bilibili-player-video-danmaku-setting-left-block-word,.center-box .line-1 .like-item,.center-box .line-1 .name-field,.center-box .line-1 .name-field a,.item-ctnr .item-title,.love-card .header,.manga-navbar .drop-list .more-btn-container .more-button,.manga-navbar .search-bar .search-input,.manga-navbar .user-info-panel .info-item,.manga-navbar .user-info-panel .user-name,.manga-navbar .user-panel .drop-list .logout-btn-container .logout-button,.manga-navbar-favourite-manga .action-button,.manga-navbar-history-list .action-button,.more-ctnr,.news-content,.news-ctnr .more-link,.rank-item .room-anchor,.recommend-area-ctnr .area-name,.recommend-area-ctnr .title-text,.tab-ctnr .tab-item,.van-popover .btn-box .btn.reg-btn,.van-popover .coins .info a,.van-popper-history .view-all,.van-popper-login .title,.van-popper-upload .upload-item .bilifont,.yzly-ctnr .yzly-title{color:#eee!important}.international-header .mini-upload:hover,.van-popover .vip:hover{color:#fff!important}.highlight-areas-ctnr .highlight-area-item:nth-child(1) .area-name{color:#a0a7dc!important}.highlight-areas-ctnr .highlight-area-item:nth-child(2) .area-name{color:#c7aade!important}.highlight-areas-ctnr .highlight-area-item:nth-child(3) .area-name{color:#deb29c!important}.highlight-areas-ctnr .highlight-area-item:nth-child(4) .area-name{color:#afb7e8!important}.highlight-areas-ctnr .highlight-area-item:nth-child(5) .area-name{color:#dcbf94!important}.highlight-areas-ctnr .highlight-area-item:nth-child(6) .area-name{color:#95c5a8!important}.live-room-app .aside-area .chat-control-panel{background-image:none!important}.bili-header-m .mini-type .nav-search #nav_searchform,.international-header .mini-type .nav-search #nav_searchform,.van-popover .mini-type .nav-search #nav_searchform{background-color:#333!important;border-color:transparent!important}.bili-header-m .mini-type .nav-search #nav_searchform .nav-search-keyword,.international-header .mini-type .nav-search #nav_searchform .nav-search-keyword,.van-popover .mini-type .nav-search #nav_searchform .nav-search-keyword{color:#aaa!important}.bili-header-m .mini-type .nav-search #nav_searchform .nav-search-keyword:focus,.international-header .mini-type .nav-search #nav_searchform .nav-search-keyword:focus,.van-popover .mini-type .nav-search #nav_searchform .nav-search-keyword:focus{color:#eee!important}.bili-header-m .mini-type .nav-search .nav-search-btn,.international-header .mini-type .nav-search .nav-search-btn,.van-popover .mini-type .nav-search .nav-search-btn{background-color:#444!important}.bili-header-m .mini-type .nav-search .nav-search-btn .nav-search-submit,.international-header .mini-type .nav-search .nav-search-btn .nav-search-submit,.van-popover .mini-type .nav-search .nav-search-btn .nav-search-submit{color:#eee!important}.bili-header-m .mini-type .nav-search .nav-search-btn:hover .nav-search-submit,.international-header .mini-type .nav-search .nav-search-btn:hover .nav-search-submit,.van-popover .mini-type .nav-search .nav-search-btn:hover .nav-search-submit{color:var(--theme-color)!important}.bilibili-search-history,.bilibili-search-suggest{background-color:#333!important;border-color:transparent!important}.module-game .rule .detail .content{color:#000!important}#biliAppHomeSetting input,#biliAppHomeSetting select{border-color:transparent!important;border-radius:4px}.at-popup,.chat-popups-section .draw-full-ctnr,.hover-panel-wrap,.hover-panel-wrapper,.recommend-area-ctnr .rec-area-item,.van-popover .btn-box .btn.reg-btn,.van-popper-history .view-all{border-color:transparent!important}.wide-members .avatar{border-color:#333!important}.van-popper-login .container{border-color:#444!important}.container .level-intro .svg-icon,.manga-navbar .search-bar .confirm-btn .search-icon{filter:brightness(0) invert(1)!important}.side-bar-btn .size-bar-text{filter:brightness(.6) invert(1) hue-rotate(180deg)!important;text-shadow:0 0 0}.confirmorder-container .confirm-bottom .confirm-paybtn.active,.whole-detail-info-wrapper .product-buy-wrapper .unsale-btn{box-shadow:0 3px 4px 0 #6e4752!important}.app-layout .manga-navbar{box-shadow:rgba(0,0,0,.2) 0 4px 8px 0!important}.highlight-areas-ctnr .highlight-area-item.hover{box-shadow:0 7px 11px 0 rgba(0,0,0,.18)!important}.hover-panel-wrap{box-shadow:0 13px 20px 0 rgba(0,0,0,.22)!important}.van-popper .popper__arrow{display:none!important}.nav-tab-bar .tab-item[data-tab-id="1"]:not(.on)::before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAQAAAACj/OVAAAD00lEQVRYw+2YbWhVdRzHb2aWsILo4UVC5Pd3drfdIZNW1sRod7eW1gSxLIxo5aWgB1GHbkNaDILoAaJYtKQNRDHQTcp6McQoISusXuSLZTXXICVoa3Nmtu0+nE8vdtzd1T3c7dzzzu/31b2X+//w+//+5/y+54RCVzSLKq+zqD1t9driPB4uCxjm3G+f6ILI2E7bu+ElgcB0u3UJIXcd23mT19jMqnHsiF6vXJjv2iqtX5S5HzDAZHWzFbnCjjq35BFnK21UxBlmKv3ESlfoRKQgf5vZL17F9QBDfMkRkpOQf1ON0Of5qm+/iHu4f2jEQYhDWVWeptwVzmN5wIVXiFL3LwB6qEAYMRou6SXsR1jvhqv919cq3gIgyVpEDT9P2UmXGMKiPnFcpT/FLwC0Ie5hiOn0DsJafAKLbhMrvAUfRbQxvX5A2Dd+O3i3WOcteC/ixxmAZxDq89vBKvGUt+Au6iYujak0jNCg3ztMRDxEbvoNYd1+gTfILXHHcgJ2IazL/2XxnTiSE3AbwqnzD9whanPA9RNxRdFS38BlN2pQfDUrsB5hB/Jz894qyt0/ZsQdQNhoofICbF6gz0SUnmlxnYRdYc/kbR5GCnRcLHP3kboMNkAjQjjNeY5O2itElBa6GfNG1VGaiLhCI1ab/0wTEzYRnpYTyUSpzqKiAEKU7RJvJz5idQZ1VsetySkNJo0utAHxKwCfIuzrisXBJtJqUe0dk+cQeiHgCKw28Z53VIpRym4NFFd+jQbFKQAOIuyLgOuzNWKNt6GbEPZ80MDd4n1vyFrCkuGbA8VFFums6Ju4Z+pwwPUV1ogab0NrEc6mvCPCZc5L1qp2zz1iOTFixHBQWnvVrnZrceJ5mQ6RAmuVO/kZcHrbmL3iO2vbx6KUnYl9dNBBB7tpyHKL9/0etiSUFtbkD7dalLl9Oea0b91CLGGOH+AesYonc/ZdiKU75/2cZMdy691lvTzo2Dwyto2JZTzAxjlU+ASVlCBsoDg8t+qW2DnR9N8Ic9cQ8YSw3sii2UbOtU6FnnXiTtyJO4dEufvycD3zcR02IuzD8bWsquj6qWq6T7/Pr2M5eEgbL+2YY+dFdbqBRuqTm89FU9FkllNV6ap0VTrmXnTm0/gvWf9IRVPRVHVy2/kdifrU+qSQW/hg9kDtFNtnfPjyo1aETk7CVSzWvw6DBKcKRGFJ5risFesJUg0INWZFvpZAgYcRdiwDPCO6AwVeoBilim8a39BScSen6A3Uj4wKZ0MoFAqFiu/Idd759sMXD82LOqGTAft7543mBVfeoAeg/wFlFeKImou+wAAAAABJRU5ErkJggg==)!important}.aside-item.active .item-border,.aside-item:hover .item-border{border-color:var(--theme-color)!important}.aside-item::after{border-right-color:var(--theme-color)!important}#bilibili_pbp,#bilibili_pbp_canvas{filter:var(--pink-image-filter)!important}#biliAppHomeSetting button,.interact-dialog .btn,.rookie-guide .close-button,.van-popover .btn-box .btn,.van-popper-history .view-all:hover,.video-control-show .bilibili-player-video-interactive-list .check:hover .big-round{background-color:var(--theme-color)!important}#biliAppHomeSetting h2,.bilibili-search-suggest .suggest-item .suggest_high_light,.more-ctnr:hover,.news-ctnr .more-link:hover,.tab-ctnr .tab-item.activated,.tab-ctnr .tab-item:hover,.van-popover .coins .info a:hover,.van-popper-upload .upload-item:hover .bilifont,.video-desc .subtitle a{color:var(--theme-color)!important}#biliAppHomeSetting button,.interact-dialog .btn,.rookie-guide .close-button,.van-popover .btn-box .btn,.van-popper-history .view-all:hover{color:var(--foreground-color)!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-styles.min.js"] = (()=>{return(e,t)=>{const l=()=>{SpinQuery.select(".custom-scrollbar").then(e=>e&&e.classList.remove("custom-scrollbar"))};const r=()=>{document.body.classList.add("dark");l();t.applyStyle("scrollbarStyle");t.applyImportantStyle("darkStyleNavBar");t.applyStyle("darkStyle");t.applyImportantStyle("darkStyleImportant")};r();return{reload:r,unload:()=>{document.body.classList.remove("dark");t.removeStyle("scrollbarStyle");t.removeStyle("darkStyleNavBar");t.removeStyle("darkStyle");t.removeStyle("darkStyleImportant")}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/debounce.min.js"] = (()=>{return(n,l)=>{function u(n,l,u){var e,t,i,r,f;if(null==l)l=100;function o(){var a=Date.now()-r;if(a=0){e=setTimeout(o,l-a)}else{e=null;if(!u){f=n.apply(i,t);i=t=null}}}var a=function(){i=this;t=arguments;r=Date.now();var a=u&&!e;if(!e)e=setTimeout(o,l);if(a){f=n.apply(i,t);i=t=null}return f};a.clear=function(){if(e){clearTimeout(e);e=null}};a.flush=function(){if(e){f=n.apply(i,t);i=t=null;clearTimeout(e);e=null}};return a}return{export:{debounce:u}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-danmaku-settings.min.css"] = `.bilibili-player-video-danmaku-setting-wrap{display:none!important}`; @@ -1185,9 +1184,9 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-audio.min.js"] = (()=>{return(e,t)=>{class n{constructor(){this.sid=null;this.progress=null}async getDownloadUrl(){const e=`https://www.bilibili.com/audio/music-service-c/web/url?sid=${this.sid}&privilege=2&quality=2`;const t=await Ajax.getJsonWithCredentials(e);if(t.code===0){return t.data.cdns.shift()}else{logError("获取下载链接失败, 请确保当前账号有下载权限.","下载音频",1e4);return null}}async download(){const e=await this.getDownloadUrl();return new Promise((t,n)=>{const s=new XMLHttpRequest;s.open("GET",e);s.responseType="blob";s.addEventListener("load",()=>t(s.response));s.addEventListener("error",()=>n(s.status));s.addEventListener("progress",e=>this.progress&&this.progress(100*e.loaded/e.total));s.send()})}}const s="下载音频";return{export:n,widget:{content:`\n\n\n${s}\n\n`,condition:()=>document.URL.includes("bilibili.com/audio"),success:async()=>{await SpinQuery.select(()=>document.querySelector("#app"));const e=document.querySelector("#download-audio");const t=e.querySelector("span");const o=new n;o.progress=(e=>{t.innerHTML=`${Math.round(e)}%`});const i=document.querySelector("#download-audio-link");e.addEventListener("click",async e=>{if(o.sid===null||e.target===i){return}const n=await o.download();t.innerHTML=s;const r=i.getAttribute("href");if(r){URL.revokeObjectURL(r)}i.setAttribute("href",URL.createObjectURL(n));const d=(()=>{const e=document.querySelector(".song-title");if(e){return e.getAttribute("title")}else{return"神秘音频"}})();i.setAttribute("download",d+".m4a");i.click()});Observer.childList("#app",()=>{const t=document.URL.match(/bilibili\.com\/audio\/au([\d]+)/);if(t&&t[1]){e.disabled=false;o.sid=t[1]}else{e.disabled=true}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:n}=e.import("title");const{DanmakuInfo:i}=e.import("video-info");const{DanmakuConverter:a}=e.import("danmaku-converter");async function o(t){const e=n();let i={title:e};try{await loadDanmakuSettingsPanel();const t=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));return e*4/188};const e=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[e];return n};i.font=dq(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;i.alpha=parseFloat(dq(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));i.duration=(()=>{const e=18-3*t(".bilibili-player-setting-speedplus .bui-thumb");return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();i.blockTypes=(()=>{let t=[];const e={".bilibili-player-block-filter-type[ftype=scroll]":[1,2,3],".bilibili-player-block-filter-type[ftype=top]":[5],".bilibili-player-block-filter-type[ftype=bottom]":[4],".bilibili-player-block-filter-type[ftype=color]":["color"]};for(const[n,i]of Object.entries(e)){if(dq(n).classList.contains("disabled")){t=t.concat(i)}}return t.concat(7,8)})();const n=1.4-.2*t(".bilibili-player-setting-fontsize .bui-thumb");i.resolution={x:1920*n,y:1080*n};i.bottomMarginPercent=[.75,.5,.25,0,0][e(".bilibili-player-setting-area .bui-thumb")];if(i.bottomMarginPercent===0&&dq(".bilibili-player-video-danmaku-setting-left-preventshade input").checked){i.bottomMarginPercent=.15}i.bold=dq(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){i={font:"微软雅黑",alpha:.6,duration:t=>{switch(t.type){case 4:case 5:return 4;default:return 6}},blockTypes:[7,8],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const o=new a(i);const l=o.convertToAssDocument(t);return l.generateAss()}async function l(t){const e=n();const a=new i((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){return new Blob([await o(a.rawXML)],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const s=dq("#danmaku-link");const c=s.getAttribute("href");if(c){URL.revokeObjectURL(c)}s.setAttribute("download",`${e}.${t?"ass":"xml"}`);s.setAttribute("href",r);s.click()}return{export:{downloadDanmaku:l,convertToAss:o},widget:{content:`\n\n\n下载弹幕\n\n`,condition:async()=>{let t=await SpinQuery.select(()=>(unsafeWindow||window).cid);return Boolean(t)},success:()=>{const t=dq("#danmaku-link");const e=dq("#download-danmaku");e.addEventListener("click",n=>{if(n.target!==t){try{e.disabled=true;l(n.shiftKey)}catch(t){logError(t)}finally{e.disabled=false}}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-subtitle.min.js"] = (()=>{return(t,e)=>{let i;const o=(t,e)=>{const o=document.createElement("a");const n=URL.createObjectURL(new Blob([t]));if(i){URL.revokeObjectURL(i)}i=n;o.setAttribute("href",n);o.setAttribute("download",escapeFilename(e));document.body.appendChild(o);o.click();o.remove()};return{widget:{content:`\n`,condition:videoCondition,success:()=>{const t=dq("#download-subtitle");t.addEventListener("click",async i=>{try{t.disabled=true;const{aid:n,cid:s}=unsafeWindow;if(!n||!s){logError("未找到视频AID和CID");return}const{VideoInfo:l}=await e.importAsync("video-info");const{getFriendlyTitle:c}=await e.importAsync("title");const r=new l(n);r.cid=parseInt(s);await r.fetchInfo();const a=r.subtitles;if(a.length===0){Toast.info("当前视频没有字幕.","下载字幕",3e3);return}const d=await loadSubtitleSettingsPanel();if(!d){logError("未找到字幕设置");return}const u=d.querySelector(".bilibili-player-video-subtitle-setting-lan .bui-select-result").innerHTML;const b=a.find(t=>t.language===u)||a[0];const f=await Ajax.getJson(b.url);const p=f.body;const y=c(true);if(i.shiftKey){const{SubtitleConverter:t,SubtitleSize:i,SubtitleLocation:n}=await e.importAsync("subtitle-converter");const s=d.querySelector(".bilibili-player-video-subtitle-setting-fontsize .bui-thumb");const l=parseFloat(s.style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const c={214:i.VeryLarge,163.5:i.Large,107:i.Medium,50.5:i.Small,0:i.VerySmall};const r=c[l];const a=d.querySelector(".bilibili-player-video-subtitle-setting-color .bui-select-result span:first-child");const u=a.getAttribute("style").match(/background:[ ]*(.+);/)[1];const b=d.querySelector(".bilibili-player-video-subtitle-setting-opacity .bui-bar");const f=parseFloat(b.style.transform.replace(/scaleX\(([\d\.]+)/,"$1"));const g=dq(".subtitle-position");const m={bc:n.BottomCenter,bl:n.BottomLeft,br:n.BottomRight,tc:n.TopCenter,tl:n.TopLeft,tr:n.TopRight};const h=Object.entries(m).filter(([t])=>{return g.classList.contains(`subtitle-position-${t}`)}).map(([,t])=>t).shift();const w=dq("video");const v={title:y,height:w.videoHeight,width:w.videoWidth,color:u,location:h,opacity:f,size:r};const S=new t(v);const L=await S.convertToAss(p);o(L,y+".ass")}else{o(JSON.stringify(p),y+".json")}}catch(t){logError(t)}finally{t.disabled=false}})}}}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.css"] = `.download-video{--download-video-background:white;--download-video-foreground:black;position:absolute;top:96px;left:50%;transform:translateX(-50%) scale(.95);background:var(--download-video-background);color:var(--download-video-foreground);box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;z-index:10001;pointer-events:none;opacity:0;padding:16px;width:300px;display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;box-sizing:content-box;line-height:normal}.download-video,.download-video *{transition:.2s ease-out;-webkit-tap-highlight-color:transparent!important}.download-video.opened{pointer-events:initial;opacity:1;transform:translateX(-50%) scale(1)}body.dark .download-video{--download-video-background:#222;--download-video-foreground:#eee}.round-corner .download-video,.round-corner .download-video .episode-list .v-checkbox,.round-corner .download-video .rpc-settings{border-radius:var(--large-corner-radius)}.round-corner .download-video .button,.round-corner .download-video .cover,.round-corner .download-video .direct-download .progress .background,.round-corner .download-video .direct-download .progress .foreground,.round-corner .download-video .rpc-settings input[type=text],.round-corner .download-video .size-warning-tip,.round-corner .download-video .title,.round-corner .download-video button{border-radius:var(--corner-radius)}.download-video .cover{min-height:100px;max-height:120px;object-fit:contain}.download-video h1{font-size:13pt;font-weight:700;color:var(--download-video-foreground)}.download-video h2{font-size:11pt;font-weight:700;color:var(--download-video-foreground)}.download-video .header{display:flex;justify-content:space-between;align-items:center}.download-video .header .grow{flex-grow:1}.download-video .header .mdi-download{font-size:16pt;color:var(--download-video-foreground);margin-right:8px}.download-video .header .mdi-close{font-size:16pt;color:var(--download-video-foreground);cursor:pointer}.download-video .header .mdi-close:hover{color:var(--theme-color)}.download-video .info{display:flex;flex-direction:column;align-items:center;margin-top:12px}.download-video .title{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-top:12px}.download-video .title .bold{width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.download-video .title .size{font-size:10pt;color:var(--download-video-foreground);align-self:center;display:flex;align-items:center;height:24px}.download-video .bold{color:var(--download-video-foreground);font-weight:700;font-size:12pt}.download-video .option-item{display:flex;justify-content:space-between;align-items:center;padding-top:12px;font-size:10pt}.download-video .tabs{display:flex;padding:12px 0;font-size:10pt}.download-video .tabs .tab{cursor:pointer;position:relative;opacity:.5}.download-video .tabs .tab.active{font-weight:700;opacity:1}.download-video .tabs .tab:not(:last-child){margin-right:16px}.download-video .tabs .tab::after{content:"";position:absolute;border-radius:2px;background-color:var(--theme-color);height:3px;width:80%;left:10%;bottom:-8px;transition:.2s ease-out;transform:scaleX(0)}.download-video .tabs .tab.active::after{transform:scaleX(1)}.download-video .separator{height:1px;background:#8884;width:100%;margin:12px 0;flex-shrink:0}.download-video .direct-download{display:flex;flex-direction:column;align-items:start;justify-content:space-between}.download-video .button,.download-video button{border:none;outline:0!important;padding:6px 16px;font-size:10pt;cursor:pointer;background:#8884;color:var(--download-video-foreground)}.download-video .button:hover,.download-video button:hover{background:#8886}.download-video .primary{background:var(--theme-color);color:var(--foreground-color);align-self:center}.download-video .primary:hover{background:var(--theme-color-90)}.download-video .busy .button,.download-video .busy .primary,.download-video .busy button,.download-video button:disabled{background-color:#0001;color:#8884;cursor:not-allowed}.download-video .busy .button,.download-video .busy button{cursor:wait!important}.download-video .direct-download .progress{align-self:stretch;display:flex;align-items:center;margin-top:8px}.download-video .direct-download .progress .background{flex-grow:1;height:4px;background:#8884;margin-right:4px;position:relative}.download-video .direct-download .progress .background .foreground{position:absolute;top:0;left:0;height:4px;background:linear-gradient(to right,var(--theme-color),var(--theme-color-60))}.download-video .direct-download .progress .percent{width:50px;text-align:right;font-size:12px}.download-video .actions{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8px -4px 0}.download-video .actions>*{margin:4px;flex-grow:1;flex-basis:calc(50% - 16px);display:flex;justify-content:center;align-items:center;white-space:nowrap}.download-video i.mdi-alert-circle{font-size:14pt;color:#ff9800}.download-video .size-warning{position:relative;padding:0 8px}.download-video .size-warning-tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--download-video-background);color:var(--download-video-foreground);border:1px dashed var(--theme-color);z-index:2;font-size:10pt;width:200px;padding:8px;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;pointer-events:none;opacity:0}.download-video .size-warning:hover .size-warning-tip{opacity:1}.download-video .episode-list .v-checkbox{padding:4px 8px;margin:4px 0;position:relative;background-color:transparent}.download-video .episode-list .v-checkbox.checked{background-color:#8882}.download-video .episode-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.download-video .episode-list{overflow:auto;max-height:320px}.download-video button.list-tool{padding:4px;line-height:1;font-size:12pt;margin:0 4px}.download-video .episode-header h2{flex-grow:1}.download-video .selected-count{width:64px;text-align:right}.download-video .aria2-rpc .mdi{margin-left:8px;font-size:14pt;line-height:1}.download-video .aria2-rpc{position:relative}.download-video .rpc-settings{position:absolute;display:flex;flex-direction:column;align-items:stretch;color:var(--download-video-foreground);background:#fff;bottom:120%;left:50%;cursor:initial;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;transform-origin:bottom;transform:translateX(-50%) scale(.9);opacity:0;pointer-events:none;padding:8px;z-index:3;transition:.3s cubic-bezier(.18,.89,.32,1.28);width:120%}body.dark .download-video .rpc-settings{background:#282828}.download-video .rpc-settings>*{margin:8px}.download-video .rpc-settings.show{opacity:1;transform:translateX(-50%) scale(1);pointer-events:initial}.download-video .rpc-settings input[type=text]{background:0 0;color:var(--download-video-foreground);border:1px solid #8884;padding:4px;margin-left:8px}.download-video .rpc-settings input[type=text]:focus{border-color:var(--theme-color)}.download-video .rpc-settings .operations{display:flex;align-items:center;justify-content:space-evenly}.download-video .final-dir{white-space:normal;word-break:break-all}.download-video .rpc-settings-item{display:flex;align-items:center;justify-content:space-between;white-space:nowrap}.download-video .rpc-settings-item input[type=text]{flex-grow:1;margin-left:24px}.download-video button.cancel-download,.download-video button.start-download{margin-top:8px}.download-video .direct-download-header{align-self:stretch;display:flex;justify-content:space-between;align-items:center}body.dark .download-video .direct-download .progress .foreground{background:linear-gradient(to right,var(--theme-color-70),var(--theme-color))}`; +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.css"] = `.download-video{--download-video-background:white;--download-video-foreground:black;position:absolute;top:96px;left:50%;transform:translateX(-50%) scale(.95);background:var(--download-video-background);color:var(--download-video-foreground);box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;z-index:10001;pointer-events:none;opacity:0;padding:16px;width:300px;display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;box-sizing:content-box;line-height:normal}.download-video,.download-video *{transition:.2s ease-out;-webkit-tap-highlight-color:transparent!important}.download-video.opened{pointer-events:initial;opacity:1;transform:translateX(-50%) scale(1)}body.dark .download-video{--download-video-background:#222;--download-video-foreground:#eee}.round-corner .download-video,.round-corner .download-video .episode-list .v-checkbox,.round-corner .download-video .rpc-settings{border-radius:var(--large-corner-radius)}.round-corner .download-video .button,.round-corner .download-video .cover,.round-corner .download-video .direct-download .progress .background,.round-corner .download-video .direct-download .progress .foreground,.round-corner .download-video .rpc-settings input[type=text],.round-corner .download-video .size-warning-tip,.round-corner .download-video .title,.round-corner .download-video button{border-radius:var(--corner-radius)}.download-video .cover{min-height:100px;max-height:120px;object-fit:contain}.download-video h1{font-size:13pt;font-weight:700;color:var(--download-video-foreground)}.download-video h2{font-size:11pt;font-weight:700;color:var(--download-video-foreground)}.download-video .header{display:flex;justify-content:space-between;align-items:center}.download-video .header .grow{flex-grow:1}.download-video .header .mdi-download{font-size:16pt;color:var(--download-video-foreground);margin-right:8px}.download-video .header .mdi-close{font-size:16pt;color:var(--download-video-foreground);cursor:pointer}.download-video .header .mdi-close:hover{color:var(--theme-color)}.download-video .info{display:flex;flex-direction:column;align-items:center;margin-top:12px}.download-video .title{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-top:12px}.download-video .title .bold{width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.download-video .title .size{font-size:10pt;color:var(--download-video-foreground);align-self:center;display:flex;align-items:center;height:24px}.download-video .bold{color:var(--download-video-foreground);font-weight:700;font-size:12pt}.download-video .option-item{display:flex;justify-content:space-between;align-items:center;padding-top:12px;font-size:10pt}.download-video .tabs{display:flex;padding:12px 0;font-size:10pt}.download-video .tabs .tab{cursor:pointer;position:relative;opacity:.5}.download-video .tabs .tab.active{font-weight:700;opacity:1}.download-video .tabs .tab:not(:last-child){margin-right:16px}.download-video .tabs .tab::after{content:"";position:absolute;border-radius:2px;background-color:var(--theme-color);height:3px;width:80%;left:10%;bottom:-8px;transition:.2s ease-out;transform:scaleX(0)}.download-video .tabs .tab.active::after{transform:scaleX(1)}.download-video .separator{height:1px;background:#8884;width:100%;margin:12px 0;flex-shrink:0}.download-video .direct-download{display:flex;flex-direction:column;align-items:start;justify-content:space-between}.download-video .button,.download-video button{border:none;outline:0!important;padding:6px 16px;font-size:10pt;cursor:pointer;background:#8884;color:var(--download-video-foreground)}.download-video .button:hover,.download-video button:hover{background:#8886}.download-video .primary{background:var(--theme-color);color:var(--foreground-color);align-self:center}.download-video .primary:hover{background:var(--theme-color-90)}.download-video .busy .button,.download-video .busy .primary,.download-video .busy button,.download-video button:disabled{background-color:#0001;color:#8884;cursor:not-allowed}.download-video .busy .button,.download-video .busy button{cursor:wait!important}.download-video .direct-download .progress{align-self:stretch;display:flex;align-items:center;margin-top:8px}.download-video .direct-download .progress .background{flex-grow:1;height:4px;background:#8884;margin-right:4px;position:relative}.download-video .direct-download .progress .background .foreground{position:absolute;top:0;left:0;height:4px;background:linear-gradient(to right,var(--theme-color),var(--theme-color-60))}.download-video .direct-download .progress .percent{width:50px;text-align:right;font-size:12px}.download-video .actions{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8px -4px 0}.download-video .actions>*{margin:4px;flex-grow:1;flex-basis:calc(50% - 16px);display:flex;justify-content:center;align-items:center;white-space:nowrap}.download-video i.mdi-alert-circle{font-size:14pt;color:#ff9800}.download-video .size-warning{position:relative;padding:0 8px}.download-video .size-warning-tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--download-video-background);color:var(--download-video-foreground);border:1px dashed var(--theme-color);z-index:2;font-size:10pt;width:200px;padding:8px;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;pointer-events:none;opacity:0}.download-video .size-warning:hover .size-warning-tip{opacity:1}.download-video .episode-list .v-checkbox{padding:4px 8px;margin:4px 0;position:relative;background-color:transparent}.download-video .episode-list .v-checkbox.checked{background-color:#8882}.download-video .episode-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.download-video .episode-list{overflow:auto;max-height:320px}.download-video button.list-tool{padding:4px;line-height:1;font-size:12pt;margin:0 4px}.download-video .episode-header h2{flex-grow:1}.download-video .selected-count{width:64px;font-size:12px;text-align:right}.download-video .aria2-rpc .mdi{margin-left:8px;font-size:14pt;line-height:1}.download-video .aria2-rpc{position:relative}.download-video .rpc-settings{position:absolute;display:flex;flex-direction:column;align-items:stretch;color:var(--download-video-foreground);background:#fff;bottom:120%;left:50%;cursor:initial;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;transform-origin:bottom;transform:translateX(-50%) scale(.9);opacity:0;pointer-events:none;padding:8px;z-index:3;transition:.3s cubic-bezier(.18,.89,.32,1.28);width:120%}body.dark .download-video .rpc-settings{background:#282828}.download-video .rpc-settings>*{margin:8px}.download-video .rpc-settings.show{opacity:1;transform:translateX(-50%) scale(1);pointer-events:initial}.download-video .rpc-settings input[type=text]{background:0 0;color:var(--download-video-foreground);border:1px solid #8884;padding:4px;margin-left:8px}.download-video .rpc-settings input[type=text]:focus{border-color:var(--theme-color)}.download-video .rpc-settings .operations{display:flex;align-items:center;justify-content:space-evenly}.download-video .final-dir{white-space:normal;word-break:break-all}.download-video .rpc-settings-item{display:flex;align-items:center;justify-content:space-between;white-space:nowrap}.download-video .rpc-settings-item input[type=text]{flex-grow:1;margin-left:24px}.download-video button.cancel-download,.download-video button.start-download{margin-top:8px}.download-video .direct-download-header{align-self:stretch;display:flex;justify-content:space-between;align-items:center}body.dark .download-video .direct-download .progress .foreground{background:linear-gradient(to right,var(--theme-color-70),var(--theme-color))}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.html"] = `

下载视频

单个视频
批量导出
警告: 过大的视频大小会在直接下载时占用大量内存, 并可能导致浏览器标签页崩溃. 请考虑降低清晰度或使用导出选项.
预计大小: {{displaySize}}
格式
清晰度
弹幕
首选编码

直接下载

{{speed}}
{{progressPercent}}%

选集

{{selectedEpisodeCount}}/{{episodeList.length}}

导出

{{showRpcSettings ? '取消' : 'aria2 RPC'}}

aria2 RPC

配置

主机
端口
密钥
限速
默认路径
路径
最终路径: {{rpcSettings.baseDir + rpcSettings.dir}}
方法
开始下载
{{saveRpcSettingsText}}
`; -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:s}=e.import("title");const{VideoInfo:a,DanmakuInfo:i}=e.import("video-info");const{DownloadVideoPackage:n}=e.import("download-video-package");class o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fnver=0&fnval=16`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json`}}}return e.bind(this)}async getDashUrl(t){return(await this.getApiGenerator(true))(c.aid,c.cid,t)}async getUrl(t){return(await this.getApiGenerator())(c.aid,c.cid,t)}}class r extends o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fourk=1&fnval=16`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&otype=json&fourk=1&fnval=16`}}else{if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=&otype=json`}}}return e.bind(this)}}class l extends o{constructor(t){super();this.ep=t}async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}`}}}return e.bind(this)}}const c={entity:new o,aid:"",cid:""};let d=[];let p=null;class h{constructor(t,e,s){this.quality=t;this.internalName=e;this.displayName=s}async downloadInfo(t=false){const e=new u(this);await e.fetchVideoInfo(t);return e}static parseFormats(t){const e=t.accept_quality;const s=t.accept_format.split(",");const a=t.accept_description;const i=e.map((t,e)=>{return new h(t,s[e],a[e])});return i}static async getAvailableDashFormats(){const t=await c.entity.getDashUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}return h.parseFormats(e.data||e.result||e)}static async getAvailableFormats(){const t=await c.entity.getUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}const s=e.data||e.result||e;return h.parseFormats(s)}}class u{constructor(t,e){this.fragmentSplitFactor=6*2;this.workingXhr=null;this.progressMap=new Map;this.format=t;this.fragments=e||[];this.videoSpeed=new f(this)}get danmakuOption(){return t.downloadVideoDefaultDanmaku}get isDash(){return this.fragments.some(t=>t.url.includes(".m4s"))}get totalSize(){return this.fragments.map(t=>t.size).reduce((t,e)=>t+e)}async fetchVideoInfo(t=false){if(!t){const t=await c.entity.getUrl(this.format.quality);const e=await Ajax.getTextWithCredentials(t);const s=JSON.parse(e.replace(/http:/g,"https:"));const a=s.data||s.result||s;if(a.quality!==this.format.quality){throw new Error("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const i=a.durl;this.fragments=i.map(t=>{return{length:t.length,size:t.size,url:t.url,backupUrls:t.backup_url}})}else{const{dashToFragments:t,getDashInfo:s}=await e.importAsync("video-dash");const a=await s(await c.entity.getDashUrl(this.format.quality),this.format.quality);this.fragments=t(a)}return this.fragments}updateProgress(){const t=this.progressMap?[...this.progressMap.values()].reduce((t,e)=>t+e,0)/this.totalSize:0;if(t>1||t<0){console.error(`[下载视频] 进度异常: ${t}`,this.progressMap.values())}this.progress&&this.progress(t)}cancelDownload(){this.videoSpeed.stopMeasure();if(this.workingXhr!==null){this.workingXhr.forEach(t=>t.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(t){const e=[];const s=this.isDash?4*1024*1024:16*1024*1024;let a;if(t.size<=s*6){a=t.size/this.fragmentSplitFactor}else{a=s}let i=0;const n=t=>[...this.progressMap.keys()].indexOf(t)+1;while(i{const a=new XMLHttpRequest;a.open("GET",t.url);a.responseType="arraybuffer";a.withCredentials=false;a.addEventListener("progress",t=>{console.log(`[下载视频] 视频片段${n(a)}下载进度: ${t.loaded}/${r} bytes loaded, ${o}`);this.progressMap.set(a,t.loaded);this.updateProgress()});a.addEventListener("load",()=>{if((""+a.status)[0]==="2"){console.log(`[下载视频] 视频片段${n(a)}下载完成`);e(a.response)}else{s(`视频片段${n(a)}请求失败, response = ${a.status}`)}});a.addEventListener("abort",()=>s("canceled"));a.addEventListener("error",()=>{console.error(`[下载视频] 视频片段${n(a)}下载失败: ${o}`);this.progressMap.set(a,0);this.updateProgress();a.open("GET",t.url);a.setRequestHeader("Range",o);a.send()});a.setRequestHeader("Range",o);this.progressMap.set(a,0);a.send();this.workingXhr.push(a)}));i=Math.round(i+a)+1}return Promise.all(e)}async copyUrl(){const t=this.fragments.map(t=>t.url).reduce((t,e)=>t+"\r\n"+e);GM.setClipboard(t,"text")}async showUrl(){const t=this.fragments.map(t=>`\n${t.url}\n`).reduce((t,e)=>t+"\r\n"+e);Toast.success(t+`复制全部`,"显示链接");const e=await SpinQuery.select("#copy-link");e.addEventListener("click",async()=>{await this.copyUrl()})}async exportData(t=false){const e=JSON.stringify([{fragments:this.fragments,title:s(),totalSize:this.fragments.map(t=>t.size).reduce((t,e)=>t+e),referer:document.URL.replace(window.location.search,"")}]);if(t){GM.setClipboard(e,"text")}else{const t=new Blob([e],{type:"text/json"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.json`,t);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}async exportAria2(a=false){if(a){const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,a);await i.emit();const o=t.aria2RpcOption;const r=this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}const i=[];if(o.secretKey!==""){i.push(`token:${o.secretKey}`)}i.push([t.url]);i.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${s()}${a}${this.extension(t)}`,split:this.fragmentSplitFactor,dir:o.baseDir+o.dir||undefined,"max-download-limit":o.maxDownloadLimit||undefined});const n=encodeURIComponent(`${s()}${a}`);return{params:i,id:n}});const{sendRpc:l}=await e.importAsync("aria2-rpc");await l(r)}else{const t=`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}return`\n${t.url}\n referer=${document.URL.replace(window.location.search,"")}\n user-agent=${UserAgent}\n out=${s()}${a}${this.extension(t)}\n split=${this.fragmentSplitFactor}\n`.trim()}).join("\n")}\n`.trim();const e=new Blob([t],{type:"text/plain"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.txt`,e);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}extension(t){const e=t||this.fragments[0];const s=[".flv",".mp4"].find(t=>e.url.includes(t));if(s){return s}else if(e.url.includes(".m4s")){return this.fragments.indexOf(e)===0?".mp4":".m4a"}else{console.warn("No extension detected.");return".flv"}}async downloadDanmaku(){if(this.danmakuOption!=="无"){const t=new i(c.cid);await t.fetchInfo();if(this.danmakuOption==="XML"){return t.rawXML}else{const{convertToAss:s}=await e.importAsync("download-danmaku");return s(t.rawXML)}}else{return null}}async download(){this.workingXhr=[];this.progressMap=new Map;this.updateProgress();const t=[];this.videoSpeed.startMeasure();for(const e of this.fragments){const s=await this.downloadFragment(e);t.push(s)}if(t.length<1){throw new Error("下载失败.")}const e=s();const a=new n;t.forEach((s,i)=>{let n;const o=this.fragments[i];if(t.length>1&&!this.isDash){n=`${e} - ${i+1}${this.extension(o)}`}else{n=`${e}${this.extension(o)}`}a.add(n,new Blob(Array.isArray(s)?s:[s]))});const i=await this.downloadDanmaku();a.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,i);await a.emit(e+".zip");this.progress&&this.progress(0);this.videoSpeed.stopMeasure()}}class f{constructor(t){this.lastProgress=0;this.measureInterval=1e3;this.workingDownloader=t}startMeasure(){this.intervalTimer=setInterval(()=>{const t=this.workingDownloader.progressMap?[...this.workingDownloader.progressMap.values()].reduce((t,e)=>t+e,0):0;const e=t-this.lastProgress;if(this.speedUpdate!==undefined){this.speedUpdate(formatFileSize(e)+"/s")}this.lastProgress=t},this.measureInterval)}stopMeasure(){clearInterval(this.intervalTimer)}}async function w(){const t=await SpinQuery.select(()=>(unsafeWindow||window).aid);const e=await SpinQuery.select(()=>(unsafeWindow||window).cid);if(!(t&&e)){return false}c.aid=t;c.cid=e;if(document.URL.includes("bangumi")){c.entity=new r}else if(document.URL.includes("cheese")){const t=document.URL.match(/cheese\/play\/ep([\d]+)/);c.entity=new l(t[1])}else{c.entity=new o}try{d=await h.getAvailableFormats()}catch(t){return false}return true}const m=e=>{const s=t.downloadVideoQuality;const a=e.find(t=>t.quality===s);if(a){return a}const i=e.filter(t=>t.quality{const t=dq(".download-video");t.classList.toggle("opened");window.scroll(0,0);dq(".gui-settings-mask").click()});document.body.insertAdjacentHTML("beforeend",e.import("downloadVideoHtml"));y()}async function y(){let o;const r=new Vue({el:".download-video",components:{VDropdown:()=>e.importAsync("v-dropdown.vue"),VCheckbox:()=>e.importAsync("v-checkbox.vue"),RpcProfiles:()=>e.importAsync("aria2-rpc-profiles.vue")},data:{downloadSingle:true,coverUrl:EmptyImageUrl,aid:c.aid,cid:c.cid,dashModel:{value:t.downloadVideoFormat,items:["flv","dash"]},qualityModel:{value:p.displayName,items:d.map(t=>t.displayName)},danmakuModel:{value:t.downloadVideoDefaultDanmaku,items:["无","XML","ASS"]},codecModel:{value:t.downloadVideoDashCodec,items:["AVC/H.264","HEVC/H.265"]},progressPercent:0,size:"获取大小中",blobUrl:"",episodeList:[],downloading:false,speed:"",batch:false,rpcSettings:t.aria2RpcOption,showRpcSettings:false,busy:false,saveRpcSettingsText:"保存配置",enableDash:t.enableDashDownload,lastDirectDownloadLink:""},computed:{displaySize(){if(typeof this.size==="string"){return this.size}return formatFileSize(this.size)},sizeWarning(){if(typeof this.size==="string"){return false}return this.size>1073741824},selectedEpisodeCount(){return this.episodeList.filter(t=>t.checked).length},dash(){return this.dashModel.value==="dash"}},methods:{close(){this.$el.classList.remove("opened")},danmakuOptionChange(){t.downloadVideoDefaultDanmaku=this.danmakuModel.value},async codecChange(){t.downloadVideoDashCodec=this.codecModel.value;await this.formatChange()},async dashChange(){console.log("dash change");const e=t.downloadVideoFormat=this.dashModel.value;let s=[];if(e==="flv"){s=await h.getAvailableFormats()}else{s=await h.getAvailableDashFormats()}d=s;p=m(d);this.qualityModel.items=s.map(t=>t.displayName);this.qualityModel.value=this.qualityModel.items[d.indexOf(p)];await this.formatChange()},async formatChange(e=false){console.log("format change");const s=this.getFormat();if(e){t.downloadVideoQuality=s.quality}try{this.size="获取大小中";const t=await s.downloadInfo(this.dash);this.size=t.totalSize}catch(t){this.size="获取大小失败";throw t}},getFormat(){const t=d.find(t=>t.displayName===this.qualityModel.value);if(!t){console.error(`No format found. model value = ${this.qualityModel.value}`);return null}return t},async exportData(t){if(this.busy===true){return}try{this.busy=true;if(!this.downloadSingle){await this.exportBatchData(t);return}const a=this.getFormat();const i=await a.downloadInfo(this.dash);switch(t){case"copyLink":await i.copyUrl();Toast.success("已复制链接到剪贴板.","下载视频",3e3);break;case"showLink":await i.showUrl();break;case"aria2":await i.exportAria2(false);break;case"aria2RPC":await i.exportAria2(true);break;case"copyVLD":await i.exportData(true);Toast.success("已复制VLD数据到剪贴板.","下载视频",3e3);break;case"exportVLD":await i.exportData(false);break;case"ffmpegFragments":if(i.fragments.length<2){Toast.info("当前视频没有分段.","分段列表",3e3)}else{const{getFragmentsList:t}=await e.importAsync("ffmpeg-support");const a=new n;a.add("ffmpeg-files.txt",t(i.fragments.length,s(),i.fragments.map(t=>i.extension(t))));await a.emit()}break;default:break}}catch(t){logError(t)}finally{this.busy=false}},async exportBatchData(t){const a=this.episodeList;if(a.every(t=>t.checked===false)){Toast.info("请至少选择1集或以上的数量!","批量导出",3e3);return}const o=t=>{const e=a.find(e=>e.cid===t.cid);if(e===undefined){return false}return e.checked};const r=this.getFormat();if(this.danmakuModel.value!=="无"){const t=Toast.info("下载弹幕中...","批量导出");const s=new n;try{if(this.danmakuModel.value==="XML"){for(const t of a.filter(o)){const e=new i(t.cid);await e.fetchInfo();s.add(t.title+".xml",e.rawXML)}}else{const{convertToAss:t}=await e.importAsync("download-danmaku");for(const e of a.filter(o)){const a=new i(e.cid);await a.fetchInfo();s.add(e.title+".ass",await t(a.rawXML))}}await s.emit(this.cid+".danmakus.zip")}catch(t){logError(`弹幕下载失败`);throw t}finally{t.dismiss()}}const l=Toast.info("获取链接中...","批量导出");const d=this.batchExtractor;d.config.itemFilter=o;d.config.api=await c.entity.getApiGenerator(this.dash);let p;try{switch(t){case"aria2":p=await d.collectAria2(r,l,false);await n.single(s(false)+".txt",new Blob([p],{type:"text/plain"}),{ffmpeg:this.ffmpegOption});return;case"aria2RPC":await d.collectAria2(r,l,true);Toast.success(`成功发送了批量请求.`,"aria2 RPC",3e3);return;case"copyVLD":GM.setClipboard(await d.collectData(r,l),{mimetype:"text/plain"});Toast.success("已复制批量vld数据到剪贴板.","批量导出",3e3);return;case"exportVLD":p=await d.collectData(r,l);await n.single(s(false)+".json",new Blob([p],{type:"text/json"}),{ffmpeg:this.ffmpegOption});return;case"ffmpegFragments":{const t=await d.getRawItems(r);const a=new u(r,t[0].fragments);const{getBatchFragmentsList:i}=await e.importAsync("ffmpeg-support");const o=i(t,this.dash||a.extension());if(!o){Toast.info("所有选择的分P都没有分段.","分段列表",3e3)}else{const t=new n;for(const[e,s]of o.entries()){t.add(e,s)}await t.emit(escapeFilename(`${s(false)}.zip`))}}break;case"ffmpegEpisodes":{const t=await d.getRawItems(r);const s=new u(r,t[0].fragments);const{getBatchEpisodesList:a}=await e.importAsync("ffmpeg-support");const i=a(t,this.dash||s.extension());const o=new n;o.add("ffmpeg-files.txt",i);await o.emit()}break;default:return}}catch(t){logError(t)}finally{l.dismiss()}},async checkBatch(){const t=["/www.bilibili.com/bangumi","/www.bilibili.com/video/av"];if(!t.some(t=>document.URL.includes(t))){this.batch=false;this.episodeList=[];return}const{BatchExtractor:s}=await e.importAsync("batch-download");if(await s.test()!==true){this.batch=false;this.episodeList=[];return}const a=this.batchExtractor=new s;this.batch=true;this.episodeList=(await a.getItemList()).map((t,e)=>{return{aid:t.aid,cid:t.cid,title:t.title,index:e,checked:true}})},cancelDownload(){if(o){o.cancelDownload()}},async startDownload(){const t=this.getFormat();try{this.downloading=true;const e=await t.downloadInfo(this.dash);e.videoSpeed.speedUpdate=(t=>this.speed=t);e.progress=(t=>{this.progressPercent=Math.trunc(t*100)});o=e;await e.download();this.lastDirectDownloadLink=n.lastPackageUrl}catch(t){if(t!=="canceled"){logError(t)}this.progressPercent=0}finally{this.downloading=false;this.speed=""}},selectAllEpisodes(){this.episodeList.forEach(t=>t.checked=true)},unselectAllEpisodes(){this.episodeList.forEach(t=>t.checked=false)},inverseAllEpisodes(){this.episodeList.forEach(t=>t.checked=!t.checked)},toggleRpcSettings(){this.showRpcSettings=!this.showRpcSettings},saveRpcSettings(){if(this.rpcSettings.host===""){this.rpcSettings.host="127.0.0.1"}if(this.rpcSettings.port===""){this.rpcSettings.port="6800"}t.aria2RpcOption=this.rpcSettings;const e=t.aria2RpcOptionProfiles.find(e=>e.name===t.aria2RpcOptionSelectedProfile);if(e){Object.assign(e,this.rpcSettings);t.aria2RpcOptionProfiles=t.aria2RpcOptionProfiles}this.saveRpcSettingsText="已保存";setTimeout(()=>this.saveRpcSettingsText="保存配置",2e3)},updateProfile(e){t.aria2RpcOption=this.rpcSettings=_.omit(e,"name")}},async mounted(){}});Observer.videoChange(async()=>{r.close();r.batch=false;r.downloadSingle=true;const t=dq("#download-video");const e=await w();t.style.display=e?"flex":"none";if(!e){return}r.aid=c.aid;r.cid=c.cid;try{const t=new a(c.aid);await t.fetchInfo();r.coverUrl=t.coverUrl.replace("http:","https:")}catch(t){r.coverUrl=EmptyImageUrl}r.dashChange();await r.checkBatch()})}return{widget:{content:`\n`,condition:w,success:g}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:s}=e.import("title");const{VideoInfo:a,DanmakuInfo:i}=e.import("video-info");const{DownloadVideoPackage:n}=e.import("download-video-package");class o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fnver=0&fnval=16`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json`}}}return e.bind(this)}async getDashUrl(t){return(await this.getApiGenerator(true))(c.aid,c.cid,t)}async getUrl(t){return(await this.getApiGenerator())(c.aid,c.cid,t)}}class r extends o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fourk=1&fnval=16`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&otype=json&fourk=1&fnval=16`}}else{if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=&otype=json`}}}return e.bind(this)}}class l extends o{constructor(t){super();this.ep=t}async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}`}}}return e.bind(this)}}const c={entity:new o,aid:"",cid:""};let d=[];let p=null;class h{constructor(t,e,s){this.quality=t;this.internalName=e;this.displayName=s}async downloadInfo(t=false){const e=new u(this);await e.fetchVideoInfo(t);return e}static parseFormats(t){const e=t.accept_quality;const s=t.accept_format.split(",");const a=t.accept_description;const i=e.map((t,e)=>{return new h(t,s[e],a[e])});return i}static async getAvailableDashFormats(){const t=await c.entity.getDashUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}return h.parseFormats(e.data||e.result||e)}static async getAvailableFormats(){const t=await c.entity.getUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}const s=e.data||e.result||e;return h.parseFormats(s)}}class u{constructor(t,e){this.fragmentSplitFactor=6*2;this.workingXhr=null;this.progressMap=new Map;this.format=t;this.fragments=e||[];this.videoSpeed=new f(this)}get danmakuOption(){return t.downloadVideoDefaultDanmaku}get isDash(){return this.fragments.some(t=>t.url.includes(".m4s"))}get totalSize(){return this.fragments.map(t=>t.size).reduce((t,e)=>t+e)}async fetchVideoInfo(t=false){if(!t){const t=await c.entity.getUrl(this.format.quality);const e=await Ajax.getTextWithCredentials(t);const s=JSON.parse(e.replace(/http:/g,"https:"));const a=s.data||s.result||s;if(a.quality!==this.format.quality){throw new Error("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const i=a.durl;this.fragments=i.map(t=>{return{length:t.length,size:t.size,url:t.url,backupUrls:t.backup_url}})}else{const{dashToFragments:t,getDashInfo:s}=await e.importAsync("video-dash");const a=await s(await c.entity.getDashUrl(this.format.quality),this.format.quality);this.fragments=t(a)}return this.fragments}updateProgress(){const t=this.progressMap?[...this.progressMap.values()].reduce((t,e)=>t+e,0)/this.totalSize:0;if(t>1||t<0){console.error(`[下载视频] 进度异常: ${t}`,this.progressMap.values())}this.progress&&this.progress(t)}cancelDownload(){this.videoSpeed.stopMeasure();if(this.workingXhr!==null){this.workingXhr.forEach(t=>t.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(t){const e=[];const s=this.isDash?4*1024*1024:16*1024*1024;let a;if(t.size<=s*6){a=t.size/this.fragmentSplitFactor}else{a=s}let i=0;const n=t=>[...this.progressMap.keys()].indexOf(t)+1;while(i{const a=new XMLHttpRequest;a.open("GET",t.url);a.responseType="arraybuffer";a.withCredentials=false;a.addEventListener("progress",t=>{console.log(`[下载视频] 视频片段${n(a)}下载进度: ${t.loaded}/${r} bytes loaded, ${o}`);this.progressMap.set(a,t.loaded);this.updateProgress()});a.addEventListener("load",()=>{if((""+a.status)[0]==="2"){console.log(`[下载视频] 视频片段${n(a)}下载完成`);e(a.response)}else{s(`视频片段${n(a)}请求失败, response = ${a.status}`)}});a.addEventListener("abort",()=>s("canceled"));a.addEventListener("error",()=>{console.error(`[下载视频] 视频片段${n(a)}下载失败: ${o}`);this.progressMap.set(a,0);this.updateProgress();a.open("GET",t.url);a.setRequestHeader("Range",o);a.send()});a.setRequestHeader("Range",o);this.progressMap.set(a,0);a.send();this.workingXhr.push(a)}));i=Math.round(i+a)+1}return Promise.all(e)}async copyUrl(){const t=this.fragments.map(t=>t.url).reduce((t,e)=>t+"\r\n"+e);GM.setClipboard(t,"text")}async showUrl(){const t=this.fragments.map(t=>`\n${t.url}\n`).reduce((t,e)=>t+"\r\n"+e);Toast.success(t+`复制全部`,"显示链接");const e=await SpinQuery.select("#copy-link");e.addEventListener("click",async()=>{await this.copyUrl()})}async exportData(t=false){const e=JSON.stringify([{fragments:this.fragments,title:s(),totalSize:this.fragments.map(t=>t.size).reduce((t,e)=>t+e),referer:document.URL.replace(window.location.search,"")}]);if(t){GM.setClipboard(e,"text")}else{const t=new Blob([e],{type:"text/json"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.json`,t);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}async exportAria2(a=false){if(a){const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,a);await i.emit();const o=t.aria2RpcOption;const r=this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}const i=[];if(o.secretKey!==""){i.push(`token:${o.secretKey}`)}i.push([t.url]);i.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${s()}${a}${this.extension(t)}`,split:this.fragmentSplitFactor,dir:o.baseDir+o.dir||undefined,"max-download-limit":o.maxDownloadLimit||undefined});const n=encodeURIComponent(`${s()}${a}`);return{params:i,id:n}});const{sendRpc:l}=await e.importAsync("aria2-rpc");await l(r)}else{const t=`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}return`\n${t.url}\n referer=${document.URL.replace(window.location.search,"")}\n user-agent=${UserAgent}\n out=${s()}${a}${this.extension(t)}\n split=${this.fragmentSplitFactor}\n`.trim()}).join("\n")}\n`.trim();const e=new Blob([t],{type:"text/plain"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.txt`,e);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}extension(t){const e=t||this.fragments[0];const s=[".flv",".mp4"].find(t=>e.url.includes(t));if(s){return s}else if(e.url.includes(".m4s")){return this.fragments.indexOf(e)===0?".mp4":".m4a"}else{console.warn("No extension detected.");return".flv"}}async downloadDanmaku(){if(this.danmakuOption!=="无"){const t=new i(c.cid);await t.fetchInfo();if(this.danmakuOption==="XML"){return t.rawXML}else{const{convertToAss:s}=await e.importAsync("download-danmaku");return s(t.rawXML)}}else{return null}}async download(){this.workingXhr=[];this.progressMap=new Map;this.updateProgress();const t=[];this.videoSpeed.startMeasure();for(const e of this.fragments){const s=await this.downloadFragment(e);t.push(s)}if(t.length<1){throw new Error("下载失败.")}const e=s();const a=new n;t.forEach((s,i)=>{let n;const o=this.fragments[i];if(t.length>1&&!this.isDash){n=`${e} - ${i+1}${this.extension(o)}`}else{n=`${e}${this.extension(o)}`}a.add(n,new Blob(Array.isArray(s)?s:[s]))});const i=await this.downloadDanmaku();a.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,i);await a.emit(e+".zip");this.progress&&this.progress(0);this.videoSpeed.stopMeasure()}}class f{constructor(t){this.lastProgress=0;this.measureInterval=1e3;this.workingDownloader=t}startMeasure(){this.intervalTimer=setInterval(()=>{const t=this.workingDownloader.progressMap?[...this.workingDownloader.progressMap.values()].reduce((t,e)=>t+e,0):0;const e=t-this.lastProgress;if(this.speedUpdate!==undefined){this.speedUpdate(formatFileSize(e)+"/s")}this.lastProgress=t},this.measureInterval)}stopMeasure(){clearInterval(this.intervalTimer)}}async function w(){const t=await SpinQuery.select(()=>(unsafeWindow||window).aid);const e=await SpinQuery.select(()=>(unsafeWindow||window).cid);if(!(t&&e)){return false}c.aid=t;c.cid=e;if(document.URL.includes("bangumi")){c.entity=new r}else if(document.URL.includes("cheese")){const t=document.URL.match(/cheese\/play\/ep([\d]+)/);c.entity=new l(t[1])}else{c.entity=new o}try{d=await h.getAvailableFormats()}catch(t){return false}return true}const m=e=>{const s=t.downloadVideoQuality;const a=e.find(t=>t.quality===s);if(a){return a}const i=e.filter(t=>t.quality{const t=dq(".download-video");t.classList.toggle("opened");window.scroll(0,0);dq(".gui-settings-mask").click()});document.body.insertAdjacentHTML("beforeend",e.import("downloadVideoHtml"));y()}async function y(){let o;const r=new Vue({el:".download-video",components:{VDropdown:()=>e.importAsync("v-dropdown.vue"),VCheckbox:()=>e.importAsync("v-checkbox.vue"),RpcProfiles:()=>e.importAsync("aria2-rpc-profiles.vue")},data:{downloadSingle:true,coverUrl:EmptyImageUrl,aid:c.aid,cid:c.cid,dashModel:{value:t.downloadVideoFormat,items:["flv","dash"]},qualityModel:{value:p.displayName,items:d.map(t=>t.displayName)},danmakuModel:{value:t.downloadVideoDefaultDanmaku,items:["无","XML","ASS"]},codecModel:{value:t.downloadVideoDashCodec,items:["AVC/H.264","HEVC/H.265"]},progressPercent:0,size:"获取大小中",blobUrl:"",episodeList:[],downloading:false,speed:"",batch:false,rpcSettings:t.aria2RpcOption,showRpcSettings:false,busy:false,saveRpcSettingsText:"保存配置",enableDash:t.enableDashDownload,lastDirectDownloadLink:""},computed:{displaySize(){if(typeof this.size==="string"){return this.size}return formatFileSize(this.size)},sizeWarning(){if(typeof this.size==="string"){return false}return this.size>1073741824},selectedEpisodeCount(){return this.episodeList.filter(t=>t.checked).length},dash(){return this.dashModel.value==="dash"}},methods:{close(){this.$el.classList.remove("opened")},danmakuOptionChange(){t.downloadVideoDefaultDanmaku=this.danmakuModel.value},async codecChange(){t.downloadVideoDashCodec=this.codecModel.value;await this.formatChange()},async dashChange(){console.log("dash change");const e=t.downloadVideoFormat=this.dashModel.value;let s=[];if(e==="flv"){s=await h.getAvailableFormats()}else{s=await h.getAvailableDashFormats()}d=s;p=m(d);this.qualityModel.items=s.map(t=>t.displayName);this.qualityModel.value=this.qualityModel.items[d.indexOf(p)];await this.formatChange()},async formatChange(e=false){console.log("format change");const s=this.getFormat();if(e){t.downloadVideoQuality=s.quality}try{this.size="获取大小中";const t=await s.downloadInfo(this.dash);this.size=t.totalSize}catch(t){this.size="获取大小失败";throw t}},getFormat(){const t=d.find(t=>t.displayName===this.qualityModel.value);if(!t){console.error(`No format found. model value = ${this.qualityModel.value}`);return null}return t},async exportData(t){if(this.busy===true){return}try{this.busy=true;if(!this.downloadSingle){await this.exportBatchData(t);return}const a=this.getFormat();const i=await a.downloadInfo(this.dash);switch(t){case"copyLink":await i.copyUrl();Toast.success("已复制链接到剪贴板.","下载视频",3e3);break;case"showLink":await i.showUrl();break;case"aria2":await i.exportAria2(false);break;case"aria2RPC":await i.exportAria2(true);break;case"copyVLD":await i.exportData(true);Toast.success("已复制VLD数据到剪贴板.","下载视频",3e3);break;case"exportVLD":await i.exportData(false);break;case"ffmpegFragments":if(i.fragments.length<2){Toast.info("当前视频没有分段.","分段列表",3e3)}else{const{getFragmentsList:t}=await e.importAsync("ffmpeg-support");const a=new n;a.add("ffmpeg-files.txt",t(i.fragments.length,s(),i.fragments.map(t=>i.extension(t))));await a.emit()}break;default:break}}catch(t){logError(t)}finally{this.busy=false}},async exportBatchData(t){const a=this.episodeList;if(a.every(t=>t.checked===false)){Toast.info("请至少选择1集或以上的数量!","批量导出",3e3);return}const o=t=>{const e=a.find(e=>e.cid===t.cid);if(e===undefined){return false}return e.checked};const r=this.getFormat();if(this.danmakuModel.value!=="无"){const t=Toast.info("下载弹幕中...","批量导出");const s=new n;try{if(this.danmakuModel.value==="XML"){for(const t of a.filter(o)){const e=new i(t.cid);await e.fetchInfo();s.add(t.title+".xml",e.rawXML)}}else{const{convertToAss:t}=await e.importAsync("download-danmaku");for(const e of a.filter(o)){const a=new i(e.cid);await a.fetchInfo();s.add(e.title+".ass",await t(a.rawXML))}}await s.emit(this.cid+".danmakus.zip")}catch(t){logError(`弹幕下载失败`);throw t}finally{t.dismiss()}}const l=Toast.info("获取链接中...","批量导出");const d=this.batchExtractor;d.config.itemFilter=o;d.config.api=await c.entity.getApiGenerator(this.dash);let p;try{switch(t){case"aria2":p=await d.collectAria2(r,l,false);await n.single(s(false)+".txt",new Blob([p],{type:"text/plain"}),{ffmpeg:this.ffmpegOption});return;case"aria2RPC":await d.collectAria2(r,l,true);Toast.success(`成功发送了批量请求.`,"aria2 RPC",3e3);return;case"copyVLD":GM.setClipboard(await d.collectData(r,l),{mimetype:"text/plain"});Toast.success("已复制批量vld数据到剪贴板.","批量导出",3e3);return;case"exportVLD":p=await d.collectData(r,l);await n.single(s(false)+".json",new Blob([p],{type:"text/json"}),{ffmpeg:this.ffmpegOption});return;case"ffmpegFragments":{const t=await d.getRawItems(r);const a=new u(r,t[0].fragments);const{getBatchFragmentsList:i}=await e.importAsync("ffmpeg-support");const o=i(t,this.dash||a.extension());if(!o){Toast.info("所有选择的分P都没有分段.","分段列表",3e3)}else{const t=new n;for(const[e,s]of o.entries()){t.add(e,s)}await t.emit(escapeFilename(`${s(false)}.zip`))}}break;case"ffmpegEpisodes":{const t=await d.getRawItems(r);const s=new u(r,t[0].fragments);const{getBatchEpisodesList:a}=await e.importAsync("ffmpeg-support");const i=a(t,this.dash||s.extension());const o=new n;o.add("ffmpeg-files.txt",i);await o.emit()}break;default:return}}catch(t){logError(t)}finally{l.dismiss()}},async checkBatch(){const t=["//www.bilibili.com/bangumi","//www.bilibili.com/video/av","//www.bilibili.com/blackboard/bnj2020.html"];if(!t.some(t=>document.URL.includes(t))){this.batch=false;this.episodeList=[];return}const{BatchExtractor:s}=await e.importAsync("batch-download");if(await s.test()!==true){this.batch=false;this.episodeList=[];return}const a=this.batchExtractor=new s;this.batch=true;this.episodeList=(await a.getItemList()).map((t,e)=>{return{aid:t.aid,cid:t.cid,title:t.title,index:e,checked:true}})},cancelDownload(){if(o){o.cancelDownload()}},async startDownload(){const t=this.getFormat();try{this.downloading=true;const e=await t.downloadInfo(this.dash);e.videoSpeed.speedUpdate=(t=>this.speed=t);e.progress=(t=>{this.progressPercent=Math.trunc(t*100)});o=e;await e.download();this.lastDirectDownloadLink=n.lastPackageUrl}catch(t){if(t!=="canceled"){logError(t)}this.progressPercent=0}finally{this.downloading=false;this.speed=""}},selectAllEpisodes(){this.episodeList.forEach(t=>t.checked=true)},unselectAllEpisodes(){this.episodeList.forEach(t=>t.checked=false)},inverseAllEpisodes(){this.episodeList.forEach(t=>t.checked=!t.checked)},toggleRpcSettings(){this.showRpcSettings=!this.showRpcSettings},saveRpcSettings(){if(this.rpcSettings.host===""){this.rpcSettings.host="127.0.0.1"}if(this.rpcSettings.port===""){this.rpcSettings.port="6800"}t.aria2RpcOption=this.rpcSettings;const e=t.aria2RpcOptionProfiles.find(e=>e.name===t.aria2RpcOptionSelectedProfile);if(e){Object.assign(e,this.rpcSettings);t.aria2RpcOptionProfiles=t.aria2RpcOptionProfiles}this.saveRpcSettingsText="已保存";setTimeout(()=>this.saveRpcSettingsText="保存配置",2e3)},updateProfile(e){t.aria2RpcOption=this.rpcSettings=_.omit(e,"name")}},async mounted(){}});Observer.videoChange(async()=>{r.close();r.batch=false;r.downloadSingle=true;const t=dq("#download-video");const e=await w();t.style.display=e?"flex":"none";if(!e){return}r.aid=c.aid;r.cid=c.cid;try{const t=new a(c.aid);await t.fetchInfo();r.coverUrl=t.coverUrl.replace("http:","https:")}catch(t){r.coverUrl=EmptyImageUrl}r.dashChange();await r.checkBatch()})}return{widget:{content:`\n`,condition:w,success:g}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video-package.min.js"] = (()=>{return(e,t)=>{class n{constructor(e={}){this.config=e;this.entries=[]}download(e,t){const a=document.createElement("a");const i=URL.createObjectURL(t);if(n.lastPackageUrl){URL.revokeObjectURL(n.lastPackageUrl)}n.lastPackageUrl=i;a.setAttribute("href",i);a.setAttribute("download",escapeFilename(e));document.body.appendChild(a);a.click();a.remove()}add(e,t){if(t===null||t===undefined){return}this.entries.push({name:escapeFilename(e),data:t})}async blob(){if(this.entries.length===0){return null}if(this.entries.length===1){const e=this.entries[0].data;return typeof e==="string"?new Blob([e]):e}const e=new JSZip;this.entries.forEach(({name:t,data:n})=>{e.file(t,n)});return await e.generateAsync({type:"blob"})}async emit(e){if(this.entries.length===0){return}if(!e||this.entries.length===1){e=this.entries[0].name}const t=await this.blob();if(!t){return}return this.download(e,t)}static async single(e,t,a={}){const i=new n(a);i.add(e,t);return await i.emit()}}n.lastPackageUrl="";return{export:{DownloadVideoPackage:n}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dpi-img.vue.min.js"] = (()=>{return(t,s)=>{const r=``;return{export:Object.assign({template:r},{props:["size","src","blur","root","rootMargin","threshold"],data(){return{srcset:null,actualSrc:null}},watch:{size(){this.sourceChange()},src(){this.sourceChange()}},methods:{sourceChange(){if(this.actualSrc===null||this.srcset===null){return}this.calcSrc()},calcSrc(){if(!this.src||!this.size){return}if(this.src.includes("//static.hdslb.com/images/member/noface.gif")){this.srcset=this.src;this.actualSrc=this.src;return}const t=this.src.substring(this.src.lastIndexOf(".")+1);this.srcset=getDpiSourceSet(this.src,this.size,t);this.actualSrc=this.src}},mounted(){const t={root:this.root,rootMargin:this.rootMargin||"200px",threshold:this.threshold};const s=new IntersectionObserver(t=>{t.forEach(t=>{if(t.isIntersecting){this.calcSrc();s.disconnect()}})},t);s.observe(this.$el)},computed:{width(){if(typeof this.size==="object"&&"width"in this.size){return this.size.width}return null},height(){if(typeof this.size==="object"&&"height"in this.size){return this.size.height}return null}}})}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/expand-danmaku.min.js"] = (()=>{return(e,a)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}Observer.videoChange(async()=>{const e=await SpinQuery.select(".bui-collapse-wrap");if(e&&e.classList.contains("bui-collapse-wrap-folded")){const e=await SpinQuery.select(".bui-collapse-header");e.click()}})}})(); diff --git a/bilibili-evolved.preview.user.js b/bilibili-evolved.preview.user.js index dab59cc49..4c22a6583 100644 --- a/bilibili-evolved.preview.user.js +++ b/bilibili-evolved.preview.user.js @@ -1130,7 +1130,7 @@ onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/m onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/auto-draw.min.js"] = (()=>{return(t,n)=>{(async()=>{if(!/^https:\/\/live\.bilibili\.com\/[\d]+/.test(document.URL)){return}const t=await SpinQuery.condition(()=>dq(".chat-popups-section"),t=>t.querySelector("chat-draw-area")===null);if(!t){console.warn("[自动领奖] 未能找到弹窗容器");return}Observer.childListSubtree(t,()=>{let t;console.log("draw button = ",dq(".chat-popups-section .draw>span:nth-child(3)"));t=dq(".chat-popups-section .draw>span:nth-child(3)");if(t===null){const t=dq(".chat-popups-section .function-bar>span:nth-child(3)");if(t!==null){const n=Observer.attributes(t,()=>{if(t.style.display!=="none"){n.forEach(t=>t.stop());t.click()}})}}if(t!==null){t.click()}})})()}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/auto-play.min.js"] = (()=>{return(e,d)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}SpinQuery.condition(()=>document.querySelector(".bilibili-player-video video"),e=>e&&e.paused===true,e=>e.play())}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/bangumi-timeline.vue.min.js"] = (()=>{return(e,i)=>{const n=`
时间表
{{t.date}}
{{t.dayOfWeekText}}
`;i.applyStyleFromText(`.simple-home .bangumi-timeline-container{width:100%}.simple-home .bangumi-timeline-container .bangumi-timeline{display:flex;align-items:flex-start;overflow:auto;scrollbar-width:none!important;scroll-behavior:smooth;scroll-snap-type:x mandatory;--column-count:1;--column-width:250px;--column-gap:24px;width:calc(var(--column-count) * (var(--column-width) + var(--column-gap)) - .5 * var(--column-gap))}.simple-home .bangumi-timeline-container .bangumi-timeline::-webkit-scrollbar{height:0!important;width:0!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day{scroll-snap-align:start;width:var(--column-width);max-height:calc(var(--total-height) - 32px);overflow:auto;flex:0 0 auto;padding-bottom:16px;scroll-behavior:smooth;scrollbar-width:none!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day::-webkit-scrollbar{height:0!important;width:0!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container{display:grid;grid-template:"icon date" 1fr "icon dow" 1fr/auto 1fr;grid-column-gap:8px;column-gap:8px;height:60px;padding-bottom:12px;cursor:pointer;position:sticky;top:0;z-index:1;background-color:#f4f4f4}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container{background-color:#181818}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon{grid-area:icon;justify-self:center;align-self:center;background-image:url(//s1.hdslb.com/bfs/static/bangumi-timeline/asserts/icons.png);background-size:247px 663px;width:38px;height:36px;background-position-x:-146px;filter:brightness(.5)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-1{background-position-y:-36px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-2{background-position-y:-108px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-3{background-position-y:-180px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-4{background-position-y:-252px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-5{background-position-y:-324px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-6{background-position-y:-396px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-7{background-position-y:-468px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .date{grid-area:date;align-self:end;opacity:.75}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .day-of-week{grid-area:dow;align-self:start;font-weight:700;font-size:15px;opacity:.75}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .icon{width:50px;height:48px;background-position-x:-56px;filter:none}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .date{font-size:14px;opacity:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .day-of-week{font-size:18px;opacity:1}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon{filter:brightness(.8)}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .icon{filter:invert(1)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container{margin-top:18px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container>:not(:last-child){margin-bottom:8px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time{display:flex;align-items:center;font-weight:700}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent{color:var(--theme-color)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent~.bangumi-item{box-shadow:0 4px 8px 0 #0001,inset 0 0 0 2px var(--theme-color)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent~.bangumi-item .cover-container{margin:2px;border-radius:6px 0 0 6px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time .be-icon{margin-right:6px;font-size:18px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item{display:grid;height:72px;grid-template:"cover title" auto "cover ep" auto/72px 1fr;background-color:#fff;color:inherit;box-shadow:0 4px 8px 0 #0001;border-radius:8px;grid-row-gap:8px;row-gap:8px}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item{background-color:#282828}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .cover-container{grid-area:cover;overflow:hidden;border-radius:8px 0 0 8px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .cover-container img{width:100%;height:100%}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item.delay{opacity:.4}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item.delay:hover{opacity:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item:hover{color:var(--theme-color)!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item:hover .cover-container img{transform:scale(1.05)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .title{grid-area:title;align-self:end;font-size:13px;font-weight:700;margin:0 12px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;max-height:2.6em;word-break:break-all;line-height:1.3;overflow:hidden}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .ep-title{grid-area:ep;align-self:start;margin:0 12px;display:flex;align-items:center}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .ep-title .be-icon{color:var(--theme-color);margin-right:4px;font-size:18px;line-height:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day:not(:last-child){margin-right:var(--column-gap)}@media screen and (min-width:1000px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:2}}@media screen and (min-width:1300px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:3}}@media screen and (min-width:1550px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:4}}`,"bangumi-timeline-style");const t={global:"https://bangumi.bilibili.com/web_api/timeline_global",chinese:"https://bangumi.bilibili.com/web_api/timeline_cn"};return{export:Object.assign({template:n},{components:{Icon:()=>i.importAsync("icon.vue"),DpiImg:()=>i.importAsync("dpi-img.vue")},props:{type:{type:String,default:"global",required:false}},data(){return{timeline:[],recentTime:""}},computed:{apiUrl(){return t[this.type]||t.global}},watch:{type(){this.updateTimeline()}},methods:{calculateRecentTime(){const e=this.timeline.find(e=>e.isToday);const i=Number(new Date);const n=Object.entries(e.bangumis).map(([e,i])=>{return{time:e,timestamp:i[0].timestamp,bangumis:i}});const t=n.filter(e=>e.timestampe.time)}},moveTimeline(e){const i=e.currentTarget;const n=i.parentElement;const t=n.parentElement;const a=getComputedStyle(t);const m=parseInt(a.getPropertyValue("--column-width").match(/(.+)px/)[1])+parseInt(a.getPropertyValue("--column-gap").match(/(.+)px/)[1]);const o=n.offsetLeft-t.scrollLeft;if(o=m*2){t.scrollLeft+=m}console.log(e,i,n,t);console.log(m,m*2,n.offsetLeft,t.scrollLeft,o)},async updateTimeline(){try{const e=await Ajax.getJsonWithCredentials(this.apiUrl);if(e.code!==0){throw new Error(e.message)}const i=e.result.map(e=>{return{date:e.date,dayOfWeek:e.day_of_week,dayOfWeekText:"周"+[,"一","二","三","四","五","六","日"][e.day_of_week],isToday:Boolean(e.is_today),bangumis:_.groupBy(e.seasons.map(e=>{return{coverUrl:e.cover.replace("http:","https:"),squareCoverUrl:e.square_cover.replace("http:","https:"),time:e.pub_time,timestamp:e.pub_ts*1e3,url:e.url,follow:Boolean(e.follow),epTitle:e.pub_index||e.delay_reason+" "+e.delay_index,title:e.title,delay:Boolean(e.delay),published:Boolean(e.is_published)}}),e=>e.time)}});this.timeline=i;this.calculateRecentTime();setInterval(()=>{if(document.hasFocus()){this.calculateRecentTime()}},60*1e3);await this.$nextTick();const n=this.$el;const t=this.$el.querySelector(".bangumi-timeline");const a=getComputedStyle(t);const m=parseInt(a.getPropertyValue("--column-width").match(/(.+)px/)[1]);const o=parseInt(a.getPropertyValue("--column-gap").match(/(.+)px/)[1]);t.scrollLeft=5*(m+o)}catch(e){logError(e);this.$emit("error")}finally{this.$emit("load")}}},async mounted(){await this.updateTimeline()}})}}})(); -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/batch-download.min.js"] = (()=>{return(t,e)=>{const{formatTitle:i}=e.import("title");const s=12;const n=[".mp4",".m4a"];class r{constructor(t){this.config=t;this.itemList=[]}formatTitle(e){const s=t.batchFilenameFormat;const n=i(s,true,e);return escapeFilename(n," ")}async getRawItems(t){return JSON.parse(await this.collectData(t))}extension(t,e){const i=[".flv",".mp4"].find(e=>t.includes(e));if(i){return i}else if(t.includes(".m4s")){return n[e]}else{return".flv"}}async collectAria2(i,n){const r=await this.getRawItems(i);if(n){const i=t.aria2RpcOption;const{sendRpc:n}=await e.importAsync("aria2-rpc");for(const t of r){const e=t.fragments.map((e,n)=>{let r="";if(t.fragments.length>1&&!e.url.includes(".m4s")){r=" - "+(n+1)}const a=[];if(i.secretKey!==""){a.push(`token:${i.secretKey}`)}a.push([e.url]);a.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${t.title}${r}${this.extension(e.url,n)}`,split:s,dir:i.baseDir+i.dir||undefined,"max-download-limit":i.maxDownloadLimit||undefined});const o=encodeURIComponent(`${t.title}${r}`);return{params:a,id:o}});await n(e,true)}}else{return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${r.map(t=>{return t.fragments.map((e,i)=>{let n="";if(t.fragments.length>1&&!e.url.includes(".m4s")){n=` - ${i+1}`}return`\n${e.url}\n referer=${t.referer}\n user-agent=${UserAgent}\n out=${t.title}${n}${this.extension(e.url,i)}\n split=${s}\n`.trim()}).join("\n")}).join("\n")}\n`.trim()}}}class a extends r{static async test(){if(!document.URL.includes("/www.bilibili.com/video/av")){return false}return await SpinQuery.select("#multi_page")!==null}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=`https://api.bilibili.com/x/web-interface/view?aid=${unsafeWindow.aid}`;const e=await Ajax.getJson(t);if(e.code!==0){Toast.error(`获取视频选集列表失败, message=${e.message}`,"批量下载");return[]}const i=e.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return[]}this.itemList=i.map(t=>{return{title:`P${t.page} ${t.part}`,titleParameters:{n:t.page,ep:t.part},cid:t.cid,aid:unsafeWindow.aid}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const n=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/x/player/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const r=await Ajax.getJsonWithCredentials(n);const a=r.data||r.result||r;if(a.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${a.quality})`)}let o;if(a.durl){o=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const r=await i(n,typeof t==="string"?parseInt(t):t);o=s(r)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}class o extends r{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=document.querySelector("meta[property='og:url']");if(t===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return[]}const e=t.getAttribute("content").match(/play\/ss(\d+)/)[1];if(e===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return[]}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${e}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return[]}this.itemList=i.result.main_section.episodes.map((t,e)=>{const i=t.long_title?t.title:(e+1).toString();const s=t.long_title?t.long_title:t.title;return{aid:t.aid,cid:t.cid,title:`${i} - ${s}`,titleParameters:{n:i,ep:s}}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const n=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/pgc/player/web/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const r=await Ajax.getJsonWithCredentials(n);const a=r.data||r.result||r;if(a.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${a.quality})`)}let o;if(a.durl){o=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const r=await i(n,typeof t==="string"?parseInt(t):t);o=s(r)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}const c=[o,a];let l;class u{constructor(t){this.config=Object.assign({itemFilter:()=>true},t)}static async test(){for(const t of c){if(await t.test()===true){l=t;return true}}return false}getExtractor(){if(l===null){logError("[批量下载] 未找到合适的解析模块.");throw new Error(`[Batch Download] module not found.`)}const t=new l(this.config);return t}async getItemList(){const t=this.getExtractor();return await t.getItemList()}async getRawItems(t){const e=this.getExtractor();return await e.getRawItems(t.quality)}async collectData(t,e){const i=this.getExtractor();const s=await i.collectData(t.quality);e.dismiss();return s}async collectAria2(t,e,i=false){const s=this.getExtractor();const n=await s.collectAria2(t.quality,i);e.dismiss();return n}}return{export:{BatchExtractor:u}}}})(); +onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/batch-download.min.js"] = (()=>{return(t,e)=>{const{formatTitle:i}=e.import("title");const s=12;const a=[".mp4",".m4a"];class n{constructor(t){this.config=t;this.itemList=[]}formatTitle(e){const s=t.batchFilenameFormat;const a=i(s,true,e);return escapeFilename(a," ")}async getRawItems(t){return JSON.parse(await this.collectData(t))}extension(t,e){const i=[".flv",".mp4"].find(e=>t.includes(e));if(i){return i}else if(t.includes(".m4s")){return a[e]}else{return".flv"}}async collectAria2(i,a){const n=await this.getRawItems(i);if(a){const i=t.aria2RpcOption;const{sendRpc:a}=await e.importAsync("aria2-rpc");for(const t of n){const e=t.fragments.map((e,a)=>{let n="";if(t.fragments.length>1&&!e.url.includes(".m4s")){n=" - "+(a+1)}const r=[];if(i.secretKey!==""){r.push(`token:${i.secretKey}`)}r.push([e.url]);r.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${t.title}${n}${this.extension(e.url,a)}`,split:s,dir:i.baseDir+i.dir||undefined,"max-download-limit":i.maxDownloadLimit||undefined});const o=encodeURIComponent(`${t.title}${n}`);return{params:r,id:o}});await a(e,true)}}else{return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${n.map(t=>{return t.fragments.map((e,i)=>{let a="";if(t.fragments.length>1&&!e.url.includes(".m4s")){a=` - ${i+1}`}return`\n${e.url}\n referer=${t.referer}\n user-agent=${UserAgent}\n out=${t.title}${a}${this.extension(e.url,i)}\n split=${s}\n`.trim()}).join("\n")}).join("\n")}\n`.trim()}}}class r extends n{constructor(){super(...arguments);this.aid=unsafeWindow.aid}static async test(){if(document.URL.includes("//www.bilibili.com/video/av")){return await SpinQuery.select("#multi_page")!==null}return false}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=`https://api.bilibili.com/x/web-interface/view?aid=${this.aid}`;const e=await Ajax.getJson(t);if(e.code!==0){Toast.error(`获取视频选集列表失败, message=${e.message}`,"批量下载");return[]}const i=e.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return[]}this.itemList=i.map(t=>{return{title:`P${t.page} ${t.part}`,titleParameters:{n:t.page,ep:t.part},cid:t.cid,aid:this.aid}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const a=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/x/player/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const n=await Ajax.getJsonWithCredentials(a);const r=n.data||n.result||n;if(r.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${r.quality})`)}let o;if(r.durl){o=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const n=await i(a,typeof t==="string"?parseInt(t):t);o=s(n)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}class o extends n{constructor(t){super(t);this.mainVideo=new r(t);this.mainVideo.aid="78976165";this.spVideo=new r(t);this.spVideo.aid="78979124"}static async test(){return document.URL.includes("//www.bilibili.com/blackboard/bnj2020.html")}async getItemList(){return(await this.mainVideo.getItemList()).concat(await this.spVideo.getItemList())}async collectData(t){return(await this.mainVideo.collectData(t)).concat(await this.spVideo.collectData(t))}}class c extends n{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=document.querySelector("meta[property='og:url']");if(t===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return[]}const e=t.getAttribute("content").match(/play\/ss(\d+)/)[1];if(e===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return[]}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${e}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return[]}this.itemList=i.result.main_section.episodes.map((t,e)=>{const i=t.long_title?t.title:(e+1).toString();const s=t.long_title?t.long_title:t.title;return{aid:t.aid,cid:t.cid,title:`${i} - ${s}`,titleParameters:{n:i,ep:s}}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const a=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/pgc/player/web/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const n=await Ajax.getJsonWithCredentials(a);const r=n.data||n.result||n;if(r.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${r.quality})`)}let o;if(r.durl){o=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const n=await i(a,typeof t==="string"?parseInt(t):t);o=s(n)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}const l=[c,r,o];let u;class d{constructor(t){this.config=Object.assign({itemFilter:()=>true},t)}static async test(){for(const t of l){if(await t.test()===true){u=t;return true}}return false}getExtractor(){if(u===null){logError("[批量下载] 未找到合适的解析模块.");throw new Error(`[Batch Download] module not found.`)}const t=new u(this.config);return t}async getItemList(){const t=this.getExtractor();return await t.getItemList()}async getRawItems(t){const e=this.getExtractor();return await e.getRawItems(t.quality)}async collectData(t,e){const i=this.getExtractor();const s=await i.collectData(t.quality);e.dismiss();return s}async collectAria2(t,e,i=false){const s=this.getExtractor();const a=await s.collectAria2(t.quality,i);e.dismiss();return a}}return{export:{BatchExtractor:d}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/biliplus-redirect.min.js"] = (()=>{return(i,e)=>{const n=`hd.biliplus.com`;const c=["bilibili.com/video/av","bilibili.com/bangumi/play","bilibili.com/bangumi/media","space.bilibili.com"];return{widget:{condition:()=>{return c.some(i=>document.URL.includes(i))},content:`\n`,success:()=>{const i=document.querySelector("#biliplus-redirect");i.addEventListener("click",()=>{if(location.host==="space.bilibili.com"){location.assign(document.URL.replace("space.bilibili.com/",`${n}/space/`))}else if(document.URL.includes("/bangumi/")){const i=unsafeWindow.aid||document.querySelector(".av-link,.info-sec-av").innerText.replace(/[aAvV]/g,"");location.assign(`https://${n}/video/av${i}/`)}else{location.host=n}})}}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/blackboard.min.js"] = (()=>{return(e,t)=>{const r=async()=>{if(dq(".international-home")){const e=await SpinQuery.condition(()=>unsafeWindow["__INITIAL_STATE__"],e=>e!==undefined);return dqa(".home-slide .item").slice(0,5).map((t,r)=>{const i=t.querySelector("a").getAttribute("data-loc-id");return{url:e.locsData[i][r].url,title:t.querySelector(".title").innerText.trim(),isAd:Boolean(t.querySelector(".gg-icon")),imageUrl:t.querySelector("img").getAttribute("src").replace(/@.+$/,"")}})}else{const e=dq(".chief-recommend-module .panel");const t=e.querySelector(".pic");const r=e.querySelectorAll(".title > a");return[...t.querySelectorAll("li")].map((e,t)=>{const i=r[t];return{url:i.getAttribute("href"),title:i.innerText.trim(),isAd:Boolean(i.querySelector(".gg-pic")),imageUrl:e.querySelector("img").getAttribute("src").replace(/@.+$/,"")}})}};return{export:{getBlackboards:r}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/blackboard.vue.min.js"] = (()=>{return(a,r)=>{const i=``;r.applyStyleFromText(`.simple-home .blackboards{display:grid;grid-template-areas:"header header" "dots cards";grid-template-columns:8px 1fr;grid-template-rows:1fr 250px;row-gap:16px;column-gap:16px;align-self:start}.simple-home .blackboards .blackboard-cards{grid-area:cards;--blackboard-width:568.5px;--blackboard-height:250px;width:var(--blackboard-width);height:var(--blackboard-height);border-radius:16px;overflow:hidden}.simple-home .blackboards .blackboard-cards .blackboard-card{width:100%;height:100%;position:relative;display:block;transition:.3s cubic-bezier(.65,.05,.36,1)}.simple-home .blackboards .blackboard-cards .blackboard-card img{width:100%;height:100%;object-fit:fill;display:block}.simple-home .blackboards .blackboard-cards .blackboard-card .title{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);padding:4px 16px;color:#fff;background-color:#000a;font-size:14px;font-weight:700;border-radius:14px;white-space:nowrap;opacity:0}.simple-home .blackboards .blackboard-cards .blackboard-card:hover .title{opacity:1}`,"blackboard-style");return{export:Object.assign({template:i},{components:{Icon:()=>r.importAsync("icon.vue"),"dpi-img":()=>r.importAsync("dpi-img.vue")},data(){return{blackboards:[],interval:0}},destroyed(){if(this.interval){clearInterval(this.interval)}},computed:{cardsContainer(){return this.$el.querySelector(".blackboard-cards")}},async mounted(){const{getBlackboards:a}=await r.importAsync("blackboard");this.blackboards=(await a()).filter(a=>!a.isAd);const i=dq(".blackboards");this.interval=setInterval(()=>{if(!document.hasFocus()||i.matches(".blackboards:hover")){return}const a=parseInt(dq(`.blackboard-radio:checked`).getAttribute("data-index"));let r;if(a===this.blackboards.length-1){r=0}else{r=a+1}dq(`.blackboard-radio[data-index='${r}']`).checked=true},5e3)}})}}})(); @@ -1171,7 +1171,6 @@ onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/m onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/dark-important.min.css"] = `#disable-popup-modal .vip-exchange .months button.disabled,#vip-exchange-modal .vip-exchange .months button.disabled,.action-row .publish-btn.disabled,.action-row .publish-btn.publishing,.action-row .sch-pub-btn.disabled,.action-row .sch-pub-btn.publishing,.app-body .section-block,.bl-button--primary:disabled,.home-content .publish-btn.disabled,.link-footer,.live-skin-coloration-area .live-skin-separate-area,.live-skin-coloration-area .live-skin-separate-area-hover:hover,.payment-active,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-indicator,.tab-list .tab-item.active:before{background-color:#222!important}.app-body .section-block.with-bottom-radius,.app-body .section-block.with-radius,.bb-comment .no-login .comment-submit,.common .bb-comment .no-login .comment-submit,.container .pagination,.coupon-content-con .coupon-btn-disable,.customize-wrp .select,.f-list-hover:hover,.fjw-case-detail .ban-detail .content-box .video-model,.game-groom-m .num,.main-container .media-info .media-right .media-tool-bar .btn-follow.active,.main-container .pay-bar .vip .btn-pay.active,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled:hover,.pagination-container li.pagination,.status_box .status_btn.disabled,.wrapper .elec-btn.disabled{background-color:#444!important}.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap .bscroll-indicator{background-color:#555!important}.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap .bscroll-vertical-scrollbar.mousedown,.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap:hover .bscroll-vertical-scrollbar,.m-recommend-item div.box,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-vertical-scrollbar,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-vertical-scrollbar.mousedown,.player-auxiliary-area .player-auxiliary-bscrollbar:hover .bscroll-vertical-scrollbar{background-color:transparent!important}.live-skin-coloration-area .live-skin-normal-a-text,.live-skin-coloration-area .live-skin-normal-a-text:link,.live-skin-coloration-area .live-skin-normal-a-text:visited,.live-skin-coloration-area .live-skin-normal-text,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled:hover,.status_box .status_btn.disabled,blockquote,blockquote *,blockquote .color-blue-01,blockquote .color-blue-02,blockquote .color-blue-03,blockquote .color-blue-04,blockquote .color-gray-01,blockquote .color-gray-02,blockquote .color-gray-03,blockquote .color-gray-04,blockquote .color-green-01,blockquote .color-green-02,blockquote .color-green-03,blockquote .color-green-04,blockquote .color-lblue-01,blockquote .color-lblue-02,blockquote .color-lblue-03,blockquote .color-lblue-04,blockquote .color-pink-01,blockquote .color-pink-02,blockquote .color-pink-03,blockquote .color-pink-04,blockquote .color-purple-01,blockquote .color-purple-02,blockquote .color-purple-03,blockquote .color-purple-04,blockquote .color-yellow-01,blockquote .color-yellow-02,blockquote .color-yellow-03,blockquote .color-yellow-04{color:#aaa!important}#app .sticky-bar .bar-content .message,.bb-comment .no-login .comment-submit,.bp-popup-panel .title-ctnr .popup-title,.commnent-screen-wrap .el-input__inner,.common .bb-comment .no-login .comment-submit,.coupon-content-con .coupon-btn-disable,.cover .disabled-cover,.customize-wrp .select,.el-input__inner,.home-page .sticky-bar .bar-content .message,.invitation-record-warp .invtable .inputdone,.live-room-app .guard-rank-cntr .tabs.isHundred .item.active,.live-room-app .guard-rank-cntr.hundred .live-skin-highlight-text,.live-room-app .guard-rank-cntr.hundred .live-skin-main-a-text,.live-room-app .guard-rank-cntr.hundred .page-box .live-skin-main-text,.live-room-app .guard-rank-cntr.thousand .live-skin-highlight-text,.live-room-app .guard-rank-cntr.thousand .live-skin-main-a-text,.live-room-app .guard-rank-cntr.thousand .page-box .live-skin-main-text,.live-skin-coloration-area .live-skin-highlight-text,.live-skin-coloration-area .live-skin-main-text,.manga-detail .episode-list-component .episode-list .list-data .list-item.last-read,.popup-content-ctnr .bl-button--ghost,.s-paging>ul>a.current,.s-paging>ul>span.current,.score-info .go-movie,.tag-list li.tag-item.on{color:#eee!important}#rank-list-vm .tabs.isHundred .item,.bb-comment .no-login .comment-submit,.commnent-screen-wrap .el-input__inner,.common .bb-comment .no-login .comment-submit,.el-input__inner,.enter-failure .password-input .pink-border,.link-footer,.live-skin-coloration-area .live-skin-highlight-border,.live-skin-coloration-area .live-skin-separate-border,.popup-content-ctnr .bl-button--ghost:hover,.score-info .go-movie,.select-box-v2-container .select-box-v2-controller-disabled,.song-info .info-wrap .type-list .item-list .type-item.active,.tabs-bar,.ui-input-textarea.focus,.user-setting-warp .el-radio-button__orig-radio:checked+.el-radio-button__inner{border-color:transparent!important}#app .sticky-bar .bar-content .message:hover,.app-layout .style-section .tag-block .tag-containers .style-tag.selected,.container .video-panel .play-all .bilifont,.detail-wrp .detail-content[data-v-00c9b213] p a span,.drop-list-v2-container .drop-list-v2-item-selected .drop-list-v2-item-cont p.item-cont-main,.edit-button:hover>.icon-font,.edit-button:hover>span .left-nav-item-childed:hover,.el-select-dropdown__item.selected,.home-page .sticky-bar .bar-content .message:hover,.im-popup .bp-popup-panel .title-ctnr .popup-title,.left-nav-wrapper .active,.left-nav-wrapper .active .left-nav-item-child,.left-nav-wrapper .advice-btn:hover,.left-nav-wrapper .left-nav-item.active,.left-nav-wrapper .left-nav-item.active i.active,.left-nav-wrapper .left-nav-list.on .left-nav-item,.left-nav-wrapper .left-nav-list.on .left-nav-item .icon,.live-room-app .guard-rank-cntr.hundred .live-skin-main-a-text:hover,.live-room-app .guard-rank-cntr.thousand .live-skin-main-a-text:hover,.live-skin-coloration-area .live-skin-highlight-text,.live-skin-coloration-area .live-skin-normal-a-text:hover,.live-skin-normal-a-text:active,.manga-detail .episode-list-component .episode-list .list-header .header-item.selected,.more-data a:hover,.other a a:hover,.r-con .members-info .up-card .info-name.is-vip:hover,.rank-item .content .info .detail a a:hover,.rank-item .content .more-data:hover,.rank-item .content .other a:hover,.room-info-down-row .icon-label.hover-text-blue:hover .label,.room-introduction .edit-button:hover>.icon-font,.room-introduction .edit-button:hover>span,.round-corner .van-popper-favorite .play-all .bilifont,.up-info .u-info .name .username.is-vip:hover,.voucher-ing .voucher-left-money,.voucher-ing .voucher-left-money:before,.voucher-no-used .voucher-left-money,.voucher-no-used .voucher-left-money:before{color:var(--theme-color)!important}.aside-ctnr .author-info .communicate-btn,.live-skin-coloration-area .room-info-ctnr .info-section .live-skin-highlight-border,.manga-detail .episode-list-component .episode-list .list-data .list-item.last-read,.page-list-box .page-input:focus,.page-list-box .page-input:hover,.popup-content-ctnr .bl-button--ghost,.season-timeline .season-group.today,.season-timeline .season-group.today .group-time::before,.tag-list li.tag-item.on,.tag-list li.tag-item:hover{border-color:var(--theme-color)!important}.bg-blue,.el-date-table td.current:not(.disabled),.el-date-table td.end-date,.el-date-table td.start-date,.face-g-list#my-g-list .face-g-block .my-mp-block .mp-info .btn-white,.face-g-tab li.current,.live-skin-coloration-area .live-skin-highlight-bg,.popup-content-ctnr .bl-button--ghost:hover,.popup-content-ctnr .bl-button--primary,.season-timeline .season-group.today.is-published .group-time::before,.security-list .child-list li a.bg-blue:hover,.song-info .info-wrap .type-list .item-list .type-item.active,.tag-list li.tag-item.on,.user-my-btn .el-button--primary,.user-setting-warp .el-radio-button__orig-radio:checked+.el-radio-button__inner{background-color:var(--theme-color)!important}.current .tab-btn-link,.el-date-table td.current:not(.disabled),.el-date-table td.end-date,.el-date-table td.start-date,.face-g-tab li.current,.popup-content-ctnr .bl-button--ghost:hover,.style-section .tag-block .tag-containers .style-tag:active{color:var(--foreground-color)!important}#bilibiliPlayer{box-shadow:0 4px 8px 0 #0004;background-color:#222!important}`; onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/dark-navbar.min.css"] = `#link-navbar-vm>.link-navbar .nav-item:hover,.bili-header-m .nav-menu .nav-con .nav-item:hover,.link-navbar .nav-item:hover,.nav-header-wrapper .nav-header .nav-header-search-bar,.right-part>.shortcuts-ctnr .shortcut-item:hover,.search-bar-ctnr .search-bar,.shortcuts-ctnr .shortcut-item:hover,.uns_box ul.menu li:not(.b-post):hover,.z_top .z_top_nav ul li:hover{background-color:#222!important}#app>.link-navbar,#app>.nav-header-wrapper,#link-navbar-vm>.link-navbar,#navbar-vm>.link-navbar,.b-header-mask-wrp .b-header-mask,.bili-header-m .nav-menu .nav-mask,.bili-header-m .nav-menu.blur-black .nav-mask,.link-navbar{background-color:#444!important}.z_top .i-link:hover,.z_top .z_top_nav ul li.home:hover{background-color:transparent!important}#app>.nav-header-wrapper>.nav-header{background:0 0!important}#app>.link-navbar .main-ctnr .nav-logo,#app>.link-navbar .nav-item.selected .label,#app>.link-navbar .nav-item:hover .icon-font,#app>.nav-header-wrapper>.nav-header .nav-header-mainsite,#app>.nav-header-wrapper>.nav-header .order-center,#link-navbar-vm>.link-navbar .main-ctnr .nav-logo,#link-navbar-vm>.link-navbar .nav-item:hover,.bili-header-m .nav-menu .nav-con .nav-item .t,.link-navbar .main-ctnr .custom-link>a,.link-navbar .main-ctnr .nav-logo,.my-link-btn .label,.nav-header-wrapper .nav-header .nav-header-search-bar,.right-part>.shortcuts-ctnr,.right-part>.shortcuts-ctnr .shortcut-item:hover,.search-bar-ctnr .search-bar input,.shortcut-item .list-item span,.shortcuts-ctnr .shortcut-item,.uns_box li.u-i a.i-link,.z_top a,.z_top.b-header-blur .uns_box li.u-i a.i-link,.z_top.b-header-blur .z_top_nav li a.i-link{color:#eee!important}.search-bar-ctnr .search-bar .placeholder,.search-bar-ctnr .search-bar .search-btn,.search-bar-ctnr .search-bar input::placeholder{color:#878787!important}.uns_box li.u-i:hover a.i-link,.z_top .i-link:hover{color:var(--theme-color)}.link-navbar,.link-navbar-ctnr{box-shadow:none!important}.link-navbar .main-ctnr .nav-logo::before,.nav-header-wrapper .nav-header .order-icon{filter:brightness(0) invert(1)!important}.search-bar-ctnr .search-bar{border-color:transparent!important;box-shadow:0 2px 10px 1px #0002}`; onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/dark-schedule.min.js"] = (()=>{return(e,t)=>{class i{constructor(...e){if(e.length===0){const e=new Date;this.hour=e.getHours();this.minute=e.getMinutes()}else if(e.length===1){const[t]=e;[this.hour,this.minute]=t.split(":").slice(0,2).map(e=>this.validatePart(e));this.normalize()}else if(v.length===2){[this.hour,this.minute]=e}}validatePart(e){const t=parseInt(e);if(!isNaN(t)&&t>=0&&t<=59){return t}else{return null}}normalize(){while(this.minute<0){this.minute+=60;this.hour-=1}while(this.minute>=60){this.minute-=60;this.hour+=1}while(this.hour<0){this.hour+=24}while(this.hour>=24){this.hour-=24}}lessThan(e){if(this.houre.hour||this.hour===e.hour&&this.minute>e.minute){return true}return false}equals(e){return this.hour===e.hour&&this.minute===e.minute}isInRange(e,t){if(e.equals(t)){return false}let i=this.greaterThan(e)&&this.lessThan(t);if(e.greaterThan(t)){i=this.greaterThan(e)||this.lessThan(t)}const s=i||this.equals(e);return s}static millisecondsBefore(e){const t=new i;const s=(new Date).getSeconds();const r=1e3*(t.hour*3600+t.minute*60+s);const n=1e3*(e.hour*3600+e.minute*60);let h=n-r;if(t.greaterThan(e)||t.equals(e)&&s!==0){h+=24*3600*1e3}return h}}function s(){if(e.darkSchedule){const t=new i(e.darkScheduleStart);const r=new i(e.darkScheduleEnd);const n=new i;const h=n.isInRange(t,r);if(e.useDarkStyle!==h){e.useDarkStyle=h}let u=0;if(h){u=i.millisecondsBefore(r)}else{u=i.millisecondsBefore(t)}if(u!==0){setTimeout(()=>s(),u)}}}fullyLoaded(()=>s());return{export:{ScheduleTime:i}}}})(); -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/dark-slice-9.min.css"] = `.level-5{border-color:#74b0f6!important}.level-5 .label{background-color:#74b0f6!important}.level-5 .level{color:#74b0f6!important}.level-6{border-color:#74b0f6!important}.level-6 .label{background-color:#74b0f6!important}.level-6 .level{color:#74b0f6!important}.level-7{border-color:#74b0f6!important}.level-7 .label{background-color:#74b0f6!important}.level-7 .level{color:#74b0f6!important}.level-8{border-color:#74b0f6!important}.level-8 .label{background-color:#74b0f6!important}.level-8 .level{color:#74b0f6!important}.level-9{border-color:#ba94f2!important}.level-9 .label{background-color:#ba94f2!important}.level-9 .level{color:#ba94f2!important}.level-10{border-color:#ba94f2!important}.level-10 .label{background-color:#ba94f2!important}.level-10 .level{color:#ba94f2!important}.level-11{border-color:#ba94f2!important}.level-11 .label{background-color:#ba94f2!important}.level-11 .level{color:#ba94f2!important}.level-12{border-color:#ba94f2!important}.level-12 .label{background-color:#ba94f2!important}.level-12 .level{color:#ba94f2!important}.van-popover .level-bar .level-progress{background-color:#ffae00!important}#biliAppHomeSetting>div,.app-layout .manga-navbar,.container .play-all,.container .split-line .history-tip,.hover-panel-wrap,.hover-panel-wrapper,.lang-change .lang-intro,.manga-navbar .drop-list,.van-popover .container{background-color:#222!important}.container .level-intro,.container .play-all:hover,.international-header .bili-banner,.manga-navbar .drop-list .more-btn-container,.manga-navbar .search-bar .search-bar-bg,.manga-navbar .user-panel .drop-list .logout-btn-container,.message-list-content .notify-wrapper .notify-text,.recommend-area-ctnr .rec-area-item,.skeleton .skeleton-content,.skeleton .skeleton-focusbtn,.skeleton .skeleton-head,.skeleton .skeleton-time,.skeleton .skeleton-user-name,.van-popover .btn-box .btn.reg-btn:hover,.van-popover .upload-item:hover,.yzly-content-ctnr .btn{background-color:#333!important}.wide-members .avatar-list i{background-color:#444!important}.wide-members .avatar-list i:hover{color:var(--theme-color)!important}.grid-area-ctnr .hab-ctnr,.grid-area-ctnr .news-ctnr,.grid-area-ctnr .rank-ctnr{background-color:#444!important}.confirmorder-container{background-color:#444!important;box-shadow:none!important}.confirmorder-container h1{color:#eee!important}.confirmorder-container h1 span{color:#aaa!important}.confirmorder-container .card .card-bottom .delete{filter:brightness(0) invert(.7)!important}.confirmorder-container .card .card-bottom .delete:hover{filter:var(--pink-image-filter)!important}.confirmorder-container .card.active{border-color:var(--theme-color)!important}.confirmorder-container .card.active::before{filter:var(--pink-image-filter)!important}.confirmorder-container .discounts{border-color:#555!important}.confirmorder-container .discounts .discounts-list p{border-color:transparent!important;background-color:#111!important;color:#666!important}.confirmorder-container .total-container div span{color:#eee!important}.confirmorder-container .total-container div span.total{color:var(--theme-color)!important}.confirmorder-container .confirm-bottom .confirm-paybtn.active{filter:var(--pink-image-filter)!important}.confirmorder-container .confirm-bottom .service-term{color:#aaa!important}.confirmorder-container .confirm-bottom .service-term .check-icon,.confirmorder-container .confirm-bottom .service-term .check-icon.checked{filter:var(--pink-image-filter)!important}.confirmorder-container .confirm-bottom .service-term .term-content{color:var(--theme-color)!important}.eticket-container .top-box .header{border-color:transparent!important;background-color:#333!important}.eticket-container .top-box .header .header-back{filter:brightness(0) invert(1)!important}.eticket-container .top-box .header h1{color:#eee!important}.eticket-container .top-box .header::after{border-color:transparent!important}.eticket-container .eticket-info-container{background-color:#444!important;box-shadow:none!important}.eticket-container .eticket-info-right div{color:#eee!important}.eticket-container .eticket-info-right p{color:#aaa!important}.eticket-container .qrcode-container{background-color:#444!important}.eticket-container .qrcode-container .qrcode-tip{background-color:transparent!important;color:#eee!important}.eticket-container .qrcode-container .qrcode-container-item .qrcode-hide-tip{color:#eee!important}.eticket-container .qrcode-container .ticket-code,.eticket-container .qrcode-container .ticket-code .color-gray-light,.eticket-container .qrcode-container .ticket-type,.eticket-container .qrcode-container .ticket-type .color-gray-light{color:#aaa!important}.eticket-container .qrcode-container .ticket-code span,.eticket-container .qrcode-container .ticket-type span{color:#eee!important}.eticket-container .qrcode-container .addr-map{background-color:#383838!important}.eticket-container .qrcode-container .addr-map h1{color:#eee!important}.eticket-container .qrcode-container .addr-map p{color:#aaa!important}.eticket-container .qrcode-container .addr-map .map-icon{filter:var(--pink-image-filter)!important}.orderdetail-container .orderdetail-wrapper{color:#aaa!important}.orderdetail-container .orderdetail-wrapper .wrapper-ticket{color:#eee!important}.orderdetail-container .orderdetail-wrapper .wrapper-ticket .tip{color:var(--theme-color)!important}.orderdetail-container .total-container div span{color:#eee!important}.orderdetail-container .total-container div span.total{color:var(--theme-color)!important}#biliAppHomeSetting input,#biliAppHomeSetting select,.highlight-areas-ctnr .highlight-area-item,.s_tag .btn-add,.section-block .flip-view,.share-content .video-card,.van-popover .btn-box .btn.reg-btn,.van-popover .level-bar,.van-popper-history .view-all{background-color:#444!important}.love-card .header::after{background-color:#555!important}.s_tag .btn-add span{background-color:#eee!important}.coin-dialog-mask .coin-operated .mc .mc-box{background-color:#fff!important}.card .risk-tip-content{background-color:#624f27!important}.live-room-app .aside-area .chat-history-panel-top,.manga-navbar .nav-list,.news-content,.news-ctnr .more-link,.news-ctnr .more-link:hover,.text-info-ctnr{background-color:transparent!important}.manga-navbar .search-bar .placeholder-list .placeholder-item{color:#888!important}#biliAppHomeSetting label~span,.bb-comment .comment-list .list-item .blacklist-font-color,.center-box .line-3 .action-button,.comment-bilibili-fold .comment-list .list-item .blacklist-font-color,.container .split-line .history-tip,.follow-dialog-wrap .special-tip,.highlight-areas-ctnr .area-desc,.list-item .publish-time,.manga-navbar .data-list .list-container .empty-hinter,.manga-navbar .data-list .list-container .failure-hinter,.manga-navbar .data-list .list-container .loading-hinter,.rank-item .room-title,.share-content .video-card .up-info .name,.share-content .video-card .up-info .tip,.video-container .text-area .view-danmaku{color:#aaa!important}#biliAppHomeSetting a,#biliAppHomeSetting input,#biliAppHomeSetting select,.area-detail-ctnr .area-title,.banner-ctnr .banner-title,.bilibili-player-video-danmaku-setting-left-block-word,.center-box .line-1 .like-item,.center-box .line-1 .name-field,.center-box .line-1 .name-field a,.item-ctnr .item-title,.love-card .header,.manga-navbar .drop-list .more-btn-container .more-button,.manga-navbar .search-bar .search-input,.manga-navbar .user-info-panel .info-item,.manga-navbar .user-info-panel .user-name,.manga-navbar .user-panel .drop-list .logout-btn-container .logout-button,.manga-navbar-favourite-manga .action-button,.manga-navbar-history-list .action-button,.more-ctnr,.news-content,.news-ctnr .more-link,.rank-item .room-anchor,.recommend-area-ctnr .area-name,.recommend-area-ctnr .title-text,.tab-ctnr .tab-item,.van-popover .btn-box .btn.reg-btn,.van-popover .coins .info a,.van-popper-history .view-all,.van-popper-login .title,.van-popper-upload .upload-item .bilifont,.yzly-ctnr .yzly-title{color:#eee!important}.international-header .mini-upload:hover,.van-popover .vip:hover{color:#fff!important}.highlight-areas-ctnr .highlight-area-item:nth-child(1) .area-name{color:#a0a7dc!important}.highlight-areas-ctnr .highlight-area-item:nth-child(2) .area-name{color:#c7aade!important}.highlight-areas-ctnr .highlight-area-item:nth-child(3) .area-name{color:#deb29c!important}.highlight-areas-ctnr .highlight-area-item:nth-child(4) .area-name{color:#afb7e8!important}.highlight-areas-ctnr .highlight-area-item:nth-child(5) .area-name{color:#dcbf94!important}.highlight-areas-ctnr .highlight-area-item:nth-child(6) .area-name{color:#95c5a8!important}.live-room-app .aside-area .chat-control-panel{background-image:none!important}.bili-header-m .mini-type .nav-search #nav_searchform,.international-header .mini-type .nav-search #nav_searchform,.van-popover .mini-type .nav-search #nav_searchform{background-color:#333!important;border-color:transparent!important}.bili-header-m .mini-type .nav-search #nav_searchform .nav-search-keyword,.international-header .mini-type .nav-search #nav_searchform .nav-search-keyword,.van-popover .mini-type .nav-search #nav_searchform .nav-search-keyword{color:#aaa!important}.bili-header-m .mini-type .nav-search #nav_searchform .nav-search-keyword:focus,.international-header .mini-type .nav-search #nav_searchform .nav-search-keyword:focus,.van-popover .mini-type .nav-search #nav_searchform .nav-search-keyword:focus{color:#eee!important}.bili-header-m .mini-type .nav-search .nav-search-btn,.international-header .mini-type .nav-search .nav-search-btn,.van-popover .mini-type .nav-search .nav-search-btn{background-color:#444!important}.bili-header-m .mini-type .nav-search .nav-search-btn .nav-search-submit,.international-header .mini-type .nav-search .nav-search-btn .nav-search-submit,.van-popover .mini-type .nav-search .nav-search-btn .nav-search-submit{color:#eee!important}.bili-header-m .mini-type .nav-search .nav-search-btn:hover .nav-search-submit,.international-header .mini-type .nav-search .nav-search-btn:hover .nav-search-submit,.van-popover .mini-type .nav-search .nav-search-btn:hover .nav-search-submit{color:var(--theme-color)!important}.bilibili-search-history,.bilibili-search-suggest{background-color:#333!important;border-color:transparent!important}.module-game .rule .detail .content{color:#000!important}#biliAppHomeSetting input,#biliAppHomeSetting select{border-color:transparent!important;border-radius:4px}.at-popup,.chat-popups-section .draw-full-ctnr,.hover-panel-wrap,.hover-panel-wrapper,.recommend-area-ctnr .rec-area-item,.van-popover .btn-box .btn.reg-btn,.van-popper-history .view-all{border-color:transparent!important}.wide-members .avatar{border-color:#333!important}.van-popper-login .container{border-color:#444!important}.container .level-intro .svg-icon,.manga-navbar .search-bar .confirm-btn .search-icon{filter:brightness(0) invert(1)!important}.side-bar-btn .size-bar-text{filter:brightness(.6) invert(1) hue-rotate(180deg)!important;text-shadow:0 0 0}.confirmorder-container .confirm-bottom .confirm-paybtn.active,.whole-detail-info-wrapper .product-buy-wrapper .unsale-btn{box-shadow:0 3px 4px 0 #6e4752!important}.app-layout .manga-navbar{box-shadow:rgba(0,0,0,.2) 0 4px 8px 0!important}.highlight-areas-ctnr .highlight-area-item.hover{box-shadow:0 7px 11px 0 rgba(0,0,0,.18)!important}.hover-panel-wrap{box-shadow:0 13px 20px 0 rgba(0,0,0,.22)!important}.van-popper .popper__arrow{display:none!important}.nav-tab-bar .tab-item[data-tab-id="1"]:not(.on)::before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAQAAAACj/OVAAAD00lEQVRYw+2YbWhVdRzHb2aWsILo4UVC5Pd3drfdIZNW1sRod7eW1gSxLIxo5aWgB1GHbkNaDILoAaJYtKQNRDHQTcp6McQoISusXuSLZTXXICVoa3Nmtu0+nE8vdtzd1T3c7dzzzu/31b2X+//w+//+5/y+54RCVzSLKq+zqD1t9driPB4uCxjm3G+f6ILI2E7bu+ElgcB0u3UJIXcd23mT19jMqnHsiF6vXJjv2iqtX5S5HzDAZHWzFbnCjjq35BFnK21UxBlmKv3ESlfoRKQgf5vZL17F9QBDfMkRkpOQf1ON0Of5qm+/iHu4f2jEQYhDWVWeptwVzmN5wIVXiFL3LwB6qEAYMRou6SXsR1jvhqv919cq3gIgyVpEDT9P2UmXGMKiPnFcpT/FLwC0Ie5hiOn0DsJafAKLbhMrvAUfRbQxvX5A2Dd+O3i3WOcteC/ixxmAZxDq89vBKvGUt+Au6iYujak0jNCg3ztMRDxEbvoNYd1+gTfILXHHcgJ2IazL/2XxnTiSE3AbwqnzD9whanPA9RNxRdFS38BlN2pQfDUrsB5hB/Jz894qyt0/ZsQdQNhoofICbF6gz0SUnmlxnYRdYc/kbR5GCnRcLHP3kboMNkAjQjjNeY5O2itElBa6GfNG1VGaiLhCI1ab/0wTEzYRnpYTyUSpzqKiAEKU7RJvJz5idQZ1VsetySkNJo0utAHxKwCfIuzrisXBJtJqUe0dk+cQeiHgCKw28Z53VIpRym4NFFd+jQbFKQAOIuyLgOuzNWKNt6GbEPZ80MDd4n1vyFrCkuGbA8VFFums6Ju4Z+pwwPUV1ogab0NrEc6mvCPCZc5L1qp2zz1iOTFixHBQWnvVrnZrceJ5mQ6RAmuVO/kZcHrbmL3iO2vbx6KUnYl9dNBBB7tpyHKL9/0etiSUFtbkD7dalLl9Oea0b91CLGGOH+AesYonc/ZdiKU75/2cZMdy691lvTzo2Dwyto2JZTzAxjlU+ASVlCBsoDg8t+qW2DnR9N8Ic9cQ8YSw3sii2UbOtU6FnnXiTtyJO4dEufvycD3zcR02IuzD8bWsquj6qWq6T7/Pr2M5eEgbL+2YY+dFdbqBRuqTm89FU9FkllNV6ap0VTrmXnTm0/gvWf9IRVPRVHVy2/kdifrU+qSQW/hg9kDtFNtnfPjyo1aETk7CVSzWvw6DBKcKRGFJ5risFesJUg0INWZFvpZAgYcRdiwDPCO6AwVeoBilim8a39BScSen6A3Uj4wKZ0MoFAqFiu/Idd759sMXD82LOqGTAft7543mBVfeoAeg/wFlFeKImou+wAAAAABJRU5ErkJggg==)!important}.aside-item.active .item-border,.aside-item:hover .item-border{border-color:var(--theme-color)!important}.aside-item::after{border-right-color:var(--theme-color)!important}#bilibili_pbp,#bilibili_pbp_canvas{filter:var(--pink-image-filter)!important}#biliAppHomeSetting button,.interact-dialog .btn,.rookie-guide .close-button,.van-popover .btn-box .btn,.van-popper-history .view-all:hover,.video-control-show .bilibili-player-video-interactive-list .check:hover .big-round{background-color:var(--theme-color)!important}#biliAppHomeSetting h2,.bilibili-search-suggest .suggest-item .suggest_high_light,.more-ctnr:hover,.news-ctnr .more-link:hover,.tab-ctnr .tab-item.activated,.tab-ctnr .tab-item:hover,.van-popover .coins .info a:hover,.van-popper-upload .upload-item:hover .bilifont,.video-desc .subtitle a{color:var(--theme-color)!important}#biliAppHomeSetting button,.interact-dialog .btn,.rookie-guide .close-button,.van-popover .btn-box .btn,.van-popper-history .view-all:hover{color:var(--foreground-color)!important}`; onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/dark-styles.min.js"] = (()=>{return(e,t)=>{const l=()=>{SpinQuery.select(".custom-scrollbar").then(e=>e&&e.classList.remove("custom-scrollbar"))};const r=()=>{document.body.classList.add("dark");l();t.applyStyle("scrollbarStyle");t.applyImportantStyle("darkStyleNavBar");t.applyStyle("darkStyle");t.applyImportantStyle("darkStyleImportant")};r();return{reload:r,unload:()=>{document.body.classList.remove("dark");t.removeStyle("scrollbarStyle");t.removeStyle("darkStyleNavBar");t.removeStyle("darkStyle");t.removeStyle("darkStyleImportant")}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/debounce.min.js"] = (()=>{return(n,l)=>{function u(n,l,u){var e,t,i,r,f;if(null==l)l=100;function o(){var a=Date.now()-r;if(a=0){e=setTimeout(o,l-a)}else{e=null;if(!u){f=n.apply(i,t);i=t=null}}}var a=function(){i=this;t=arguments;r=Date.now();var a=u&&!e;if(!e)e=setTimeout(o,l);if(a){f=n.apply(i,t);i=t=null}return f};a.clear=function(){if(e){clearTimeout(e);e=null}};a.flush=function(){if(e){f=n.apply(i,t);i=t=null;clearTimeout(e);e=null}};return a}return{export:{debounce:u}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/default-danmaku-settings.min.css"] = `.bilibili-player-video-danmaku-setting-wrap{display:none!important}`; @@ -1184,9 +1183,9 @@ onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/m onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-audio.min.js"] = (()=>{return(e,t)=>{class n{constructor(){this.sid=null;this.progress=null}async getDownloadUrl(){const e=`https://www.bilibili.com/audio/music-service-c/web/url?sid=${this.sid}&privilege=2&quality=2`;const t=await Ajax.getJsonWithCredentials(e);if(t.code===0){return t.data.cdns.shift()}else{logError("获取下载链接失败, 请确保当前账号有下载权限.","下载音频",1e4);return null}}async download(){const e=await this.getDownloadUrl();return new Promise((t,n)=>{const s=new XMLHttpRequest;s.open("GET",e);s.responseType="blob";s.addEventListener("load",()=>t(s.response));s.addEventListener("error",()=>n(s.status));s.addEventListener("progress",e=>this.progress&&this.progress(100*e.loaded/e.total));s.send()})}}const s="下载音频";return{export:n,widget:{content:`\n\n\n${s}\n\n`,condition:()=>document.URL.includes("bilibili.com/audio"),success:async()=>{await SpinQuery.select(()=>document.querySelector("#app"));const e=document.querySelector("#download-audio");const t=e.querySelector("span");const o=new n;o.progress=(e=>{t.innerHTML=`${Math.round(e)}%`});const i=document.querySelector("#download-audio-link");e.addEventListener("click",async e=>{if(o.sid===null||e.target===i){return}const n=await o.download();t.innerHTML=s;const r=i.getAttribute("href");if(r){URL.revokeObjectURL(r)}i.setAttribute("href",URL.createObjectURL(n));const d=(()=>{const e=document.querySelector(".song-title");if(e){return e.getAttribute("title")}else{return"神秘音频"}})();i.setAttribute("download",d+".m4a");i.click()});Observer.childList("#app",()=>{const t=document.URL.match(/bilibili\.com\/audio\/au([\d]+)/);if(t&&t[1]){e.disabled=false;o.sid=t[1]}else{e.disabled=true}})}}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-danmaku.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:n}=e.import("title");const{DanmakuInfo:i}=e.import("video-info");const{DanmakuConverter:a}=e.import("danmaku-converter");async function o(t){const e=n();let i={title:e};try{await loadDanmakuSettingsPanel();const t=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));return e*4/188};const e=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[e];return n};i.font=dq(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;i.alpha=parseFloat(dq(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));i.duration=(()=>{const e=18-3*t(".bilibili-player-setting-speedplus .bui-thumb");return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();i.blockTypes=(()=>{let t=[];const e={".bilibili-player-block-filter-type[ftype=scroll]":[1,2,3],".bilibili-player-block-filter-type[ftype=top]":[5],".bilibili-player-block-filter-type[ftype=bottom]":[4],".bilibili-player-block-filter-type[ftype=color]":["color"]};for(const[n,i]of Object.entries(e)){if(dq(n).classList.contains("disabled")){t=t.concat(i)}}return t.concat(7,8)})();const n=1.4-.2*t(".bilibili-player-setting-fontsize .bui-thumb");i.resolution={x:1920*n,y:1080*n};i.bottomMarginPercent=[.75,.5,.25,0,0][e(".bilibili-player-setting-area .bui-thumb")];if(i.bottomMarginPercent===0&&dq(".bilibili-player-video-danmaku-setting-left-preventshade input").checked){i.bottomMarginPercent=.15}i.bold=dq(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){i={font:"微软雅黑",alpha:.6,duration:t=>{switch(t.type){case 4:case 5:return 4;default:return 6}},blockTypes:[7,8],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const o=new a(i);const l=o.convertToAssDocument(t);return l.generateAss()}async function l(t){const e=n();const a=new i((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){return new Blob([await o(a.rawXML)],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const s=dq("#danmaku-link");const c=s.getAttribute("href");if(c){URL.revokeObjectURL(c)}s.setAttribute("download",`${e}.${t?"ass":"xml"}`);s.setAttribute("href",r);s.click()}return{export:{downloadDanmaku:l,convertToAss:o},widget:{content:`\n\n\n下载弹幕\n\n`,condition:async()=>{let t=await SpinQuery.select(()=>(unsafeWindow||window).cid);return Boolean(t)},success:()=>{const t=dq("#danmaku-link");const e=dq("#download-danmaku");e.addEventListener("click",n=>{if(n.target!==t){try{e.disabled=true;l(n.shiftKey)}catch(t){logError(t)}finally{e.disabled=false}}})}}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-subtitle.min.js"] = (()=>{return(t,e)=>{let i;const o=(t,e)=>{const o=document.createElement("a");const n=URL.createObjectURL(new Blob([t]));if(i){URL.revokeObjectURL(i)}i=n;o.setAttribute("href",n);o.setAttribute("download",escapeFilename(e));document.body.appendChild(o);o.click();o.remove()};return{widget:{content:`\n`,condition:videoCondition,success:()=>{const t=dq("#download-subtitle");t.addEventListener("click",async i=>{try{t.disabled=true;const{aid:n,cid:s}=unsafeWindow;if(!n||!s){logError("未找到视频AID和CID");return}const{VideoInfo:l}=await e.importAsync("video-info");const{getFriendlyTitle:c}=await e.importAsync("title");const r=new l(n);r.cid=parseInt(s);await r.fetchInfo();const a=r.subtitles;if(a.length===0){Toast.info("当前视频没有字幕.","下载字幕",3e3);return}const d=await loadSubtitleSettingsPanel();if(!d){logError("未找到字幕设置");return}const u=d.querySelector(".bilibili-player-video-subtitle-setting-lan .bui-select-result").innerHTML;const b=a.find(t=>t.language===u)||a[0];const f=await Ajax.getJson(b.url);const p=f.body;const y=c(true);if(i.shiftKey){const{SubtitleConverter:t,SubtitleSize:i,SubtitleLocation:n}=await e.importAsync("subtitle-converter");const s=d.querySelector(".bilibili-player-video-subtitle-setting-fontsize .bui-thumb");const l=parseFloat(s.style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const c={214:i.VeryLarge,163.5:i.Large,107:i.Medium,50.5:i.Small,0:i.VerySmall};const r=c[l];const a=d.querySelector(".bilibili-player-video-subtitle-setting-color .bui-select-result span:first-child");const u=a.getAttribute("style").match(/background:[ ]*(.+);/)[1];const b=d.querySelector(".bilibili-player-video-subtitle-setting-opacity .bui-bar");const f=parseFloat(b.style.transform.replace(/scaleX\(([\d\.]+)/,"$1"));const g=dq(".subtitle-position");const m={bc:n.BottomCenter,bl:n.BottomLeft,br:n.BottomRight,tc:n.TopCenter,tl:n.TopLeft,tr:n.TopRight};const h=Object.entries(m).filter(([t])=>{return g.classList.contains(`subtitle-position-${t}`)}).map(([,t])=>t).shift();const w=dq("video");const v={title:y,height:w.videoHeight,width:w.videoWidth,color:u,location:h,opacity:f,size:r};const S=new t(v);const L=await S.convertToAss(p);o(L,y+".ass")}else{o(JSON.stringify(p),y+".json")}}catch(t){logError(t)}finally{t.disabled=false}})}}}}})(); -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-video.min.css"] = `.download-video{--download-video-background:white;--download-video-foreground:black;position:absolute;top:96px;left:50%;transform:translateX(-50%) scale(.95);background:var(--download-video-background);color:var(--download-video-foreground);box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;z-index:10001;pointer-events:none;opacity:0;padding:16px;width:300px;display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;box-sizing:content-box;line-height:normal}.download-video,.download-video *{transition:.2s ease-out;-webkit-tap-highlight-color:transparent!important}.download-video.opened{pointer-events:initial;opacity:1;transform:translateX(-50%) scale(1)}body.dark .download-video{--download-video-background:#222;--download-video-foreground:#eee}.round-corner .download-video,.round-corner .download-video .episode-list .v-checkbox,.round-corner .download-video .rpc-settings{border-radius:var(--large-corner-radius)}.round-corner .download-video .button,.round-corner .download-video .cover,.round-corner .download-video .direct-download .progress .background,.round-corner .download-video .direct-download .progress .foreground,.round-corner .download-video .rpc-settings input[type=text],.round-corner .download-video .size-warning-tip,.round-corner .download-video .title,.round-corner .download-video button{border-radius:var(--corner-radius)}.download-video .cover{min-height:100px;max-height:120px;object-fit:contain}.download-video h1{font-size:13pt;font-weight:700;color:var(--download-video-foreground)}.download-video h2{font-size:11pt;font-weight:700;color:var(--download-video-foreground)}.download-video .header{display:flex;justify-content:space-between;align-items:center}.download-video .header .grow{flex-grow:1}.download-video .header .mdi-download{font-size:16pt;color:var(--download-video-foreground);margin-right:8px}.download-video .header .mdi-close{font-size:16pt;color:var(--download-video-foreground);cursor:pointer}.download-video .header .mdi-close:hover{color:var(--theme-color)}.download-video .info{display:flex;flex-direction:column;align-items:center;margin-top:12px}.download-video .title{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-top:12px}.download-video .title .bold{width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.download-video .title .size{font-size:10pt;color:var(--download-video-foreground);align-self:center;display:flex;align-items:center;height:24px}.download-video .bold{color:var(--download-video-foreground);font-weight:700;font-size:12pt}.download-video .option-item{display:flex;justify-content:space-between;align-items:center;padding-top:12px;font-size:10pt}.download-video .tabs{display:flex;padding:12px 0;font-size:10pt}.download-video .tabs .tab{cursor:pointer;position:relative;opacity:.5}.download-video .tabs .tab.active{font-weight:700;opacity:1}.download-video .tabs .tab:not(:last-child){margin-right:16px}.download-video .tabs .tab::after{content:"";position:absolute;border-radius:2px;background-color:var(--theme-color);height:3px;width:80%;left:10%;bottom:-8px;transition:.2s ease-out;transform:scaleX(0)}.download-video .tabs .tab.active::after{transform:scaleX(1)}.download-video .separator{height:1px;background:#8884;width:100%;margin:12px 0;flex-shrink:0}.download-video .direct-download{display:flex;flex-direction:column;align-items:start;justify-content:space-between}.download-video .button,.download-video button{border:none;outline:0!important;padding:6px 16px;font-size:10pt;cursor:pointer;background:#8884;color:var(--download-video-foreground)}.download-video .button:hover,.download-video button:hover{background:#8886}.download-video .primary{background:var(--theme-color);color:var(--foreground-color);align-self:center}.download-video .primary:hover{background:var(--theme-color-90)}.download-video .busy .button,.download-video .busy .primary,.download-video .busy button,.download-video button:disabled{background-color:#0001;color:#8884;cursor:not-allowed}.download-video .busy .button,.download-video .busy button{cursor:wait!important}.download-video .direct-download .progress{align-self:stretch;display:flex;align-items:center;margin-top:8px}.download-video .direct-download .progress .background{flex-grow:1;height:4px;background:#8884;margin-right:4px;position:relative}.download-video .direct-download .progress .background .foreground{position:absolute;top:0;left:0;height:4px;background:linear-gradient(to right,var(--theme-color),var(--theme-color-60))}.download-video .direct-download .progress .percent{width:50px;text-align:right;font-size:12px}.download-video .actions{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8px -4px 0}.download-video .actions>*{margin:4px;flex-grow:1;flex-basis:calc(50% - 16px);display:flex;justify-content:center;align-items:center;white-space:nowrap}.download-video i.mdi-alert-circle{font-size:14pt;color:#ff9800}.download-video .size-warning{position:relative;padding:0 8px}.download-video .size-warning-tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--download-video-background);color:var(--download-video-foreground);border:1px dashed var(--theme-color);z-index:2;font-size:10pt;width:200px;padding:8px;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;pointer-events:none;opacity:0}.download-video .size-warning:hover .size-warning-tip{opacity:1}.download-video .episode-list .v-checkbox{padding:4px 8px;margin:4px 0;position:relative;background-color:transparent}.download-video .episode-list .v-checkbox.checked{background-color:#8882}.download-video .episode-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.download-video .episode-list{overflow:auto;max-height:320px}.download-video button.list-tool{padding:4px;line-height:1;font-size:12pt;margin:0 4px}.download-video .episode-header h2{flex-grow:1}.download-video .selected-count{width:64px;text-align:right}.download-video .aria2-rpc .mdi{margin-left:8px;font-size:14pt;line-height:1}.download-video .aria2-rpc{position:relative}.download-video .rpc-settings{position:absolute;display:flex;flex-direction:column;align-items:stretch;color:var(--download-video-foreground);background:#fff;bottom:120%;left:50%;cursor:initial;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;transform-origin:bottom;transform:translateX(-50%) scale(.9);opacity:0;pointer-events:none;padding:8px;z-index:3;transition:.3s cubic-bezier(.18,.89,.32,1.28);width:120%}body.dark .download-video .rpc-settings{background:#282828}.download-video .rpc-settings>*{margin:8px}.download-video .rpc-settings.show{opacity:1;transform:translateX(-50%) scale(1);pointer-events:initial}.download-video .rpc-settings input[type=text]{background:0 0;color:var(--download-video-foreground);border:1px solid #8884;padding:4px;margin-left:8px}.download-video .rpc-settings input[type=text]:focus{border-color:var(--theme-color)}.download-video .rpc-settings .operations{display:flex;align-items:center;justify-content:space-evenly}.download-video .final-dir{white-space:normal;word-break:break-all}.download-video .rpc-settings-item{display:flex;align-items:center;justify-content:space-between;white-space:nowrap}.download-video .rpc-settings-item input[type=text]{flex-grow:1;margin-left:24px}.download-video button.cancel-download,.download-video button.start-download{margin-top:8px}.download-video .direct-download-header{align-self:stretch;display:flex;justify-content:space-between;align-items:center}body.dark .download-video .direct-download .progress .foreground{background:linear-gradient(to right,var(--theme-color-70),var(--theme-color))}`; +onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-video.min.css"] = `.download-video{--download-video-background:white;--download-video-foreground:black;position:absolute;top:96px;left:50%;transform:translateX(-50%) scale(.95);background:var(--download-video-background);color:var(--download-video-foreground);box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;z-index:10001;pointer-events:none;opacity:0;padding:16px;width:300px;display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;box-sizing:content-box;line-height:normal}.download-video,.download-video *{transition:.2s ease-out;-webkit-tap-highlight-color:transparent!important}.download-video.opened{pointer-events:initial;opacity:1;transform:translateX(-50%) scale(1)}body.dark .download-video{--download-video-background:#222;--download-video-foreground:#eee}.round-corner .download-video,.round-corner .download-video .episode-list .v-checkbox,.round-corner .download-video .rpc-settings{border-radius:var(--large-corner-radius)}.round-corner .download-video .button,.round-corner .download-video .cover,.round-corner .download-video .direct-download .progress .background,.round-corner .download-video .direct-download .progress .foreground,.round-corner .download-video .rpc-settings input[type=text],.round-corner .download-video .size-warning-tip,.round-corner .download-video .title,.round-corner .download-video button{border-radius:var(--corner-radius)}.download-video .cover{min-height:100px;max-height:120px;object-fit:contain}.download-video h1{font-size:13pt;font-weight:700;color:var(--download-video-foreground)}.download-video h2{font-size:11pt;font-weight:700;color:var(--download-video-foreground)}.download-video .header{display:flex;justify-content:space-between;align-items:center}.download-video .header .grow{flex-grow:1}.download-video .header .mdi-download{font-size:16pt;color:var(--download-video-foreground);margin-right:8px}.download-video .header .mdi-close{font-size:16pt;color:var(--download-video-foreground);cursor:pointer}.download-video .header .mdi-close:hover{color:var(--theme-color)}.download-video .info{display:flex;flex-direction:column;align-items:center;margin-top:12px}.download-video .title{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-top:12px}.download-video .title .bold{width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.download-video .title .size{font-size:10pt;color:var(--download-video-foreground);align-self:center;display:flex;align-items:center;height:24px}.download-video .bold{color:var(--download-video-foreground);font-weight:700;font-size:12pt}.download-video .option-item{display:flex;justify-content:space-between;align-items:center;padding-top:12px;font-size:10pt}.download-video .tabs{display:flex;padding:12px 0;font-size:10pt}.download-video .tabs .tab{cursor:pointer;position:relative;opacity:.5}.download-video .tabs .tab.active{font-weight:700;opacity:1}.download-video .tabs .tab:not(:last-child){margin-right:16px}.download-video .tabs .tab::after{content:"";position:absolute;border-radius:2px;background-color:var(--theme-color);height:3px;width:80%;left:10%;bottom:-8px;transition:.2s ease-out;transform:scaleX(0)}.download-video .tabs .tab.active::after{transform:scaleX(1)}.download-video .separator{height:1px;background:#8884;width:100%;margin:12px 0;flex-shrink:0}.download-video .direct-download{display:flex;flex-direction:column;align-items:start;justify-content:space-between}.download-video .button,.download-video button{border:none;outline:0!important;padding:6px 16px;font-size:10pt;cursor:pointer;background:#8884;color:var(--download-video-foreground)}.download-video .button:hover,.download-video button:hover{background:#8886}.download-video .primary{background:var(--theme-color);color:var(--foreground-color);align-self:center}.download-video .primary:hover{background:var(--theme-color-90)}.download-video .busy .button,.download-video .busy .primary,.download-video .busy button,.download-video button:disabled{background-color:#0001;color:#8884;cursor:not-allowed}.download-video .busy .button,.download-video .busy button{cursor:wait!important}.download-video .direct-download .progress{align-self:stretch;display:flex;align-items:center;margin-top:8px}.download-video .direct-download .progress .background{flex-grow:1;height:4px;background:#8884;margin-right:4px;position:relative}.download-video .direct-download .progress .background .foreground{position:absolute;top:0;left:0;height:4px;background:linear-gradient(to right,var(--theme-color),var(--theme-color-60))}.download-video .direct-download .progress .percent{width:50px;text-align:right;font-size:12px}.download-video .actions{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8px -4px 0}.download-video .actions>*{margin:4px;flex-grow:1;flex-basis:calc(50% - 16px);display:flex;justify-content:center;align-items:center;white-space:nowrap}.download-video i.mdi-alert-circle{font-size:14pt;color:#ff9800}.download-video .size-warning{position:relative;padding:0 8px}.download-video .size-warning-tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--download-video-background);color:var(--download-video-foreground);border:1px dashed var(--theme-color);z-index:2;font-size:10pt;width:200px;padding:8px;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;pointer-events:none;opacity:0}.download-video .size-warning:hover .size-warning-tip{opacity:1}.download-video .episode-list .v-checkbox{padding:4px 8px;margin:4px 0;position:relative;background-color:transparent}.download-video .episode-list .v-checkbox.checked{background-color:#8882}.download-video .episode-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.download-video .episode-list{overflow:auto;max-height:320px}.download-video button.list-tool{padding:4px;line-height:1;font-size:12pt;margin:0 4px}.download-video .episode-header h2{flex-grow:1}.download-video .selected-count{width:64px;font-size:12px;text-align:right}.download-video .aria2-rpc .mdi{margin-left:8px;font-size:14pt;line-height:1}.download-video .aria2-rpc{position:relative}.download-video .rpc-settings{position:absolute;display:flex;flex-direction:column;align-items:stretch;color:var(--download-video-foreground);background:#fff;bottom:120%;left:50%;cursor:initial;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;transform-origin:bottom;transform:translateX(-50%) scale(.9);opacity:0;pointer-events:none;padding:8px;z-index:3;transition:.3s cubic-bezier(.18,.89,.32,1.28);width:120%}body.dark .download-video .rpc-settings{background:#282828}.download-video .rpc-settings>*{margin:8px}.download-video .rpc-settings.show{opacity:1;transform:translateX(-50%) scale(1);pointer-events:initial}.download-video .rpc-settings input[type=text]{background:0 0;color:var(--download-video-foreground);border:1px solid #8884;padding:4px;margin-left:8px}.download-video .rpc-settings input[type=text]:focus{border-color:var(--theme-color)}.download-video .rpc-settings .operations{display:flex;align-items:center;justify-content:space-evenly}.download-video .final-dir{white-space:normal;word-break:break-all}.download-video .rpc-settings-item{display:flex;align-items:center;justify-content:space-between;white-space:nowrap}.download-video .rpc-settings-item input[type=text]{flex-grow:1;margin-left:24px}.download-video button.cancel-download,.download-video button.start-download{margin-top:8px}.download-video .direct-download-header{align-self:stretch;display:flex;justify-content:space-between;align-items:center}body.dark .download-video .direct-download .progress .foreground{background:linear-gradient(to right,var(--theme-color-70),var(--theme-color))}`; onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-video.min.html"] = `

下载视频

单个视频
批量导出
警告: 过大的视频大小会在直接下载时占用大量内存, 并可能导致浏览器标签页崩溃. 请考虑降低清晰度或使用导出选项.
预计大小: {{displaySize}}
格式
清晰度
弹幕
首选编码

直接下载

{{speed}}
{{progressPercent}}%

选集

{{selectedEpisodeCount}}/{{episodeList.length}}

导出

{{showRpcSettings ? '取消' : 'aria2 RPC'}}

aria2 RPC

配置

主机
端口
密钥
限速
默认路径
路径
最终路径: {{rpcSettings.baseDir + rpcSettings.dir}}
方法
开始下载
{{saveRpcSettingsText}}
`; -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-video.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:s}=e.import("title");const{VideoInfo:a,DanmakuInfo:i}=e.import("video-info");const{DownloadVideoPackage:n}=e.import("download-video-package");class o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fnver=0&fnval=16`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json`}}}return e.bind(this)}async getDashUrl(t){return(await this.getApiGenerator(true))(c.aid,c.cid,t)}async getUrl(t){return(await this.getApiGenerator())(c.aid,c.cid,t)}}class r extends o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fourk=1&fnval=16`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&otype=json&fourk=1&fnval=16`}}else{if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=&otype=json`}}}return e.bind(this)}}class l extends o{constructor(t){super();this.ep=t}async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}`}}}return e.bind(this)}}const c={entity:new o,aid:"",cid:""};let d=[];let p=null;class h{constructor(t,e,s){this.quality=t;this.internalName=e;this.displayName=s}async downloadInfo(t=false){const e=new u(this);await e.fetchVideoInfo(t);return e}static parseFormats(t){const e=t.accept_quality;const s=t.accept_format.split(",");const a=t.accept_description;const i=e.map((t,e)=>{return new h(t,s[e],a[e])});return i}static async getAvailableDashFormats(){const t=await c.entity.getDashUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}return h.parseFormats(e.data||e.result||e)}static async getAvailableFormats(){const t=await c.entity.getUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}const s=e.data||e.result||e;return h.parseFormats(s)}}class u{constructor(t,e){this.fragmentSplitFactor=6*2;this.workingXhr=null;this.progressMap=new Map;this.format=t;this.fragments=e||[];this.videoSpeed=new f(this)}get danmakuOption(){return t.downloadVideoDefaultDanmaku}get isDash(){return this.fragments.some(t=>t.url.includes(".m4s"))}get totalSize(){return this.fragments.map(t=>t.size).reduce((t,e)=>t+e)}async fetchVideoInfo(t=false){if(!t){const t=await c.entity.getUrl(this.format.quality);const e=await Ajax.getTextWithCredentials(t);const s=JSON.parse(e.replace(/http:/g,"https:"));const a=s.data||s.result||s;if(a.quality!==this.format.quality){throw new Error("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const i=a.durl;this.fragments=i.map(t=>{return{length:t.length,size:t.size,url:t.url,backupUrls:t.backup_url}})}else{const{dashToFragments:t,getDashInfo:s}=await e.importAsync("video-dash");const a=await s(await c.entity.getDashUrl(this.format.quality),this.format.quality);this.fragments=t(a)}return this.fragments}updateProgress(){const t=this.progressMap?[...this.progressMap.values()].reduce((t,e)=>t+e,0)/this.totalSize:0;if(t>1||t<0){console.error(`[下载视频] 进度异常: ${t}`,this.progressMap.values())}this.progress&&this.progress(t)}cancelDownload(){this.videoSpeed.stopMeasure();if(this.workingXhr!==null){this.workingXhr.forEach(t=>t.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(t){const e=[];const s=this.isDash?4*1024*1024:16*1024*1024;let a;if(t.size<=s*6){a=t.size/this.fragmentSplitFactor}else{a=s}let i=0;const n=t=>[...this.progressMap.keys()].indexOf(t)+1;while(i{const a=new XMLHttpRequest;a.open("GET",t.url);a.responseType="arraybuffer";a.withCredentials=false;a.addEventListener("progress",t=>{console.log(`[下载视频] 视频片段${n(a)}下载进度: ${t.loaded}/${r} bytes loaded, ${o}`);this.progressMap.set(a,t.loaded);this.updateProgress()});a.addEventListener("load",()=>{if((""+a.status)[0]==="2"){console.log(`[下载视频] 视频片段${n(a)}下载完成`);e(a.response)}else{s(`视频片段${n(a)}请求失败, response = ${a.status}`)}});a.addEventListener("abort",()=>s("canceled"));a.addEventListener("error",()=>{console.error(`[下载视频] 视频片段${n(a)}下载失败: ${o}`);this.progressMap.set(a,0);this.updateProgress();a.open("GET",t.url);a.setRequestHeader("Range",o);a.send()});a.setRequestHeader("Range",o);this.progressMap.set(a,0);a.send();this.workingXhr.push(a)}));i=Math.round(i+a)+1}return Promise.all(e)}async copyUrl(){const t=this.fragments.map(t=>t.url).reduce((t,e)=>t+"\r\n"+e);GM.setClipboard(t,"text")}async showUrl(){const t=this.fragments.map(t=>`\n${t.url}\n`).reduce((t,e)=>t+"\r\n"+e);Toast.success(t+`复制全部`,"显示链接");const e=await SpinQuery.select("#copy-link");e.addEventListener("click",async()=>{await this.copyUrl()})}async exportData(t=false){const e=JSON.stringify([{fragments:this.fragments,title:s(),totalSize:this.fragments.map(t=>t.size).reduce((t,e)=>t+e),referer:document.URL.replace(window.location.search,"")}]);if(t){GM.setClipboard(e,"text")}else{const t=new Blob([e],{type:"text/json"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.json`,t);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}async exportAria2(a=false){if(a){const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,a);await i.emit();const o=t.aria2RpcOption;const r=this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}const i=[];if(o.secretKey!==""){i.push(`token:${o.secretKey}`)}i.push([t.url]);i.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${s()}${a}${this.extension(t)}`,split:this.fragmentSplitFactor,dir:o.baseDir+o.dir||undefined,"max-download-limit":o.maxDownloadLimit||undefined});const n=encodeURIComponent(`${s()}${a}`);return{params:i,id:n}});const{sendRpc:l}=await e.importAsync("aria2-rpc");await l(r)}else{const t=`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}return`\n${t.url}\n referer=${document.URL.replace(window.location.search,"")}\n user-agent=${UserAgent}\n out=${s()}${a}${this.extension(t)}\n split=${this.fragmentSplitFactor}\n`.trim()}).join("\n")}\n`.trim();const e=new Blob([t],{type:"text/plain"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.txt`,e);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}extension(t){const e=t||this.fragments[0];const s=[".flv",".mp4"].find(t=>e.url.includes(t));if(s){return s}else if(e.url.includes(".m4s")){return this.fragments.indexOf(e)===0?".mp4":".m4a"}else{console.warn("No extension detected.");return".flv"}}async downloadDanmaku(){if(this.danmakuOption!=="无"){const t=new i(c.cid);await t.fetchInfo();if(this.danmakuOption==="XML"){return t.rawXML}else{const{convertToAss:s}=await e.importAsync("download-danmaku");return s(t.rawXML)}}else{return null}}async download(){this.workingXhr=[];this.progressMap=new Map;this.updateProgress();const t=[];this.videoSpeed.startMeasure();for(const e of this.fragments){const s=await this.downloadFragment(e);t.push(s)}if(t.length<1){throw new Error("下载失败.")}const e=s();const a=new n;t.forEach((s,i)=>{let n;const o=this.fragments[i];if(t.length>1&&!this.isDash){n=`${e} - ${i+1}${this.extension(o)}`}else{n=`${e}${this.extension(o)}`}a.add(n,new Blob(Array.isArray(s)?s:[s]))});const i=await this.downloadDanmaku();a.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,i);await a.emit(e+".zip");this.progress&&this.progress(0);this.videoSpeed.stopMeasure()}}class f{constructor(t){this.lastProgress=0;this.measureInterval=1e3;this.workingDownloader=t}startMeasure(){this.intervalTimer=setInterval(()=>{const t=this.workingDownloader.progressMap?[...this.workingDownloader.progressMap.values()].reduce((t,e)=>t+e,0):0;const e=t-this.lastProgress;if(this.speedUpdate!==undefined){this.speedUpdate(formatFileSize(e)+"/s")}this.lastProgress=t},this.measureInterval)}stopMeasure(){clearInterval(this.intervalTimer)}}async function w(){const t=await SpinQuery.select(()=>(unsafeWindow||window).aid);const e=await SpinQuery.select(()=>(unsafeWindow||window).cid);if(!(t&&e)){return false}c.aid=t;c.cid=e;if(document.URL.includes("bangumi")){c.entity=new r}else if(document.URL.includes("cheese")){const t=document.URL.match(/cheese\/play\/ep([\d]+)/);c.entity=new l(t[1])}else{c.entity=new o}try{d=await h.getAvailableFormats()}catch(t){return false}return true}const m=e=>{const s=t.downloadVideoQuality;const a=e.find(t=>t.quality===s);if(a){return a}const i=e.filter(t=>t.quality{const t=dq(".download-video");t.classList.toggle("opened");window.scroll(0,0);dq(".gui-settings-mask").click()});document.body.insertAdjacentHTML("beforeend",e.import("downloadVideoHtml"));y()}async function y(){let o;const r=new Vue({el:".download-video",components:{VDropdown:()=>e.importAsync("v-dropdown.vue"),VCheckbox:()=>e.importAsync("v-checkbox.vue"),RpcProfiles:()=>e.importAsync("aria2-rpc-profiles.vue")},data:{downloadSingle:true,coverUrl:EmptyImageUrl,aid:c.aid,cid:c.cid,dashModel:{value:t.downloadVideoFormat,items:["flv","dash"]},qualityModel:{value:p.displayName,items:d.map(t=>t.displayName)},danmakuModel:{value:t.downloadVideoDefaultDanmaku,items:["无","XML","ASS"]},codecModel:{value:t.downloadVideoDashCodec,items:["AVC/H.264","HEVC/H.265"]},progressPercent:0,size:"获取大小中",blobUrl:"",episodeList:[],downloading:false,speed:"",batch:false,rpcSettings:t.aria2RpcOption,showRpcSettings:false,busy:false,saveRpcSettingsText:"保存配置",enableDash:t.enableDashDownload,lastDirectDownloadLink:""},computed:{displaySize(){if(typeof this.size==="string"){return this.size}return formatFileSize(this.size)},sizeWarning(){if(typeof this.size==="string"){return false}return this.size>1073741824},selectedEpisodeCount(){return this.episodeList.filter(t=>t.checked).length},dash(){return this.dashModel.value==="dash"}},methods:{close(){this.$el.classList.remove("opened")},danmakuOptionChange(){t.downloadVideoDefaultDanmaku=this.danmakuModel.value},async codecChange(){t.downloadVideoDashCodec=this.codecModel.value;await this.formatChange()},async dashChange(){console.log("dash change");const e=t.downloadVideoFormat=this.dashModel.value;let s=[];if(e==="flv"){s=await h.getAvailableFormats()}else{s=await h.getAvailableDashFormats()}d=s;p=m(d);this.qualityModel.items=s.map(t=>t.displayName);this.qualityModel.value=this.qualityModel.items[d.indexOf(p)];await this.formatChange()},async formatChange(e=false){console.log("format change");const s=this.getFormat();if(e){t.downloadVideoQuality=s.quality}try{this.size="获取大小中";const t=await s.downloadInfo(this.dash);this.size=t.totalSize}catch(t){this.size="获取大小失败";throw t}},getFormat(){const t=d.find(t=>t.displayName===this.qualityModel.value);if(!t){console.error(`No format found. model value = ${this.qualityModel.value}`);return null}return t},async exportData(t){if(this.busy===true){return}try{this.busy=true;if(!this.downloadSingle){await this.exportBatchData(t);return}const a=this.getFormat();const i=await a.downloadInfo(this.dash);switch(t){case"copyLink":await i.copyUrl();Toast.success("已复制链接到剪贴板.","下载视频",3e3);break;case"showLink":await i.showUrl();break;case"aria2":await i.exportAria2(false);break;case"aria2RPC":await i.exportAria2(true);break;case"copyVLD":await i.exportData(true);Toast.success("已复制VLD数据到剪贴板.","下载视频",3e3);break;case"exportVLD":await i.exportData(false);break;case"ffmpegFragments":if(i.fragments.length<2){Toast.info("当前视频没有分段.","分段列表",3e3)}else{const{getFragmentsList:t}=await e.importAsync("ffmpeg-support");const a=new n;a.add("ffmpeg-files.txt",t(i.fragments.length,s(),i.fragments.map(t=>i.extension(t))));await a.emit()}break;default:break}}catch(t){logError(t)}finally{this.busy=false}},async exportBatchData(t){const a=this.episodeList;if(a.every(t=>t.checked===false)){Toast.info("请至少选择1集或以上的数量!","批量导出",3e3);return}const o=t=>{const e=a.find(e=>e.cid===t.cid);if(e===undefined){return false}return e.checked};const r=this.getFormat();if(this.danmakuModel.value!=="无"){const t=Toast.info("下载弹幕中...","批量导出");const s=new n;try{if(this.danmakuModel.value==="XML"){for(const t of a.filter(o)){const e=new i(t.cid);await e.fetchInfo();s.add(t.title+".xml",e.rawXML)}}else{const{convertToAss:t}=await e.importAsync("download-danmaku");for(const e of a.filter(o)){const a=new i(e.cid);await a.fetchInfo();s.add(e.title+".ass",await t(a.rawXML))}}await s.emit(this.cid+".danmakus.zip")}catch(t){logError(`弹幕下载失败`);throw t}finally{t.dismiss()}}const l=Toast.info("获取链接中...","批量导出");const d=this.batchExtractor;d.config.itemFilter=o;d.config.api=await c.entity.getApiGenerator(this.dash);let p;try{switch(t){case"aria2":p=await d.collectAria2(r,l,false);await n.single(s(false)+".txt",new Blob([p],{type:"text/plain"}),{ffmpeg:this.ffmpegOption});return;case"aria2RPC":await d.collectAria2(r,l,true);Toast.success(`成功发送了批量请求.`,"aria2 RPC",3e3);return;case"copyVLD":GM.setClipboard(await d.collectData(r,l),{mimetype:"text/plain"});Toast.success("已复制批量vld数据到剪贴板.","批量导出",3e3);return;case"exportVLD":p=await d.collectData(r,l);await n.single(s(false)+".json",new Blob([p],{type:"text/json"}),{ffmpeg:this.ffmpegOption});return;case"ffmpegFragments":{const t=await d.getRawItems(r);const a=new u(r,t[0].fragments);const{getBatchFragmentsList:i}=await e.importAsync("ffmpeg-support");const o=i(t,this.dash||a.extension());if(!o){Toast.info("所有选择的分P都没有分段.","分段列表",3e3)}else{const t=new n;for(const[e,s]of o.entries()){t.add(e,s)}await t.emit(escapeFilename(`${s(false)}.zip`))}}break;case"ffmpegEpisodes":{const t=await d.getRawItems(r);const s=new u(r,t[0].fragments);const{getBatchEpisodesList:a}=await e.importAsync("ffmpeg-support");const i=a(t,this.dash||s.extension());const o=new n;o.add("ffmpeg-files.txt",i);await o.emit()}break;default:return}}catch(t){logError(t)}finally{l.dismiss()}},async checkBatch(){const t=["/www.bilibili.com/bangumi","/www.bilibili.com/video/av"];if(!t.some(t=>document.URL.includes(t))){this.batch=false;this.episodeList=[];return}const{BatchExtractor:s}=await e.importAsync("batch-download");if(await s.test()!==true){this.batch=false;this.episodeList=[];return}const a=this.batchExtractor=new s;this.batch=true;this.episodeList=(await a.getItemList()).map((t,e)=>{return{aid:t.aid,cid:t.cid,title:t.title,index:e,checked:true}})},cancelDownload(){if(o){o.cancelDownload()}},async startDownload(){const t=this.getFormat();try{this.downloading=true;const e=await t.downloadInfo(this.dash);e.videoSpeed.speedUpdate=(t=>this.speed=t);e.progress=(t=>{this.progressPercent=Math.trunc(t*100)});o=e;await e.download();this.lastDirectDownloadLink=n.lastPackageUrl}catch(t){if(t!=="canceled"){logError(t)}this.progressPercent=0}finally{this.downloading=false;this.speed=""}},selectAllEpisodes(){this.episodeList.forEach(t=>t.checked=true)},unselectAllEpisodes(){this.episodeList.forEach(t=>t.checked=false)},inverseAllEpisodes(){this.episodeList.forEach(t=>t.checked=!t.checked)},toggleRpcSettings(){this.showRpcSettings=!this.showRpcSettings},saveRpcSettings(){if(this.rpcSettings.host===""){this.rpcSettings.host="127.0.0.1"}if(this.rpcSettings.port===""){this.rpcSettings.port="6800"}t.aria2RpcOption=this.rpcSettings;const e=t.aria2RpcOptionProfiles.find(e=>e.name===t.aria2RpcOptionSelectedProfile);if(e){Object.assign(e,this.rpcSettings);t.aria2RpcOptionProfiles=t.aria2RpcOptionProfiles}this.saveRpcSettingsText="已保存";setTimeout(()=>this.saveRpcSettingsText="保存配置",2e3)},updateProfile(e){t.aria2RpcOption=this.rpcSettings=_.omit(e,"name")}},async mounted(){}});Observer.videoChange(async()=>{r.close();r.batch=false;r.downloadSingle=true;const t=dq("#download-video");const e=await w();t.style.display=e?"flex":"none";if(!e){return}r.aid=c.aid;r.cid=c.cid;try{const t=new a(c.aid);await t.fetchInfo();r.coverUrl=t.coverUrl.replace("http:","https:")}catch(t){r.coverUrl=EmptyImageUrl}r.dashChange();await r.checkBatch()})}return{widget:{content:`\n`,condition:w,success:g}}}})(); +onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-video.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:s}=e.import("title");const{VideoInfo:a,DanmakuInfo:i}=e.import("video-info");const{DownloadVideoPackage:n}=e.import("download-video-package");class o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fnver=0&fnval=16`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json`}}}return e.bind(this)}async getDashUrl(t){return(await this.getApiGenerator(true))(c.aid,c.cid,t)}async getUrl(t){return(await this.getApiGenerator())(c.aid,c.cid,t)}}class r extends o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fourk=1&fnval=16`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&otype=json&fourk=1&fnval=16`}}else{if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=&otype=json`}}}return e.bind(this)}}class l extends o{constructor(t){super();this.ep=t}async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}`}}}return e.bind(this)}}const c={entity:new o,aid:"",cid:""};let d=[];let p=null;class h{constructor(t,e,s){this.quality=t;this.internalName=e;this.displayName=s}async downloadInfo(t=false){const e=new u(this);await e.fetchVideoInfo(t);return e}static parseFormats(t){const e=t.accept_quality;const s=t.accept_format.split(",");const a=t.accept_description;const i=e.map((t,e)=>{return new h(t,s[e],a[e])});return i}static async getAvailableDashFormats(){const t=await c.entity.getDashUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}return h.parseFormats(e.data||e.result||e)}static async getAvailableFormats(){const t=await c.entity.getUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}const s=e.data||e.result||e;return h.parseFormats(s)}}class u{constructor(t,e){this.fragmentSplitFactor=6*2;this.workingXhr=null;this.progressMap=new Map;this.format=t;this.fragments=e||[];this.videoSpeed=new f(this)}get danmakuOption(){return t.downloadVideoDefaultDanmaku}get isDash(){return this.fragments.some(t=>t.url.includes(".m4s"))}get totalSize(){return this.fragments.map(t=>t.size).reduce((t,e)=>t+e)}async fetchVideoInfo(t=false){if(!t){const t=await c.entity.getUrl(this.format.quality);const e=await Ajax.getTextWithCredentials(t);const s=JSON.parse(e.replace(/http:/g,"https:"));const a=s.data||s.result||s;if(a.quality!==this.format.quality){throw new Error("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const i=a.durl;this.fragments=i.map(t=>{return{length:t.length,size:t.size,url:t.url,backupUrls:t.backup_url}})}else{const{dashToFragments:t,getDashInfo:s}=await e.importAsync("video-dash");const a=await s(await c.entity.getDashUrl(this.format.quality),this.format.quality);this.fragments=t(a)}return this.fragments}updateProgress(){const t=this.progressMap?[...this.progressMap.values()].reduce((t,e)=>t+e,0)/this.totalSize:0;if(t>1||t<0){console.error(`[下载视频] 进度异常: ${t}`,this.progressMap.values())}this.progress&&this.progress(t)}cancelDownload(){this.videoSpeed.stopMeasure();if(this.workingXhr!==null){this.workingXhr.forEach(t=>t.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(t){const e=[];const s=this.isDash?4*1024*1024:16*1024*1024;let a;if(t.size<=s*6){a=t.size/this.fragmentSplitFactor}else{a=s}let i=0;const n=t=>[...this.progressMap.keys()].indexOf(t)+1;while(i{const a=new XMLHttpRequest;a.open("GET",t.url);a.responseType="arraybuffer";a.withCredentials=false;a.addEventListener("progress",t=>{console.log(`[下载视频] 视频片段${n(a)}下载进度: ${t.loaded}/${r} bytes loaded, ${o}`);this.progressMap.set(a,t.loaded);this.updateProgress()});a.addEventListener("load",()=>{if((""+a.status)[0]==="2"){console.log(`[下载视频] 视频片段${n(a)}下载完成`);e(a.response)}else{s(`视频片段${n(a)}请求失败, response = ${a.status}`)}});a.addEventListener("abort",()=>s("canceled"));a.addEventListener("error",()=>{console.error(`[下载视频] 视频片段${n(a)}下载失败: ${o}`);this.progressMap.set(a,0);this.updateProgress();a.open("GET",t.url);a.setRequestHeader("Range",o);a.send()});a.setRequestHeader("Range",o);this.progressMap.set(a,0);a.send();this.workingXhr.push(a)}));i=Math.round(i+a)+1}return Promise.all(e)}async copyUrl(){const t=this.fragments.map(t=>t.url).reduce((t,e)=>t+"\r\n"+e);GM.setClipboard(t,"text")}async showUrl(){const t=this.fragments.map(t=>`\n${t.url}\n`).reduce((t,e)=>t+"\r\n"+e);Toast.success(t+`复制全部`,"显示链接");const e=await SpinQuery.select("#copy-link");e.addEventListener("click",async()=>{await this.copyUrl()})}async exportData(t=false){const e=JSON.stringify([{fragments:this.fragments,title:s(),totalSize:this.fragments.map(t=>t.size).reduce((t,e)=>t+e),referer:document.URL.replace(window.location.search,"")}]);if(t){GM.setClipboard(e,"text")}else{const t=new Blob([e],{type:"text/json"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.json`,t);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}async exportAria2(a=false){if(a){const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,a);await i.emit();const o=t.aria2RpcOption;const r=this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}const i=[];if(o.secretKey!==""){i.push(`token:${o.secretKey}`)}i.push([t.url]);i.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${s()}${a}${this.extension(t)}`,split:this.fragmentSplitFactor,dir:o.baseDir+o.dir||undefined,"max-download-limit":o.maxDownloadLimit||undefined});const n=encodeURIComponent(`${s()}${a}`);return{params:i,id:n}});const{sendRpc:l}=await e.importAsync("aria2-rpc");await l(r)}else{const t=`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}return`\n${t.url}\n referer=${document.URL.replace(window.location.search,"")}\n user-agent=${UserAgent}\n out=${s()}${a}${this.extension(t)}\n split=${this.fragmentSplitFactor}\n`.trim()}).join("\n")}\n`.trim();const e=new Blob([t],{type:"text/plain"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.txt`,e);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}extension(t){const e=t||this.fragments[0];const s=[".flv",".mp4"].find(t=>e.url.includes(t));if(s){return s}else if(e.url.includes(".m4s")){return this.fragments.indexOf(e)===0?".mp4":".m4a"}else{console.warn("No extension detected.");return".flv"}}async downloadDanmaku(){if(this.danmakuOption!=="无"){const t=new i(c.cid);await t.fetchInfo();if(this.danmakuOption==="XML"){return t.rawXML}else{const{convertToAss:s}=await e.importAsync("download-danmaku");return s(t.rawXML)}}else{return null}}async download(){this.workingXhr=[];this.progressMap=new Map;this.updateProgress();const t=[];this.videoSpeed.startMeasure();for(const e of this.fragments){const s=await this.downloadFragment(e);t.push(s)}if(t.length<1){throw new Error("下载失败.")}const e=s();const a=new n;t.forEach((s,i)=>{let n;const o=this.fragments[i];if(t.length>1&&!this.isDash){n=`${e} - ${i+1}${this.extension(o)}`}else{n=`${e}${this.extension(o)}`}a.add(n,new Blob(Array.isArray(s)?s:[s]))});const i=await this.downloadDanmaku();a.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,i);await a.emit(e+".zip");this.progress&&this.progress(0);this.videoSpeed.stopMeasure()}}class f{constructor(t){this.lastProgress=0;this.measureInterval=1e3;this.workingDownloader=t}startMeasure(){this.intervalTimer=setInterval(()=>{const t=this.workingDownloader.progressMap?[...this.workingDownloader.progressMap.values()].reduce((t,e)=>t+e,0):0;const e=t-this.lastProgress;if(this.speedUpdate!==undefined){this.speedUpdate(formatFileSize(e)+"/s")}this.lastProgress=t},this.measureInterval)}stopMeasure(){clearInterval(this.intervalTimer)}}async function w(){const t=await SpinQuery.select(()=>(unsafeWindow||window).aid);const e=await SpinQuery.select(()=>(unsafeWindow||window).cid);if(!(t&&e)){return false}c.aid=t;c.cid=e;if(document.URL.includes("bangumi")){c.entity=new r}else if(document.URL.includes("cheese")){const t=document.URL.match(/cheese\/play\/ep([\d]+)/);c.entity=new l(t[1])}else{c.entity=new o}try{d=await h.getAvailableFormats()}catch(t){return false}return true}const m=e=>{const s=t.downloadVideoQuality;const a=e.find(t=>t.quality===s);if(a){return a}const i=e.filter(t=>t.quality{const t=dq(".download-video");t.classList.toggle("opened");window.scroll(0,0);dq(".gui-settings-mask").click()});document.body.insertAdjacentHTML("beforeend",e.import("downloadVideoHtml"));y()}async function y(){let o;const r=new Vue({el:".download-video",components:{VDropdown:()=>e.importAsync("v-dropdown.vue"),VCheckbox:()=>e.importAsync("v-checkbox.vue"),RpcProfiles:()=>e.importAsync("aria2-rpc-profiles.vue")},data:{downloadSingle:true,coverUrl:EmptyImageUrl,aid:c.aid,cid:c.cid,dashModel:{value:t.downloadVideoFormat,items:["flv","dash"]},qualityModel:{value:p.displayName,items:d.map(t=>t.displayName)},danmakuModel:{value:t.downloadVideoDefaultDanmaku,items:["无","XML","ASS"]},codecModel:{value:t.downloadVideoDashCodec,items:["AVC/H.264","HEVC/H.265"]},progressPercent:0,size:"获取大小中",blobUrl:"",episodeList:[],downloading:false,speed:"",batch:false,rpcSettings:t.aria2RpcOption,showRpcSettings:false,busy:false,saveRpcSettingsText:"保存配置",enableDash:t.enableDashDownload,lastDirectDownloadLink:""},computed:{displaySize(){if(typeof this.size==="string"){return this.size}return formatFileSize(this.size)},sizeWarning(){if(typeof this.size==="string"){return false}return this.size>1073741824},selectedEpisodeCount(){return this.episodeList.filter(t=>t.checked).length},dash(){return this.dashModel.value==="dash"}},methods:{close(){this.$el.classList.remove("opened")},danmakuOptionChange(){t.downloadVideoDefaultDanmaku=this.danmakuModel.value},async codecChange(){t.downloadVideoDashCodec=this.codecModel.value;await this.formatChange()},async dashChange(){console.log("dash change");const e=t.downloadVideoFormat=this.dashModel.value;let s=[];if(e==="flv"){s=await h.getAvailableFormats()}else{s=await h.getAvailableDashFormats()}d=s;p=m(d);this.qualityModel.items=s.map(t=>t.displayName);this.qualityModel.value=this.qualityModel.items[d.indexOf(p)];await this.formatChange()},async formatChange(e=false){console.log("format change");const s=this.getFormat();if(e){t.downloadVideoQuality=s.quality}try{this.size="获取大小中";const t=await s.downloadInfo(this.dash);this.size=t.totalSize}catch(t){this.size="获取大小失败";throw t}},getFormat(){const t=d.find(t=>t.displayName===this.qualityModel.value);if(!t){console.error(`No format found. model value = ${this.qualityModel.value}`);return null}return t},async exportData(t){if(this.busy===true){return}try{this.busy=true;if(!this.downloadSingle){await this.exportBatchData(t);return}const a=this.getFormat();const i=await a.downloadInfo(this.dash);switch(t){case"copyLink":await i.copyUrl();Toast.success("已复制链接到剪贴板.","下载视频",3e3);break;case"showLink":await i.showUrl();break;case"aria2":await i.exportAria2(false);break;case"aria2RPC":await i.exportAria2(true);break;case"copyVLD":await i.exportData(true);Toast.success("已复制VLD数据到剪贴板.","下载视频",3e3);break;case"exportVLD":await i.exportData(false);break;case"ffmpegFragments":if(i.fragments.length<2){Toast.info("当前视频没有分段.","分段列表",3e3)}else{const{getFragmentsList:t}=await e.importAsync("ffmpeg-support");const a=new n;a.add("ffmpeg-files.txt",t(i.fragments.length,s(),i.fragments.map(t=>i.extension(t))));await a.emit()}break;default:break}}catch(t){logError(t)}finally{this.busy=false}},async exportBatchData(t){const a=this.episodeList;if(a.every(t=>t.checked===false)){Toast.info("请至少选择1集或以上的数量!","批量导出",3e3);return}const o=t=>{const e=a.find(e=>e.cid===t.cid);if(e===undefined){return false}return e.checked};const r=this.getFormat();if(this.danmakuModel.value!=="无"){const t=Toast.info("下载弹幕中...","批量导出");const s=new n;try{if(this.danmakuModel.value==="XML"){for(const t of a.filter(o)){const e=new i(t.cid);await e.fetchInfo();s.add(t.title+".xml",e.rawXML)}}else{const{convertToAss:t}=await e.importAsync("download-danmaku");for(const e of a.filter(o)){const a=new i(e.cid);await a.fetchInfo();s.add(e.title+".ass",await t(a.rawXML))}}await s.emit(this.cid+".danmakus.zip")}catch(t){logError(`弹幕下载失败`);throw t}finally{t.dismiss()}}const l=Toast.info("获取链接中...","批量导出");const d=this.batchExtractor;d.config.itemFilter=o;d.config.api=await c.entity.getApiGenerator(this.dash);let p;try{switch(t){case"aria2":p=await d.collectAria2(r,l,false);await n.single(s(false)+".txt",new Blob([p],{type:"text/plain"}),{ffmpeg:this.ffmpegOption});return;case"aria2RPC":await d.collectAria2(r,l,true);Toast.success(`成功发送了批量请求.`,"aria2 RPC",3e3);return;case"copyVLD":GM.setClipboard(await d.collectData(r,l),{mimetype:"text/plain"});Toast.success("已复制批量vld数据到剪贴板.","批量导出",3e3);return;case"exportVLD":p=await d.collectData(r,l);await n.single(s(false)+".json",new Blob([p],{type:"text/json"}),{ffmpeg:this.ffmpegOption});return;case"ffmpegFragments":{const t=await d.getRawItems(r);const a=new u(r,t[0].fragments);const{getBatchFragmentsList:i}=await e.importAsync("ffmpeg-support");const o=i(t,this.dash||a.extension());if(!o){Toast.info("所有选择的分P都没有分段.","分段列表",3e3)}else{const t=new n;for(const[e,s]of o.entries()){t.add(e,s)}await t.emit(escapeFilename(`${s(false)}.zip`))}}break;case"ffmpegEpisodes":{const t=await d.getRawItems(r);const s=new u(r,t[0].fragments);const{getBatchEpisodesList:a}=await e.importAsync("ffmpeg-support");const i=a(t,this.dash||s.extension());const o=new n;o.add("ffmpeg-files.txt",i);await o.emit()}break;default:return}}catch(t){logError(t)}finally{l.dismiss()}},async checkBatch(){const t=["//www.bilibili.com/bangumi","//www.bilibili.com/video/av","//www.bilibili.com/blackboard/bnj2020.html"];if(!t.some(t=>document.URL.includes(t))){this.batch=false;this.episodeList=[];return}const{BatchExtractor:s}=await e.importAsync("batch-download");if(await s.test()!==true){this.batch=false;this.episodeList=[];return}const a=this.batchExtractor=new s;this.batch=true;this.episodeList=(await a.getItemList()).map((t,e)=>{return{aid:t.aid,cid:t.cid,title:t.title,index:e,checked:true}})},cancelDownload(){if(o){o.cancelDownload()}},async startDownload(){const t=this.getFormat();try{this.downloading=true;const e=await t.downloadInfo(this.dash);e.videoSpeed.speedUpdate=(t=>this.speed=t);e.progress=(t=>{this.progressPercent=Math.trunc(t*100)});o=e;await e.download();this.lastDirectDownloadLink=n.lastPackageUrl}catch(t){if(t!=="canceled"){logError(t)}this.progressPercent=0}finally{this.downloading=false;this.speed=""}},selectAllEpisodes(){this.episodeList.forEach(t=>t.checked=true)},unselectAllEpisodes(){this.episodeList.forEach(t=>t.checked=false)},inverseAllEpisodes(){this.episodeList.forEach(t=>t.checked=!t.checked)},toggleRpcSettings(){this.showRpcSettings=!this.showRpcSettings},saveRpcSettings(){if(this.rpcSettings.host===""){this.rpcSettings.host="127.0.0.1"}if(this.rpcSettings.port===""){this.rpcSettings.port="6800"}t.aria2RpcOption=this.rpcSettings;const e=t.aria2RpcOptionProfiles.find(e=>e.name===t.aria2RpcOptionSelectedProfile);if(e){Object.assign(e,this.rpcSettings);t.aria2RpcOptionProfiles=t.aria2RpcOptionProfiles}this.saveRpcSettingsText="已保存";setTimeout(()=>this.saveRpcSettingsText="保存配置",2e3)},updateProfile(e){t.aria2RpcOption=this.rpcSettings=_.omit(e,"name")}},async mounted(){}});Observer.videoChange(async()=>{r.close();r.batch=false;r.downloadSingle=true;const t=dq("#download-video");const e=await w();t.style.display=e?"flex":"none";if(!e){return}r.aid=c.aid;r.cid=c.cid;try{const t=new a(c.aid);await t.fetchInfo();r.coverUrl=t.coverUrl.replace("http:","https:")}catch(t){r.coverUrl=EmptyImageUrl}r.dashChange();await r.checkBatch()})}return{widget:{content:`\n`,condition:w,success:g}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-video-package.min.js"] = (()=>{return(e,t)=>{class n{constructor(e={}){this.config=e;this.entries=[]}download(e,t){const a=document.createElement("a");const i=URL.createObjectURL(t);if(n.lastPackageUrl){URL.revokeObjectURL(n.lastPackageUrl)}n.lastPackageUrl=i;a.setAttribute("href",i);a.setAttribute("download",escapeFilename(e));document.body.appendChild(a);a.click();a.remove()}add(e,t){if(t===null||t===undefined){return}this.entries.push({name:escapeFilename(e),data:t})}async blob(){if(this.entries.length===0){return null}if(this.entries.length===1){const e=this.entries[0].data;return typeof e==="string"?new Blob([e]):e}const e=new JSZip;this.entries.forEach(({name:t,data:n})=>{e.file(t,n)});return await e.generateAsync({type:"blob"})}async emit(e){if(this.entries.length===0){return}if(!e||this.entries.length===1){e=this.entries[0].name}const t=await this.blob();if(!t){return}return this.download(e,t)}static async single(e,t,a={}){const i=new n(a);i.add(e,t);return await i.emit()}}n.lastPackageUrl="";return{export:{DownloadVideoPackage:n}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/dpi-img.vue.min.js"] = (()=>{return(t,s)=>{const r=``;return{export:Object.assign({template:r},{props:["size","src","blur","root","rootMargin","threshold"],data(){return{srcset:null,actualSrc:null}},watch:{size(){this.sourceChange()},src(){this.sourceChange()}},methods:{sourceChange(){if(this.actualSrc===null||this.srcset===null){return}this.calcSrc()},calcSrc(){if(!this.src||!this.size){return}if(this.src.includes("//static.hdslb.com/images/member/noface.gif")){this.srcset=this.src;this.actualSrc=this.src;return}const t=this.src.substring(this.src.lastIndexOf(".")+1);this.srcset=getDpiSourceSet(this.src,this.size,t);this.actualSrc=this.src}},mounted(){const t={root:this.root,rootMargin:this.rootMargin||"200px",threshold:this.threshold};const s=new IntersectionObserver(t=>{t.forEach(t=>{if(t.isIntersecting){this.calcSrc();s.disconnect()}})},t);s.observe(this.$el)},computed:{width(){if(typeof this.size==="object"&&"width"in this.size){return this.size.width}return null},height(){if(typeof this.size==="object"&&"height"in this.size){return this.size.height}return null}}})}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/expand-danmaku.min.js"] = (()=>{return(e,a)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}Observer.videoChange(async()=>{const e=await SpinQuery.select(".bui-collapse-wrap");if(e&&e.classList.contains("bui-collapse-wrap-folded")){const e=await SpinQuery.select(".bui-collapse-header");e.click()}})}})(); diff --git a/bilibili-evolved.user.js b/bilibili-evolved.user.js index 31067b9b5..0afde3bf0 100644 --- a/bilibili-evolved.user.js +++ b/bilibili-evolved.user.js @@ -1130,7 +1130,7 @@ onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/mi onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/auto-draw.min.js"] = (()=>{return(t,n)=>{(async()=>{if(!/^https:\/\/live\.bilibili\.com\/[\d]+/.test(document.URL)){return}const t=await SpinQuery.condition(()=>dq(".chat-popups-section"),t=>t.querySelector("chat-draw-area")===null);if(!t){console.warn("[自动领奖] 未能找到弹窗容器");return}Observer.childListSubtree(t,()=>{let t;console.log("draw button = ",dq(".chat-popups-section .draw>span:nth-child(3)"));t=dq(".chat-popups-section .draw>span:nth-child(3)");if(t===null){const t=dq(".chat-popups-section .function-bar>span:nth-child(3)");if(t!==null){const n=Observer.attributes(t,()=>{if(t.style.display!=="none"){n.forEach(t=>t.stop());t.click()}})}}if(t!==null){t.click()}})})()}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/auto-play.min.js"] = (()=>{return(e,d)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}SpinQuery.condition(()=>document.querySelector(".bilibili-player-video video"),e=>e&&e.paused===true,e=>e.play())}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/bangumi-timeline.vue.min.js"] = (()=>{return(e,i)=>{const n=`
时间表
{{t.date}}
{{t.dayOfWeekText}}
`;i.applyStyleFromText(`.simple-home .bangumi-timeline-container{width:100%}.simple-home .bangumi-timeline-container .bangumi-timeline{display:flex;align-items:flex-start;overflow:auto;scrollbar-width:none!important;scroll-behavior:smooth;scroll-snap-type:x mandatory;--column-count:1;--column-width:250px;--column-gap:24px;width:calc(var(--column-count) * (var(--column-width) + var(--column-gap)) - .5 * var(--column-gap))}.simple-home .bangumi-timeline-container .bangumi-timeline::-webkit-scrollbar{height:0!important;width:0!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day{scroll-snap-align:start;width:var(--column-width);max-height:calc(var(--total-height) - 32px);overflow:auto;flex:0 0 auto;padding-bottom:16px;scroll-behavior:smooth;scrollbar-width:none!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day::-webkit-scrollbar{height:0!important;width:0!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container{display:grid;grid-template:"icon date" 1fr "icon dow" 1fr/auto 1fr;grid-column-gap:8px;column-gap:8px;height:60px;padding-bottom:12px;cursor:pointer;position:sticky;top:0;z-index:1;background-color:#f4f4f4}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container{background-color:#181818}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon{grid-area:icon;justify-self:center;align-self:center;background-image:url(//s1.hdslb.com/bfs/static/bangumi-timeline/asserts/icons.png);background-size:247px 663px;width:38px;height:36px;background-position-x:-146px;filter:brightness(.5)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-1{background-position-y:-36px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-2{background-position-y:-108px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-3{background-position-y:-180px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-4{background-position-y:-252px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-5{background-position-y:-324px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-6{background-position-y:-396px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon.day-of-week-7{background-position-y:-468px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .date{grid-area:date;align-self:end;opacity:.75}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .day-of-week{grid-area:dow;align-self:start;font-weight:700;font-size:15px;opacity:.75}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .icon{width:50px;height:48px;background-position-x:-56px;filter:none}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .date{font-size:14px;opacity:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .day-of-week{font-size:18px;opacity:1}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container .icon{filter:brightness(.8)}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .date-container.today .icon{filter:invert(1)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container{margin-top:18px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container>:not(:last-child){margin-bottom:8px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time{display:flex;align-items:center;font-weight:700}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent{color:var(--theme-color)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent~.bangumi-item{box-shadow:0 4px 8px 0 #0001,inset 0 0 0 2px var(--theme-color)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time.recent~.bangumi-item .cover-container{margin:2px;border-radius:6px 0 0 6px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .time .be-icon{margin-right:6px;font-size:18px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item{display:grid;height:72px;grid-template:"cover title" auto "cover ep" auto/72px 1fr;background-color:#fff;color:inherit;box-shadow:0 4px 8px 0 #0001;border-radius:8px;grid-row-gap:8px;row-gap:8px}body.dark .simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item{background-color:#282828}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .cover-container{grid-area:cover;overflow:hidden;border-radius:8px 0 0 8px}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .cover-container img{width:100%;height:100%}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item.delay{opacity:.4}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item.delay:hover{opacity:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item:hover{color:var(--theme-color)!important}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item:hover .cover-container img{transform:scale(1.05)}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .title{grid-area:title;align-self:end;font-size:13px;font-weight:700;margin:0 12px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;max-height:2.6em;word-break:break-all;line-height:1.3;overflow:hidden}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .ep-title{grid-area:ep;align-self:start;margin:0 12px;display:flex;align-items:center}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day .time-container .bangumi-item .ep-title .be-icon{color:var(--theme-color);margin-right:4px;font-size:18px;line-height:1}.simple-home .bangumi-timeline-container .bangumi-timeline .timeline-day:not(:last-child){margin-right:var(--column-gap)}@media screen and (min-width:1000px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:2}}@media screen and (min-width:1300px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:3}}@media screen and (min-width:1550px){.simple-home .bangumi-timeline-container .bangumi-timeline{--column-count:4}}`,"bangumi-timeline-style");const t={global:"https://bangumi.bilibili.com/web_api/timeline_global",chinese:"https://bangumi.bilibili.com/web_api/timeline_cn"};return{export:Object.assign({template:n},{components:{Icon:()=>i.importAsync("icon.vue"),DpiImg:()=>i.importAsync("dpi-img.vue")},props:{type:{type:String,default:"global",required:false}},data(){return{timeline:[],recentTime:""}},computed:{apiUrl(){return t[this.type]||t.global}},watch:{type(){this.updateTimeline()}},methods:{calculateRecentTime(){const e=this.timeline.find(e=>e.isToday);const i=Number(new Date);const n=Object.entries(e.bangumis).map(([e,i])=>{return{time:e,timestamp:i[0].timestamp,bangumis:i}});const t=n.filter(e=>e.timestampe.time)}},moveTimeline(e){const i=e.currentTarget;const n=i.parentElement;const t=n.parentElement;const a=getComputedStyle(t);const m=parseInt(a.getPropertyValue("--column-width").match(/(.+)px/)[1])+parseInt(a.getPropertyValue("--column-gap").match(/(.+)px/)[1]);const o=n.offsetLeft-t.scrollLeft;if(o=m*2){t.scrollLeft+=m}console.log(e,i,n,t);console.log(m,m*2,n.offsetLeft,t.scrollLeft,o)},async updateTimeline(){try{const e=await Ajax.getJsonWithCredentials(this.apiUrl);if(e.code!==0){throw new Error(e.message)}const i=e.result.map(e=>{return{date:e.date,dayOfWeek:e.day_of_week,dayOfWeekText:"周"+[,"一","二","三","四","五","六","日"][e.day_of_week],isToday:Boolean(e.is_today),bangumis:_.groupBy(e.seasons.map(e=>{return{coverUrl:e.cover.replace("http:","https:"),squareCoverUrl:e.square_cover.replace("http:","https:"),time:e.pub_time,timestamp:e.pub_ts*1e3,url:e.url,follow:Boolean(e.follow),epTitle:e.pub_index||e.delay_reason+" "+e.delay_index,title:e.title,delay:Boolean(e.delay),published:Boolean(e.is_published)}}),e=>e.time)}});this.timeline=i;this.calculateRecentTime();setInterval(()=>{if(document.hasFocus()){this.calculateRecentTime()}},60*1e3);await this.$nextTick();const n=this.$el;const t=this.$el.querySelector(".bangumi-timeline");const a=getComputedStyle(t);const m=parseInt(a.getPropertyValue("--column-width").match(/(.+)px/)[1]);const o=parseInt(a.getPropertyValue("--column-gap").match(/(.+)px/)[1]);t.scrollLeft=5*(m+o)}catch(e){logError(e);this.$emit("error")}finally{this.$emit("load")}}},async mounted(){await this.updateTimeline()}})}}})(); -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/batch-download.min.js"] = (()=>{return(t,e)=>{const{formatTitle:i}=e.import("title");const s=12;const n=[".mp4",".m4a"];class r{constructor(t){this.config=t;this.itemList=[]}formatTitle(e){const s=t.batchFilenameFormat;const n=i(s,true,e);return escapeFilename(n," ")}async getRawItems(t){return JSON.parse(await this.collectData(t))}extension(t,e){const i=[".flv",".mp4"].find(e=>t.includes(e));if(i){return i}else if(t.includes(".m4s")){return n[e]}else{return".flv"}}async collectAria2(i,n){const r=await this.getRawItems(i);if(n){const i=t.aria2RpcOption;const{sendRpc:n}=await e.importAsync("aria2-rpc");for(const t of r){const e=t.fragments.map((e,n)=>{let r="";if(t.fragments.length>1&&!e.url.includes(".m4s")){r=" - "+(n+1)}const a=[];if(i.secretKey!==""){a.push(`token:${i.secretKey}`)}a.push([e.url]);a.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${t.title}${r}${this.extension(e.url,n)}`,split:s,dir:i.baseDir+i.dir||undefined,"max-download-limit":i.maxDownloadLimit||undefined});const o=encodeURIComponent(`${t.title}${r}`);return{params:a,id:o}});await n(e,true)}}else{return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${r.map(t=>{return t.fragments.map((e,i)=>{let n="";if(t.fragments.length>1&&!e.url.includes(".m4s")){n=` - ${i+1}`}return`\n${e.url}\n referer=${t.referer}\n user-agent=${UserAgent}\n out=${t.title}${n}${this.extension(e.url,i)}\n split=${s}\n`.trim()}).join("\n")}).join("\n")}\n`.trim()}}}class a extends r{static async test(){if(!document.URL.includes("/www.bilibili.com/video/av")){return false}return await SpinQuery.select("#multi_page")!==null}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=`https://api.bilibili.com/x/web-interface/view?aid=${unsafeWindow.aid}`;const e=await Ajax.getJson(t);if(e.code!==0){Toast.error(`获取视频选集列表失败, message=${e.message}`,"批量下载");return[]}const i=e.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return[]}this.itemList=i.map(t=>{return{title:`P${t.page} ${t.part}`,titleParameters:{n:t.page,ep:t.part},cid:t.cid,aid:unsafeWindow.aid}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const n=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/x/player/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const r=await Ajax.getJsonWithCredentials(n);const a=r.data||r.result||r;if(a.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${a.quality})`)}let o;if(a.durl){o=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const r=await i(n,typeof t==="string"?parseInt(t):t);o=s(r)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}class o extends r{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=document.querySelector("meta[property='og:url']");if(t===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return[]}const e=t.getAttribute("content").match(/play\/ss(\d+)/)[1];if(e===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return[]}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${e}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return[]}this.itemList=i.result.main_section.episodes.map((t,e)=>{const i=t.long_title?t.title:(e+1).toString();const s=t.long_title?t.long_title:t.title;return{aid:t.aid,cid:t.cid,title:`${i} - ${s}`,titleParameters:{n:i,ep:s}}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const n=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/pgc/player/web/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const r=await Ajax.getJsonWithCredentials(n);const a=r.data||r.result||r;if(a.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${a.quality})`)}let o;if(a.durl){o=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const r=await i(n,typeof t==="string"?parseInt(t):t);o=s(r)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}const c=[o,a];let l;class u{constructor(t){this.config=Object.assign({itemFilter:()=>true},t)}static async test(){for(const t of c){if(await t.test()===true){l=t;return true}}return false}getExtractor(){if(l===null){logError("[批量下载] 未找到合适的解析模块.");throw new Error(`[Batch Download] module not found.`)}const t=new l(this.config);return t}async getItemList(){const t=this.getExtractor();return await t.getItemList()}async getRawItems(t){const e=this.getExtractor();return await e.getRawItems(t.quality)}async collectData(t,e){const i=this.getExtractor();const s=await i.collectData(t.quality);e.dismiss();return s}async collectAria2(t,e,i=false){const s=this.getExtractor();const n=await s.collectAria2(t.quality,i);e.dismiss();return n}}return{export:{BatchExtractor:u}}}})(); +onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/batch-download.min.js"] = (()=>{return(t,e)=>{const{formatTitle:i}=e.import("title");const s=12;const a=[".mp4",".m4a"];class n{constructor(t){this.config=t;this.itemList=[]}formatTitle(e){const s=t.batchFilenameFormat;const a=i(s,true,e);return escapeFilename(a," ")}async getRawItems(t){return JSON.parse(await this.collectData(t))}extension(t,e){const i=[".flv",".mp4"].find(e=>t.includes(e));if(i){return i}else if(t.includes(".m4s")){return a[e]}else{return".flv"}}async collectAria2(i,a){const n=await this.getRawItems(i);if(a){const i=t.aria2RpcOption;const{sendRpc:a}=await e.importAsync("aria2-rpc");for(const t of n){const e=t.fragments.map((e,a)=>{let n="";if(t.fragments.length>1&&!e.url.includes(".m4s")){n=" - "+(a+1)}const r=[];if(i.secretKey!==""){r.push(`token:${i.secretKey}`)}r.push([e.url]);r.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${t.title}${n}${this.extension(e.url,a)}`,split:s,dir:i.baseDir+i.dir||undefined,"max-download-limit":i.maxDownloadLimit||undefined});const o=encodeURIComponent(`${t.title}${n}`);return{params:r,id:o}});await a(e,true)}}else{return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${n.map(t=>{return t.fragments.map((e,i)=>{let a="";if(t.fragments.length>1&&!e.url.includes(".m4s")){a=` - ${i+1}`}return`\n${e.url}\n referer=${t.referer}\n user-agent=${UserAgent}\n out=${t.title}${a}${this.extension(e.url,i)}\n split=${s}\n`.trim()}).join("\n")}).join("\n")}\n`.trim()}}}class r extends n{constructor(){super(...arguments);this.aid=unsafeWindow.aid}static async test(){if(document.URL.includes("//www.bilibili.com/video/av")){return await SpinQuery.select("#multi_page")!==null}return false}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=`https://api.bilibili.com/x/web-interface/view?aid=${this.aid}`;const e=await Ajax.getJson(t);if(e.code!==0){Toast.error(`获取视频选集列表失败, message=${e.message}`,"批量下载");return[]}const i=e.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return[]}this.itemList=i.map(t=>{return{title:`P${t.page} ${t.part}`,titleParameters:{n:t.page,ep:t.part},cid:t.cid,aid:this.aid}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const a=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/x/player/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const n=await Ajax.getJsonWithCredentials(a);const r=n.data||n.result||n;if(r.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${r.quality})`)}let o;if(r.durl){o=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const n=await i(a,typeof t==="string"?parseInt(t):t);o=s(n)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}class o extends n{constructor(t){super(t);this.mainVideo=new r(t);this.mainVideo.aid="78976165";this.spVideo=new r(t);this.spVideo.aid="78979124"}static async test(){return document.URL.includes("//www.bilibili.com/blackboard/bnj2020.html")}async getItemList(){return(await this.mainVideo.getItemList()).concat(await this.spVideo.getItemList())}async collectData(t){return(await this.mainVideo.collectData(t)).concat(await this.spVideo.collectData(t))}}class c extends n{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=document.querySelector("meta[property='og:url']");if(t===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return[]}const e=t.getAttribute("content").match(/play\/ss(\d+)/)[1];if(e===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return[]}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${e}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return[]}this.itemList=i.result.main_section.episodes.map((t,e)=>{const i=t.long_title?t.title:(e+1).toString();const s=t.long_title?t.long_title:t.title;return{aid:t.aid,cid:t.cid,title:`${i} - ${s}`,titleParameters:{n:i,ep:s}}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const a=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/pgc/player/web/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const n=await Ajax.getJsonWithCredentials(a);const r=n.data||n.result||n;if(r.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${r.quality})`)}let o;if(r.durl){o=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const n=await i(a,typeof t==="string"?parseInt(t):t);o=s(n)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}const l=[c,r,o];let u;class d{constructor(t){this.config=Object.assign({itemFilter:()=>true},t)}static async test(){for(const t of l){if(await t.test()===true){u=t;return true}}return false}getExtractor(){if(u===null){logError("[批量下载] 未找到合适的解析模块.");throw new Error(`[Batch Download] module not found.`)}const t=new u(this.config);return t}async getItemList(){const t=this.getExtractor();return await t.getItemList()}async getRawItems(t){const e=this.getExtractor();return await e.getRawItems(t.quality)}async collectData(t,e){const i=this.getExtractor();const s=await i.collectData(t.quality);e.dismiss();return s}async collectAria2(t,e,i=false){const s=this.getExtractor();const a=await s.collectAria2(t.quality,i);e.dismiss();return a}}return{export:{BatchExtractor:d}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/biliplus-redirect.min.js"] = (()=>{return(i,e)=>{const n=`hd.biliplus.com`;const c=["bilibili.com/video/av","bilibili.com/bangumi/play","bilibili.com/bangumi/media","space.bilibili.com"];return{widget:{condition:()=>{return c.some(i=>document.URL.includes(i))},content:`\n`,success:()=>{const i=document.querySelector("#biliplus-redirect");i.addEventListener("click",()=>{if(location.host==="space.bilibili.com"){location.assign(document.URL.replace("space.bilibili.com/",`${n}/space/`))}else if(document.URL.includes("/bangumi/")){const i=unsafeWindow.aid||document.querySelector(".av-link,.info-sec-av").innerText.replace(/[aAvV]/g,"");location.assign(`https://${n}/video/av${i}/`)}else{location.host=n}})}}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blackboard.min.js"] = (()=>{return(e,t)=>{const r=async()=>{if(dq(".international-home")){const e=await SpinQuery.condition(()=>unsafeWindow["__INITIAL_STATE__"],e=>e!==undefined);return dqa(".home-slide .item").slice(0,5).map((t,r)=>{const i=t.querySelector("a").getAttribute("data-loc-id");return{url:e.locsData[i][r].url,title:t.querySelector(".title").innerText.trim(),isAd:Boolean(t.querySelector(".gg-icon")),imageUrl:t.querySelector("img").getAttribute("src").replace(/@.+$/,"")}})}else{const e=dq(".chief-recommend-module .panel");const t=e.querySelector(".pic");const r=e.querySelectorAll(".title > a");return[...t.querySelectorAll("li")].map((e,t)=>{const i=r[t];return{url:i.getAttribute("href"),title:i.innerText.trim(),isAd:Boolean(i.querySelector(".gg-pic")),imageUrl:e.querySelector("img").getAttribute("src").replace(/@.+$/,"")}})}};return{export:{getBlackboards:r}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blackboard.vue.min.js"] = (()=>{return(a,r)=>{const i=``;r.applyStyleFromText(`.simple-home .blackboards{display:grid;grid-template-areas:"header header" "dots cards";grid-template-columns:8px 1fr;grid-template-rows:1fr 250px;row-gap:16px;column-gap:16px;align-self:start}.simple-home .blackboards .blackboard-cards{grid-area:cards;--blackboard-width:568.5px;--blackboard-height:250px;width:var(--blackboard-width);height:var(--blackboard-height);border-radius:16px;overflow:hidden}.simple-home .blackboards .blackboard-cards .blackboard-card{width:100%;height:100%;position:relative;display:block;transition:.3s cubic-bezier(.65,.05,.36,1)}.simple-home .blackboards .blackboard-cards .blackboard-card img{width:100%;height:100%;object-fit:fill;display:block}.simple-home .blackboards .blackboard-cards .blackboard-card .title{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);padding:4px 16px;color:#fff;background-color:#000a;font-size:14px;font-weight:700;border-radius:14px;white-space:nowrap;opacity:0}.simple-home .blackboards .blackboard-cards .blackboard-card:hover .title{opacity:1}`,"blackboard-style");return{export:Object.assign({template:i},{components:{Icon:()=>r.importAsync("icon.vue"),"dpi-img":()=>r.importAsync("dpi-img.vue")},data(){return{blackboards:[],interval:0}},destroyed(){if(this.interval){clearInterval(this.interval)}},computed:{cardsContainer(){return this.$el.querySelector(".blackboard-cards")}},async mounted(){const{getBlackboards:a}=await r.importAsync("blackboard");this.blackboards=(await a()).filter(a=>!a.isAd);const i=dq(".blackboards");this.interval=setInterval(()=>{if(!document.hasFocus()||i.matches(".blackboards:hover")){return}const a=parseInt(dq(`.blackboard-radio:checked`).getAttribute("data-index"));let r;if(a===this.blackboards.length-1){r=0}else{r=a+1}dq(`.blackboard-radio[data-index='${r}']`).checked=true},5e3)}})}}})(); @@ -1171,7 +1171,6 @@ onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/mi onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-important.min.css"] = `#disable-popup-modal .vip-exchange .months button.disabled,#vip-exchange-modal .vip-exchange .months button.disabled,.action-row .publish-btn.disabled,.action-row .publish-btn.publishing,.action-row .sch-pub-btn.disabled,.action-row .sch-pub-btn.publishing,.app-body .section-block,.bl-button--primary:disabled,.home-content .publish-btn.disabled,.link-footer,.live-skin-coloration-area .live-skin-separate-area,.live-skin-coloration-area .live-skin-separate-area-hover:hover,.payment-active,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-indicator,.tab-list .tab-item.active:before{background-color:#222!important}.app-body .section-block.with-bottom-radius,.app-body .section-block.with-radius,.bb-comment .no-login .comment-submit,.common .bb-comment .no-login .comment-submit,.container .pagination,.coupon-content-con .coupon-btn-disable,.customize-wrp .select,.f-list-hover:hover,.fjw-case-detail .ban-detail .content-box .video-model,.game-groom-m .num,.main-container .media-info .media-right .media-tool-bar .btn-follow.active,.main-container .pay-bar .vip .btn-pay.active,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled:hover,.pagination-container li.pagination,.status_box .status_btn.disabled,.wrapper .elec-btn.disabled{background-color:#444!important}.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap .bscroll-indicator{background-color:#555!important}.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap .bscroll-vertical-scrollbar.mousedown,.danmaku-wrap .player-auxiliary-area .player-auxiliary-danmaku-wrap:hover .bscroll-vertical-scrollbar,.m-recommend-item div.box,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-vertical-scrollbar,.player-auxiliary-area .player-auxiliary-bscrollbar .bscroll-vertical-scrollbar.mousedown,.player-auxiliary-area .player-auxiliary-bscrollbar:hover .bscroll-vertical-scrollbar{background-color:transparent!important}.live-skin-coloration-area .live-skin-normal-a-text,.live-skin-coloration-area .live-skin-normal-a-text:link,.live-skin-coloration-area .live-skin-normal-a-text:visited,.live-skin-coloration-area .live-skin-normal-text,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled,.open-dialog-masker .open-dialog-content .open-footer .btn-normal.disabled:hover,.status_box .status_btn.disabled,blockquote,blockquote *,blockquote .color-blue-01,blockquote .color-blue-02,blockquote .color-blue-03,blockquote .color-blue-04,blockquote .color-gray-01,blockquote .color-gray-02,blockquote .color-gray-03,blockquote .color-gray-04,blockquote .color-green-01,blockquote .color-green-02,blockquote .color-green-03,blockquote .color-green-04,blockquote .color-lblue-01,blockquote .color-lblue-02,blockquote .color-lblue-03,blockquote .color-lblue-04,blockquote .color-pink-01,blockquote .color-pink-02,blockquote .color-pink-03,blockquote .color-pink-04,blockquote .color-purple-01,blockquote .color-purple-02,blockquote .color-purple-03,blockquote .color-purple-04,blockquote .color-yellow-01,blockquote .color-yellow-02,blockquote .color-yellow-03,blockquote .color-yellow-04{color:#aaa!important}#app .sticky-bar .bar-content .message,.bb-comment .no-login .comment-submit,.bp-popup-panel .title-ctnr .popup-title,.commnent-screen-wrap .el-input__inner,.common .bb-comment .no-login .comment-submit,.coupon-content-con .coupon-btn-disable,.cover .disabled-cover,.customize-wrp .select,.el-input__inner,.home-page .sticky-bar .bar-content .message,.invitation-record-warp .invtable .inputdone,.live-room-app .guard-rank-cntr .tabs.isHundred .item.active,.live-room-app .guard-rank-cntr.hundred .live-skin-highlight-text,.live-room-app .guard-rank-cntr.hundred .live-skin-main-a-text,.live-room-app .guard-rank-cntr.hundred .page-box .live-skin-main-text,.live-room-app .guard-rank-cntr.thousand .live-skin-highlight-text,.live-room-app .guard-rank-cntr.thousand .live-skin-main-a-text,.live-room-app .guard-rank-cntr.thousand .page-box .live-skin-main-text,.live-skin-coloration-area .live-skin-highlight-text,.live-skin-coloration-area .live-skin-main-text,.manga-detail .episode-list-component .episode-list .list-data .list-item.last-read,.popup-content-ctnr .bl-button--ghost,.s-paging>ul>a.current,.s-paging>ul>span.current,.score-info .go-movie,.tag-list li.tag-item.on{color:#eee!important}#rank-list-vm .tabs.isHundred .item,.bb-comment .no-login .comment-submit,.commnent-screen-wrap .el-input__inner,.common .bb-comment .no-login .comment-submit,.el-input__inner,.enter-failure .password-input .pink-border,.link-footer,.live-skin-coloration-area .live-skin-highlight-border,.live-skin-coloration-area .live-skin-separate-border,.popup-content-ctnr .bl-button--ghost:hover,.score-info .go-movie,.select-box-v2-container .select-box-v2-controller-disabled,.song-info .info-wrap .type-list .item-list .type-item.active,.tabs-bar,.ui-input-textarea.focus,.user-setting-warp .el-radio-button__orig-radio:checked+.el-radio-button__inner{border-color:transparent!important}#app .sticky-bar .bar-content .message:hover,.app-layout .style-section .tag-block .tag-containers .style-tag.selected,.container .video-panel .play-all .bilifont,.detail-wrp .detail-content[data-v-00c9b213] p a span,.drop-list-v2-container .drop-list-v2-item-selected .drop-list-v2-item-cont p.item-cont-main,.edit-button:hover>.icon-font,.edit-button:hover>span .left-nav-item-childed:hover,.el-select-dropdown__item.selected,.home-page .sticky-bar .bar-content .message:hover,.im-popup .bp-popup-panel .title-ctnr .popup-title,.left-nav-wrapper .active,.left-nav-wrapper .active .left-nav-item-child,.left-nav-wrapper .advice-btn:hover,.left-nav-wrapper .left-nav-item.active,.left-nav-wrapper .left-nav-item.active i.active,.left-nav-wrapper .left-nav-list.on .left-nav-item,.left-nav-wrapper .left-nav-list.on .left-nav-item .icon,.live-room-app .guard-rank-cntr.hundred .live-skin-main-a-text:hover,.live-room-app .guard-rank-cntr.thousand .live-skin-main-a-text:hover,.live-skin-coloration-area .live-skin-highlight-text,.live-skin-coloration-area .live-skin-normal-a-text:hover,.live-skin-normal-a-text:active,.manga-detail .episode-list-component .episode-list .list-header .header-item.selected,.more-data a:hover,.other a a:hover,.r-con .members-info .up-card .info-name.is-vip:hover,.rank-item .content .info .detail a a:hover,.rank-item .content .more-data:hover,.rank-item .content .other a:hover,.room-info-down-row .icon-label.hover-text-blue:hover .label,.room-introduction .edit-button:hover>.icon-font,.room-introduction .edit-button:hover>span,.round-corner .van-popper-favorite .play-all .bilifont,.up-info .u-info .name .username.is-vip:hover,.voucher-ing .voucher-left-money,.voucher-ing .voucher-left-money:before,.voucher-no-used .voucher-left-money,.voucher-no-used .voucher-left-money:before{color:var(--theme-color)!important}.aside-ctnr .author-info .communicate-btn,.live-skin-coloration-area .room-info-ctnr .info-section .live-skin-highlight-border,.manga-detail .episode-list-component .episode-list .list-data .list-item.last-read,.page-list-box .page-input:focus,.page-list-box .page-input:hover,.popup-content-ctnr .bl-button--ghost,.season-timeline .season-group.today,.season-timeline .season-group.today .group-time::before,.tag-list li.tag-item.on,.tag-list li.tag-item:hover{border-color:var(--theme-color)!important}.bg-blue,.el-date-table td.current:not(.disabled),.el-date-table td.end-date,.el-date-table td.start-date,.face-g-list#my-g-list .face-g-block .my-mp-block .mp-info .btn-white,.face-g-tab li.current,.live-skin-coloration-area .live-skin-highlight-bg,.popup-content-ctnr .bl-button--ghost:hover,.popup-content-ctnr .bl-button--primary,.season-timeline .season-group.today.is-published .group-time::before,.security-list .child-list li a.bg-blue:hover,.song-info .info-wrap .type-list .item-list .type-item.active,.tag-list li.tag-item.on,.user-my-btn .el-button--primary,.user-setting-warp .el-radio-button__orig-radio:checked+.el-radio-button__inner{background-color:var(--theme-color)!important}.current .tab-btn-link,.el-date-table td.current:not(.disabled),.el-date-table td.end-date,.el-date-table td.start-date,.face-g-tab li.current,.popup-content-ctnr .bl-button--ghost:hover,.style-section .tag-block .tag-containers .style-tag:active{color:var(--foreground-color)!important}#bilibiliPlayer{box-shadow:0 4px 8px 0 #0004;background-color:#222!important}`; onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-navbar.min.css"] = `#link-navbar-vm>.link-navbar .nav-item:hover,.bili-header-m .nav-menu .nav-con .nav-item:hover,.link-navbar .nav-item:hover,.nav-header-wrapper .nav-header .nav-header-search-bar,.right-part>.shortcuts-ctnr .shortcut-item:hover,.search-bar-ctnr .search-bar,.shortcuts-ctnr .shortcut-item:hover,.uns_box ul.menu li:not(.b-post):hover,.z_top .z_top_nav ul li:hover{background-color:#222!important}#app>.link-navbar,#app>.nav-header-wrapper,#link-navbar-vm>.link-navbar,#navbar-vm>.link-navbar,.b-header-mask-wrp .b-header-mask,.bili-header-m .nav-menu .nav-mask,.bili-header-m .nav-menu.blur-black .nav-mask,.link-navbar{background-color:#444!important}.z_top .i-link:hover,.z_top .z_top_nav ul li.home:hover{background-color:transparent!important}#app>.nav-header-wrapper>.nav-header{background:0 0!important}#app>.link-navbar .main-ctnr .nav-logo,#app>.link-navbar .nav-item.selected .label,#app>.link-navbar .nav-item:hover .icon-font,#app>.nav-header-wrapper>.nav-header .nav-header-mainsite,#app>.nav-header-wrapper>.nav-header .order-center,#link-navbar-vm>.link-navbar .main-ctnr .nav-logo,#link-navbar-vm>.link-navbar .nav-item:hover,.bili-header-m .nav-menu .nav-con .nav-item .t,.link-navbar .main-ctnr .custom-link>a,.link-navbar .main-ctnr .nav-logo,.my-link-btn .label,.nav-header-wrapper .nav-header .nav-header-search-bar,.right-part>.shortcuts-ctnr,.right-part>.shortcuts-ctnr .shortcut-item:hover,.search-bar-ctnr .search-bar input,.shortcut-item .list-item span,.shortcuts-ctnr .shortcut-item,.uns_box li.u-i a.i-link,.z_top a,.z_top.b-header-blur .uns_box li.u-i a.i-link,.z_top.b-header-blur .z_top_nav li a.i-link{color:#eee!important}.search-bar-ctnr .search-bar .placeholder,.search-bar-ctnr .search-bar .search-btn,.search-bar-ctnr .search-bar input::placeholder{color:#878787!important}.uns_box li.u-i:hover a.i-link,.z_top .i-link:hover{color:var(--theme-color)}.link-navbar,.link-navbar-ctnr{box-shadow:none!important}.link-navbar .main-ctnr .nav-logo::before,.nav-header-wrapper .nav-header .order-icon{filter:brightness(0) invert(1)!important}.search-bar-ctnr .search-bar{border-color:transparent!important;box-shadow:0 2px 10px 1px #0002}`; onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-schedule.min.js"] = (()=>{return(e,t)=>{class i{constructor(...e){if(e.length===0){const e=new Date;this.hour=e.getHours();this.minute=e.getMinutes()}else if(e.length===1){const[t]=e;[this.hour,this.minute]=t.split(":").slice(0,2).map(e=>this.validatePart(e));this.normalize()}else if(v.length===2){[this.hour,this.minute]=e}}validatePart(e){const t=parseInt(e);if(!isNaN(t)&&t>=0&&t<=59){return t}else{return null}}normalize(){while(this.minute<0){this.minute+=60;this.hour-=1}while(this.minute>=60){this.minute-=60;this.hour+=1}while(this.hour<0){this.hour+=24}while(this.hour>=24){this.hour-=24}}lessThan(e){if(this.houre.hour||this.hour===e.hour&&this.minute>e.minute){return true}return false}equals(e){return this.hour===e.hour&&this.minute===e.minute}isInRange(e,t){if(e.equals(t)){return false}let i=this.greaterThan(e)&&this.lessThan(t);if(e.greaterThan(t)){i=this.greaterThan(e)||this.lessThan(t)}const s=i||this.equals(e);return s}static millisecondsBefore(e){const t=new i;const s=(new Date).getSeconds();const r=1e3*(t.hour*3600+t.minute*60+s);const n=1e3*(e.hour*3600+e.minute*60);let h=n-r;if(t.greaterThan(e)||t.equals(e)&&s!==0){h+=24*3600*1e3}return h}}function s(){if(e.darkSchedule){const t=new i(e.darkScheduleStart);const r=new i(e.darkScheduleEnd);const n=new i;const h=n.isInRange(t,r);if(e.useDarkStyle!==h){e.useDarkStyle=h}let u=0;if(h){u=i.millisecondsBefore(r)}else{u=i.millisecondsBefore(t)}if(u!==0){setTimeout(()=>s(),u)}}}fullyLoaded(()=>s());return{export:{ScheduleTime:i}}}})(); -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-slice-9.min.css"] = `.level-5{border-color:#74b0f6!important}.level-5 .label{background-color:#74b0f6!important}.level-5 .level{color:#74b0f6!important}.level-6{border-color:#74b0f6!important}.level-6 .label{background-color:#74b0f6!important}.level-6 .level{color:#74b0f6!important}.level-7{border-color:#74b0f6!important}.level-7 .label{background-color:#74b0f6!important}.level-7 .level{color:#74b0f6!important}.level-8{border-color:#74b0f6!important}.level-8 .label{background-color:#74b0f6!important}.level-8 .level{color:#74b0f6!important}.level-9{border-color:#ba94f2!important}.level-9 .label{background-color:#ba94f2!important}.level-9 .level{color:#ba94f2!important}.level-10{border-color:#ba94f2!important}.level-10 .label{background-color:#ba94f2!important}.level-10 .level{color:#ba94f2!important}.level-11{border-color:#ba94f2!important}.level-11 .label{background-color:#ba94f2!important}.level-11 .level{color:#ba94f2!important}.level-12{border-color:#ba94f2!important}.level-12 .label{background-color:#ba94f2!important}.level-12 .level{color:#ba94f2!important}.van-popover .level-bar .level-progress{background-color:#ffae00!important}#biliAppHomeSetting>div,.app-layout .manga-navbar,.container .play-all,.container .split-line .history-tip,.hover-panel-wrap,.hover-panel-wrapper,.lang-change .lang-intro,.manga-navbar .drop-list,.van-popover .container{background-color:#222!important}.container .level-intro,.container .play-all:hover,.international-header .bili-banner,.manga-navbar .drop-list .more-btn-container,.manga-navbar .search-bar .search-bar-bg,.manga-navbar .user-panel .drop-list .logout-btn-container,.message-list-content .notify-wrapper .notify-text,.recommend-area-ctnr .rec-area-item,.skeleton .skeleton-content,.skeleton .skeleton-focusbtn,.skeleton .skeleton-head,.skeleton .skeleton-time,.skeleton .skeleton-user-name,.van-popover .btn-box .btn.reg-btn:hover,.van-popover .upload-item:hover,.yzly-content-ctnr .btn{background-color:#333!important}.wide-members .avatar-list i{background-color:#444!important}.wide-members .avatar-list i:hover{color:var(--theme-color)!important}.grid-area-ctnr .hab-ctnr,.grid-area-ctnr .news-ctnr,.grid-area-ctnr .rank-ctnr{background-color:#444!important}.confirmorder-container{background-color:#444!important;box-shadow:none!important}.confirmorder-container h1{color:#eee!important}.confirmorder-container h1 span{color:#aaa!important}.confirmorder-container .card .card-bottom .delete{filter:brightness(0) invert(.7)!important}.confirmorder-container .card .card-bottom .delete:hover{filter:var(--pink-image-filter)!important}.confirmorder-container .card.active{border-color:var(--theme-color)!important}.confirmorder-container .card.active::before{filter:var(--pink-image-filter)!important}.confirmorder-container .discounts{border-color:#555!important}.confirmorder-container .discounts .discounts-list p{border-color:transparent!important;background-color:#111!important;color:#666!important}.confirmorder-container .total-container div span{color:#eee!important}.confirmorder-container .total-container div span.total{color:var(--theme-color)!important}.confirmorder-container .confirm-bottom .confirm-paybtn.active{filter:var(--pink-image-filter)!important}.confirmorder-container .confirm-bottom .service-term{color:#aaa!important}.confirmorder-container .confirm-bottom .service-term .check-icon,.confirmorder-container .confirm-bottom .service-term .check-icon.checked{filter:var(--pink-image-filter)!important}.confirmorder-container .confirm-bottom .service-term .term-content{color:var(--theme-color)!important}.eticket-container .top-box .header{border-color:transparent!important;background-color:#333!important}.eticket-container .top-box .header .header-back{filter:brightness(0) invert(1)!important}.eticket-container .top-box .header h1{color:#eee!important}.eticket-container .top-box .header::after{border-color:transparent!important}.eticket-container .eticket-info-container{background-color:#444!important;box-shadow:none!important}.eticket-container .eticket-info-right div{color:#eee!important}.eticket-container .eticket-info-right p{color:#aaa!important}.eticket-container .qrcode-container{background-color:#444!important}.eticket-container .qrcode-container .qrcode-tip{background-color:transparent!important;color:#eee!important}.eticket-container .qrcode-container .qrcode-container-item .qrcode-hide-tip{color:#eee!important}.eticket-container .qrcode-container .ticket-code,.eticket-container .qrcode-container .ticket-code .color-gray-light,.eticket-container .qrcode-container .ticket-type,.eticket-container .qrcode-container .ticket-type .color-gray-light{color:#aaa!important}.eticket-container .qrcode-container .ticket-code span,.eticket-container .qrcode-container .ticket-type span{color:#eee!important}.eticket-container .qrcode-container .addr-map{background-color:#383838!important}.eticket-container .qrcode-container .addr-map h1{color:#eee!important}.eticket-container .qrcode-container .addr-map p{color:#aaa!important}.eticket-container .qrcode-container .addr-map .map-icon{filter:var(--pink-image-filter)!important}.orderdetail-container .orderdetail-wrapper{color:#aaa!important}.orderdetail-container .orderdetail-wrapper .wrapper-ticket{color:#eee!important}.orderdetail-container .orderdetail-wrapper .wrapper-ticket .tip{color:var(--theme-color)!important}.orderdetail-container .total-container div span{color:#eee!important}.orderdetail-container .total-container div span.total{color:var(--theme-color)!important}#biliAppHomeSetting input,#biliAppHomeSetting select,.highlight-areas-ctnr .highlight-area-item,.s_tag .btn-add,.section-block .flip-view,.share-content .video-card,.van-popover .btn-box .btn.reg-btn,.van-popover .level-bar,.van-popper-history .view-all{background-color:#444!important}.love-card .header::after{background-color:#555!important}.s_tag .btn-add span{background-color:#eee!important}.coin-dialog-mask .coin-operated .mc .mc-box{background-color:#fff!important}.card .risk-tip-content{background-color:#624f27!important}.live-room-app .aside-area .chat-history-panel-top,.manga-navbar .nav-list,.news-content,.news-ctnr .more-link,.news-ctnr .more-link:hover,.text-info-ctnr{background-color:transparent!important}.manga-navbar .search-bar .placeholder-list .placeholder-item{color:#888!important}#biliAppHomeSetting label~span,.bb-comment .comment-list .list-item .blacklist-font-color,.center-box .line-3 .action-button,.comment-bilibili-fold .comment-list .list-item .blacklist-font-color,.container .split-line .history-tip,.follow-dialog-wrap .special-tip,.highlight-areas-ctnr .area-desc,.list-item .publish-time,.manga-navbar .data-list .list-container .empty-hinter,.manga-navbar .data-list .list-container .failure-hinter,.manga-navbar .data-list .list-container .loading-hinter,.rank-item .room-title,.share-content .video-card .up-info .name,.share-content .video-card .up-info .tip,.video-container .text-area .view-danmaku{color:#aaa!important}#biliAppHomeSetting a,#biliAppHomeSetting input,#biliAppHomeSetting select,.area-detail-ctnr .area-title,.banner-ctnr .banner-title,.bilibili-player-video-danmaku-setting-left-block-word,.center-box .line-1 .like-item,.center-box .line-1 .name-field,.center-box .line-1 .name-field a,.item-ctnr .item-title,.love-card .header,.manga-navbar .drop-list .more-btn-container .more-button,.manga-navbar .search-bar .search-input,.manga-navbar .user-info-panel .info-item,.manga-navbar .user-info-panel .user-name,.manga-navbar .user-panel .drop-list .logout-btn-container .logout-button,.manga-navbar-favourite-manga .action-button,.manga-navbar-history-list .action-button,.more-ctnr,.news-content,.news-ctnr .more-link,.rank-item .room-anchor,.recommend-area-ctnr .area-name,.recommend-area-ctnr .title-text,.tab-ctnr .tab-item,.van-popover .btn-box .btn.reg-btn,.van-popover .coins .info a,.van-popper-history .view-all,.van-popper-login .title,.van-popper-upload .upload-item .bilifont,.yzly-ctnr .yzly-title{color:#eee!important}.international-header .mini-upload:hover,.van-popover .vip:hover{color:#fff!important}.highlight-areas-ctnr .highlight-area-item:nth-child(1) .area-name{color:#a0a7dc!important}.highlight-areas-ctnr .highlight-area-item:nth-child(2) .area-name{color:#c7aade!important}.highlight-areas-ctnr .highlight-area-item:nth-child(3) .area-name{color:#deb29c!important}.highlight-areas-ctnr .highlight-area-item:nth-child(4) .area-name{color:#afb7e8!important}.highlight-areas-ctnr .highlight-area-item:nth-child(5) .area-name{color:#dcbf94!important}.highlight-areas-ctnr .highlight-area-item:nth-child(6) .area-name{color:#95c5a8!important}.live-room-app .aside-area .chat-control-panel{background-image:none!important}.bili-header-m .mini-type .nav-search #nav_searchform,.international-header .mini-type .nav-search #nav_searchform,.van-popover .mini-type .nav-search #nav_searchform{background-color:#333!important;border-color:transparent!important}.bili-header-m .mini-type .nav-search #nav_searchform .nav-search-keyword,.international-header .mini-type .nav-search #nav_searchform .nav-search-keyword,.van-popover .mini-type .nav-search #nav_searchform .nav-search-keyword{color:#aaa!important}.bili-header-m .mini-type .nav-search #nav_searchform .nav-search-keyword:focus,.international-header .mini-type .nav-search #nav_searchform .nav-search-keyword:focus,.van-popover .mini-type .nav-search #nav_searchform .nav-search-keyword:focus{color:#eee!important}.bili-header-m .mini-type .nav-search .nav-search-btn,.international-header .mini-type .nav-search .nav-search-btn,.van-popover .mini-type .nav-search .nav-search-btn{background-color:#444!important}.bili-header-m .mini-type .nav-search .nav-search-btn .nav-search-submit,.international-header .mini-type .nav-search .nav-search-btn .nav-search-submit,.van-popover .mini-type .nav-search .nav-search-btn .nav-search-submit{color:#eee!important}.bili-header-m .mini-type .nav-search .nav-search-btn:hover .nav-search-submit,.international-header .mini-type .nav-search .nav-search-btn:hover .nav-search-submit,.van-popover .mini-type .nav-search .nav-search-btn:hover .nav-search-submit{color:var(--theme-color)!important}.bilibili-search-history,.bilibili-search-suggest{background-color:#333!important;border-color:transparent!important}.module-game .rule .detail .content{color:#000!important}#biliAppHomeSetting input,#biliAppHomeSetting select{border-color:transparent!important;border-radius:4px}.at-popup,.chat-popups-section .draw-full-ctnr,.hover-panel-wrap,.hover-panel-wrapper,.recommend-area-ctnr .rec-area-item,.van-popover .btn-box .btn.reg-btn,.van-popper-history .view-all{border-color:transparent!important}.wide-members .avatar{border-color:#333!important}.van-popper-login .container{border-color:#444!important}.container .level-intro .svg-icon,.manga-navbar .search-bar .confirm-btn .search-icon{filter:brightness(0) invert(1)!important}.side-bar-btn .size-bar-text{filter:brightness(.6) invert(1) hue-rotate(180deg)!important;text-shadow:0 0 0}.confirmorder-container .confirm-bottom .confirm-paybtn.active,.whole-detail-info-wrapper .product-buy-wrapper .unsale-btn{box-shadow:0 3px 4px 0 #6e4752!important}.app-layout .manga-navbar{box-shadow:rgba(0,0,0,.2) 0 4px 8px 0!important}.highlight-areas-ctnr .highlight-area-item.hover{box-shadow:0 7px 11px 0 rgba(0,0,0,.18)!important}.hover-panel-wrap{box-shadow:0 13px 20px 0 rgba(0,0,0,.22)!important}.van-popper .popper__arrow{display:none!important}.nav-tab-bar .tab-item[data-tab-id="1"]:not(.on)::before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAQAAAACj/OVAAAD00lEQVRYw+2YbWhVdRzHb2aWsILo4UVC5Pd3drfdIZNW1sRod7eW1gSxLIxo5aWgB1GHbkNaDILoAaJYtKQNRDHQTcp6McQoISusXuSLZTXXICVoa3Nmtu0+nE8vdtzd1T3c7dzzzu/31b2X+//w+//+5/y+54RCVzSLKq+zqD1t9driPB4uCxjm3G+f6ILI2E7bu+ElgcB0u3UJIXcd23mT19jMqnHsiF6vXJjv2iqtX5S5HzDAZHWzFbnCjjq35BFnK21UxBlmKv3ESlfoRKQgf5vZL17F9QBDfMkRkpOQf1ON0Of5qm+/iHu4f2jEQYhDWVWeptwVzmN5wIVXiFL3LwB6qEAYMRou6SXsR1jvhqv919cq3gIgyVpEDT9P2UmXGMKiPnFcpT/FLwC0Ie5hiOn0DsJafAKLbhMrvAUfRbQxvX5A2Dd+O3i3WOcteC/ixxmAZxDq89vBKvGUt+Au6iYujak0jNCg3ztMRDxEbvoNYd1+gTfILXHHcgJ2IazL/2XxnTiSE3AbwqnzD9whanPA9RNxRdFS38BlN2pQfDUrsB5hB/Jz894qyt0/ZsQdQNhoofICbF6gz0SUnmlxnYRdYc/kbR5GCnRcLHP3kboMNkAjQjjNeY5O2itElBa6GfNG1VGaiLhCI1ab/0wTEzYRnpYTyUSpzqKiAEKU7RJvJz5idQZ1VsetySkNJo0utAHxKwCfIuzrisXBJtJqUe0dk+cQeiHgCKw28Z53VIpRym4NFFd+jQbFKQAOIuyLgOuzNWKNt6GbEPZ80MDd4n1vyFrCkuGbA8VFFums6Ju4Z+pwwPUV1ogab0NrEc6mvCPCZc5L1qp2zz1iOTFixHBQWnvVrnZrceJ5mQ6RAmuVO/kZcHrbmL3iO2vbx6KUnYl9dNBBB7tpyHKL9/0etiSUFtbkD7dalLl9Oea0b91CLGGOH+AesYonc/ZdiKU75/2cZMdy691lvTzo2Dwyto2JZTzAxjlU+ASVlCBsoDg8t+qW2DnR9N8Ic9cQ8YSw3sii2UbOtU6FnnXiTtyJO4dEufvycD3zcR02IuzD8bWsquj6qWq6T7/Pr2M5eEgbL+2YY+dFdbqBRuqTm89FU9FkllNV6ap0VTrmXnTm0/gvWf9IRVPRVHVy2/kdifrU+qSQW/hg9kDtFNtnfPjyo1aETk7CVSzWvw6DBKcKRGFJ5risFesJUg0INWZFvpZAgYcRdiwDPCO6AwVeoBilim8a39BScSen6A3Uj4wKZ0MoFAqFiu/Idd759sMXD82LOqGTAft7543mBVfeoAeg/wFlFeKImou+wAAAAABJRU5ErkJggg==)!important}.aside-item.active .item-border,.aside-item:hover .item-border{border-color:var(--theme-color)!important}.aside-item::after{border-right-color:var(--theme-color)!important}#bilibili_pbp,#bilibili_pbp_canvas{filter:var(--pink-image-filter)!important}#biliAppHomeSetting button,.interact-dialog .btn,.rookie-guide .close-button,.van-popover .btn-box .btn,.van-popper-history .view-all:hover,.video-control-show .bilibili-player-video-interactive-list .check:hover .big-round{background-color:var(--theme-color)!important}#biliAppHomeSetting h2,.bilibili-search-suggest .suggest-item .suggest_high_light,.more-ctnr:hover,.news-ctnr .more-link:hover,.tab-ctnr .tab-item.activated,.tab-ctnr .tab-item:hover,.van-popover .coins .info a:hover,.van-popper-upload .upload-item:hover .bilifont,.video-desc .subtitle a{color:var(--theme-color)!important}#biliAppHomeSetting button,.interact-dialog .btn,.rookie-guide .close-button,.van-popover .btn-box .btn,.van-popper-history .view-all:hover{color:var(--foreground-color)!important}`; onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-styles.min.js"] = (()=>{return(e,t)=>{const l=()=>{SpinQuery.select(".custom-scrollbar").then(e=>e&&e.classList.remove("custom-scrollbar"))};const r=()=>{document.body.classList.add("dark");l();t.applyStyle("scrollbarStyle");t.applyImportantStyle("darkStyleNavBar");t.applyStyle("darkStyle");t.applyImportantStyle("darkStyleImportant")};r();return{reload:r,unload:()=>{document.body.classList.remove("dark");t.removeStyle("scrollbarStyle");t.removeStyle("darkStyleNavBar");t.removeStyle("darkStyle");t.removeStyle("darkStyleImportant")}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/debounce.min.js"] = (()=>{return(n,l)=>{function u(n,l,u){var e,t,i,r,f;if(null==l)l=100;function o(){var a=Date.now()-r;if(a=0){e=setTimeout(o,l-a)}else{e=null;if(!u){f=n.apply(i,t);i=t=null}}}var a=function(){i=this;t=arguments;r=Date.now();var a=u&&!e;if(!e)e=setTimeout(o,l);if(a){f=n.apply(i,t);i=t=null}return f};a.clear=function(){if(e){clearTimeout(e);e=null}};a.flush=function(){if(e){f=n.apply(i,t);i=t=null;clearTimeout(e);e=null}};return a}return{export:{debounce:u}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-danmaku-settings.min.css"] = `.bilibili-player-video-danmaku-setting-wrap{display:none!important}`; @@ -1184,9 +1183,9 @@ onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/mi onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-audio.min.js"] = (()=>{return(e,t)=>{class n{constructor(){this.sid=null;this.progress=null}async getDownloadUrl(){const e=`https://www.bilibili.com/audio/music-service-c/web/url?sid=${this.sid}&privilege=2&quality=2`;const t=await Ajax.getJsonWithCredentials(e);if(t.code===0){return t.data.cdns.shift()}else{logError("获取下载链接失败, 请确保当前账号有下载权限.","下载音频",1e4);return null}}async download(){const e=await this.getDownloadUrl();return new Promise((t,n)=>{const s=new XMLHttpRequest;s.open("GET",e);s.responseType="blob";s.addEventListener("load",()=>t(s.response));s.addEventListener("error",()=>n(s.status));s.addEventListener("progress",e=>this.progress&&this.progress(100*e.loaded/e.total));s.send()})}}const s="下载音频";return{export:n,widget:{content:`\n\n\n${s}\n\n`,condition:()=>document.URL.includes("bilibili.com/audio"),success:async()=>{await SpinQuery.select(()=>document.querySelector("#app"));const e=document.querySelector("#download-audio");const t=e.querySelector("span");const o=new n;o.progress=(e=>{t.innerHTML=`${Math.round(e)}%`});const i=document.querySelector("#download-audio-link");e.addEventListener("click",async e=>{if(o.sid===null||e.target===i){return}const n=await o.download();t.innerHTML=s;const r=i.getAttribute("href");if(r){URL.revokeObjectURL(r)}i.setAttribute("href",URL.createObjectURL(n));const d=(()=>{const e=document.querySelector(".song-title");if(e){return e.getAttribute("title")}else{return"神秘音频"}})();i.setAttribute("download",d+".m4a");i.click()});Observer.childList("#app",()=>{const t=document.URL.match(/bilibili\.com\/audio\/au([\d]+)/);if(t&&t[1]){e.disabled=false;o.sid=t[1]}else{e.disabled=true}})}}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:n}=e.import("title");const{DanmakuInfo:i}=e.import("video-info");const{DanmakuConverter:a}=e.import("danmaku-converter");async function o(t){const e=n();let i={title:e};try{await loadDanmakuSettingsPanel();const t=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));return e*4/188};const e=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[e];return n};i.font=dq(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;i.alpha=parseFloat(dq(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));i.duration=(()=>{const e=18-3*t(".bilibili-player-setting-speedplus .bui-thumb");return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();i.blockTypes=(()=>{let t=[];const e={".bilibili-player-block-filter-type[ftype=scroll]":[1,2,3],".bilibili-player-block-filter-type[ftype=top]":[5],".bilibili-player-block-filter-type[ftype=bottom]":[4],".bilibili-player-block-filter-type[ftype=color]":["color"]};for(const[n,i]of Object.entries(e)){if(dq(n).classList.contains("disabled")){t=t.concat(i)}}return t.concat(7,8)})();const n=1.4-.2*t(".bilibili-player-setting-fontsize .bui-thumb");i.resolution={x:1920*n,y:1080*n};i.bottomMarginPercent=[.75,.5,.25,0,0][e(".bilibili-player-setting-area .bui-thumb")];if(i.bottomMarginPercent===0&&dq(".bilibili-player-video-danmaku-setting-left-preventshade input").checked){i.bottomMarginPercent=.15}i.bold=dq(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){i={font:"微软雅黑",alpha:.6,duration:t=>{switch(t.type){case 4:case 5:return 4;default:return 6}},blockTypes:[7,8],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const o=new a(i);const l=o.convertToAssDocument(t);return l.generateAss()}async function l(t){const e=n();const a=new i((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){return new Blob([await o(a.rawXML)],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const s=dq("#danmaku-link");const c=s.getAttribute("href");if(c){URL.revokeObjectURL(c)}s.setAttribute("download",`${e}.${t?"ass":"xml"}`);s.setAttribute("href",r);s.click()}return{export:{downloadDanmaku:l,convertToAss:o},widget:{content:`\n\n\n下载弹幕\n\n`,condition:async()=>{let t=await SpinQuery.select(()=>(unsafeWindow||window).cid);return Boolean(t)},success:()=>{const t=dq("#danmaku-link");const e=dq("#download-danmaku");e.addEventListener("click",n=>{if(n.target!==t){try{e.disabled=true;l(n.shiftKey)}catch(t){logError(t)}finally{e.disabled=false}}})}}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-subtitle.min.js"] = (()=>{return(t,e)=>{let i;const o=(t,e)=>{const o=document.createElement("a");const n=URL.createObjectURL(new Blob([t]));if(i){URL.revokeObjectURL(i)}i=n;o.setAttribute("href",n);o.setAttribute("download",escapeFilename(e));document.body.appendChild(o);o.click();o.remove()};return{widget:{content:`\n`,condition:videoCondition,success:()=>{const t=dq("#download-subtitle");t.addEventListener("click",async i=>{try{t.disabled=true;const{aid:n,cid:s}=unsafeWindow;if(!n||!s){logError("未找到视频AID和CID");return}const{VideoInfo:l}=await e.importAsync("video-info");const{getFriendlyTitle:c}=await e.importAsync("title");const r=new l(n);r.cid=parseInt(s);await r.fetchInfo();const a=r.subtitles;if(a.length===0){Toast.info("当前视频没有字幕.","下载字幕",3e3);return}const d=await loadSubtitleSettingsPanel();if(!d){logError("未找到字幕设置");return}const u=d.querySelector(".bilibili-player-video-subtitle-setting-lan .bui-select-result").innerHTML;const b=a.find(t=>t.language===u)||a[0];const f=await Ajax.getJson(b.url);const p=f.body;const y=c(true);if(i.shiftKey){const{SubtitleConverter:t,SubtitleSize:i,SubtitleLocation:n}=await e.importAsync("subtitle-converter");const s=d.querySelector(".bilibili-player-video-subtitle-setting-fontsize .bui-thumb");const l=parseFloat(s.style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const c={214:i.VeryLarge,163.5:i.Large,107:i.Medium,50.5:i.Small,0:i.VerySmall};const r=c[l];const a=d.querySelector(".bilibili-player-video-subtitle-setting-color .bui-select-result span:first-child");const u=a.getAttribute("style").match(/background:[ ]*(.+);/)[1];const b=d.querySelector(".bilibili-player-video-subtitle-setting-opacity .bui-bar");const f=parseFloat(b.style.transform.replace(/scaleX\(([\d\.]+)/,"$1"));const g=dq(".subtitle-position");const m={bc:n.BottomCenter,bl:n.BottomLeft,br:n.BottomRight,tc:n.TopCenter,tl:n.TopLeft,tr:n.TopRight};const h=Object.entries(m).filter(([t])=>{return g.classList.contains(`subtitle-position-${t}`)}).map(([,t])=>t).shift();const w=dq("video");const v={title:y,height:w.videoHeight,width:w.videoWidth,color:u,location:h,opacity:f,size:r};const S=new t(v);const L=await S.convertToAss(p);o(L,y+".ass")}else{o(JSON.stringify(p),y+".json")}}catch(t){logError(t)}finally{t.disabled=false}})}}}}})(); -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.css"] = `.download-video{--download-video-background:white;--download-video-foreground:black;position:absolute;top:96px;left:50%;transform:translateX(-50%) scale(.95);background:var(--download-video-background);color:var(--download-video-foreground);box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;z-index:10001;pointer-events:none;opacity:0;padding:16px;width:300px;display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;box-sizing:content-box;line-height:normal}.download-video,.download-video *{transition:.2s ease-out;-webkit-tap-highlight-color:transparent!important}.download-video.opened{pointer-events:initial;opacity:1;transform:translateX(-50%) scale(1)}body.dark .download-video{--download-video-background:#222;--download-video-foreground:#eee}.round-corner .download-video,.round-corner .download-video .episode-list .v-checkbox,.round-corner .download-video .rpc-settings{border-radius:var(--large-corner-radius)}.round-corner .download-video .button,.round-corner .download-video .cover,.round-corner .download-video .direct-download .progress .background,.round-corner .download-video .direct-download .progress .foreground,.round-corner .download-video .rpc-settings input[type=text],.round-corner .download-video .size-warning-tip,.round-corner .download-video .title,.round-corner .download-video button{border-radius:var(--corner-radius)}.download-video .cover{min-height:100px;max-height:120px;object-fit:contain}.download-video h1{font-size:13pt;font-weight:700;color:var(--download-video-foreground)}.download-video h2{font-size:11pt;font-weight:700;color:var(--download-video-foreground)}.download-video .header{display:flex;justify-content:space-between;align-items:center}.download-video .header .grow{flex-grow:1}.download-video .header .mdi-download{font-size:16pt;color:var(--download-video-foreground);margin-right:8px}.download-video .header .mdi-close{font-size:16pt;color:var(--download-video-foreground);cursor:pointer}.download-video .header .mdi-close:hover{color:var(--theme-color)}.download-video .info{display:flex;flex-direction:column;align-items:center;margin-top:12px}.download-video .title{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-top:12px}.download-video .title .bold{width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.download-video .title .size{font-size:10pt;color:var(--download-video-foreground);align-self:center;display:flex;align-items:center;height:24px}.download-video .bold{color:var(--download-video-foreground);font-weight:700;font-size:12pt}.download-video .option-item{display:flex;justify-content:space-between;align-items:center;padding-top:12px;font-size:10pt}.download-video .tabs{display:flex;padding:12px 0;font-size:10pt}.download-video .tabs .tab{cursor:pointer;position:relative;opacity:.5}.download-video .tabs .tab.active{font-weight:700;opacity:1}.download-video .tabs .tab:not(:last-child){margin-right:16px}.download-video .tabs .tab::after{content:"";position:absolute;border-radius:2px;background-color:var(--theme-color);height:3px;width:80%;left:10%;bottom:-8px;transition:.2s ease-out;transform:scaleX(0)}.download-video .tabs .tab.active::after{transform:scaleX(1)}.download-video .separator{height:1px;background:#8884;width:100%;margin:12px 0;flex-shrink:0}.download-video .direct-download{display:flex;flex-direction:column;align-items:start;justify-content:space-between}.download-video .button,.download-video button{border:none;outline:0!important;padding:6px 16px;font-size:10pt;cursor:pointer;background:#8884;color:var(--download-video-foreground)}.download-video .button:hover,.download-video button:hover{background:#8886}.download-video .primary{background:var(--theme-color);color:var(--foreground-color);align-self:center}.download-video .primary:hover{background:var(--theme-color-90)}.download-video .busy .button,.download-video .busy .primary,.download-video .busy button,.download-video button:disabled{background-color:#0001;color:#8884;cursor:not-allowed}.download-video .busy .button,.download-video .busy button{cursor:wait!important}.download-video .direct-download .progress{align-self:stretch;display:flex;align-items:center;margin-top:8px}.download-video .direct-download .progress .background{flex-grow:1;height:4px;background:#8884;margin-right:4px;position:relative}.download-video .direct-download .progress .background .foreground{position:absolute;top:0;left:0;height:4px;background:linear-gradient(to right,var(--theme-color),var(--theme-color-60))}.download-video .direct-download .progress .percent{width:50px;text-align:right;font-size:12px}.download-video .actions{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8px -4px 0}.download-video .actions>*{margin:4px;flex-grow:1;flex-basis:calc(50% - 16px);display:flex;justify-content:center;align-items:center;white-space:nowrap}.download-video i.mdi-alert-circle{font-size:14pt;color:#ff9800}.download-video .size-warning{position:relative;padding:0 8px}.download-video .size-warning-tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--download-video-background);color:var(--download-video-foreground);border:1px dashed var(--theme-color);z-index:2;font-size:10pt;width:200px;padding:8px;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;pointer-events:none;opacity:0}.download-video .size-warning:hover .size-warning-tip{opacity:1}.download-video .episode-list .v-checkbox{padding:4px 8px;margin:4px 0;position:relative;background-color:transparent}.download-video .episode-list .v-checkbox.checked{background-color:#8882}.download-video .episode-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.download-video .episode-list{overflow:auto;max-height:320px}.download-video button.list-tool{padding:4px;line-height:1;font-size:12pt;margin:0 4px}.download-video .episode-header h2{flex-grow:1}.download-video .selected-count{width:64px;text-align:right}.download-video .aria2-rpc .mdi{margin-left:8px;font-size:14pt;line-height:1}.download-video .aria2-rpc{position:relative}.download-video .rpc-settings{position:absolute;display:flex;flex-direction:column;align-items:stretch;color:var(--download-video-foreground);background:#fff;bottom:120%;left:50%;cursor:initial;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;transform-origin:bottom;transform:translateX(-50%) scale(.9);opacity:0;pointer-events:none;padding:8px;z-index:3;transition:.3s cubic-bezier(.18,.89,.32,1.28);width:120%}body.dark .download-video .rpc-settings{background:#282828}.download-video .rpc-settings>*{margin:8px}.download-video .rpc-settings.show{opacity:1;transform:translateX(-50%) scale(1);pointer-events:initial}.download-video .rpc-settings input[type=text]{background:0 0;color:var(--download-video-foreground);border:1px solid #8884;padding:4px;margin-left:8px}.download-video .rpc-settings input[type=text]:focus{border-color:var(--theme-color)}.download-video .rpc-settings .operations{display:flex;align-items:center;justify-content:space-evenly}.download-video .final-dir{white-space:normal;word-break:break-all}.download-video .rpc-settings-item{display:flex;align-items:center;justify-content:space-between;white-space:nowrap}.download-video .rpc-settings-item input[type=text]{flex-grow:1;margin-left:24px}.download-video button.cancel-download,.download-video button.start-download{margin-top:8px}.download-video .direct-download-header{align-self:stretch;display:flex;justify-content:space-between;align-items:center}body.dark .download-video .direct-download .progress .foreground{background:linear-gradient(to right,var(--theme-color-70),var(--theme-color))}`; +onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.css"] = `.download-video{--download-video-background:white;--download-video-foreground:black;position:absolute;top:96px;left:50%;transform:translateX(-50%) scale(.95);background:var(--download-video-background);color:var(--download-video-foreground);box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;z-index:10001;pointer-events:none;opacity:0;padding:16px;width:300px;display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;box-sizing:content-box;line-height:normal}.download-video,.download-video *{transition:.2s ease-out;-webkit-tap-highlight-color:transparent!important}.download-video.opened{pointer-events:initial;opacity:1;transform:translateX(-50%) scale(1)}body.dark .download-video{--download-video-background:#222;--download-video-foreground:#eee}.round-corner .download-video,.round-corner .download-video .episode-list .v-checkbox,.round-corner .download-video .rpc-settings{border-radius:var(--large-corner-radius)}.round-corner .download-video .button,.round-corner .download-video .cover,.round-corner .download-video .direct-download .progress .background,.round-corner .download-video .direct-download .progress .foreground,.round-corner .download-video .rpc-settings input[type=text],.round-corner .download-video .size-warning-tip,.round-corner .download-video .title,.round-corner .download-video button{border-radius:var(--corner-radius)}.download-video .cover{min-height:100px;max-height:120px;object-fit:contain}.download-video h1{font-size:13pt;font-weight:700;color:var(--download-video-foreground)}.download-video h2{font-size:11pt;font-weight:700;color:var(--download-video-foreground)}.download-video .header{display:flex;justify-content:space-between;align-items:center}.download-video .header .grow{flex-grow:1}.download-video .header .mdi-download{font-size:16pt;color:var(--download-video-foreground);margin-right:8px}.download-video .header .mdi-close{font-size:16pt;color:var(--download-video-foreground);cursor:pointer}.download-video .header .mdi-close:hover{color:var(--theme-color)}.download-video .info{display:flex;flex-direction:column;align-items:center;margin-top:12px}.download-video .title{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-top:12px}.download-video .title .bold{width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.download-video .title .size{font-size:10pt;color:var(--download-video-foreground);align-self:center;display:flex;align-items:center;height:24px}.download-video .bold{color:var(--download-video-foreground);font-weight:700;font-size:12pt}.download-video .option-item{display:flex;justify-content:space-between;align-items:center;padding-top:12px;font-size:10pt}.download-video .tabs{display:flex;padding:12px 0;font-size:10pt}.download-video .tabs .tab{cursor:pointer;position:relative;opacity:.5}.download-video .tabs .tab.active{font-weight:700;opacity:1}.download-video .tabs .tab:not(:last-child){margin-right:16px}.download-video .tabs .tab::after{content:"";position:absolute;border-radius:2px;background-color:var(--theme-color);height:3px;width:80%;left:10%;bottom:-8px;transition:.2s ease-out;transform:scaleX(0)}.download-video .tabs .tab.active::after{transform:scaleX(1)}.download-video .separator{height:1px;background:#8884;width:100%;margin:12px 0;flex-shrink:0}.download-video .direct-download{display:flex;flex-direction:column;align-items:start;justify-content:space-between}.download-video .button,.download-video button{border:none;outline:0!important;padding:6px 16px;font-size:10pt;cursor:pointer;background:#8884;color:var(--download-video-foreground)}.download-video .button:hover,.download-video button:hover{background:#8886}.download-video .primary{background:var(--theme-color);color:var(--foreground-color);align-self:center}.download-video .primary:hover{background:var(--theme-color-90)}.download-video .busy .button,.download-video .busy .primary,.download-video .busy button,.download-video button:disabled{background-color:#0001;color:#8884;cursor:not-allowed}.download-video .busy .button,.download-video .busy button{cursor:wait!important}.download-video .direct-download .progress{align-self:stretch;display:flex;align-items:center;margin-top:8px}.download-video .direct-download .progress .background{flex-grow:1;height:4px;background:#8884;margin-right:4px;position:relative}.download-video .direct-download .progress .background .foreground{position:absolute;top:0;left:0;height:4px;background:linear-gradient(to right,var(--theme-color),var(--theme-color-60))}.download-video .direct-download .progress .percent{width:50px;text-align:right;font-size:12px}.download-video .actions{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8px -4px 0}.download-video .actions>*{margin:4px;flex-grow:1;flex-basis:calc(50% - 16px);display:flex;justify-content:center;align-items:center;white-space:nowrap}.download-video i.mdi-alert-circle{font-size:14pt;color:#ff9800}.download-video .size-warning{position:relative;padding:0 8px}.download-video .size-warning-tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--download-video-background);color:var(--download-video-foreground);border:1px dashed var(--theme-color);z-index:2;font-size:10pt;width:200px;padding:8px;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;pointer-events:none;opacity:0}.download-video .size-warning:hover .size-warning-tip{opacity:1}.download-video .episode-list .v-checkbox{padding:4px 8px;margin:4px 0;position:relative;background-color:transparent}.download-video .episode-list .v-checkbox.checked{background-color:#8882}.download-video .episode-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.download-video .episode-list{overflow:auto;max-height:320px}.download-video button.list-tool{padding:4px;line-height:1;font-size:12pt;margin:0 4px}.download-video .episode-header h2{flex-grow:1}.download-video .selected-count{width:64px;font-size:12px;text-align:right}.download-video .aria2-rpc .mdi{margin-left:8px;font-size:14pt;line-height:1}.download-video .aria2-rpc{position:relative}.download-video .rpc-settings{position:absolute;display:flex;flex-direction:column;align-items:stretch;color:var(--download-video-foreground);background:#fff;bottom:120%;left:50%;cursor:initial;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;transform-origin:bottom;transform:translateX(-50%) scale(.9);opacity:0;pointer-events:none;padding:8px;z-index:3;transition:.3s cubic-bezier(.18,.89,.32,1.28);width:120%}body.dark .download-video .rpc-settings{background:#282828}.download-video .rpc-settings>*{margin:8px}.download-video .rpc-settings.show{opacity:1;transform:translateX(-50%) scale(1);pointer-events:initial}.download-video .rpc-settings input[type=text]{background:0 0;color:var(--download-video-foreground);border:1px solid #8884;padding:4px;margin-left:8px}.download-video .rpc-settings input[type=text]:focus{border-color:var(--theme-color)}.download-video .rpc-settings .operations{display:flex;align-items:center;justify-content:space-evenly}.download-video .final-dir{white-space:normal;word-break:break-all}.download-video .rpc-settings-item{display:flex;align-items:center;justify-content:space-between;white-space:nowrap}.download-video .rpc-settings-item input[type=text]{flex-grow:1;margin-left:24px}.download-video button.cancel-download,.download-video button.start-download{margin-top:8px}.download-video .direct-download-header{align-self:stretch;display:flex;justify-content:space-between;align-items:center}body.dark .download-video .direct-download .progress .foreground{background:linear-gradient(to right,var(--theme-color-70),var(--theme-color))}`; onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.html"] = `

下载视频

单个视频
批量导出
警告: 过大的视频大小会在直接下载时占用大量内存, 并可能导致浏览器标签页崩溃. 请考虑降低清晰度或使用导出选项.
预计大小: {{displaySize}}
格式
清晰度
弹幕
首选编码

直接下载

{{speed}}
{{progressPercent}}%

选集

{{selectedEpisodeCount}}/{{episodeList.length}}

导出

{{showRpcSettings ? '取消' : 'aria2 RPC'}}

aria2 RPC

配置

主机
端口
密钥
限速
默认路径
路径
最终路径: {{rpcSettings.baseDir + rpcSettings.dir}}
方法
开始下载
{{saveRpcSettingsText}}
`; -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:s}=e.import("title");const{VideoInfo:a,DanmakuInfo:i}=e.import("video-info");const{DownloadVideoPackage:n}=e.import("download-video-package");class o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fnver=0&fnval=16`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json`}}}return e.bind(this)}async getDashUrl(t){return(await this.getApiGenerator(true))(c.aid,c.cid,t)}async getUrl(t){return(await this.getApiGenerator())(c.aid,c.cid,t)}}class r extends o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fourk=1&fnval=16`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&otype=json&fourk=1&fnval=16`}}else{if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=&otype=json`}}}return e.bind(this)}}class l extends o{constructor(t){super();this.ep=t}async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}`}}}return e.bind(this)}}const c={entity:new o,aid:"",cid:""};let d=[];let p=null;class h{constructor(t,e,s){this.quality=t;this.internalName=e;this.displayName=s}async downloadInfo(t=false){const e=new u(this);await e.fetchVideoInfo(t);return e}static parseFormats(t){const e=t.accept_quality;const s=t.accept_format.split(",");const a=t.accept_description;const i=e.map((t,e)=>{return new h(t,s[e],a[e])});return i}static async getAvailableDashFormats(){const t=await c.entity.getDashUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}return h.parseFormats(e.data||e.result||e)}static async getAvailableFormats(){const t=await c.entity.getUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}const s=e.data||e.result||e;return h.parseFormats(s)}}class u{constructor(t,e){this.fragmentSplitFactor=6*2;this.workingXhr=null;this.progressMap=new Map;this.format=t;this.fragments=e||[];this.videoSpeed=new f(this)}get danmakuOption(){return t.downloadVideoDefaultDanmaku}get isDash(){return this.fragments.some(t=>t.url.includes(".m4s"))}get totalSize(){return this.fragments.map(t=>t.size).reduce((t,e)=>t+e)}async fetchVideoInfo(t=false){if(!t){const t=await c.entity.getUrl(this.format.quality);const e=await Ajax.getTextWithCredentials(t);const s=JSON.parse(e.replace(/http:/g,"https:"));const a=s.data||s.result||s;if(a.quality!==this.format.quality){throw new Error("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const i=a.durl;this.fragments=i.map(t=>{return{length:t.length,size:t.size,url:t.url,backupUrls:t.backup_url}})}else{const{dashToFragments:t,getDashInfo:s}=await e.importAsync("video-dash");const a=await s(await c.entity.getDashUrl(this.format.quality),this.format.quality);this.fragments=t(a)}return this.fragments}updateProgress(){const t=this.progressMap?[...this.progressMap.values()].reduce((t,e)=>t+e,0)/this.totalSize:0;if(t>1||t<0){console.error(`[下载视频] 进度异常: ${t}`,this.progressMap.values())}this.progress&&this.progress(t)}cancelDownload(){this.videoSpeed.stopMeasure();if(this.workingXhr!==null){this.workingXhr.forEach(t=>t.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(t){const e=[];const s=this.isDash?4*1024*1024:16*1024*1024;let a;if(t.size<=s*6){a=t.size/this.fragmentSplitFactor}else{a=s}let i=0;const n=t=>[...this.progressMap.keys()].indexOf(t)+1;while(i{const a=new XMLHttpRequest;a.open("GET",t.url);a.responseType="arraybuffer";a.withCredentials=false;a.addEventListener("progress",t=>{console.log(`[下载视频] 视频片段${n(a)}下载进度: ${t.loaded}/${r} bytes loaded, ${o}`);this.progressMap.set(a,t.loaded);this.updateProgress()});a.addEventListener("load",()=>{if((""+a.status)[0]==="2"){console.log(`[下载视频] 视频片段${n(a)}下载完成`);e(a.response)}else{s(`视频片段${n(a)}请求失败, response = ${a.status}`)}});a.addEventListener("abort",()=>s("canceled"));a.addEventListener("error",()=>{console.error(`[下载视频] 视频片段${n(a)}下载失败: ${o}`);this.progressMap.set(a,0);this.updateProgress();a.open("GET",t.url);a.setRequestHeader("Range",o);a.send()});a.setRequestHeader("Range",o);this.progressMap.set(a,0);a.send();this.workingXhr.push(a)}));i=Math.round(i+a)+1}return Promise.all(e)}async copyUrl(){const t=this.fragments.map(t=>t.url).reduce((t,e)=>t+"\r\n"+e);GM.setClipboard(t,"text")}async showUrl(){const t=this.fragments.map(t=>`\n${t.url}\n`).reduce((t,e)=>t+"\r\n"+e);Toast.success(t+`复制全部`,"显示链接");const e=await SpinQuery.select("#copy-link");e.addEventListener("click",async()=>{await this.copyUrl()})}async exportData(t=false){const e=JSON.stringify([{fragments:this.fragments,title:s(),totalSize:this.fragments.map(t=>t.size).reduce((t,e)=>t+e),referer:document.URL.replace(window.location.search,"")}]);if(t){GM.setClipboard(e,"text")}else{const t=new Blob([e],{type:"text/json"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.json`,t);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}async exportAria2(a=false){if(a){const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,a);await i.emit();const o=t.aria2RpcOption;const r=this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}const i=[];if(o.secretKey!==""){i.push(`token:${o.secretKey}`)}i.push([t.url]);i.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${s()}${a}${this.extension(t)}`,split:this.fragmentSplitFactor,dir:o.baseDir+o.dir||undefined,"max-download-limit":o.maxDownloadLimit||undefined});const n=encodeURIComponent(`${s()}${a}`);return{params:i,id:n}});const{sendRpc:l}=await e.importAsync("aria2-rpc");await l(r)}else{const t=`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}return`\n${t.url}\n referer=${document.URL.replace(window.location.search,"")}\n user-agent=${UserAgent}\n out=${s()}${a}${this.extension(t)}\n split=${this.fragmentSplitFactor}\n`.trim()}).join("\n")}\n`.trim();const e=new Blob([t],{type:"text/plain"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.txt`,e);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}extension(t){const e=t||this.fragments[0];const s=[".flv",".mp4"].find(t=>e.url.includes(t));if(s){return s}else if(e.url.includes(".m4s")){return this.fragments.indexOf(e)===0?".mp4":".m4a"}else{console.warn("No extension detected.");return".flv"}}async downloadDanmaku(){if(this.danmakuOption!=="无"){const t=new i(c.cid);await t.fetchInfo();if(this.danmakuOption==="XML"){return t.rawXML}else{const{convertToAss:s}=await e.importAsync("download-danmaku");return s(t.rawXML)}}else{return null}}async download(){this.workingXhr=[];this.progressMap=new Map;this.updateProgress();const t=[];this.videoSpeed.startMeasure();for(const e of this.fragments){const s=await this.downloadFragment(e);t.push(s)}if(t.length<1){throw new Error("下载失败.")}const e=s();const a=new n;t.forEach((s,i)=>{let n;const o=this.fragments[i];if(t.length>1&&!this.isDash){n=`${e} - ${i+1}${this.extension(o)}`}else{n=`${e}${this.extension(o)}`}a.add(n,new Blob(Array.isArray(s)?s:[s]))});const i=await this.downloadDanmaku();a.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,i);await a.emit(e+".zip");this.progress&&this.progress(0);this.videoSpeed.stopMeasure()}}class f{constructor(t){this.lastProgress=0;this.measureInterval=1e3;this.workingDownloader=t}startMeasure(){this.intervalTimer=setInterval(()=>{const t=this.workingDownloader.progressMap?[...this.workingDownloader.progressMap.values()].reduce((t,e)=>t+e,0):0;const e=t-this.lastProgress;if(this.speedUpdate!==undefined){this.speedUpdate(formatFileSize(e)+"/s")}this.lastProgress=t},this.measureInterval)}stopMeasure(){clearInterval(this.intervalTimer)}}async function w(){const t=await SpinQuery.select(()=>(unsafeWindow||window).aid);const e=await SpinQuery.select(()=>(unsafeWindow||window).cid);if(!(t&&e)){return false}c.aid=t;c.cid=e;if(document.URL.includes("bangumi")){c.entity=new r}else if(document.URL.includes("cheese")){const t=document.URL.match(/cheese\/play\/ep([\d]+)/);c.entity=new l(t[1])}else{c.entity=new o}try{d=await h.getAvailableFormats()}catch(t){return false}return true}const m=e=>{const s=t.downloadVideoQuality;const a=e.find(t=>t.quality===s);if(a){return a}const i=e.filter(t=>t.quality{const t=dq(".download-video");t.classList.toggle("opened");window.scroll(0,0);dq(".gui-settings-mask").click()});document.body.insertAdjacentHTML("beforeend",e.import("downloadVideoHtml"));y()}async function y(){let o;const r=new Vue({el:".download-video",components:{VDropdown:()=>e.importAsync("v-dropdown.vue"),VCheckbox:()=>e.importAsync("v-checkbox.vue"),RpcProfiles:()=>e.importAsync("aria2-rpc-profiles.vue")},data:{downloadSingle:true,coverUrl:EmptyImageUrl,aid:c.aid,cid:c.cid,dashModel:{value:t.downloadVideoFormat,items:["flv","dash"]},qualityModel:{value:p.displayName,items:d.map(t=>t.displayName)},danmakuModel:{value:t.downloadVideoDefaultDanmaku,items:["无","XML","ASS"]},codecModel:{value:t.downloadVideoDashCodec,items:["AVC/H.264","HEVC/H.265"]},progressPercent:0,size:"获取大小中",blobUrl:"",episodeList:[],downloading:false,speed:"",batch:false,rpcSettings:t.aria2RpcOption,showRpcSettings:false,busy:false,saveRpcSettingsText:"保存配置",enableDash:t.enableDashDownload,lastDirectDownloadLink:""},computed:{displaySize(){if(typeof this.size==="string"){return this.size}return formatFileSize(this.size)},sizeWarning(){if(typeof this.size==="string"){return false}return this.size>1073741824},selectedEpisodeCount(){return this.episodeList.filter(t=>t.checked).length},dash(){return this.dashModel.value==="dash"}},methods:{close(){this.$el.classList.remove("opened")},danmakuOptionChange(){t.downloadVideoDefaultDanmaku=this.danmakuModel.value},async codecChange(){t.downloadVideoDashCodec=this.codecModel.value;await this.formatChange()},async dashChange(){console.log("dash change");const e=t.downloadVideoFormat=this.dashModel.value;let s=[];if(e==="flv"){s=await h.getAvailableFormats()}else{s=await h.getAvailableDashFormats()}d=s;p=m(d);this.qualityModel.items=s.map(t=>t.displayName);this.qualityModel.value=this.qualityModel.items[d.indexOf(p)];await this.formatChange()},async formatChange(e=false){console.log("format change");const s=this.getFormat();if(e){t.downloadVideoQuality=s.quality}try{this.size="获取大小中";const t=await s.downloadInfo(this.dash);this.size=t.totalSize}catch(t){this.size="获取大小失败";throw t}},getFormat(){const t=d.find(t=>t.displayName===this.qualityModel.value);if(!t){console.error(`No format found. model value = ${this.qualityModel.value}`);return null}return t},async exportData(t){if(this.busy===true){return}try{this.busy=true;if(!this.downloadSingle){await this.exportBatchData(t);return}const a=this.getFormat();const i=await a.downloadInfo(this.dash);switch(t){case"copyLink":await i.copyUrl();Toast.success("已复制链接到剪贴板.","下载视频",3e3);break;case"showLink":await i.showUrl();break;case"aria2":await i.exportAria2(false);break;case"aria2RPC":await i.exportAria2(true);break;case"copyVLD":await i.exportData(true);Toast.success("已复制VLD数据到剪贴板.","下载视频",3e3);break;case"exportVLD":await i.exportData(false);break;case"ffmpegFragments":if(i.fragments.length<2){Toast.info("当前视频没有分段.","分段列表",3e3)}else{const{getFragmentsList:t}=await e.importAsync("ffmpeg-support");const a=new n;a.add("ffmpeg-files.txt",t(i.fragments.length,s(),i.fragments.map(t=>i.extension(t))));await a.emit()}break;default:break}}catch(t){logError(t)}finally{this.busy=false}},async exportBatchData(t){const a=this.episodeList;if(a.every(t=>t.checked===false)){Toast.info("请至少选择1集或以上的数量!","批量导出",3e3);return}const o=t=>{const e=a.find(e=>e.cid===t.cid);if(e===undefined){return false}return e.checked};const r=this.getFormat();if(this.danmakuModel.value!=="无"){const t=Toast.info("下载弹幕中...","批量导出");const s=new n;try{if(this.danmakuModel.value==="XML"){for(const t of a.filter(o)){const e=new i(t.cid);await e.fetchInfo();s.add(t.title+".xml",e.rawXML)}}else{const{convertToAss:t}=await e.importAsync("download-danmaku");for(const e of a.filter(o)){const a=new i(e.cid);await a.fetchInfo();s.add(e.title+".ass",await t(a.rawXML))}}await s.emit(this.cid+".danmakus.zip")}catch(t){logError(`弹幕下载失败`);throw t}finally{t.dismiss()}}const l=Toast.info("获取链接中...","批量导出");const d=this.batchExtractor;d.config.itemFilter=o;d.config.api=await c.entity.getApiGenerator(this.dash);let p;try{switch(t){case"aria2":p=await d.collectAria2(r,l,false);await n.single(s(false)+".txt",new Blob([p],{type:"text/plain"}),{ffmpeg:this.ffmpegOption});return;case"aria2RPC":await d.collectAria2(r,l,true);Toast.success(`成功发送了批量请求.`,"aria2 RPC",3e3);return;case"copyVLD":GM.setClipboard(await d.collectData(r,l),{mimetype:"text/plain"});Toast.success("已复制批量vld数据到剪贴板.","批量导出",3e3);return;case"exportVLD":p=await d.collectData(r,l);await n.single(s(false)+".json",new Blob([p],{type:"text/json"}),{ffmpeg:this.ffmpegOption});return;case"ffmpegFragments":{const t=await d.getRawItems(r);const a=new u(r,t[0].fragments);const{getBatchFragmentsList:i}=await e.importAsync("ffmpeg-support");const o=i(t,this.dash||a.extension());if(!o){Toast.info("所有选择的分P都没有分段.","分段列表",3e3)}else{const t=new n;for(const[e,s]of o.entries()){t.add(e,s)}await t.emit(escapeFilename(`${s(false)}.zip`))}}break;case"ffmpegEpisodes":{const t=await d.getRawItems(r);const s=new u(r,t[0].fragments);const{getBatchEpisodesList:a}=await e.importAsync("ffmpeg-support");const i=a(t,this.dash||s.extension());const o=new n;o.add("ffmpeg-files.txt",i);await o.emit()}break;default:return}}catch(t){logError(t)}finally{l.dismiss()}},async checkBatch(){const t=["/www.bilibili.com/bangumi","/www.bilibili.com/video/av"];if(!t.some(t=>document.URL.includes(t))){this.batch=false;this.episodeList=[];return}const{BatchExtractor:s}=await e.importAsync("batch-download");if(await s.test()!==true){this.batch=false;this.episodeList=[];return}const a=this.batchExtractor=new s;this.batch=true;this.episodeList=(await a.getItemList()).map((t,e)=>{return{aid:t.aid,cid:t.cid,title:t.title,index:e,checked:true}})},cancelDownload(){if(o){o.cancelDownload()}},async startDownload(){const t=this.getFormat();try{this.downloading=true;const e=await t.downloadInfo(this.dash);e.videoSpeed.speedUpdate=(t=>this.speed=t);e.progress=(t=>{this.progressPercent=Math.trunc(t*100)});o=e;await e.download();this.lastDirectDownloadLink=n.lastPackageUrl}catch(t){if(t!=="canceled"){logError(t)}this.progressPercent=0}finally{this.downloading=false;this.speed=""}},selectAllEpisodes(){this.episodeList.forEach(t=>t.checked=true)},unselectAllEpisodes(){this.episodeList.forEach(t=>t.checked=false)},inverseAllEpisodes(){this.episodeList.forEach(t=>t.checked=!t.checked)},toggleRpcSettings(){this.showRpcSettings=!this.showRpcSettings},saveRpcSettings(){if(this.rpcSettings.host===""){this.rpcSettings.host="127.0.0.1"}if(this.rpcSettings.port===""){this.rpcSettings.port="6800"}t.aria2RpcOption=this.rpcSettings;const e=t.aria2RpcOptionProfiles.find(e=>e.name===t.aria2RpcOptionSelectedProfile);if(e){Object.assign(e,this.rpcSettings);t.aria2RpcOptionProfiles=t.aria2RpcOptionProfiles}this.saveRpcSettingsText="已保存";setTimeout(()=>this.saveRpcSettingsText="保存配置",2e3)},updateProfile(e){t.aria2RpcOption=this.rpcSettings=_.omit(e,"name")}},async mounted(){}});Observer.videoChange(async()=>{r.close();r.batch=false;r.downloadSingle=true;const t=dq("#download-video");const e=await w();t.style.display=e?"flex":"none";if(!e){return}r.aid=c.aid;r.cid=c.cid;try{const t=new a(c.aid);await t.fetchInfo();r.coverUrl=t.coverUrl.replace("http:","https:")}catch(t){r.coverUrl=EmptyImageUrl}r.dashChange();await r.checkBatch()})}return{widget:{content:`\n`,condition:w,success:g}}}})(); +onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:s}=e.import("title");const{VideoInfo:a,DanmakuInfo:i}=e.import("video-info");const{DownloadVideoPackage:n}=e.import("download-video-package");class o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fnver=0&fnval=16`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json`}}}return e.bind(this)}async getDashUrl(t){return(await this.getApiGenerator(true))(c.aid,c.cid,t)}async getUrl(t){return(await this.getApiGenerator())(c.aid,c.cid,t)}}class r extends o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fourk=1&fnval=16`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&otype=json&fourk=1&fnval=16`}}else{if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=&otype=json`}}}return e.bind(this)}}class l extends o{constructor(t){super();this.ep=t}async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}`}}}return e.bind(this)}}const c={entity:new o,aid:"",cid:""};let d=[];let p=null;class h{constructor(t,e,s){this.quality=t;this.internalName=e;this.displayName=s}async downloadInfo(t=false){const e=new u(this);await e.fetchVideoInfo(t);return e}static parseFormats(t){const e=t.accept_quality;const s=t.accept_format.split(",");const a=t.accept_description;const i=e.map((t,e)=>{return new h(t,s[e],a[e])});return i}static async getAvailableDashFormats(){const t=await c.entity.getDashUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}return h.parseFormats(e.data||e.result||e)}static async getAvailableFormats(){const t=await c.entity.getUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}const s=e.data||e.result||e;return h.parseFormats(s)}}class u{constructor(t,e){this.fragmentSplitFactor=6*2;this.workingXhr=null;this.progressMap=new Map;this.format=t;this.fragments=e||[];this.videoSpeed=new f(this)}get danmakuOption(){return t.downloadVideoDefaultDanmaku}get isDash(){return this.fragments.some(t=>t.url.includes(".m4s"))}get totalSize(){return this.fragments.map(t=>t.size).reduce((t,e)=>t+e)}async fetchVideoInfo(t=false){if(!t){const t=await c.entity.getUrl(this.format.quality);const e=await Ajax.getTextWithCredentials(t);const s=JSON.parse(e.replace(/http:/g,"https:"));const a=s.data||s.result||s;if(a.quality!==this.format.quality){throw new Error("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const i=a.durl;this.fragments=i.map(t=>{return{length:t.length,size:t.size,url:t.url,backupUrls:t.backup_url}})}else{const{dashToFragments:t,getDashInfo:s}=await e.importAsync("video-dash");const a=await s(await c.entity.getDashUrl(this.format.quality),this.format.quality);this.fragments=t(a)}return this.fragments}updateProgress(){const t=this.progressMap?[...this.progressMap.values()].reduce((t,e)=>t+e,0)/this.totalSize:0;if(t>1||t<0){console.error(`[下载视频] 进度异常: ${t}`,this.progressMap.values())}this.progress&&this.progress(t)}cancelDownload(){this.videoSpeed.stopMeasure();if(this.workingXhr!==null){this.workingXhr.forEach(t=>t.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(t){const e=[];const s=this.isDash?4*1024*1024:16*1024*1024;let a;if(t.size<=s*6){a=t.size/this.fragmentSplitFactor}else{a=s}let i=0;const n=t=>[...this.progressMap.keys()].indexOf(t)+1;while(i{const a=new XMLHttpRequest;a.open("GET",t.url);a.responseType="arraybuffer";a.withCredentials=false;a.addEventListener("progress",t=>{console.log(`[下载视频] 视频片段${n(a)}下载进度: ${t.loaded}/${r} bytes loaded, ${o}`);this.progressMap.set(a,t.loaded);this.updateProgress()});a.addEventListener("load",()=>{if((""+a.status)[0]==="2"){console.log(`[下载视频] 视频片段${n(a)}下载完成`);e(a.response)}else{s(`视频片段${n(a)}请求失败, response = ${a.status}`)}});a.addEventListener("abort",()=>s("canceled"));a.addEventListener("error",()=>{console.error(`[下载视频] 视频片段${n(a)}下载失败: ${o}`);this.progressMap.set(a,0);this.updateProgress();a.open("GET",t.url);a.setRequestHeader("Range",o);a.send()});a.setRequestHeader("Range",o);this.progressMap.set(a,0);a.send();this.workingXhr.push(a)}));i=Math.round(i+a)+1}return Promise.all(e)}async copyUrl(){const t=this.fragments.map(t=>t.url).reduce((t,e)=>t+"\r\n"+e);GM.setClipboard(t,"text")}async showUrl(){const t=this.fragments.map(t=>`\n${t.url}\n`).reduce((t,e)=>t+"\r\n"+e);Toast.success(t+`复制全部`,"显示链接");const e=await SpinQuery.select("#copy-link");e.addEventListener("click",async()=>{await this.copyUrl()})}async exportData(t=false){const e=JSON.stringify([{fragments:this.fragments,title:s(),totalSize:this.fragments.map(t=>t.size).reduce((t,e)=>t+e),referer:document.URL.replace(window.location.search,"")}]);if(t){GM.setClipboard(e,"text")}else{const t=new Blob([e],{type:"text/json"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.json`,t);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}async exportAria2(a=false){if(a){const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,a);await i.emit();const o=t.aria2RpcOption;const r=this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}const i=[];if(o.secretKey!==""){i.push(`token:${o.secretKey}`)}i.push([t.url]);i.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${s()}${a}${this.extension(t)}`,split:this.fragmentSplitFactor,dir:o.baseDir+o.dir||undefined,"max-download-limit":o.maxDownloadLimit||undefined});const n=encodeURIComponent(`${s()}${a}`);return{params:i,id:n}});const{sendRpc:l}=await e.importAsync("aria2-rpc");await l(r)}else{const t=`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}return`\n${t.url}\n referer=${document.URL.replace(window.location.search,"")}\n user-agent=${UserAgent}\n out=${s()}${a}${this.extension(t)}\n split=${this.fragmentSplitFactor}\n`.trim()}).join("\n")}\n`.trim();const e=new Blob([t],{type:"text/plain"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.txt`,e);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}extension(t){const e=t||this.fragments[0];const s=[".flv",".mp4"].find(t=>e.url.includes(t));if(s){return s}else if(e.url.includes(".m4s")){return this.fragments.indexOf(e)===0?".mp4":".m4a"}else{console.warn("No extension detected.");return".flv"}}async downloadDanmaku(){if(this.danmakuOption!=="无"){const t=new i(c.cid);await t.fetchInfo();if(this.danmakuOption==="XML"){return t.rawXML}else{const{convertToAss:s}=await e.importAsync("download-danmaku");return s(t.rawXML)}}else{return null}}async download(){this.workingXhr=[];this.progressMap=new Map;this.updateProgress();const t=[];this.videoSpeed.startMeasure();for(const e of this.fragments){const s=await this.downloadFragment(e);t.push(s)}if(t.length<1){throw new Error("下载失败.")}const e=s();const a=new n;t.forEach((s,i)=>{let n;const o=this.fragments[i];if(t.length>1&&!this.isDash){n=`${e} - ${i+1}${this.extension(o)}`}else{n=`${e}${this.extension(o)}`}a.add(n,new Blob(Array.isArray(s)?s:[s]))});const i=await this.downloadDanmaku();a.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,i);await a.emit(e+".zip");this.progress&&this.progress(0);this.videoSpeed.stopMeasure()}}class f{constructor(t){this.lastProgress=0;this.measureInterval=1e3;this.workingDownloader=t}startMeasure(){this.intervalTimer=setInterval(()=>{const t=this.workingDownloader.progressMap?[...this.workingDownloader.progressMap.values()].reduce((t,e)=>t+e,0):0;const e=t-this.lastProgress;if(this.speedUpdate!==undefined){this.speedUpdate(formatFileSize(e)+"/s")}this.lastProgress=t},this.measureInterval)}stopMeasure(){clearInterval(this.intervalTimer)}}async function w(){const t=await SpinQuery.select(()=>(unsafeWindow||window).aid);const e=await SpinQuery.select(()=>(unsafeWindow||window).cid);if(!(t&&e)){return false}c.aid=t;c.cid=e;if(document.URL.includes("bangumi")){c.entity=new r}else if(document.URL.includes("cheese")){const t=document.URL.match(/cheese\/play\/ep([\d]+)/);c.entity=new l(t[1])}else{c.entity=new o}try{d=await h.getAvailableFormats()}catch(t){return false}return true}const m=e=>{const s=t.downloadVideoQuality;const a=e.find(t=>t.quality===s);if(a){return a}const i=e.filter(t=>t.quality{const t=dq(".download-video");t.classList.toggle("opened");window.scroll(0,0);dq(".gui-settings-mask").click()});document.body.insertAdjacentHTML("beforeend",e.import("downloadVideoHtml"));y()}async function y(){let o;const r=new Vue({el:".download-video",components:{VDropdown:()=>e.importAsync("v-dropdown.vue"),VCheckbox:()=>e.importAsync("v-checkbox.vue"),RpcProfiles:()=>e.importAsync("aria2-rpc-profiles.vue")},data:{downloadSingle:true,coverUrl:EmptyImageUrl,aid:c.aid,cid:c.cid,dashModel:{value:t.downloadVideoFormat,items:["flv","dash"]},qualityModel:{value:p.displayName,items:d.map(t=>t.displayName)},danmakuModel:{value:t.downloadVideoDefaultDanmaku,items:["无","XML","ASS"]},codecModel:{value:t.downloadVideoDashCodec,items:["AVC/H.264","HEVC/H.265"]},progressPercent:0,size:"获取大小中",blobUrl:"",episodeList:[],downloading:false,speed:"",batch:false,rpcSettings:t.aria2RpcOption,showRpcSettings:false,busy:false,saveRpcSettingsText:"保存配置",enableDash:t.enableDashDownload,lastDirectDownloadLink:""},computed:{displaySize(){if(typeof this.size==="string"){return this.size}return formatFileSize(this.size)},sizeWarning(){if(typeof this.size==="string"){return false}return this.size>1073741824},selectedEpisodeCount(){return this.episodeList.filter(t=>t.checked).length},dash(){return this.dashModel.value==="dash"}},methods:{close(){this.$el.classList.remove("opened")},danmakuOptionChange(){t.downloadVideoDefaultDanmaku=this.danmakuModel.value},async codecChange(){t.downloadVideoDashCodec=this.codecModel.value;await this.formatChange()},async dashChange(){console.log("dash change");const e=t.downloadVideoFormat=this.dashModel.value;let s=[];if(e==="flv"){s=await h.getAvailableFormats()}else{s=await h.getAvailableDashFormats()}d=s;p=m(d);this.qualityModel.items=s.map(t=>t.displayName);this.qualityModel.value=this.qualityModel.items[d.indexOf(p)];await this.formatChange()},async formatChange(e=false){console.log("format change");const s=this.getFormat();if(e){t.downloadVideoQuality=s.quality}try{this.size="获取大小中";const t=await s.downloadInfo(this.dash);this.size=t.totalSize}catch(t){this.size="获取大小失败";throw t}},getFormat(){const t=d.find(t=>t.displayName===this.qualityModel.value);if(!t){console.error(`No format found. model value = ${this.qualityModel.value}`);return null}return t},async exportData(t){if(this.busy===true){return}try{this.busy=true;if(!this.downloadSingle){await this.exportBatchData(t);return}const a=this.getFormat();const i=await a.downloadInfo(this.dash);switch(t){case"copyLink":await i.copyUrl();Toast.success("已复制链接到剪贴板.","下载视频",3e3);break;case"showLink":await i.showUrl();break;case"aria2":await i.exportAria2(false);break;case"aria2RPC":await i.exportAria2(true);break;case"copyVLD":await i.exportData(true);Toast.success("已复制VLD数据到剪贴板.","下载视频",3e3);break;case"exportVLD":await i.exportData(false);break;case"ffmpegFragments":if(i.fragments.length<2){Toast.info("当前视频没有分段.","分段列表",3e3)}else{const{getFragmentsList:t}=await e.importAsync("ffmpeg-support");const a=new n;a.add("ffmpeg-files.txt",t(i.fragments.length,s(),i.fragments.map(t=>i.extension(t))));await a.emit()}break;default:break}}catch(t){logError(t)}finally{this.busy=false}},async exportBatchData(t){const a=this.episodeList;if(a.every(t=>t.checked===false)){Toast.info("请至少选择1集或以上的数量!","批量导出",3e3);return}const o=t=>{const e=a.find(e=>e.cid===t.cid);if(e===undefined){return false}return e.checked};const r=this.getFormat();if(this.danmakuModel.value!=="无"){const t=Toast.info("下载弹幕中...","批量导出");const s=new n;try{if(this.danmakuModel.value==="XML"){for(const t of a.filter(o)){const e=new i(t.cid);await e.fetchInfo();s.add(t.title+".xml",e.rawXML)}}else{const{convertToAss:t}=await e.importAsync("download-danmaku");for(const e of a.filter(o)){const a=new i(e.cid);await a.fetchInfo();s.add(e.title+".ass",await t(a.rawXML))}}await s.emit(this.cid+".danmakus.zip")}catch(t){logError(`弹幕下载失败`);throw t}finally{t.dismiss()}}const l=Toast.info("获取链接中...","批量导出");const d=this.batchExtractor;d.config.itemFilter=o;d.config.api=await c.entity.getApiGenerator(this.dash);let p;try{switch(t){case"aria2":p=await d.collectAria2(r,l,false);await n.single(s(false)+".txt",new Blob([p],{type:"text/plain"}),{ffmpeg:this.ffmpegOption});return;case"aria2RPC":await d.collectAria2(r,l,true);Toast.success(`成功发送了批量请求.`,"aria2 RPC",3e3);return;case"copyVLD":GM.setClipboard(await d.collectData(r,l),{mimetype:"text/plain"});Toast.success("已复制批量vld数据到剪贴板.","批量导出",3e3);return;case"exportVLD":p=await d.collectData(r,l);await n.single(s(false)+".json",new Blob([p],{type:"text/json"}),{ffmpeg:this.ffmpegOption});return;case"ffmpegFragments":{const t=await d.getRawItems(r);const a=new u(r,t[0].fragments);const{getBatchFragmentsList:i}=await e.importAsync("ffmpeg-support");const o=i(t,this.dash||a.extension());if(!o){Toast.info("所有选择的分P都没有分段.","分段列表",3e3)}else{const t=new n;for(const[e,s]of o.entries()){t.add(e,s)}await t.emit(escapeFilename(`${s(false)}.zip`))}}break;case"ffmpegEpisodes":{const t=await d.getRawItems(r);const s=new u(r,t[0].fragments);const{getBatchEpisodesList:a}=await e.importAsync("ffmpeg-support");const i=a(t,this.dash||s.extension());const o=new n;o.add("ffmpeg-files.txt",i);await o.emit()}break;default:return}}catch(t){logError(t)}finally{l.dismiss()}},async checkBatch(){const t=["//www.bilibili.com/bangumi","//www.bilibili.com/video/av","//www.bilibili.com/blackboard/bnj2020.html"];if(!t.some(t=>document.URL.includes(t))){this.batch=false;this.episodeList=[];return}const{BatchExtractor:s}=await e.importAsync("batch-download");if(await s.test()!==true){this.batch=false;this.episodeList=[];return}const a=this.batchExtractor=new s;this.batch=true;this.episodeList=(await a.getItemList()).map((t,e)=>{return{aid:t.aid,cid:t.cid,title:t.title,index:e,checked:true}})},cancelDownload(){if(o){o.cancelDownload()}},async startDownload(){const t=this.getFormat();try{this.downloading=true;const e=await t.downloadInfo(this.dash);e.videoSpeed.speedUpdate=(t=>this.speed=t);e.progress=(t=>{this.progressPercent=Math.trunc(t*100)});o=e;await e.download();this.lastDirectDownloadLink=n.lastPackageUrl}catch(t){if(t!=="canceled"){logError(t)}this.progressPercent=0}finally{this.downloading=false;this.speed=""}},selectAllEpisodes(){this.episodeList.forEach(t=>t.checked=true)},unselectAllEpisodes(){this.episodeList.forEach(t=>t.checked=false)},inverseAllEpisodes(){this.episodeList.forEach(t=>t.checked=!t.checked)},toggleRpcSettings(){this.showRpcSettings=!this.showRpcSettings},saveRpcSettings(){if(this.rpcSettings.host===""){this.rpcSettings.host="127.0.0.1"}if(this.rpcSettings.port===""){this.rpcSettings.port="6800"}t.aria2RpcOption=this.rpcSettings;const e=t.aria2RpcOptionProfiles.find(e=>e.name===t.aria2RpcOptionSelectedProfile);if(e){Object.assign(e,this.rpcSettings);t.aria2RpcOptionProfiles=t.aria2RpcOptionProfiles}this.saveRpcSettingsText="已保存";setTimeout(()=>this.saveRpcSettingsText="保存配置",2e3)},updateProfile(e){t.aria2RpcOption=this.rpcSettings=_.omit(e,"name")}},async mounted(){}});Observer.videoChange(async()=>{r.close();r.batch=false;r.downloadSingle=true;const t=dq("#download-video");const e=await w();t.style.display=e?"flex":"none";if(!e){return}r.aid=c.aid;r.cid=c.cid;try{const t=new a(c.aid);await t.fetchInfo();r.coverUrl=t.coverUrl.replace("http:","https:")}catch(t){r.coverUrl=EmptyImageUrl}r.dashChange();await r.checkBatch()})}return{widget:{content:`\n`,condition:w,success:g}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video-package.min.js"] = (()=>{return(e,t)=>{class n{constructor(e={}){this.config=e;this.entries=[]}download(e,t){const a=document.createElement("a");const i=URL.createObjectURL(t);if(n.lastPackageUrl){URL.revokeObjectURL(n.lastPackageUrl)}n.lastPackageUrl=i;a.setAttribute("href",i);a.setAttribute("download",escapeFilename(e));document.body.appendChild(a);a.click();a.remove()}add(e,t){if(t===null||t===undefined){return}this.entries.push({name:escapeFilename(e),data:t})}async blob(){if(this.entries.length===0){return null}if(this.entries.length===1){const e=this.entries[0].data;return typeof e==="string"?new Blob([e]):e}const e=new JSZip;this.entries.forEach(({name:t,data:n})=>{e.file(t,n)});return await e.generateAsync({type:"blob"})}async emit(e){if(this.entries.length===0){return}if(!e||this.entries.length===1){e=this.entries[0].name}const t=await this.blob();if(!t){return}return this.download(e,t)}static async single(e,t,a={}){const i=new n(a);i.add(e,t);return await i.emit()}}n.lastPackageUrl="";return{export:{DownloadVideoPackage:n}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dpi-img.vue.min.js"] = (()=>{return(t,s)=>{const r=``;return{export:Object.assign({template:r},{props:["size","src","blur","root","rootMargin","threshold"],data(){return{srcset:null,actualSrc:null}},watch:{size(){this.sourceChange()},src(){this.sourceChange()}},methods:{sourceChange(){if(this.actualSrc===null||this.srcset===null){return}this.calcSrc()},calcSrc(){if(!this.src||!this.size){return}if(this.src.includes("//static.hdslb.com/images/member/noface.gif")){this.srcset=this.src;this.actualSrc=this.src;return}const t=this.src.substring(this.src.lastIndexOf(".")+1);this.srcset=getDpiSourceSet(this.src,this.size,t);this.actualSrc=this.src}},mounted(){const t={root:this.root,rootMargin:this.rootMargin||"200px",threshold:this.threshold};const s=new IntersectionObserver(t=>{t.forEach(t=>{if(t.isIntersecting){this.calcSrc();s.disconnect()}})},t);s.observe(this.$el)},computed:{width(){if(typeof this.size==="object"&&"width"in this.size){return this.size.width}return null},height(){if(typeof this.size==="object"&&"height"in this.size){return this.size.height}return null}}})}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/expand-danmaku.min.js"] = (()=>{return(e,a)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}Observer.videoChange(async()=>{const e=await SpinQuery.select(".bui-collapse-wrap");if(e&&e.classList.contains("bui-collapse-wrap-folded")){const e=await SpinQuery.select(".bui-collapse-header");e.click()}})}})(); diff --git a/min/batch-download.min.js b/min/batch-download.min.js index 43abfc66e..2b87879d5 100644 --- a/min/batch-download.min.js +++ b/min/batch-download.min.js @@ -1 +1 @@ -(()=>{return(t,e)=>{const{formatTitle:i}=e.import("title");const s=12;const n=[".mp4",".m4a"];class r{constructor(t){this.config=t;this.itemList=[]}formatTitle(e){const s=t.batchFilenameFormat;const n=i(s,true,e);return escapeFilename(n," ")}async getRawItems(t){return JSON.parse(await this.collectData(t))}extension(t,e){const i=[".flv",".mp4"].find(e=>t.includes(e));if(i){return i}else if(t.includes(".m4s")){return n[e]}else{return".flv"}}async collectAria2(i,n){const r=await this.getRawItems(i);if(n){const i=t.aria2RpcOption;const{sendRpc:n}=await e.importAsync("aria2-rpc");for(const t of r){const e=t.fragments.map((e,n)=>{let r="";if(t.fragments.length>1&&!e.url.includes(".m4s")){r=" - "+(n+1)}const a=[];if(i.secretKey!==""){a.push(`token:${i.secretKey}`)}a.push([e.url]);a.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${t.title}${r}${this.extension(e.url,n)}`,split:s,dir:i.baseDir+i.dir||undefined,"max-download-limit":i.maxDownloadLimit||undefined});const o=encodeURIComponent(`${t.title}${r}`);return{params:a,id:o}});await n(e,true)}}else{return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${r.map(t=>{return t.fragments.map((e,i)=>{let n="";if(t.fragments.length>1&&!e.url.includes(".m4s")){n=` - ${i+1}`}return`\n${e.url}\n referer=${t.referer}\n user-agent=${UserAgent}\n out=${t.title}${n}${this.extension(e.url,i)}\n split=${s}\n`.trim()}).join("\n")}).join("\n")}\n`.trim()}}}class a extends r{static async test(){if(!document.URL.includes("/www.bilibili.com/video/av")){return false}return await SpinQuery.select("#multi_page")!==null}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=`https://api.bilibili.com/x/web-interface/view?aid=${unsafeWindow.aid}`;const e=await Ajax.getJson(t);if(e.code!==0){Toast.error(`获取视频选集列表失败, message=${e.message}`,"批量下载");return[]}const i=e.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return[]}this.itemList=i.map(t=>{return{title:`P${t.page} ${t.part}`,titleParameters:{n:t.page,ep:t.part},cid:t.cid,aid:unsafeWindow.aid}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const n=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/x/player/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const r=await Ajax.getJsonWithCredentials(n);const a=r.data||r.result||r;if(a.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${a.quality})`)}let o;if(a.durl){o=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const r=await i(n,typeof t==="string"?parseInt(t):t);o=s(r)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}class o extends r{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=document.querySelector("meta[property='og:url']");if(t===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return[]}const e=t.getAttribute("content").match(/play\/ss(\d+)/)[1];if(e===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return[]}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${e}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return[]}this.itemList=i.result.main_section.episodes.map((t,e)=>{const i=t.long_title?t.title:(e+1).toString();const s=t.long_title?t.long_title:t.title;return{aid:t.aid,cid:t.cid,title:`${i} - ${s}`,titleParameters:{n:i,ep:s}}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const n=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/pgc/player/web/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const r=await Ajax.getJsonWithCredentials(n);const a=r.data||r.result||r;if(a.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${a.quality})`)}let o;if(a.durl){o=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const r=await i(n,typeof t==="string"?parseInt(t):t);o=s(r)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}const c=[o,a];let l;class u{constructor(t){this.config=Object.assign({itemFilter:()=>true},t)}static async test(){for(const t of c){if(await t.test()===true){l=t;return true}}return false}getExtractor(){if(l===null){logError("[批量下载] 未找到合适的解析模块.");throw new Error(`[Batch Download] module not found.`)}const t=new l(this.config);return t}async getItemList(){const t=this.getExtractor();return await t.getItemList()}async getRawItems(t){const e=this.getExtractor();return await e.getRawItems(t.quality)}async collectData(t,e){const i=this.getExtractor();const s=await i.collectData(t.quality);e.dismiss();return s}async collectAria2(t,e,i=false){const s=this.getExtractor();const n=await s.collectAria2(t.quality,i);e.dismiss();return n}}return{export:{BatchExtractor:u}}}})(); \ No newline at end of file +(()=>{return(t,e)=>{const{formatTitle:i}=e.import("title");const s=12;const a=[".mp4",".m4a"];class n{constructor(t){this.config=t;this.itemList=[]}formatTitle(e){const s=t.batchFilenameFormat;const a=i(s,true,e);return escapeFilename(a," ")}async getRawItems(t){return JSON.parse(await this.collectData(t))}extension(t,e){const i=[".flv",".mp4"].find(e=>t.includes(e));if(i){return i}else if(t.includes(".m4s")){return a[e]}else{return".flv"}}async collectAria2(i,a){const n=await this.getRawItems(i);if(a){const i=t.aria2RpcOption;const{sendRpc:a}=await e.importAsync("aria2-rpc");for(const t of n){const e=t.fragments.map((e,a)=>{let n="";if(t.fragments.length>1&&!e.url.includes(".m4s")){n=" - "+(a+1)}const r=[];if(i.secretKey!==""){r.push(`token:${i.secretKey}`)}r.push([e.url]);r.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${t.title}${n}${this.extension(e.url,a)}`,split:s,dir:i.baseDir+i.dir||undefined,"max-download-limit":i.maxDownloadLimit||undefined});const o=encodeURIComponent(`${t.title}${n}`);return{params:r,id:o}});await a(e,true)}}else{return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${n.map(t=>{return t.fragments.map((e,i)=>{let a="";if(t.fragments.length>1&&!e.url.includes(".m4s")){a=` - ${i+1}`}return`\n${e.url}\n referer=${t.referer}\n user-agent=${UserAgent}\n out=${t.title}${a}${this.extension(e.url,i)}\n split=${s}\n`.trim()}).join("\n")}).join("\n")}\n`.trim()}}}class r extends n{constructor(){super(...arguments);this.aid=unsafeWindow.aid}static async test(){if(document.URL.includes("//www.bilibili.com/video/av")){return await SpinQuery.select("#multi_page")!==null}return false}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=`https://api.bilibili.com/x/web-interface/view?aid=${this.aid}`;const e=await Ajax.getJson(t);if(e.code!==0){Toast.error(`获取视频选集列表失败, message=${e.message}`,"批量下载");return[]}const i=e.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return[]}this.itemList=i.map(t=>{return{title:`P${t.page} ${t.part}`,titleParameters:{n:t.page,ep:t.part},cid:t.cid,aid:this.aid}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const a=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/x/player/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const n=await Ajax.getJsonWithCredentials(a);const r=n.data||n.result||n;if(r.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${r.quality})`)}let o;if(r.durl){o=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const n=await i(a,typeof t==="string"?parseInt(t):t);o=s(n)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}class o extends n{constructor(t){super(t);this.mainVideo=new r(t);this.mainVideo.aid="78976165";this.spVideo=new r(t);this.spVideo.aid="78979124"}static async test(){return document.URL.includes("//www.bilibili.com/blackboard/bnj2020.html")}async getItemList(){return(await this.mainVideo.getItemList()).concat(await this.spVideo.getItemList())}async collectData(t){return(await this.mainVideo.collectData(t)).concat(await this.spVideo.collectData(t))}}class c extends n{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async getItemList(){if(this.itemList.length>0){return this.itemList}const t=document.querySelector("meta[property='og:url']");if(t===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return[]}const e=t.getAttribute("content").match(/play\/ss(\d+)/)[1];if(e===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return[]}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${e}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return[]}this.itemList=i.result.main_section.episodes.map((t,e)=>{const i=t.long_title?t.title:(e+1).toString();const s=t.long_title?t.long_title:t.title;return{aid:t.aid,cid:t.cid,title:`${i} - ${s}`,titleParameters:{n:i,ep:s}}});return this.itemList}async collectData(t){const i=[];for(const s of(await this.getItemList()).filter(this.config.itemFilter)){const a=this.config.api?this.config.api(s.aid,s.cid,t):`https://api.bilibili.com/pgc/player/web/playurl?avid=${s.aid}&cid=${s.cid}&qn=${t}&otype=json`;const n=await Ajax.getJsonWithCredentials(a);const r=n.data||n.result||n;if(r.quality!==t){console.warn(`${s.title} 不支持所选画质, 已回退到较低画质. (quality=${r.quality})`)}let o;if(r.durl){o=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}})}else{const{getDashInfo:i,dashToFragments:s}=await e.importAsync("video-dash");const n=await i(a,typeof t==="string"?parseInt(t):t);o=s(n)}i.push({fragments:o,title:this.formatTitle(s.titleParameters),totalSize:o.map(t=>t.size).reduce((t,e)=>t+e),cid:s.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(i)}}const l=[c,r,o];let u;class d{constructor(t){this.config=Object.assign({itemFilter:()=>true},t)}static async test(){for(const t of l){if(await t.test()===true){u=t;return true}}return false}getExtractor(){if(u===null){logError("[批量下载] 未找到合适的解析模块.");throw new Error(`[Batch Download] module not found.`)}const t=new u(this.config);return t}async getItemList(){const t=this.getExtractor();return await t.getItemList()}async getRawItems(t){const e=this.getExtractor();return await e.getRawItems(t.quality)}async collectData(t,e){const i=this.getExtractor();const s=await i.collectData(t.quality);e.dismiss();return s}async collectAria2(t,e,i=false){const s=this.getExtractor();const a=await s.collectAria2(t.quality,i);e.dismiss();return a}}return{export:{BatchExtractor:d}}}})(); \ No newline at end of file diff --git a/min/bundle.json b/min/bundle.json index 55c51a46b..a35504a63 100644 --- a/min/bundle.json +++ b/min/bundle.json @@ -12,7 +12,7 @@ "auto-draw.min.js": "AE72CF2623DF2D15AD4AF82D125FFAF7EF5B1E6B36D9E9AC646AC98AA6AA8698", "auto-play.min.js": "DC9938AC15DADDC9D88DCA0C9BE64BE142C37D32CB85E42E23DAB2A7378531E5", "bangumi-timeline.vue.min.js": "196BC0C07AF05A2E26E84D85C7CFB5C3E2620C927572C8C22070A1AEBB5B44B3", - "batch-download.min.js": "B7ADE150F26243B9529C2F0E2EC06695ACD27678E07902A8E6EABA767BBE3DD0", + "batch-download.min.js": "531A7C02901680C031AB0BAE9F1B63F9BFF37186F7DB29453839011C65B567CE", "biliplus-redirect.min.js": "9882D14DAC5C103212A101A5168883C41B4B3B2737FD5F222DC343D0304FF8AF", "blackboard.min.js": "8BB9CCDE72302AE7DE39D66F9231EFB82BA27DDA799BA4AAAC06F6DE802661BF", "blackboard.vue.min.js": "84A30D5A6F322A3C083FC1100E9FF51233ECD08AFBD89A6449AD2388ACCC8522", @@ -53,7 +53,6 @@ "dark-important.min.css": "8453644F7FC8BB0E9DA401DC161815E2AC198E9B4D7A5A19C29934B672F277B1", "dark-navbar.min.css": "A2D91F11127D165571ACCC53004EDDB118CEE110F9B020D7E0541E1C8FAEA478", "dark-schedule.min.js": "853C446547603F4F0425F19F09F73335C9EC451A790C1C07E5E5B88A09E9B453", - "dark-slice-9.min.css": "2493E0DF5E63B5FA8F3005CEBECEB7940AEABF1C8AC70A42B17A61EA0E7376CA", "dark-styles.min.js": "C62AFBB47DDC1E2F3F45D688B0F98394E471A423BE26BF47504D5C7D069ADBA1", "debounce.min.js": "54D33E1273C1F3FE19550BF1844339C3D54D6B01DF8A39C3162D95B93B079CFA", "default-danmaku-settings.min.css": "D9942B184FEDA7B08CFA0C34920E97D7A83B81762DCBF757642EBB60F95FF25D", @@ -66,9 +65,9 @@ "download-audio.min.js": "1F4536DE4FF302BFD026CA17E028AF8EB037FB6D0CB355692549DECAEAE0E8C9", "download-danmaku.min.js": "87BC2B39D99E029BB602AB2F59A387FC960D5779791524F8C26FBC0278CD8F8E", "download-subtitle.min.js": "4B99A00FEEA40C6D577AC8BD8DFFD34D91B75E150C7848B965D58B0096DF762C", - "download-video.min.css": "699C47BE6C007E7338BF6F1FB80C58E0403D04F121A2E10FEE5E4B47DC7DC5D8", + "download-video.min.css": "9B7FFAC852999B11DB62B6467CDBA1AEE53B7F3FA6C592185281542B25AF527A", "download-video.min.html": "D662FBB3C6899E75A52D15C59C53FD6966DA6E4CE463BCEFF0008D5BD3796C7F", - "download-video.min.js": "FE66E6FAAA6940E9E9A1725671225C872F8A61F48A9437D360AB59C1D126DC22", + "download-video.min.js": "1AFC947D3B103FD24DC7119B10E83B9C3A2AB02C4D99EFCAD0BE28D92DD45714", "download-video-package.min.js": "B10FF11DE7DFBACEC38F195B8E836511E527215B5E177CB1D223D14F30EB1435", "dpi-img.vue.min.js": "905DD5D8071437FE1C04C3E156E61E594C676BF3928241CC52BCAFAAA0FFA089", "expand-danmaku.min.js": "B21658C40085AEA8DC49652AE62EB8610BB2EBEAF7A9C9AF69EF3B11E08EEC8D", diff --git a/min/bundle.zip b/min/bundle.zip index f9793338b06c7b2db9b3f76e2a198f492fe2bb2e..724d253b6f0f736d061163540fc3df5b9b5e54ef 100644 GIT binary patch delta 3815 zcmcgvd0bTW7Qb^ZDsyKbac1uPSRF@8Ko~`HgC@i+mw1{Q)l19!hEYam!I?V(;b^3} zq?vKe(|hHX&zD)|(t;U=DkYQ_ zC-pHnJjv^4BtZQTCQM9pCChm6ZC7u6?so0P=Nuu1<)gAq4!cXx*~Lvl1TqVRC}_B) zAi3^PnOzKXha+!uMv_Xei`D7-Me_aPqC7qgr?}c3EOUz6+z~-eL%Q3Q7WuN-;C5PP zL?t-ID)(%0Y-TWOzc_z+AG>EJGR=b9Y0pmQoxIHz?~Jje#ydQos02QPw+K33^vlS^ zBRv^0sI)y}2tF@mnBmK{tV(<-bCSZTGiM5Bd#X!kha3y75zi47j2ukV8jnlh1&c|? zyRz&ionUqekx|*=&Xu9CDNxf#RA(8KzO!|+c&p1SCS|<=7vCc67nNB#GNq7aaT$0^ zs^p3|FH0jX%68z{E!k^ic1UWcd-vv}5*}RHXg8$t0>5B^-QYC4+*Sc+36@!rPVvTK zliq2V=jN>zAyv3ekNi{o+c5{Z#8TkjkHkaT0r#QC@VJ3b z>OEr1!a))~Js|WYIv6q0O!a{j>GSSUKMb?Y!g#@Kd)6X>8)ZN|OuX=W(O-{wR8U-) z&87XBU6aFVHJgOdh$`Ol&kX;Uq{m~j@-COo^e`>HxVzy!w-P3PTEepUX*3dp%klY4U^x zdGoumKN7VfW zVKRZP-zJUW(0G`{(56p7dxRJjQ$D3Alfz~++XV=^iZRJ6Q)#H*{x+WZ-F5+#V^PJk0PebuOIs{f1At*@&u&;=WXY9vl zc>gG^gBOcQcNlV z4xS}1#IsV1@siBXDA6{9*1~#}pz}lEbTOI8EbGI-Zawoj%xOi*NhJu_s=?qWA*1~b z(-)F`9GoF(y%%K$#l8_RN6$nw^G8SH`K!|#mv#_}W4Y?{< zm?>ANffS$+Q;9;Ot67K(P-r2c63zWw=Uu5`K_xLTK^GpZxB{%IQb}BKjfK`qjLq!p zEG#;U6*uWDiDk?;ysIRp4kyLoiV&zfi{|DwvcOi6QH-vcg~?SUk>1w}-mOAR%(>F2 z0>^Q*+*yT~Jo7PVs?o>hZ3?KaQ-t}_W>Gb6ZT$o`R+DkGb2~Jm2wnRrMAu+jS^XKz zsX=3w9k8PYi?x0SwBVXyb}FFtvVw#0=dkP}cPS`{yQWaVTj#Kf-q@`G$2CPL)Ziv9 z{}Q^K$NmxW6^uWRrk>A-Rp$}8jrq~Q))J%t51%M0OWZKKuWX*br&I?$%!}+J z-c5*Wz>@l~7GZkzv=a8$lBbw?6-xMbEs2*WUqTt_o5g3L`%U5pFVv9`rcECJ^)Cbv zSXGDqycG$1>o88Bt+)dE3Mvs7F_&9-l#-vz|yr$Vq@z)MyZ!LAD=QBhf^qHGqs#l~B~ z(L}<4yNJFw-Bv+aA9a|ol)aA5x`>WmY4P$Sd^Nj65*^sCf}VZxHH5W?B`&e1+)+W$ zCA|6kA5<_|nhd3(2{J_CjX>tH3J7ToN_X^r| z3l+5YI4HYC#`rJnsij<2OS&&by-p0ijh_%>{|e9DCd29CELe3L+oS3Y?YcZ|7_{ET z*njR_1Vd&Ec8t+2Xm80%EzCQh)xc{l7&;=tzgkG5ANhwCUz$yXfUFhoU%wf8wW7_G z&tZBi8RmEEYusLQ5kEq7hw<{?w2~0{_xrV!;BcGL;FrrJ1iqK_!U}+E!$M>_w9wiY zYs=P#ha_v^?`@bL_~ldAM#i#jy$B^_n9ah2vQBD8)wVvsw<83qzGU5WOq>1fsJWmY zG`3?}yfz48I&hql42}*mGH_Eeq2^1!D`Hc5SDJ)~7S48HL^e$$@b(JQ%NKUt9W;D* z8jQGuDfZHISagRZ1#C+DRo5jrV8l7>#tkT^JZqEq=8RaAV?MlIg6v+MsE*M~>O}R( l9C*DG+oW;{fqQ$2o|`NEnz~8dee*hbCcq#w@ delta 3618 zcmcgud010d7JqpUfxHj|$#Ovq5o{%uMD2ng4T^}nmTuaX&+3~HB{d|NMNq_wt=0vF z@Q_m%WN`yo1OLC4UIc(L$=lEQkN|6r{^muN+3A}t^%TjZ%SAh6m`3Q($8WMhZ#EM0tfG79( zEx83~<-_-9KyNZj_`H=mkqz=cqNAcLnuGyo^)_8P=ipYZwCQX{yVLBzS%PU%G{>J` zYl!4@OP!qAe4YDnp~@%X9{DXDT=&OF!MUn0B zrPbj+9t%qUj~9Oy=1HSLpJt8W<|hb7n-dHk>^L7|$B);npP@2nas^L4Npk2MM!O?g zqu1*lHm6aOYvx_+M~lpS_xg1r^WkY5%p&xpWn(P9f8MBOoOyYmzActPYXJ#*@3~Fx z=QfG%e#(qm5dVR8E{((>`5+BK@Lc9x&yzpNzx=0fJ{Z6QMkr6`1;d2)mN^4((pIu}ky>Sufipfm+ zs0(t7$rPXOi)jiLET9!|p_q*IDL917n;EncM)G7VUD66~@nkAfe~gCqHaZMCc=8N0 zr=5nkJ82c%2Q*S%LR3DvAEVsFGqemUPS6rqzm)_*>v=jT5V14xxX%fyeMJiBIZyj} z<5(}qe)R)xR4$-H;n5Y`xL$&Oym$qMZY6W*=KsKwt!O~dLmJe-(Gf6hBVO6N72|S> zl$N3+C6O?@l%&$zo`dpIGTA@j6~=>Bc)5tk;87`_{Hz=zfK2j#y<6y zPr)7_k-9&_{A0r@YRTWdf{!b}tNRmFz?l75_z{R+QX^)mbmL#FPKyDCx8T*uAL4es zga!RMu}Z+yU~ma6U4VzB_C}ybVD$yD@aRKybGMR(>Dx#O^OK4N*EZxFk7VJ3!1*nT z1?hEh1jGvvMgaQ2^S8x8(%-FoKAHvVb~2HJ)1gziCfAi&9|q4#b$p+J!qXK$Ql8^OX8es`v@HE!keVf9@bLOmjO6q7AIdTNy8G zW@T9NkDmwK7^WpM`RWtkcOq5y|qGK+H46F`TpyL<9B+yfVNgEd~f#^yyiFsj|1Trg05>t{n+=!4sVilP{Z=4J7R*@vX7fwj1#ZD8rN=P{LRS{L7@}h*w;A~C{r?ne6 zXaY>noob2fiNqiORs#Mtl5j7gGIwJ@ojtI5H<{)?=@Lqt(v6T*hmgM~Y}NGw*+UZP zw=csRdobql-@%SO*clqWgKvfPmwlk#OOkx<{Yydt*CYvnoV{c$^U4nrC~uMsh4MDU z-%eM8)t#W!RkI#fGprKGAL^1FR*k!8OMwsB!$}j|cvOu|#km+p)sXRQafXyyVqBidWkJ$L zZ1saCN@dF5%{c9lQkmRhlR>-KW`eOUtmW<+bobUexLiYG>F#R~dH@6V*#k&BfNt;o z6?Pp!0PYw;%02qYZ^!xlNch0@&>eB zjqt*W9DZp)e69(XL-au`f*h3`Ob5})YPB3{g^BNCITXdpm0l-98ikTs;$elt>_&`s zgB6xHB05A%p}mnLi#OTil+9?hr9)#W>Q^ zr^93hlb@`B&LD*XW;GKnV@vU@i1#~E(ToaCrbAaV3Z#{Tq=ihQ<7(jb7L3H6Qwq3Q zqKJlrNARvQEqK)b8@Sd&X494Zpg%&U`E=b?P|$l?F%&d^Q%Hn^_;C~~;o=d*UIDg@ z2scJ*dw>!+H%Vsd1}ov38+%@d8%^m|dsfNJ!%<3jz7_Y2VwCXhUB!TLyIL`%KWdfG z*-BFU=e(w*@c(N7u@Ohn8bu*YI7;H_?G3QvC`qCFjzITOGL>HC7RE3b*+K&0*<+~X zwJs%8Zc@s<9XV?omP^ht5+=QJLPHEr@dcE!KzyP$?<%N_8&)WpWH$ztJ9F7wQ$QIxDd5H-Kl)Cz<<6C zK5ZD9FGmvmJypsetqp-PY!-abhCs=j1E<@_6t;UVp&Z#pqhp}FN4KK^-EYE6?HHrJ zGy-ErqUzdq6rHsY&b1>xW@JEE2e#SBH3Y1)F~azp5Cm&Guq9-zfyxeqQq~6O?I5%0 zlN&(SiEE7uGCNT;s|*@D5rX@w;D*4DZGh2TINoakOBe26Y=x#SGAi&ab(Uh|DC%N6 H!B+7<=yd#e diff --git a/min/download-video.min.css b/min/download-video.min.css index 638706b3a..7d3ca5b45 100644 --- a/min/download-video.min.css +++ b/min/download-video.min.css @@ -1 +1 @@ -.download-video{--download-video-background:white;--download-video-foreground:black;position:absolute;top:96px;left:50%;transform:translateX(-50%) scale(.95);background:var(--download-video-background);color:var(--download-video-foreground);box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;z-index:10001;pointer-events:none;opacity:0;padding:16px;width:300px;display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;box-sizing:content-box;line-height:normal}.download-video,.download-video *{transition:.2s ease-out;-webkit-tap-highlight-color:transparent!important}.download-video.opened{pointer-events:initial;opacity:1;transform:translateX(-50%) scale(1)}body.dark .download-video{--download-video-background:#222;--download-video-foreground:#eee}.round-corner .download-video,.round-corner .download-video .episode-list .v-checkbox,.round-corner .download-video .rpc-settings{border-radius:var(--large-corner-radius)}.round-corner .download-video .button,.round-corner .download-video .cover,.round-corner .download-video .direct-download .progress .background,.round-corner .download-video .direct-download .progress .foreground,.round-corner .download-video .rpc-settings input[type=text],.round-corner .download-video .size-warning-tip,.round-corner .download-video .title,.round-corner .download-video button{border-radius:var(--corner-radius)}.download-video .cover{min-height:100px;max-height:120px;object-fit:contain}.download-video h1{font-size:13pt;font-weight:700;color:var(--download-video-foreground)}.download-video h2{font-size:11pt;font-weight:700;color:var(--download-video-foreground)}.download-video .header{display:flex;justify-content:space-between;align-items:center}.download-video .header .grow{flex-grow:1}.download-video .header .mdi-download{font-size:16pt;color:var(--download-video-foreground);margin-right:8px}.download-video .header .mdi-close{font-size:16pt;color:var(--download-video-foreground);cursor:pointer}.download-video .header .mdi-close:hover{color:var(--theme-color)}.download-video .info{display:flex;flex-direction:column;align-items:center;margin-top:12px}.download-video .title{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-top:12px}.download-video .title .bold{width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.download-video .title .size{font-size:10pt;color:var(--download-video-foreground);align-self:center;display:flex;align-items:center;height:24px}.download-video .bold{color:var(--download-video-foreground);font-weight:700;font-size:12pt}.download-video .option-item{display:flex;justify-content:space-between;align-items:center;padding-top:12px;font-size:10pt}.download-video .tabs{display:flex;padding:12px 0;font-size:10pt}.download-video .tabs .tab{cursor:pointer;position:relative;opacity:.5}.download-video .tabs .tab.active{font-weight:700;opacity:1}.download-video .tabs .tab:not(:last-child){margin-right:16px}.download-video .tabs .tab::after{content:"";position:absolute;border-radius:2px;background-color:var(--theme-color);height:3px;width:80%;left:10%;bottom:-8px;transition:.2s ease-out;transform:scaleX(0)}.download-video .tabs .tab.active::after{transform:scaleX(1)}.download-video .separator{height:1px;background:#8884;width:100%;margin:12px 0;flex-shrink:0}.download-video .direct-download{display:flex;flex-direction:column;align-items:start;justify-content:space-between}.download-video .button,.download-video button{border:none;outline:0!important;padding:6px 16px;font-size:10pt;cursor:pointer;background:#8884;color:var(--download-video-foreground)}.download-video .button:hover,.download-video button:hover{background:#8886}.download-video .primary{background:var(--theme-color);color:var(--foreground-color);align-self:center}.download-video .primary:hover{background:var(--theme-color-90)}.download-video .busy .button,.download-video .busy .primary,.download-video .busy button,.download-video button:disabled{background-color:#0001;color:#8884;cursor:not-allowed}.download-video .busy .button,.download-video .busy button{cursor:wait!important}.download-video .direct-download .progress{align-self:stretch;display:flex;align-items:center;margin-top:8px}.download-video .direct-download .progress .background{flex-grow:1;height:4px;background:#8884;margin-right:4px;position:relative}.download-video .direct-download .progress .background .foreground{position:absolute;top:0;left:0;height:4px;background:linear-gradient(to right,var(--theme-color),var(--theme-color-60))}.download-video .direct-download .progress .percent{width:50px;text-align:right;font-size:12px}.download-video .actions{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8px -4px 0}.download-video .actions>*{margin:4px;flex-grow:1;flex-basis:calc(50% - 16px);display:flex;justify-content:center;align-items:center;white-space:nowrap}.download-video i.mdi-alert-circle{font-size:14pt;color:#ff9800}.download-video .size-warning{position:relative;padding:0 8px}.download-video .size-warning-tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--download-video-background);color:var(--download-video-foreground);border:1px dashed var(--theme-color);z-index:2;font-size:10pt;width:200px;padding:8px;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;pointer-events:none;opacity:0}.download-video .size-warning:hover .size-warning-tip{opacity:1}.download-video .episode-list .v-checkbox{padding:4px 8px;margin:4px 0;position:relative;background-color:transparent}.download-video .episode-list .v-checkbox.checked{background-color:#8882}.download-video .episode-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.download-video .episode-list{overflow:auto;max-height:320px}.download-video button.list-tool{padding:4px;line-height:1;font-size:12pt;margin:0 4px}.download-video .episode-header h2{flex-grow:1}.download-video .selected-count{width:64px;text-align:right}.download-video .aria2-rpc .mdi{margin-left:8px;font-size:14pt;line-height:1}.download-video .aria2-rpc{position:relative}.download-video .rpc-settings{position:absolute;display:flex;flex-direction:column;align-items:stretch;color:var(--download-video-foreground);background:#fff;bottom:120%;left:50%;cursor:initial;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;transform-origin:bottom;transform:translateX(-50%) scale(.9);opacity:0;pointer-events:none;padding:8px;z-index:3;transition:.3s cubic-bezier(.18,.89,.32,1.28);width:120%}body.dark .download-video .rpc-settings{background:#282828}.download-video .rpc-settings>*{margin:8px}.download-video .rpc-settings.show{opacity:1;transform:translateX(-50%) scale(1);pointer-events:initial}.download-video .rpc-settings input[type=text]{background:0 0;color:var(--download-video-foreground);border:1px solid #8884;padding:4px;margin-left:8px}.download-video .rpc-settings input[type=text]:focus{border-color:var(--theme-color)}.download-video .rpc-settings .operations{display:flex;align-items:center;justify-content:space-evenly}.download-video .final-dir{white-space:normal;word-break:break-all}.download-video .rpc-settings-item{display:flex;align-items:center;justify-content:space-between;white-space:nowrap}.download-video .rpc-settings-item input[type=text]{flex-grow:1;margin-left:24px}.download-video button.cancel-download,.download-video button.start-download{margin-top:8px}.download-video .direct-download-header{align-self:stretch;display:flex;justify-content:space-between;align-items:center}body.dark .download-video .direct-download .progress .foreground{background:linear-gradient(to right,var(--theme-color-70),var(--theme-color))} \ No newline at end of file +.download-video{--download-video-background:white;--download-video-foreground:black;position:absolute;top:96px;left:50%;transform:translateX(-50%) scale(.95);background:var(--download-video-background);color:var(--download-video-foreground);box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;z-index:10001;pointer-events:none;opacity:0;padding:16px;width:300px;display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;box-sizing:content-box;line-height:normal}.download-video,.download-video *{transition:.2s ease-out;-webkit-tap-highlight-color:transparent!important}.download-video.opened{pointer-events:initial;opacity:1;transform:translateX(-50%) scale(1)}body.dark .download-video{--download-video-background:#222;--download-video-foreground:#eee}.round-corner .download-video,.round-corner .download-video .episode-list .v-checkbox,.round-corner .download-video .rpc-settings{border-radius:var(--large-corner-radius)}.round-corner .download-video .button,.round-corner .download-video .cover,.round-corner .download-video .direct-download .progress .background,.round-corner .download-video .direct-download .progress .foreground,.round-corner .download-video .rpc-settings input[type=text],.round-corner .download-video .size-warning-tip,.round-corner .download-video .title,.round-corner .download-video button{border-radius:var(--corner-radius)}.download-video .cover{min-height:100px;max-height:120px;object-fit:contain}.download-video h1{font-size:13pt;font-weight:700;color:var(--download-video-foreground)}.download-video h2{font-size:11pt;font-weight:700;color:var(--download-video-foreground)}.download-video .header{display:flex;justify-content:space-between;align-items:center}.download-video .header .grow{flex-grow:1}.download-video .header .mdi-download{font-size:16pt;color:var(--download-video-foreground);margin-right:8px}.download-video .header .mdi-close{font-size:16pt;color:var(--download-video-foreground);cursor:pointer}.download-video .header .mdi-close:hover{color:var(--theme-color)}.download-video .info{display:flex;flex-direction:column;align-items:center;margin-top:12px}.download-video .title{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-top:12px}.download-video .title .bold{width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.download-video .title .size{font-size:10pt;color:var(--download-video-foreground);align-self:center;display:flex;align-items:center;height:24px}.download-video .bold{color:var(--download-video-foreground);font-weight:700;font-size:12pt}.download-video .option-item{display:flex;justify-content:space-between;align-items:center;padding-top:12px;font-size:10pt}.download-video .tabs{display:flex;padding:12px 0;font-size:10pt}.download-video .tabs .tab{cursor:pointer;position:relative;opacity:.5}.download-video .tabs .tab.active{font-weight:700;opacity:1}.download-video .tabs .tab:not(:last-child){margin-right:16px}.download-video .tabs .tab::after{content:"";position:absolute;border-radius:2px;background-color:var(--theme-color);height:3px;width:80%;left:10%;bottom:-8px;transition:.2s ease-out;transform:scaleX(0)}.download-video .tabs .tab.active::after{transform:scaleX(1)}.download-video .separator{height:1px;background:#8884;width:100%;margin:12px 0;flex-shrink:0}.download-video .direct-download{display:flex;flex-direction:column;align-items:start;justify-content:space-between}.download-video .button,.download-video button{border:none;outline:0!important;padding:6px 16px;font-size:10pt;cursor:pointer;background:#8884;color:var(--download-video-foreground)}.download-video .button:hover,.download-video button:hover{background:#8886}.download-video .primary{background:var(--theme-color);color:var(--foreground-color);align-self:center}.download-video .primary:hover{background:var(--theme-color-90)}.download-video .busy .button,.download-video .busy .primary,.download-video .busy button,.download-video button:disabled{background-color:#0001;color:#8884;cursor:not-allowed}.download-video .busy .button,.download-video .busy button{cursor:wait!important}.download-video .direct-download .progress{align-self:stretch;display:flex;align-items:center;margin-top:8px}.download-video .direct-download .progress .background{flex-grow:1;height:4px;background:#8884;margin-right:4px;position:relative}.download-video .direct-download .progress .background .foreground{position:absolute;top:0;left:0;height:4px;background:linear-gradient(to right,var(--theme-color),var(--theme-color-60))}.download-video .direct-download .progress .percent{width:50px;text-align:right;font-size:12px}.download-video .actions{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8px -4px 0}.download-video .actions>*{margin:4px;flex-grow:1;flex-basis:calc(50% - 16px);display:flex;justify-content:center;align-items:center;white-space:nowrap}.download-video i.mdi-alert-circle{font-size:14pt;color:#ff9800}.download-video .size-warning{position:relative;padding:0 8px}.download-video .size-warning-tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--download-video-background);color:var(--download-video-foreground);border:1px dashed var(--theme-color);z-index:2;font-size:10pt;width:200px;padding:8px;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;pointer-events:none;opacity:0}.download-video .size-warning:hover .size-warning-tip{opacity:1}.download-video .episode-list .v-checkbox{padding:4px 8px;margin:4px 0;position:relative;background-color:transparent}.download-video .episode-list .v-checkbox.checked{background-color:#8882}.download-video .episode-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.download-video .episode-list{overflow:auto;max-height:320px}.download-video button.list-tool{padding:4px;line-height:1;font-size:12pt;margin:0 4px}.download-video .episode-header h2{flex-grow:1}.download-video .selected-count{width:64px;font-size:12px;text-align:right}.download-video .aria2-rpc .mdi{margin-left:8px;font-size:14pt;line-height:1}.download-video .aria2-rpc{position:relative}.download-video .rpc-settings{position:absolute;display:flex;flex-direction:column;align-items:stretch;color:var(--download-video-foreground);background:#fff;bottom:120%;left:50%;cursor:initial;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;transform-origin:bottom;transform:translateX(-50%) scale(.9);opacity:0;pointer-events:none;padding:8px;z-index:3;transition:.3s cubic-bezier(.18,.89,.32,1.28);width:120%}body.dark .download-video .rpc-settings{background:#282828}.download-video .rpc-settings>*{margin:8px}.download-video .rpc-settings.show{opacity:1;transform:translateX(-50%) scale(1);pointer-events:initial}.download-video .rpc-settings input[type=text]{background:0 0;color:var(--download-video-foreground);border:1px solid #8884;padding:4px;margin-left:8px}.download-video .rpc-settings input[type=text]:focus{border-color:var(--theme-color)}.download-video .rpc-settings .operations{display:flex;align-items:center;justify-content:space-evenly}.download-video .final-dir{white-space:normal;word-break:break-all}.download-video .rpc-settings-item{display:flex;align-items:center;justify-content:space-between;white-space:nowrap}.download-video .rpc-settings-item input[type=text]{flex-grow:1;margin-left:24px}.download-video button.cancel-download,.download-video button.start-download{margin-top:8px}.download-video .direct-download-header{align-self:stretch;display:flex;justify-content:space-between;align-items:center}body.dark .download-video .direct-download .progress .foreground{background:linear-gradient(to right,var(--theme-color-70),var(--theme-color))} \ No newline at end of file diff --git a/min/download-video.min.js b/min/download-video.min.js index f40a6cf0d..7568fcf64 100644 --- a/min/download-video.min.js +++ b/min/download-video.min.js @@ -1 +1 @@ -(()=>{return(t,e)=>{const{getFriendlyTitle:s}=e.import("title");const{VideoInfo:a,DanmakuInfo:i}=e.import("video-info");const{DownloadVideoPackage:n}=e.import("download-video-package");class o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fnver=0&fnval=16`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json`}}}return e.bind(this)}async getDashUrl(t){return(await this.getApiGenerator(true))(c.aid,c.cid,t)}async getUrl(t){return(await this.getApiGenerator())(c.aid,c.cid,t)}}class r extends o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fourk=1&fnval=16`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&otype=json&fourk=1&fnval=16`}}else{if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=&otype=json`}}}return e.bind(this)}}class l extends o{constructor(t){super();this.ep=t}async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}`}}}return e.bind(this)}}const c={entity:new o,aid:"",cid:""};let d=[];let p=null;class h{constructor(t,e,s){this.quality=t;this.internalName=e;this.displayName=s}async downloadInfo(t=false){const e=new u(this);await e.fetchVideoInfo(t);return e}static parseFormats(t){const e=t.accept_quality;const s=t.accept_format.split(",");const a=t.accept_description;const i=e.map((t,e)=>{return new h(t,s[e],a[e])});return i}static async getAvailableDashFormats(){const t=await c.entity.getDashUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}return h.parseFormats(e.data||e.result||e)}static async getAvailableFormats(){const t=await c.entity.getUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}const s=e.data||e.result||e;return h.parseFormats(s)}}class u{constructor(t,e){this.fragmentSplitFactor=6*2;this.workingXhr=null;this.progressMap=new Map;this.format=t;this.fragments=e||[];this.videoSpeed=new f(this)}get danmakuOption(){return t.downloadVideoDefaultDanmaku}get isDash(){return this.fragments.some(t=>t.url.includes(".m4s"))}get totalSize(){return this.fragments.map(t=>t.size).reduce((t,e)=>t+e)}async fetchVideoInfo(t=false){if(!t){const t=await c.entity.getUrl(this.format.quality);const e=await Ajax.getTextWithCredentials(t);const s=JSON.parse(e.replace(/http:/g,"https:"));const a=s.data||s.result||s;if(a.quality!==this.format.quality){throw new Error("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const i=a.durl;this.fragments=i.map(t=>{return{length:t.length,size:t.size,url:t.url,backupUrls:t.backup_url}})}else{const{dashToFragments:t,getDashInfo:s}=await e.importAsync("video-dash");const a=await s(await c.entity.getDashUrl(this.format.quality),this.format.quality);this.fragments=t(a)}return this.fragments}updateProgress(){const t=this.progressMap?[...this.progressMap.values()].reduce((t,e)=>t+e,0)/this.totalSize:0;if(t>1||t<0){console.error(`[下载视频] 进度异常: ${t}`,this.progressMap.values())}this.progress&&this.progress(t)}cancelDownload(){this.videoSpeed.stopMeasure();if(this.workingXhr!==null){this.workingXhr.forEach(t=>t.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(t){const e=[];const s=this.isDash?4*1024*1024:16*1024*1024;let a;if(t.size<=s*6){a=t.size/this.fragmentSplitFactor}else{a=s}let i=0;const n=t=>[...this.progressMap.keys()].indexOf(t)+1;while(i{const a=new XMLHttpRequest;a.open("GET",t.url);a.responseType="arraybuffer";a.withCredentials=false;a.addEventListener("progress",t=>{console.log(`[下载视频] 视频片段${n(a)}下载进度: ${t.loaded}/${r} bytes loaded, ${o}`);this.progressMap.set(a,t.loaded);this.updateProgress()});a.addEventListener("load",()=>{if((""+a.status)[0]==="2"){console.log(`[下载视频] 视频片段${n(a)}下载完成`);e(a.response)}else{s(`视频片段${n(a)}请求失败, response = ${a.status}`)}});a.addEventListener("abort",()=>s("canceled"));a.addEventListener("error",()=>{console.error(`[下载视频] 视频片段${n(a)}下载失败: ${o}`);this.progressMap.set(a,0);this.updateProgress();a.open("GET",t.url);a.setRequestHeader("Range",o);a.send()});a.setRequestHeader("Range",o);this.progressMap.set(a,0);a.send();this.workingXhr.push(a)}));i=Math.round(i+a)+1}return Promise.all(e)}async copyUrl(){const t=this.fragments.map(t=>t.url).reduce((t,e)=>t+"\r\n"+e);GM.setClipboard(t,"text")}async showUrl(){const t=this.fragments.map(t=>`\n${t.url}\n`).reduce((t,e)=>t+"\r\n"+e);Toast.success(t+`复制全部`,"显示链接");const e=await SpinQuery.select("#copy-link");e.addEventListener("click",async()=>{await this.copyUrl()})}async exportData(t=false){const e=JSON.stringify([{fragments:this.fragments,title:s(),totalSize:this.fragments.map(t=>t.size).reduce((t,e)=>t+e),referer:document.URL.replace(window.location.search,"")}]);if(t){GM.setClipboard(e,"text")}else{const t=new Blob([e],{type:"text/json"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.json`,t);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}async exportAria2(a=false){if(a){const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,a);await i.emit();const o=t.aria2RpcOption;const r=this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}const i=[];if(o.secretKey!==""){i.push(`token:${o.secretKey}`)}i.push([t.url]);i.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${s()}${a}${this.extension(t)}`,split:this.fragmentSplitFactor,dir:o.baseDir+o.dir||undefined,"max-download-limit":o.maxDownloadLimit||undefined});const n=encodeURIComponent(`${s()}${a}`);return{params:i,id:n}});const{sendRpc:l}=await e.importAsync("aria2-rpc");await l(r)}else{const t=`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}return`\n${t.url}\n referer=${document.URL.replace(window.location.search,"")}\n user-agent=${UserAgent}\n out=${s()}${a}${this.extension(t)}\n split=${this.fragmentSplitFactor}\n`.trim()}).join("\n")}\n`.trim();const e=new Blob([t],{type:"text/plain"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.txt`,e);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}extension(t){const e=t||this.fragments[0];const s=[".flv",".mp4"].find(t=>e.url.includes(t));if(s){return s}else if(e.url.includes(".m4s")){return this.fragments.indexOf(e)===0?".mp4":".m4a"}else{console.warn("No extension detected.");return".flv"}}async downloadDanmaku(){if(this.danmakuOption!=="无"){const t=new i(c.cid);await t.fetchInfo();if(this.danmakuOption==="XML"){return t.rawXML}else{const{convertToAss:s}=await e.importAsync("download-danmaku");return s(t.rawXML)}}else{return null}}async download(){this.workingXhr=[];this.progressMap=new Map;this.updateProgress();const t=[];this.videoSpeed.startMeasure();for(const e of this.fragments){const s=await this.downloadFragment(e);t.push(s)}if(t.length<1){throw new Error("下载失败.")}const e=s();const a=new n;t.forEach((s,i)=>{let n;const o=this.fragments[i];if(t.length>1&&!this.isDash){n=`${e} - ${i+1}${this.extension(o)}`}else{n=`${e}${this.extension(o)}`}a.add(n,new Blob(Array.isArray(s)?s:[s]))});const i=await this.downloadDanmaku();a.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,i);await a.emit(e+".zip");this.progress&&this.progress(0);this.videoSpeed.stopMeasure()}}class f{constructor(t){this.lastProgress=0;this.measureInterval=1e3;this.workingDownloader=t}startMeasure(){this.intervalTimer=setInterval(()=>{const t=this.workingDownloader.progressMap?[...this.workingDownloader.progressMap.values()].reduce((t,e)=>t+e,0):0;const e=t-this.lastProgress;if(this.speedUpdate!==undefined){this.speedUpdate(formatFileSize(e)+"/s")}this.lastProgress=t},this.measureInterval)}stopMeasure(){clearInterval(this.intervalTimer)}}async function w(){const t=await SpinQuery.select(()=>(unsafeWindow||window).aid);const e=await SpinQuery.select(()=>(unsafeWindow||window).cid);if(!(t&&e)){return false}c.aid=t;c.cid=e;if(document.URL.includes("bangumi")){c.entity=new r}else if(document.URL.includes("cheese")){const t=document.URL.match(/cheese\/play\/ep([\d]+)/);c.entity=new l(t[1])}else{c.entity=new o}try{d=await h.getAvailableFormats()}catch(t){return false}return true}const m=e=>{const s=t.downloadVideoQuality;const a=e.find(t=>t.quality===s);if(a){return a}const i=e.filter(t=>t.quality{const t=dq(".download-video");t.classList.toggle("opened");window.scroll(0,0);dq(".gui-settings-mask").click()});document.body.insertAdjacentHTML("beforeend",e.import("downloadVideoHtml"));y()}async function y(){let o;const r=new Vue({el:".download-video",components:{VDropdown:()=>e.importAsync("v-dropdown.vue"),VCheckbox:()=>e.importAsync("v-checkbox.vue"),RpcProfiles:()=>e.importAsync("aria2-rpc-profiles.vue")},data:{downloadSingle:true,coverUrl:EmptyImageUrl,aid:c.aid,cid:c.cid,dashModel:{value:t.downloadVideoFormat,items:["flv","dash"]},qualityModel:{value:p.displayName,items:d.map(t=>t.displayName)},danmakuModel:{value:t.downloadVideoDefaultDanmaku,items:["无","XML","ASS"]},codecModel:{value:t.downloadVideoDashCodec,items:["AVC/H.264","HEVC/H.265"]},progressPercent:0,size:"获取大小中",blobUrl:"",episodeList:[],downloading:false,speed:"",batch:false,rpcSettings:t.aria2RpcOption,showRpcSettings:false,busy:false,saveRpcSettingsText:"保存配置",enableDash:t.enableDashDownload,lastDirectDownloadLink:""},computed:{displaySize(){if(typeof this.size==="string"){return this.size}return formatFileSize(this.size)},sizeWarning(){if(typeof this.size==="string"){return false}return this.size>1073741824},selectedEpisodeCount(){return this.episodeList.filter(t=>t.checked).length},dash(){return this.dashModel.value==="dash"}},methods:{close(){this.$el.classList.remove("opened")},danmakuOptionChange(){t.downloadVideoDefaultDanmaku=this.danmakuModel.value},async codecChange(){t.downloadVideoDashCodec=this.codecModel.value;await this.formatChange()},async dashChange(){console.log("dash change");const e=t.downloadVideoFormat=this.dashModel.value;let s=[];if(e==="flv"){s=await h.getAvailableFormats()}else{s=await h.getAvailableDashFormats()}d=s;p=m(d);this.qualityModel.items=s.map(t=>t.displayName);this.qualityModel.value=this.qualityModel.items[d.indexOf(p)];await this.formatChange()},async formatChange(e=false){console.log("format change");const s=this.getFormat();if(e){t.downloadVideoQuality=s.quality}try{this.size="获取大小中";const t=await s.downloadInfo(this.dash);this.size=t.totalSize}catch(t){this.size="获取大小失败";throw t}},getFormat(){const t=d.find(t=>t.displayName===this.qualityModel.value);if(!t){console.error(`No format found. model value = ${this.qualityModel.value}`);return null}return t},async exportData(t){if(this.busy===true){return}try{this.busy=true;if(!this.downloadSingle){await this.exportBatchData(t);return}const a=this.getFormat();const i=await a.downloadInfo(this.dash);switch(t){case"copyLink":await i.copyUrl();Toast.success("已复制链接到剪贴板.","下载视频",3e3);break;case"showLink":await i.showUrl();break;case"aria2":await i.exportAria2(false);break;case"aria2RPC":await i.exportAria2(true);break;case"copyVLD":await i.exportData(true);Toast.success("已复制VLD数据到剪贴板.","下载视频",3e3);break;case"exportVLD":await i.exportData(false);break;case"ffmpegFragments":if(i.fragments.length<2){Toast.info("当前视频没有分段.","分段列表",3e3)}else{const{getFragmentsList:t}=await e.importAsync("ffmpeg-support");const a=new n;a.add("ffmpeg-files.txt",t(i.fragments.length,s(),i.fragments.map(t=>i.extension(t))));await a.emit()}break;default:break}}catch(t){logError(t)}finally{this.busy=false}},async exportBatchData(t){const a=this.episodeList;if(a.every(t=>t.checked===false)){Toast.info("请至少选择1集或以上的数量!","批量导出",3e3);return}const o=t=>{const e=a.find(e=>e.cid===t.cid);if(e===undefined){return false}return e.checked};const r=this.getFormat();if(this.danmakuModel.value!=="无"){const t=Toast.info("下载弹幕中...","批量导出");const s=new n;try{if(this.danmakuModel.value==="XML"){for(const t of a.filter(o)){const e=new i(t.cid);await e.fetchInfo();s.add(t.title+".xml",e.rawXML)}}else{const{convertToAss:t}=await e.importAsync("download-danmaku");for(const e of a.filter(o)){const a=new i(e.cid);await a.fetchInfo();s.add(e.title+".ass",await t(a.rawXML))}}await s.emit(this.cid+".danmakus.zip")}catch(t){logError(`弹幕下载失败`);throw t}finally{t.dismiss()}}const l=Toast.info("获取链接中...","批量导出");const d=this.batchExtractor;d.config.itemFilter=o;d.config.api=await c.entity.getApiGenerator(this.dash);let p;try{switch(t){case"aria2":p=await d.collectAria2(r,l,false);await n.single(s(false)+".txt",new Blob([p],{type:"text/plain"}),{ffmpeg:this.ffmpegOption});return;case"aria2RPC":await d.collectAria2(r,l,true);Toast.success(`成功发送了批量请求.`,"aria2 RPC",3e3);return;case"copyVLD":GM.setClipboard(await d.collectData(r,l),{mimetype:"text/plain"});Toast.success("已复制批量vld数据到剪贴板.","批量导出",3e3);return;case"exportVLD":p=await d.collectData(r,l);await n.single(s(false)+".json",new Blob([p],{type:"text/json"}),{ffmpeg:this.ffmpegOption});return;case"ffmpegFragments":{const t=await d.getRawItems(r);const a=new u(r,t[0].fragments);const{getBatchFragmentsList:i}=await e.importAsync("ffmpeg-support");const o=i(t,this.dash||a.extension());if(!o){Toast.info("所有选择的分P都没有分段.","分段列表",3e3)}else{const t=new n;for(const[e,s]of o.entries()){t.add(e,s)}await t.emit(escapeFilename(`${s(false)}.zip`))}}break;case"ffmpegEpisodes":{const t=await d.getRawItems(r);const s=new u(r,t[0].fragments);const{getBatchEpisodesList:a}=await e.importAsync("ffmpeg-support");const i=a(t,this.dash||s.extension());const o=new n;o.add("ffmpeg-files.txt",i);await o.emit()}break;default:return}}catch(t){logError(t)}finally{l.dismiss()}},async checkBatch(){const t=["/www.bilibili.com/bangumi","/www.bilibili.com/video/av"];if(!t.some(t=>document.URL.includes(t))){this.batch=false;this.episodeList=[];return}const{BatchExtractor:s}=await e.importAsync("batch-download");if(await s.test()!==true){this.batch=false;this.episodeList=[];return}const a=this.batchExtractor=new s;this.batch=true;this.episodeList=(await a.getItemList()).map((t,e)=>{return{aid:t.aid,cid:t.cid,title:t.title,index:e,checked:true}})},cancelDownload(){if(o){o.cancelDownload()}},async startDownload(){const t=this.getFormat();try{this.downloading=true;const e=await t.downloadInfo(this.dash);e.videoSpeed.speedUpdate=(t=>this.speed=t);e.progress=(t=>{this.progressPercent=Math.trunc(t*100)});o=e;await e.download();this.lastDirectDownloadLink=n.lastPackageUrl}catch(t){if(t!=="canceled"){logError(t)}this.progressPercent=0}finally{this.downloading=false;this.speed=""}},selectAllEpisodes(){this.episodeList.forEach(t=>t.checked=true)},unselectAllEpisodes(){this.episodeList.forEach(t=>t.checked=false)},inverseAllEpisodes(){this.episodeList.forEach(t=>t.checked=!t.checked)},toggleRpcSettings(){this.showRpcSettings=!this.showRpcSettings},saveRpcSettings(){if(this.rpcSettings.host===""){this.rpcSettings.host="127.0.0.1"}if(this.rpcSettings.port===""){this.rpcSettings.port="6800"}t.aria2RpcOption=this.rpcSettings;const e=t.aria2RpcOptionProfiles.find(e=>e.name===t.aria2RpcOptionSelectedProfile);if(e){Object.assign(e,this.rpcSettings);t.aria2RpcOptionProfiles=t.aria2RpcOptionProfiles}this.saveRpcSettingsText="已保存";setTimeout(()=>this.saveRpcSettingsText="保存配置",2e3)},updateProfile(e){t.aria2RpcOption=this.rpcSettings=_.omit(e,"name")}},async mounted(){}});Observer.videoChange(async()=>{r.close();r.batch=false;r.downloadSingle=true;const t=dq("#download-video");const e=await w();t.style.display=e?"flex":"none";if(!e){return}r.aid=c.aid;r.cid=c.cid;try{const t=new a(c.aid);await t.fetchInfo();r.coverUrl=t.coverUrl.replace("http:","https:")}catch(t){r.coverUrl=EmptyImageUrl}r.dashChange();await r.checkBatch()})}return{widget:{content:`\n`,condition:w,success:g}}}})(); \ No newline at end of file +(()=>{return(t,e)=>{const{getFriendlyTitle:s}=e.import("title");const{VideoInfo:a,DanmakuInfo:i}=e.import("video-info");const{DownloadVideoPackage:n}=e.import("download-video-package");class o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fnver=0&fnval=16`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${e}&cid=${s}&otype=json`}}}return e.bind(this)}async getDashUrl(t){return(await this.getApiGenerator(true))(c.aid,c.cid,t)}async getUrl(t){return(await this.getApiGenerator())(c.aid,c.cid,t)}}class r extends o{async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&fourk=1&fnval=16`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&otype=json&fourk=1&fnval=16`}}else{if(a){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${e}&cid=${s}&qn=&otype=json`}}}return e.bind(this)}}class l extends o{constructor(t){super();this.ep=t}async getApiGenerator(t=false){function e(e,s,a){if(t){if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}&fnver=0&fnval=16`}}else{if(a){return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&qn=${a}&otype=json&ep_id=${this.ep}`}else{return`https://api.bilibili.com/pugv/player/web/playurl?avid=${e}&cid=${s}&otype=json&ep_id=${this.ep}`}}}return e.bind(this)}}const c={entity:new o,aid:"",cid:""};let d=[];let p=null;class h{constructor(t,e,s){this.quality=t;this.internalName=e;this.displayName=s}async downloadInfo(t=false){const e=new u(this);await e.fetchVideoInfo(t);return e}static parseFormats(t){const e=t.accept_quality;const s=t.accept_format.split(",");const a=t.accept_description;const i=e.map((t,e)=>{return new h(t,s[e],a[e])});return i}static async getAvailableDashFormats(){const t=await c.entity.getDashUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}return h.parseFormats(e.data||e.result||e)}static async getAvailableFormats(){const t=await c.entity.getUrl();const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error("获取清晰度信息失败.")}const s=e.data||e.result||e;return h.parseFormats(s)}}class u{constructor(t,e){this.fragmentSplitFactor=6*2;this.workingXhr=null;this.progressMap=new Map;this.format=t;this.fragments=e||[];this.videoSpeed=new f(this)}get danmakuOption(){return t.downloadVideoDefaultDanmaku}get isDash(){return this.fragments.some(t=>t.url.includes(".m4s"))}get totalSize(){return this.fragments.map(t=>t.size).reduce((t,e)=>t+e)}async fetchVideoInfo(t=false){if(!t){const t=await c.entity.getUrl(this.format.quality);const e=await Ajax.getTextWithCredentials(t);const s=JSON.parse(e.replace(/http:/g,"https:"));const a=s.data||s.result||s;if(a.quality!==this.format.quality){throw new Error("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const i=a.durl;this.fragments=i.map(t=>{return{length:t.length,size:t.size,url:t.url,backupUrls:t.backup_url}})}else{const{dashToFragments:t,getDashInfo:s}=await e.importAsync("video-dash");const a=await s(await c.entity.getDashUrl(this.format.quality),this.format.quality);this.fragments=t(a)}return this.fragments}updateProgress(){const t=this.progressMap?[...this.progressMap.values()].reduce((t,e)=>t+e,0)/this.totalSize:0;if(t>1||t<0){console.error(`[下载视频] 进度异常: ${t}`,this.progressMap.values())}this.progress&&this.progress(t)}cancelDownload(){this.videoSpeed.stopMeasure();if(this.workingXhr!==null){this.workingXhr.forEach(t=>t.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(t){const e=[];const s=this.isDash?4*1024*1024:16*1024*1024;let a;if(t.size<=s*6){a=t.size/this.fragmentSplitFactor}else{a=s}let i=0;const n=t=>[...this.progressMap.keys()].indexOf(t)+1;while(i{const a=new XMLHttpRequest;a.open("GET",t.url);a.responseType="arraybuffer";a.withCredentials=false;a.addEventListener("progress",t=>{console.log(`[下载视频] 视频片段${n(a)}下载进度: ${t.loaded}/${r} bytes loaded, ${o}`);this.progressMap.set(a,t.loaded);this.updateProgress()});a.addEventListener("load",()=>{if((""+a.status)[0]==="2"){console.log(`[下载视频] 视频片段${n(a)}下载完成`);e(a.response)}else{s(`视频片段${n(a)}请求失败, response = ${a.status}`)}});a.addEventListener("abort",()=>s("canceled"));a.addEventListener("error",()=>{console.error(`[下载视频] 视频片段${n(a)}下载失败: ${o}`);this.progressMap.set(a,0);this.updateProgress();a.open("GET",t.url);a.setRequestHeader("Range",o);a.send()});a.setRequestHeader("Range",o);this.progressMap.set(a,0);a.send();this.workingXhr.push(a)}));i=Math.round(i+a)+1}return Promise.all(e)}async copyUrl(){const t=this.fragments.map(t=>t.url).reduce((t,e)=>t+"\r\n"+e);GM.setClipboard(t,"text")}async showUrl(){const t=this.fragments.map(t=>`\n${t.url}\n`).reduce((t,e)=>t+"\r\n"+e);Toast.success(t+`复制全部`,"显示链接");const e=await SpinQuery.select("#copy-link");e.addEventListener("click",async()=>{await this.copyUrl()})}async exportData(t=false){const e=JSON.stringify([{fragments:this.fragments,title:s(),totalSize:this.fragments.map(t=>t.size).reduce((t,e)=>t+e),referer:document.URL.replace(window.location.search,"")}]);if(t){GM.setClipboard(e,"text")}else{const t=new Blob([e],{type:"text/json"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.json`,t);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}async exportAria2(a=false){if(a){const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,a);await i.emit();const o=t.aria2RpcOption;const r=this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}const i=[];if(o.secretKey!==""){i.push(`token:${o.secretKey}`)}i.push([t.url]);i.push({referer:document.URL.replace(window.location.search,""),"user-agent":UserAgent,out:`${s()}${a}${this.extension(t)}`,split:this.fragmentSplitFactor,dir:o.baseDir+o.dir||undefined,"max-download-limit":o.maxDownloadLimit||undefined});const n=encodeURIComponent(`${s()}${a}`);return{params:i,id:n}});const{sendRpc:l}=await e.importAsync("aria2-rpc");await l(r)}else{const t=`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${this.fragments.map((t,e)=>{let a="";if(this.fragments.length>1&&!this.isDash){a=" - "+(e+1)}return`\n${t.url}\n referer=${document.URL.replace(window.location.search,"")}\n user-agent=${UserAgent}\n out=${s()}${a}${this.extension(t)}\n split=${this.fragmentSplitFactor}\n`.trim()}).join("\n")}\n`.trim();const e=new Blob([t],{type:"text/plain"});const a=await this.downloadDanmaku();const i=new n;i.add(`${s()}.txt`,e);i.add(s()+"."+this.danmakuOption.toLowerCase(),a);await i.emit(`${s()}.zip`)}}extension(t){const e=t||this.fragments[0];const s=[".flv",".mp4"].find(t=>e.url.includes(t));if(s){return s}else if(e.url.includes(".m4s")){return this.fragments.indexOf(e)===0?".mp4":".m4a"}else{console.warn("No extension detected.");return".flv"}}async downloadDanmaku(){if(this.danmakuOption!=="无"){const t=new i(c.cid);await t.fetchInfo();if(this.danmakuOption==="XML"){return t.rawXML}else{const{convertToAss:s}=await e.importAsync("download-danmaku");return s(t.rawXML)}}else{return null}}async download(){this.workingXhr=[];this.progressMap=new Map;this.updateProgress();const t=[];this.videoSpeed.startMeasure();for(const e of this.fragments){const s=await this.downloadFragment(e);t.push(s)}if(t.length<1){throw new Error("下载失败.")}const e=s();const a=new n;t.forEach((s,i)=>{let n;const o=this.fragments[i];if(t.length>1&&!this.isDash){n=`${e} - ${i+1}${this.extension(o)}`}else{n=`${e}${this.extension(o)}`}a.add(n,new Blob(Array.isArray(s)?s:[s]))});const i=await this.downloadDanmaku();a.add(`${s()}.${this.danmakuOption==="ASS"?"ass":"xml"}`,i);await a.emit(e+".zip");this.progress&&this.progress(0);this.videoSpeed.stopMeasure()}}class f{constructor(t){this.lastProgress=0;this.measureInterval=1e3;this.workingDownloader=t}startMeasure(){this.intervalTimer=setInterval(()=>{const t=this.workingDownloader.progressMap?[...this.workingDownloader.progressMap.values()].reduce((t,e)=>t+e,0):0;const e=t-this.lastProgress;if(this.speedUpdate!==undefined){this.speedUpdate(formatFileSize(e)+"/s")}this.lastProgress=t},this.measureInterval)}stopMeasure(){clearInterval(this.intervalTimer)}}async function w(){const t=await SpinQuery.select(()=>(unsafeWindow||window).aid);const e=await SpinQuery.select(()=>(unsafeWindow||window).cid);if(!(t&&e)){return false}c.aid=t;c.cid=e;if(document.URL.includes("bangumi")){c.entity=new r}else if(document.URL.includes("cheese")){const t=document.URL.match(/cheese\/play\/ep([\d]+)/);c.entity=new l(t[1])}else{c.entity=new o}try{d=await h.getAvailableFormats()}catch(t){return false}return true}const m=e=>{const s=t.downloadVideoQuality;const a=e.find(t=>t.quality===s);if(a){return a}const i=e.filter(t=>t.quality{const t=dq(".download-video");t.classList.toggle("opened");window.scroll(0,0);dq(".gui-settings-mask").click()});document.body.insertAdjacentHTML("beforeend",e.import("downloadVideoHtml"));y()}async function y(){let o;const r=new Vue({el:".download-video",components:{VDropdown:()=>e.importAsync("v-dropdown.vue"),VCheckbox:()=>e.importAsync("v-checkbox.vue"),RpcProfiles:()=>e.importAsync("aria2-rpc-profiles.vue")},data:{downloadSingle:true,coverUrl:EmptyImageUrl,aid:c.aid,cid:c.cid,dashModel:{value:t.downloadVideoFormat,items:["flv","dash"]},qualityModel:{value:p.displayName,items:d.map(t=>t.displayName)},danmakuModel:{value:t.downloadVideoDefaultDanmaku,items:["无","XML","ASS"]},codecModel:{value:t.downloadVideoDashCodec,items:["AVC/H.264","HEVC/H.265"]},progressPercent:0,size:"获取大小中",blobUrl:"",episodeList:[],downloading:false,speed:"",batch:false,rpcSettings:t.aria2RpcOption,showRpcSettings:false,busy:false,saveRpcSettingsText:"保存配置",enableDash:t.enableDashDownload,lastDirectDownloadLink:""},computed:{displaySize(){if(typeof this.size==="string"){return this.size}return formatFileSize(this.size)},sizeWarning(){if(typeof this.size==="string"){return false}return this.size>1073741824},selectedEpisodeCount(){return this.episodeList.filter(t=>t.checked).length},dash(){return this.dashModel.value==="dash"}},methods:{close(){this.$el.classList.remove("opened")},danmakuOptionChange(){t.downloadVideoDefaultDanmaku=this.danmakuModel.value},async codecChange(){t.downloadVideoDashCodec=this.codecModel.value;await this.formatChange()},async dashChange(){console.log("dash change");const e=t.downloadVideoFormat=this.dashModel.value;let s=[];if(e==="flv"){s=await h.getAvailableFormats()}else{s=await h.getAvailableDashFormats()}d=s;p=m(d);this.qualityModel.items=s.map(t=>t.displayName);this.qualityModel.value=this.qualityModel.items[d.indexOf(p)];await this.formatChange()},async formatChange(e=false){console.log("format change");const s=this.getFormat();if(e){t.downloadVideoQuality=s.quality}try{this.size="获取大小中";const t=await s.downloadInfo(this.dash);this.size=t.totalSize}catch(t){this.size="获取大小失败";throw t}},getFormat(){const t=d.find(t=>t.displayName===this.qualityModel.value);if(!t){console.error(`No format found. model value = ${this.qualityModel.value}`);return null}return t},async exportData(t){if(this.busy===true){return}try{this.busy=true;if(!this.downloadSingle){await this.exportBatchData(t);return}const a=this.getFormat();const i=await a.downloadInfo(this.dash);switch(t){case"copyLink":await i.copyUrl();Toast.success("已复制链接到剪贴板.","下载视频",3e3);break;case"showLink":await i.showUrl();break;case"aria2":await i.exportAria2(false);break;case"aria2RPC":await i.exportAria2(true);break;case"copyVLD":await i.exportData(true);Toast.success("已复制VLD数据到剪贴板.","下载视频",3e3);break;case"exportVLD":await i.exportData(false);break;case"ffmpegFragments":if(i.fragments.length<2){Toast.info("当前视频没有分段.","分段列表",3e3)}else{const{getFragmentsList:t}=await e.importAsync("ffmpeg-support");const a=new n;a.add("ffmpeg-files.txt",t(i.fragments.length,s(),i.fragments.map(t=>i.extension(t))));await a.emit()}break;default:break}}catch(t){logError(t)}finally{this.busy=false}},async exportBatchData(t){const a=this.episodeList;if(a.every(t=>t.checked===false)){Toast.info("请至少选择1集或以上的数量!","批量导出",3e3);return}const o=t=>{const e=a.find(e=>e.cid===t.cid);if(e===undefined){return false}return e.checked};const r=this.getFormat();if(this.danmakuModel.value!=="无"){const t=Toast.info("下载弹幕中...","批量导出");const s=new n;try{if(this.danmakuModel.value==="XML"){for(const t of a.filter(o)){const e=new i(t.cid);await e.fetchInfo();s.add(t.title+".xml",e.rawXML)}}else{const{convertToAss:t}=await e.importAsync("download-danmaku");for(const e of a.filter(o)){const a=new i(e.cid);await a.fetchInfo();s.add(e.title+".ass",await t(a.rawXML))}}await s.emit(this.cid+".danmakus.zip")}catch(t){logError(`弹幕下载失败`);throw t}finally{t.dismiss()}}const l=Toast.info("获取链接中...","批量导出");const d=this.batchExtractor;d.config.itemFilter=o;d.config.api=await c.entity.getApiGenerator(this.dash);let p;try{switch(t){case"aria2":p=await d.collectAria2(r,l,false);await n.single(s(false)+".txt",new Blob([p],{type:"text/plain"}),{ffmpeg:this.ffmpegOption});return;case"aria2RPC":await d.collectAria2(r,l,true);Toast.success(`成功发送了批量请求.`,"aria2 RPC",3e3);return;case"copyVLD":GM.setClipboard(await d.collectData(r,l),{mimetype:"text/plain"});Toast.success("已复制批量vld数据到剪贴板.","批量导出",3e3);return;case"exportVLD":p=await d.collectData(r,l);await n.single(s(false)+".json",new Blob([p],{type:"text/json"}),{ffmpeg:this.ffmpegOption});return;case"ffmpegFragments":{const t=await d.getRawItems(r);const a=new u(r,t[0].fragments);const{getBatchFragmentsList:i}=await e.importAsync("ffmpeg-support");const o=i(t,this.dash||a.extension());if(!o){Toast.info("所有选择的分P都没有分段.","分段列表",3e3)}else{const t=new n;for(const[e,s]of o.entries()){t.add(e,s)}await t.emit(escapeFilename(`${s(false)}.zip`))}}break;case"ffmpegEpisodes":{const t=await d.getRawItems(r);const s=new u(r,t[0].fragments);const{getBatchEpisodesList:a}=await e.importAsync("ffmpeg-support");const i=a(t,this.dash||s.extension());const o=new n;o.add("ffmpeg-files.txt",i);await o.emit()}break;default:return}}catch(t){logError(t)}finally{l.dismiss()}},async checkBatch(){const t=["//www.bilibili.com/bangumi","//www.bilibili.com/video/av","//www.bilibili.com/blackboard/bnj2020.html"];if(!t.some(t=>document.URL.includes(t))){this.batch=false;this.episodeList=[];return}const{BatchExtractor:s}=await e.importAsync("batch-download");if(await s.test()!==true){this.batch=false;this.episodeList=[];return}const a=this.batchExtractor=new s;this.batch=true;this.episodeList=(await a.getItemList()).map((t,e)=>{return{aid:t.aid,cid:t.cid,title:t.title,index:e,checked:true}})},cancelDownload(){if(o){o.cancelDownload()}},async startDownload(){const t=this.getFormat();try{this.downloading=true;const e=await t.downloadInfo(this.dash);e.videoSpeed.speedUpdate=(t=>this.speed=t);e.progress=(t=>{this.progressPercent=Math.trunc(t*100)});o=e;await e.download();this.lastDirectDownloadLink=n.lastPackageUrl}catch(t){if(t!=="canceled"){logError(t)}this.progressPercent=0}finally{this.downloading=false;this.speed=""}},selectAllEpisodes(){this.episodeList.forEach(t=>t.checked=true)},unselectAllEpisodes(){this.episodeList.forEach(t=>t.checked=false)},inverseAllEpisodes(){this.episodeList.forEach(t=>t.checked=!t.checked)},toggleRpcSettings(){this.showRpcSettings=!this.showRpcSettings},saveRpcSettings(){if(this.rpcSettings.host===""){this.rpcSettings.host="127.0.0.1"}if(this.rpcSettings.port===""){this.rpcSettings.port="6800"}t.aria2RpcOption=this.rpcSettings;const e=t.aria2RpcOptionProfiles.find(e=>e.name===t.aria2RpcOptionSelectedProfile);if(e){Object.assign(e,this.rpcSettings);t.aria2RpcOptionProfiles=t.aria2RpcOptionProfiles}this.saveRpcSettingsText="已保存";setTimeout(()=>this.saveRpcSettingsText="保存配置",2e3)},updateProfile(e){t.aria2RpcOption=this.rpcSettings=_.omit(e,"name")}},async mounted(){}});Observer.videoChange(async()=>{r.close();r.batch=false;r.downloadSingle=true;const t=dq("#download-video");const e=await w();t.style.display=e?"flex":"none";if(!e){return}r.aid=c.aid;r.cid=c.cid;try{const t=new a(c.aid);await t.fetchInfo();r.coverUrl=t.coverUrl.replace("http:","https:")}catch(t){r.coverUrl=EmptyImageUrl}r.dashChange();await r.checkBatch()})}return{widget:{content:`\n`,condition:w,success:g}}}})(); \ No newline at end of file diff --git a/src/video/download-video/batch-download.ts b/src/video/download-video/batch-download.ts index c69bc7093..6b8b3da1c 100644 --- a/src/video/download-video/batch-download.ts +++ b/src/video/download-video/batch-download.ts @@ -108,17 +108,18 @@ ${f.url} } } class VideoEpisodeBatch extends Batch { + aid = unsafeWindow.aid! static async test() { - if (!document.URL.includes('/www.bilibili.com/video/av')) { - return false + if (document.URL.includes('//www.bilibili.com/video/av')) { + return await SpinQuery.select('#multi_page') !== null } - return await SpinQuery.select('#multi_page') !== null + return false } async getItemList() { if (this.itemList.length > 0) { return this.itemList } - const api = `https://api.bilibili.com/x/web-interface/view?aid=${unsafeWindow.aid}` + const api = `https://api.bilibili.com/x/web-interface/view?aid=${this.aid}` const json = await Ajax.getJson(api) if (json.code !== 0) { Toast.error(`获取视频选集列表失败, message=${json.message}`, '批量下载') @@ -137,7 +138,7 @@ class VideoEpisodeBatch extends Batch { ep: page.part }, cid: page.cid, - aid: unsafeWindow.aid, + aid: this.aid, } as BatchItem }) return this.itemList @@ -177,6 +178,27 @@ class VideoEpisodeBatch extends Batch { return JSON.stringify(result) } } +class Bnj2020Batch extends Batch { + mainVideo: VideoEpisodeBatch + spVideo: VideoEpisodeBatch + constructor(config: BatchExtractorConfig) { + super(config) + // 拜年祭就硬编码 aid 了( + this.mainVideo = new VideoEpisodeBatch(config) + this.mainVideo.aid = '78976165' + this.spVideo = new VideoEpisodeBatch(config) + this.spVideo.aid = '78979124' + } + static async test() { + return document.URL.includes('//www.bilibili.com/blackboard/bnj2020.html') + } + async getItemList() { + return (await this.mainVideo.getItemList()).concat(await this.spVideo.getItemList()) + } + async collectData(quality: string | number) { + return (await this.mainVideo.collectData(quality)).concat(await this.spVideo.collectData(quality)) + } +} class BangumiBatch extends Batch { static async test() { return document.URL.includes('/www.bilibili.com/bangumi') @@ -251,7 +273,7 @@ class BangumiBatch extends Batch { return JSON.stringify(result) } } -const extractors = [BangumiBatch, VideoEpisodeBatch] +const extractors = [BangumiBatch, VideoEpisodeBatch, Bnj2020Batch] let ExtractorClass: new (config: BatchExtractorConfig) => Batch export class BatchExtractor { config: BatchExtractorConfig diff --git a/src/video/download-video/download-video.scss b/src/video/download-video/download-video.scss index 9536b74f3..8bf981f6b 100644 --- a/src/video/download-video/download-video.scss +++ b/src/video/download-video/download-video.scss @@ -308,6 +308,7 @@ } .selected-count { width: 64px; + font-size: 12px; text-align: right; } .aria2-rpc .mdi { diff --git a/src/video/download-video/download-video.ts b/src/video/download-video/download-video.ts index b436768f0..0a2a00f2c 100644 --- a/src/video/download-video/download-video.ts +++ b/src/video/download-video/download-video.ts @@ -884,8 +884,9 @@ async function loadPanel() { }, async checkBatch() { const urls = [ - '/www.bilibili.com/bangumi', - '/www.bilibili.com/video/av' + '//www.bilibili.com/bangumi', + '//www.bilibili.com/video/av', + '//www.bilibili.com/blackboard/bnj2020.html' ] if (!urls.some(url => document.URL.includes(url))) { this.batch = false