mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Add 4K option
This commit is contained in:
parent
b4247125b0
commit
25e14e68ee
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -54,11 +54,10 @@
|
||||
"custom-navbar-watchlater-list.min.js": "57EA2C62F7442750BB177B9898CF07BA61C45F0FD99737516ED609051699B054",
|
||||
"danmaku-converter.min.js": "6C844406F060DCF2483F9CC4C7329911ED77BC77097F2BC5B925B6F12C990820",
|
||||
"dark.min.css": "87197C4B8C71279C9EF315A473E12082AB77A6824CCDD8E5C1BB4E8025447DC1",
|
||||
"dark.user.css": "6635E5C410EC08BE89D20EB53E1F52B2F2E276DBE4948DEE2FF7EA685F5E1AAD",
|
||||
"dark.user.css": "B218ED92B144F0EBE9A04C9F0B139298A19703A913161FA420A15036FC70E4B4",
|
||||
"dark-important.min.css": "9381B563726BCA701DD77C7AD572793538A45CB839F56008A55EE46821EA1B05",
|
||||
"dark-navbar.min.css": "A2D91F11127D165571ACCC53004EDDB118CEE110F9B020D7E0541E1C8FAEA478",
|
||||
"dark-schedule.min.js": "853C446547603F4F0425F19F09F73335C9EC451A790C1C07E5E5B88A09E9B453",
|
||||
"dark-slice-12.min.css": "67DECF7390D1BBEFCE95D4F65ABAFE12400F777CF0110550FE151559C08B8389",
|
||||
"dark-styles.min.js": "74E6D655F88E50A27D60F189554F6656CCD2A6EA2686FD9946CA9A89EABF7719",
|
||||
"debounce.min.js": "54D33E1273C1F3FE19550BF1844339C3D54D6B01DF8A39C3162D95B93B079CFA",
|
||||
"default-danmaku-settings.min.css": "D9942B184FEDA7B08CFA0C34920E97D7A83B81762DCBF757642EBB60F95FF25D",
|
||||
@ -66,7 +65,7 @@
|
||||
"default-live-quality.min.js": "5FF7CA53B85CF11B66E26F1AED5E6BCB7A55D348D08193FEE3D9D52716424234",
|
||||
"default-player-layout.min.js": "C6CE64216569A006566ADD7FC69451897612F46CC9641B8B15E0A13D5B1F2455",
|
||||
"default-player-mode.min.js": "244264CF975A8266ABB239C24E5CFEE0E3C918340267571244EE2CDC893D7167",
|
||||
"default-video-quality.min.js": "D423D80B3151ACA49D8F769054E0F839DA2367E7F7C0590EFD60F71B4A6BEADB",
|
||||
"default-video-quality.min.js": "A24225E0F72D5BCA7DFE529E5B90B03F494C8720ADEF91D466A923FD767EB907",
|
||||
"default-video-speed.min.js": "EBBF43D8013E32AC13C3E9396480574DDC549BA8BC7CCF15FE4EEF2DFEF64F33",
|
||||
"double-click-fullscreen.min.js": "C6D95B92ECDE67F2C0A3C6B6E4DC655C524F6A98CE0D48733ADCE4ABA780A47B",
|
||||
"download-audio.min.js": "1F4536DE4FF302BFD026CA17E028AF8EB037FB6D0CB355692549DECAEAE0E8C9",
|
||||
|
||||
BIN
min/bundle.zip
BIN
min/bundle.zip
Binary file not shown.
2
min/default-video-quality.min.js
vendored
2
min/default-video-quality.min.js
vendored
@ -1 +1 @@
|
||||
(()=>{return(e,a)=>{const t=[{name:"1080P60",value:116},{name:"1080P+",value:112},{name:"1080P",value:80},{name:"720P60",value:74},{name:"720P",value:64},{name:"480P",value:32},{name:"360P",value:15},{name:"自动",value:0}];async function i(){const a=await SpinQuery.any(()=>$(".bilibili-player-video-quality-menu .bui-select-list>li.bui-select-item"));if(!a){return}const i=(e,a)=>a-e;const[n]=a.toArray().map(e=>parseInt(e.getAttribute("data-value"))).sort(i);const[l]=t.filter(a=>a.name===e.defaultVideoQuality).map(e=>e.value).sort(i);const[r]=t.map(e=>e.value).filter(e=>e<=Math.min(l,n)).sort(i);const u=await SpinQuery.select(()=>document.querySelector("video"));function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===r){a.click()}});this.removeEventListener("play",s)}u.addEventListener("play",s)}if(Observer.videoChange){Observer.videoChange(i)}else{Observer.childList("#bofqi",()=>i())}}})();
|
||||
(()=>{return(e,a)=>{const t=[{name:"4K",value:120},{name:"1080P60",value:116},{name:"1080P+",value:112},{name:"1080P",value:80},{name:"720P60",value:74},{name:"720P",value:64},{name:"480P",value:32},{name:"360P",value:15},{name:"自动",value:0}];async function n(){const a=".bilibili-player-video-quality-menu .bui-select-list>li.bui-select-item";await SpinQuery.select(a);const n=dqa(a);if(!n){return}const[i]=n.map(e=>parseInt(e.getAttribute("data-value"))).sort(descendingSort(e=>e));const[l]=t.filter(a=>a.name===e.defaultVideoQuality).map(e=>e.value).sort(descendingSort(e=>e));const[u]=t.map(e=>e.value).filter(e=>e<=Math.min(l,i)).sort(descendingSort(e=>e));const r=await SpinQuery.select("video");function s(){n.forEach(e=>{if(parseInt(e.getAttribute("data-value"))===u){e.click()}});this.removeEventListener("play",s)}r.addEventListener("play",s)}Observer.videoChange(n)}})();
|
||||
@ -365,7 +365,7 @@ Resource.manifest = {
|
||||
},
|
||||
dropdown: {
|
||||
key: 'defaultVideoQuality',
|
||||
items: ['1080P60', '1080P+', '1080P', '720P60', '720P', '480P', '360P', '自动']
|
||||
items: ['4K', '1080P60', '1080P+', '1080P', '720P60', '720P', '480P', '360P', '自动']
|
||||
}
|
||||
},
|
||||
comboLike: {
|
||||
|
||||
@ -1,75 +0,0 @@
|
||||
const qualities = [
|
||||
{
|
||||
name: "1080P60",
|
||||
value: 116,
|
||||
},
|
||||
{
|
||||
name: "1080P+",
|
||||
value: 112,
|
||||
},
|
||||
{
|
||||
name: "1080P",
|
||||
value: 80,
|
||||
},
|
||||
{
|
||||
name: "720P60",
|
||||
value: 74,
|
||||
},
|
||||
{
|
||||
name: "720P",
|
||||
value: 64,
|
||||
},
|
||||
{
|
||||
name: "480P",
|
||||
value: 32,
|
||||
},
|
||||
{
|
||||
name: "360P",
|
||||
value: 15,
|
||||
},
|
||||
{
|
||||
name: "自动",
|
||||
value: 0,
|
||||
},
|
||||
];
|
||||
async function applyQuality()
|
||||
{
|
||||
const qualityItems = await SpinQuery.any(
|
||||
() => $(".bilibili-player-video-quality-menu .bui-select-list>li.bui-select-item"),
|
||||
);
|
||||
if (!qualityItems)
|
||||
{
|
||||
return;
|
||||
}
|
||||
const descendingOrder = (a, b) => b - a;
|
||||
const [availableHighestQualities] = qualityItems.toArray()
|
||||
.map(it => parseInt(it.getAttribute("data-value")))
|
||||
.sort(descendingOrder);
|
||||
const [targetQuality] = qualities
|
||||
.filter(it => it.name === settings.defaultVideoQuality)
|
||||
.map(it => it.value)
|
||||
.sort(descendingOrder);
|
||||
const [finalQuality] = qualities
|
||||
.map(it => it.value)
|
||||
.filter(it => it <= Math.min(targetQuality, availableHighestQualities))
|
||||
.sort(descendingOrder);
|
||||
const video = await SpinQuery.select(() => document.querySelector("video"));
|
||||
function onplay()
|
||||
{
|
||||
qualityItems.each((_, it) =>
|
||||
{
|
||||
if (parseInt(it.getAttribute("data-value")) === finalQuality)
|
||||
{
|
||||
it.click();
|
||||
}
|
||||
});
|
||||
this.removeEventListener("play", onplay);
|
||||
}
|
||||
video.addEventListener("play", onplay);
|
||||
}
|
||||
if (Observer.videoChange)
|
||||
{
|
||||
Observer.videoChange(applyQuality);
|
||||
}
|
||||
else
|
||||
{ Observer.childList("#bofqi", () => applyQuality()); }
|
||||
68
src/video/default-video-quality.ts
Normal file
68
src/video/default-video-quality.ts
Normal file
@ -0,0 +1,68 @@
|
||||
const qualities = [
|
||||
{
|
||||
name: '4K',
|
||||
value: 120,
|
||||
},
|
||||
{
|
||||
name: '1080P60',
|
||||
value: 116,
|
||||
},
|
||||
{
|
||||
name: '1080P+',
|
||||
value: 112,
|
||||
},
|
||||
{
|
||||
name: '1080P',
|
||||
value: 80,
|
||||
},
|
||||
{
|
||||
name: '720P60',
|
||||
value: 74,
|
||||
},
|
||||
{
|
||||
name: '720P',
|
||||
value: 64,
|
||||
},
|
||||
{
|
||||
name: '480P',
|
||||
value: 32,
|
||||
},
|
||||
{
|
||||
name: '360P',
|
||||
value: 15,
|
||||
},
|
||||
{
|
||||
name: '自动',
|
||||
value: 0,
|
||||
},
|
||||
]
|
||||
async function applyQuality() {
|
||||
const selector = '.bilibili-player-video-quality-menu .bui-select-list>li.bui-select-item'
|
||||
await SpinQuery.select(selector)
|
||||
const qualityItems = dqa(selector) as HTMLElement[]
|
||||
if (!qualityItems) {
|
||||
return
|
||||
}
|
||||
const [highestQualities] = qualityItems
|
||||
.map(it => parseInt(it.getAttribute('data-value')!))
|
||||
.sort(descendingSort(i => i))
|
||||
const [targetQuality] = qualities
|
||||
.filter(it => it.name === settings.defaultVideoQuality)
|
||||
.map(it => it.value)
|
||||
.sort(descendingSort(i => i))
|
||||
const [finalQuality] = qualities
|
||||
.map(it => it.value)
|
||||
.filter(it => it <= Math.min(targetQuality, highestQualities))
|
||||
.sort(descendingSort(i => i))
|
||||
const video = await SpinQuery.select('video') as HTMLVideoElement
|
||||
function onplay() {
|
||||
qualityItems.forEach(it => {
|
||||
if (parseInt(it.getAttribute('data-value')!) === finalQuality) {
|
||||
it.click()
|
||||
}
|
||||
})
|
||||
this.removeEventListener('play', onplay)
|
||||
}
|
||||
video.addEventListener('play', onplay)
|
||||
}
|
||||
Observer.videoChange(applyQuality)
|
||||
Loading…
Reference in New Issue
Block a user