mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Recover show dead video title
This commit is contained in:
parent
7c39e4c901
commit
f9d4c2f5e2
1
@types/global/index.d.ts
vendored
1
@types/global/index.d.ts
vendored
@ -227,6 +227,7 @@ declare global
|
||||
allowJumpContinue: boolean,
|
||||
autoPlay: boolean,
|
||||
showDeadVideoTitle: boolean,
|
||||
deadVideoTitleProvider: '稍后再看' | 'Biliplus',
|
||||
useBiliplusRedirect: boolean,
|
||||
biliplusRedirect: boolean,
|
||||
framePlayback: boolean,
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -194,6 +194,7 @@ const settings = {
|
||||
allowJumpContinue: false,
|
||||
autoPlay: false,
|
||||
showDeadVideoTitle: false,
|
||||
deadVideoTitleProvider: '稍后再看',
|
||||
useBiliplusRedirect: false,
|
||||
biliplusRedirect: false,
|
||||
framePlayback: true,
|
||||
@ -1674,8 +1675,13 @@ Resource.manifest = {
|
||||
path: 'show-dead-video-title.min.js',
|
||||
displayNames: {
|
||||
showDeadVideoTitle: '显示失效视频信息',
|
||||
useBiliplusRedirect: '失效视频重定向'
|
||||
}
|
||||
useBiliplusRedirect: '失效视频重定向',
|
||||
deadVideoTitleProvider: '信息来源',
|
||||
},
|
||||
dropdown: {
|
||||
key: 'deadVideoTitleProvider',
|
||||
items: ['稍后再看', 'Biliplus'],
|
||||
},
|
||||
},
|
||||
autoPlay: {
|
||||
path: 'auto-play.min.js',
|
||||
|
||||
@ -194,6 +194,7 @@ const settings = {
|
||||
allowJumpContinue: false,
|
||||
autoPlay: false,
|
||||
showDeadVideoTitle: false,
|
||||
deadVideoTitleProvider: '稍后再看',
|
||||
useBiliplusRedirect: false,
|
||||
biliplusRedirect: false,
|
||||
framePlayback: true,
|
||||
@ -1674,8 +1675,13 @@ Resource.manifest = {
|
||||
path: 'show-dead-video-title.min.js',
|
||||
displayNames: {
|
||||
showDeadVideoTitle: '显示失效视频信息',
|
||||
useBiliplusRedirect: '失效视频重定向'
|
||||
}
|
||||
useBiliplusRedirect: '失效视频重定向',
|
||||
deadVideoTitleProvider: '信息来源',
|
||||
},
|
||||
dropdown: {
|
||||
key: 'deadVideoTitleProvider',
|
||||
items: ['稍后再看', 'Biliplus'],
|
||||
},
|
||||
},
|
||||
autoPlay: {
|
||||
path: 'auto-play.min.js',
|
||||
|
||||
@ -422,8 +422,13 @@ Resource.manifest = {
|
||||
path: 'show-dead-video-title.min.js',
|
||||
displayNames: {
|
||||
showDeadVideoTitle: '显示失效视频信息',
|
||||
useBiliplusRedirect: '失效视频重定向'
|
||||
}
|
||||
useBiliplusRedirect: '失效视频重定向',
|
||||
deadVideoTitleProvider: '信息来源',
|
||||
},
|
||||
dropdown: {
|
||||
key: 'deadVideoTitleProvider',
|
||||
items: ['稍后再看', 'Biliplus'],
|
||||
},
|
||||
},
|
||||
autoPlay: {
|
||||
path: 'auto-play.min.js',
|
||||
|
||||
@ -73,6 +73,7 @@ export const settings = {
|
||||
allowJumpContinue: false,
|
||||
autoPlay: false,
|
||||
showDeadVideoTitle: false,
|
||||
deadVideoTitleProvider: '稍后再看',
|
||||
useBiliplusRedirect: false,
|
||||
biliplusRedirect: false,
|
||||
framePlayback: true,
|
||||
|
||||
File diff suppressed because one or more lines are too long
2
min/show-dead-video-title.min.js
vendored
2
min/show-dead-video-title.min.js
vendored
@ -1 +1 @@
|
||||
(()=>{return(e,t)=>{(async()=>{if(!document.URL.startsWith("https://space.bilibili.com")){return}class t{}class i extends t{convertToDeadVideoInfo(e){return{title:e.title,cover:e.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(s.data[e])}else{return{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 queryInfo(e){const t=[];await Promise.all(e.map(e=>Ajax.postTextWithCredentials("https://api.bilibili.com/x/v2/history/toview/add",`aid=${e}&csrf=${s.csrf}`)));const i=await Ajax.getJsonWithCredentials("https://api.bilibili.com/x/v2/history/toview/web");if(i.code===0){const a=i.data.list.map(e=>{return{aid:e.aid,title:e.title,cover:e.pic}});t.push(...e.map(e=>a.find(t=>t.aid===parseInt(e))).filter(e=>e!==undefined));await Promise.all(e.map(e=>Ajax.postTextWithCredentials("https://api.bilibili.com/x/v2/history/toview/del",`aid=${e}&csrf=${s.csrf}`)))}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 i=t.map(e=>e.getAttribute("data-aid"));const a=new s;const r=await a.queryInfo(i);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=t.querySelector("a.cover");o.target="_blank";o.href=a;const n=r[i];if(n.cover!==""){o.querySelector("img").src=n.cover.replace("http:","https:")}const l=t.querySelector("a.title");l.target="_blank";l.title=n.title;l.href=a;l.innerText=n.title})})})()}})();
|
||||
(()=>{return(e,t)=>{(async()=>{if(!document.URL.startsWith("https://space.bilibili.com")){return}class t{}class i extends t{convertToDeadVideoInfo(e){return{title:e.title,cover:e.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(s.data[e])}else{return{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 queryInfo(e){const t=[];await Promise.all(e.map(e=>Ajax.postTextWithCredentials("https://api.bilibili.com/x/v2/history/toview/add",`aid=${e}&csrf=${s.csrf}`)));const i=await Ajax.getJsonWithCredentials("https://api.bilibili.com/x/v2/history/toview/web");if(i.code===0){const a=i.data.list.map(e=>{return{aid:e.aid,title:e.title,cover:e.pic}});t.push(...e.map(e=>a.find(t=>t.aid===parseInt(e))).filter(e=>e!==undefined));await Promise.all(e.map(e=>Ajax.postTextWithCredentials("https://api.bilibili.com/x/v2/history/toview/del",`aid=${e}&csrf=${s.csrf}`)))}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 r=e.deadVideoTitleProvider==="Biliplus"?new i:new s;const o=await r.queryInfo(a);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=t.querySelector("a.cover");r.target="_blank";r.href=a;const l=o[i];if(l.cover!==""){r.querySelector("img").src=l.cover.replace("http:","https:")}const n=t.querySelector("a.title");n.target="_blank";n.title=l.title;n.href=a;n.innerText=l.title})})})()}})();
|
||||
2
min/text-validate.min.js
vendored
2
min/text-validate.min.js
vendored
@ -1 +1 @@
|
||||
(()=>{return(e,t)=>{class a{constructor(e){this.key=e}get originalValue(){return e[this.key]}static getValidator(e){switch(e){case"customStyleColor":return new s(e);case"blurBackgroundOpacity":case"customControlBackgroundOpacity":case"customNavbarBlurOpacity":return new i(e);case"defaultPlayerMode":case"defaultVideoQuality":case"i18nLanguage":return new r(e);case"darkScheduleStart":case"darkScheduleEnd":return new n(e);case"playerFocusOffset":return new u(e);case"sideBarOffset":return new o(e,-40,40);default:return new a(e)}}isValidate(e){return e}validate(e){const t=this.isValidate(e);if(t===undefined){return this.originalValue}return t}}class s extends a{isValidate(e){if(/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(e)){if(e.length<7){return`#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}`}else{return e}}}}class i extends a{isValidate(e){if(/^([-+]?\d+)(\.\d+)?$/.test(e)){const t=parseFloat(e);if(t>=0&&t<=1){return e}}}}class r extends a{isValidate(e){const[t]=Object.values(Resource.manifest).filter(e=>e.dropdown&&e.dropdown.key===this.key).map(e=>e.dropdown);if(t.items.indexOf(e)!==-1){return e}}}class n extends a{isValidate(e){const t=e.match(/^([\d]{1,2}):([\d]{1,2})$/);if(t&&t.length>=3){const e={hour:parseInt(t[1]),minute:parseInt(t[2])};(function(){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}}).call(e);return`${e.hour}:${e.minute<10?"0"+e.minute:e.minute}`}}}class u extends a{isValidate(e){const t=parseInt(e);if(!isNaN(t)){return t}}}class o extends a{constructor(e,t,a){super(e);this.min=t;this.max=a}isValidate(e){const t=parseInt(e);if(!isNaN(t)&&t>=this.min&&t<=this.max){return t}}}return{export:{Validator:a,ColorValidator:s,DropDownValidator:r,OpacityValidator:i,TimeValidator:n,NumberValidator:u}}}})();
|
||||
(()=>{return(e,t)=>{class a{constructor(e){this.key=e}get originalValue(){return e[this.key]}static getValidator(e){switch(e){case"customStyleColor":return new i(e);case"blurBackgroundOpacity":case"customControlBackgroundOpacity":case"customNavbarBlurOpacity":return new s(e);case"defaultPlayerMode":case"defaultVideoQuality":case"i18nLanguage":case"deadVideoTitleProvider":return new r(e);case"darkScheduleStart":case"darkScheduleEnd":return new n(e);case"playerFocusOffset":return new u(e);case"sideBarOffset":return new o(e,-40,40);default:return new a(e)}}isValidate(e){return e}validate(e){const t=this.isValidate(e);if(t===undefined){return this.originalValue}return t}}class i extends a{isValidate(e){if(/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(e)){if(e.length<7){return`#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}`}else{return e}}}}class s extends a{isValidate(e){if(/^([-+]?\d+)(\.\d+)?$/.test(e)){const t=parseFloat(e);if(t>=0&&t<=1){return e}}}}class r extends a{isValidate(e){const[t]=Object.values(Resource.manifest).filter(e=>e.dropdown&&e.dropdown.key===this.key).map(e=>e.dropdown);if(t.items.indexOf(e)!==-1){return e}}}class n extends a{isValidate(e){const t=e.match(/^([\d]{1,2}):([\d]{1,2})$/);if(t&&t.length>=3){const e={hour:parseInt(t[1]),minute:parseInt(t[2])};(function(){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}}).call(e);return`${e.hour}:${e.minute<10?"0"+e.minute:e.minute}`}}}class u extends a{isValidate(e){const t=parseInt(e);if(!isNaN(t)){return t}}}class o extends a{constructor(e,t,a){super(e);this.min=t;this.max=a}isValidate(e){const t=parseInt(e);if(!isNaN(t)&&t>=this.min&&t<=this.max){return t}}}return{export:{Validator:a,ColorValidator:i,DropDownValidator:r,OpacityValidator:s,TimeValidator:n,NumberValidator:u}}}})();
|
||||
@ -92,8 +92,9 @@
|
||||
<checkbox indent="0" key="hideTopSearch" dependencies=""></checkbox>
|
||||
<checkbox indent="0" key="fullTweetsTitle" dependencies=""></checkbox>
|
||||
<checkbox indent="0" key="fullPageTitle" dependencies=""></checkbox>
|
||||
<!-- <checkbox indent="0" key="showDeadVideoTitle" dependencies=""></checkbox> -->
|
||||
<!-- <checkbox indent="1" key="useBiliplusRedirect" dependencies="showDeadVideoTitle"></checkbox> -->
|
||||
<checkbox indent="0" key="showDeadVideoTitle" dependencies=""></checkbox>
|
||||
<checkbox indent="1" key="useBiliplusRedirect" dependencies="showDeadVideoTitle"></checkbox>
|
||||
<dropdown indent="1" key="deadVideoTitleProvider" dependencies="showDeadVideoTitle"></dropdown>
|
||||
<checkbox indent="0" key="biliplusRedirect" dependencies=""></checkbox>
|
||||
<checkbox indent="0" key="imageResolution" dependencies=""></checkbox>
|
||||
<checkbox indent="0" key="oldTweets" dependencies=""></checkbox>
|
||||
|
||||
@ -16,6 +16,7 @@ export class Validator {
|
||||
case 'defaultPlayerMode':
|
||||
case 'defaultVideoQuality':
|
||||
case 'i18nLanguage':
|
||||
case 'deadVideoTitleProvider':
|
||||
return new DropDownValidator(key)
|
||||
case 'darkScheduleStart':
|
||||
case 'darkScheduleEnd':
|
||||
|
||||
@ -76,7 +76,7 @@
|
||||
return;
|
||||
}
|
||||
const aids = deadVideos.map(it => it.getAttribute('data-aid'));
|
||||
const query = new WatchlaterProvider();
|
||||
const query = settings.deadVideoTitleProvider === 'Biliplus' ? new BiliplusProvider() : new WatchlaterProvider();
|
||||
const infos = await query.queryInfo(aids);
|
||||
deadVideos.forEach((it, index) => {
|
||||
it.classList.remove('disabled');
|
||||
|
||||
@ -80,7 +80,8 @@
|
||||
return
|
||||
}
|
||||
const aids = deadVideos.map(it => it.getAttribute('data-aid')!)
|
||||
const query = new WatchlaterProvider()
|
||||
const query: DeadVideoInfoProvider =
|
||||
settings.deadVideoTitleProvider === 'Biliplus' ? new BiliplusProvider() : new WatchlaterProvider()
|
||||
const infos = await query.queryInfo(aids)
|
||||
deadVideos.forEach((it, index) => {
|
||||
it.classList.remove('disabled')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user