Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修复了一些bug, 增加了log信息 #1806

Merged
merged 5 commits into from
May 7, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/global.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,7 @@ declare global {
checkInCenter: boolean,
fullscreenGiftBox: boolean,
scrollOutPlayer: boolean,
scrollOutPlayerTriggerPlace: string[],
scrollOutPlayerTriggerPlace: string,
scrollOutPlayerAutoPause: boolean,
scrollOutPlayerAutoLightOn: boolean,
}
Expand Down
1 change: 1 addition & 0 deletions src/style/home-hidden/home-hidden.scss
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ $items: (
technology,
cheese,
digital,
car,
life,
food,
animal,
Expand Down
7 changes: 7 additions & 0 deletions src/style/home-hidden/home-hidden.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ const homeHiddenOptions: HomeHiddenOption[] = [
.first-screen #reportFirst2 { display: none !important; }
`,
},
{
name: 'ext-box', displayName: '电竞赛事', style: `
.first-screen #reportFirst3 { display: none !important; } `, },
{
name: 'special', displayName: '特别推荐', style: `
#bili_report_spe_rec { display: none !important; }
Expand Down Expand Up @@ -93,6 +96,10 @@ const homeHiddenOptions: HomeHiddenOption[] = [
name: "digital",
displayName: "数码"
},
{
name: "car",
displayName: "汽车"
},
{
name: "life",
displayName: "生活"
Expand Down
2 changes: 1 addition & 1 deletion src/video/download-video/batch-download.ts
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ export class ManualInputBatch extends VideoEpisodeBatch {
}
})
}))
console.log(_.flatten(_.cloneDeep(pages)))
console.log("%cClass ManualInputBatch%c, data: ","color:yellow;", _.flatten(_.cloneDeep(pages)))
return _.flatten(pages)
}
}
Expand Down
149 changes: 65 additions & 84 deletions src/video/scroll-out-player.ts
Original file line number Diff line number Diff line change
@@ -1,58 +1,27 @@
let videoEl: HTMLVideoElement;
let mode = '视频中间';
let playerWrap: HTMLElement;
let observer: IntersectionObserver;
let intersectionLock = true; // Lock intersection action

enum MODE {
TOP = '视频顶部',
MID = '视频中间',
BOT = '视频底部',
}

function getToTop(_mode: string, client: DOMRect): number {
function getToTop(_mode: string): number {
switch (_mode) {
case MODE.TOP:
return client?.top;
return 1;
case MODE.MID:
return client?.top + client?.height / 2;
return 0.5;
case MODE.BOT:
return client?.top + client?.height;
default:
return 0;
default:
return 0.5;
}
}

// run callback when video el scroll out.
let handlePlayerOut = function (_mode: string, callback?: () => void) {
const videoClient = videoEl?.getBoundingClientRect();
if (videoClient?.top && videoClient.height) {
let toTop = getToTop(_mode, videoClient);
if (toTop <= 0) {
callback ? callback() : '';
// get ready to check when the video el came back.
window.addEventListener('scroll', onPlayerBackEvent, {
passive: true,
});
// remove out listener when got out.
window.removeEventListener('scroll', onPlayerOutEvent);
}
}
};

// run callback when video el scroll back.
let handlePlayerBack = function (_mode: string, callback?: () => void) {
const videoClient = videoEl?.getBoundingClientRect();
if (videoClient?.top && videoClient.height) {
let toTop = getToTop(_mode, videoClient);
if (toTop >= 0) {
callback ? callback() : '';
// this will done by play listener
window.addEventListener('scroll', onPlayerOutEvent, {
passive: true,
});
window.removeEventListener('scroll', onPlayerBackEvent);
}
}
};

let lightOff = () => {};
let lightOn = () => {};
async function initLights() {
Expand All @@ -75,73 +44,85 @@ async function initLights() {
lightOn = () => setLight(false);
}

function onPlayerOutEvent() {
handlePlayerOut(mode, () => {
if (settings.scrollOutPlayerAutoPause && !videoEl.paused) videoEl.pause();
// 满足条件: 自动开灯功能启用、自动关灯功能启用、没有启用自动暂停
// 补充: 当启用自动关灯与自动暂停时, 自动开灯动作由自动暂停完成
if (
settings.scrollOutPlayerAutoLightOn &&
settings.autoLightOff &&
!settings.scrollOutPlayerAutoPause
)
lightOn();
});
}

function onPlayerBackEvent() {
handlePlayerBack(mode, () => {
if (settings.scrollOutPlayerAutoPause && videoEl.paused) videoEl.play();
// 回来时自动关灯
// 满足条件: 自动开灯功能启用、自动关灯功能启用、没有启用自动暂停、视频播放中
if (
settings.scrollOutPlayerAutoLightOn &&
settings.autoLightOff &&
!settings.scrollOutPlayerAutoPause &&
!videoEl.paused
)
lightOff();
});
}

function addPlayerOutEvent() {
window.addEventListener('scroll', onPlayerOutEvent, { passive: true });
// window.addEventListener('scroll', onPlayerOutEvent, { passive: true });
observer.observe(playerWrap);
}

function removePlayerOutEvent() {
window.removeEventListener('scroll', onPlayerOutEvent);
// window.removeEventListener('scroll', onPlayerOutEvent);
observer.unobserve(playerWrap);
}

function mountListener() {
let intersectingCall = () => {
if (intersectionLock) return;
intersectionLock = true; // relock
if (settings.scrollOutPlayerAutoPause && videoEl.paused) videoEl.play();
if (
settings.scrollOutPlayerAutoLightOn &&
settings.autoLightOff &&
!settings.scrollOutPlayerAutoPause &&
!videoEl.paused
)
lightOff();
};

let disIntersectingCall = () => {
// if video is playing, unlock intersecting action
!videoEl.paused ? (intersectionLock = false) : '';
if (settings.scrollOutPlayerAutoPause && !videoEl.paused) videoEl.pause();
if (
settings.scrollOutPlayerAutoLightOn &&
settings.autoLightOff &&
!settings.scrollOutPlayerAutoPause
)
lightOn();
};

let createObserver = (mode?: string) =>
new IntersectionObserver(
([e]) => {
e.isIntersecting ? intersectingCall() : disIntersectingCall();
},
{
root: document,
threshold: getToTop(mode ? mode : settings.scrollOutPlayerTriggerPlace),
}
);

function mountPlayListener() {
Observer.videoChange(async () => {
videoEl.addEventListener('play', addPlayerOutEvent);
// onPlayerOutEvent 不会在我们手动暂停视频时移除, 所以需要监听暂停.
videoEl.addEventListener('pause', removePlayerOutEvent);
// videoEl.addEventListener('pause', removePlayerOutEvent);
videoEl.addEventListener('ended', removePlayerOutEvent);
});
}

async function setup() {
(async function setup() {
await initLights();
addSettingsListener('triggerPlayerOutPlace', (value) => (mode = value));
addSettingsListener('scrollOutPlayerTriggerPlace', (value) => {
removePlayerOutEvent();
observer = createObserver(value);
addPlayerOutEvent();
});
videoEl = dq('.bilibili-player-video video') as HTMLVideoElement;
mountListener();
}
setup();
playerWrap = (dq('.player-wrap') || dq('.player-module')) as HTMLElement;
observer = createObserver();
mountPlayListener();
})();

export default {
reload: () => {
window.addEventListener('scroll', onPlayerOutEvent);
mountListener();
addPlayerOutEvent();
mountPlayListener();
},
unload: () => {
// remove all listener
// umount player listener
Observer.videoChange(async () => {
videoEl.removeEventListener('play', addPlayerOutEvent);
videoEl.removeEventListener('pause', removePlayerOutEvent);
// videoEl.removeEventListener('pause', removePlayerOutEvent);
videoEl.removeEventListener('ended', removePlayerOutEvent);
});
window.removeEventListener('scroll', onPlayerOutEvent);
window.removeEventListener('scroll', onPlayerBackEvent);
removePlayerOutEvent();
},
};