fix(frontend): eventListener leak
All checks were successful
Lint / pnpm_install (pull_request) Successful in 1m27s
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m40s
Lint / lint (backend) (pull_request) Successful in 2m9s
Publish Docker image / Build (pull_request) Successful in 4m40s
Lint / lint (frontend) (pull_request) Successful in 2m33s
Lint / lint (frontend-embed) (pull_request) Successful in 2m34s
Lint / lint (frontend-shared) (pull_request) Successful in 2m22s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m29s
Lint / lint (misskey-js) (pull_request) Successful in 2m29s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m23s
Lint / lint (sw) (pull_request) Successful in 2m23s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m26s
Lint / typecheck (backend) (pull_request) Successful in 2m25s
Lint / typecheck (sw) (pull_request) Successful in 1m31s

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
This commit is contained in:
ゆめ 2024-11-10 00:09:08 -06:00
parent e74174dea3
commit 997c5b3d35

View file

@ -68,14 +68,20 @@ export function useStream(): Misskey.IStream {
if (timeoutHeartBeat) window.clearTimeout(timeoutHeartBeat); if (timeoutHeartBeat) window.clearTimeout(timeoutHeartBeat);
timeoutHeartBeat = window.setTimeout(heartbeat, HEART_BEAT_INTERVAL); timeoutHeartBeat = window.setTimeout(heartbeat, HEART_BEAT_INTERVAL);
// send heartbeat right now when last send time is over HEART_BEAT_INTERVAL const target = () => {
document.addEventListener('visibilitychange', () => {
if ( if (
!stream !stream
|| document.visibilityState !== 'visible' || document.visibilityState !== 'visible'
|| Date.now() - lastHeartbeatCall < HEART_BEAT_INTERVAL || Date.now() - lastHeartbeatCall < HEART_BEAT_INTERVAL
) return; ) return;
heartbeat(); heartbeat();
};
// send heartbeat right now when last send time is over HEART_BEAT_INTERVAL
document.addEventListener('visibilitychange', target);
stream.on('_disconnected_', () => {
document.removeEventListener('visibilitychange', target);
}); });
return stream; return stream;