Bilibili-Evolved/min/show-dead-video-title.min.js
2020-10-30 17:42:34 +08:00

1 line
2.6 KiB
JavaScript

(()=>(e,t)=>{function i(e,t,i){if(t in e){Object.defineProperty(e,t,{value:i,enumerable:true,configurable:true,writable:true})}else{e[t]=i}return e}(async()=>{if(!document.URL.startsWith("https://space.bilibili.com")){return}class t{}class s extends t{convertToDeadVideoInfo(e,t){return{aid:e,title:t.title,cover:t.pic}}async queryInfo(e){const t=[];if(e.length<=s.MaxCountPerRequest){const i=await Ajax.getJson(`${s.BiliplusHost}/api/aidinfo?aid=${e.join(",")}`);if(i.code===0){t.push(...e.map((e=>{if(e in i.data){return this.convertToDeadVideoInfo(e,i.data[e])}else{return{aid:e,title:"已失效视频",cover:""}}})))}else{console.error(`[显示失效视频信息] Biliplus API 未成功. message=${i.message}`)}}else{t.push(...await this.queryInfo(e.slice(0,s.MaxCountPerRequest)));t.push(...await this.queryInfo(e.slice(s.MaxCountPerRequest)))}return t}}i(s,"BiliplusHost",`https://hd.biliplus.com`);i(s,"MaxCountPerRequest",30);class a 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=${getCsrf()}}`)}}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=>({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}}const r=await SpinQuery.select("#app>.s-space");if(!r){return}Observer.childListSubtree(r,(async()=>{const t=dqa(".disabled[data-aid]");if(t.length===0){return}const i=t.map((e=>e.getAttribute("data-aid")));const r=e.deadVideoTitleProvider==="BiliPlus"?new s:new a;const o=await r.queryInfo(i);console.log(`[显示失效视频信息]`,`deadVideos:`,t,`infos:`,o);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 r=o.find((e=>e.aid===s));console.log(`[显示失效视频信息]`,"#"+i,r);if(r===undefined){console.error(`[显示失效视频信息]信息获取失败, aid=${s}`);return}const n=t.querySelector("a.cover");n.target="_blank";n.href=a;if(r.cover!==""){n.querySelector("img").src=r.cover.replace("http:","https:")}const l=t.querySelector("a.title");l.target="_blank";l.title=r.title;l.href=a;l.innerText=r.title}))}))})()})();