Bilibili-Evolved/min/show-dead-video-title.min.js
2019-07-04 14:57:42 +08:00

1 line
2.5 KiB
JavaScript

(()=>{return(e,t)=>{(async()=>{if(!document.URL.startsWith("https://space.bilibili.com")){return}class t{}class i extends t{convertToDeadVideoInfo(e,t){return{aid:e,title:t.title,cover:t.pic}}async queryInfo(e){const t=[];if(e.length<=i.MaxCountPerRequest){const s=await Ajax.getJson(`${i.BiliplusHost}/api/aidinfo?aid=${e.join(",")}`);if(s.code===0){t.push(...e.map(e=>{if(e in s.data){return this.convertToDeadVideoInfo(e,s.data[e])}else{return{aid:e,title:"已失效视频",cover:""}}}))}else{console.error(`[显示失效视频信息] Biliplus API 未成功. message=${s.message}`)}}else{t.push(...await this.queryInfo(e.slice(0,i.MaxCountPerRequest)));t.push(...await this.queryInfo(e.slice(i.MaxCountPerRequest)))}return t}}i.BiliplusHost=`https://hd.biliplus.com`;i.MaxCountPerRequest=30;class s extends t{async toggleWatchlater(e,t){for(const i of t){await Ajax.postTextWithCredentials(`https://api.bilibili.com/x/v2/history/toview/${e?"add":"del"}`,`aid=${i}&csrf=${s.csrf}`)}}async queryInfo(e){const t=[];await this.toggleWatchlater(true,e);const i=await Ajax.getJsonWithCredentials("https://api.bilibili.com/x/v2/history/toview/web");if(i.code===0){const s=i.data.list.map(e=>{return{aid:e.aid.toString(),title:e.title,cover:e.pic}});t.push(...e.map(e=>s.find(t=>t.aid===e)).filter(e=>e!==undefined));await this.toggleWatchlater(false,e)}else{console.error(`[显示失效视频信息] 稍后再看 API 未成功. message=${i.message}`)}return t}}s.csrf=document.cookie.replace(/(?:(?:^|.*;\s*)bili_jct\s*\=\s*([^;]*).*$)|^.*$/,"$1");const a=await SpinQuery.select("#app>.s-space");if(!a){return}Observer.childListSubtree(a,async()=>{const t=dqa(".disabled[data-aid]");if(t.length===0){return}const a=t.map(e=>e.getAttribute("data-aid"));const o=e.deadVideoTitleProvider==="BiliPlus"?new i:new s;const r=await o.queryInfo(a);console.log(`[显示失效视频信息]`,`deadVideos:`,t,`infos:`,r);t.forEach((t,i)=>{t.classList.remove("disabled");const s=t.getAttribute("data-aid");const a=(()=>{if(e.useBiliplusRedirect){return`https://hd.biliplus.com/video/av${s}`}else{return`//www.bilibili.com/video/av${s}`}})();const o=r.find(e=>e.aid===s);console.log(`[显示失效视频信息]`,"#"+i,o);if(o===undefined){console.error(`[显示失效视频信息]信息获取失败, aid=${s}`);return}const n=t.querySelector("a.cover");n.target="_blank";n.href=a;if(o.cover!==""){n.querySelector("img").src=o.cover.replace("http:","https:")}const l=t.querySelector("a.title");l.target="_blank";l.title=o.title;l.href=a;l.innerText=o.title})})})()}})();