mirror of
https://github.com/cheeaun/phanpy.git
synced 2025-03-22 05:39:20 +01:00
parent
5f64553d17
commit
99f81c49c4
2 changed files with 45 additions and 59 deletions
|
@ -1,6 +1,5 @@
|
||||||
import { memo } from 'preact/compat';
|
import { memo } from 'preact/compat';
|
||||||
import { useEffect, useRef, useState } from 'preact/hooks';
|
import { useEffect, useRef, useState } from 'preact/hooks';
|
||||||
import { useDebouncedCallback } from 'use-debounce';
|
|
||||||
|
|
||||||
import { api } from '../utils/api';
|
import { api } from '../utils/api';
|
||||||
import states, { saveStatus } from '../utils/states';
|
import states, { saveStatus } from '../utils/states';
|
||||||
|
@ -12,8 +11,9 @@ export default memo(function BackgroundService({ isLoggedIn }) {
|
||||||
// - WebSocket to receive notifications when page is visible
|
// - WebSocket to receive notifications when page is visible
|
||||||
const [visible, setVisible] = useState(true);
|
const [visible, setVisible] = useState(true);
|
||||||
usePageVisibility(setVisible);
|
usePageVisibility(setVisible);
|
||||||
const subRef = useRef();
|
useEffect(() => {
|
||||||
const debouncedStartNotifications = useDebouncedCallback(() => {
|
let sub;
|
||||||
|
if (isLoggedIn && visible) {
|
||||||
const { masto, streaming, instance } = api();
|
const { masto, streaming, instance } = api();
|
||||||
(async () => {
|
(async () => {
|
||||||
// 1. Get the latest notification
|
// 1. Get the latest notification
|
||||||
|
@ -41,7 +41,7 @@ export default memo(function BackgroundService({ isLoggedIn }) {
|
||||||
|
|
||||||
// 2. Start streaming
|
// 2. Start streaming
|
||||||
if (streaming) {
|
if (streaming) {
|
||||||
let sub = (subRef.current = streaming.user.notification.subscribe());
|
sub = streaming.user.notification.subscribe();
|
||||||
console.log('🎏 Streaming notification', sub);
|
console.log('🎏 Streaming notification', sub);
|
||||||
for await (const entry of sub) {
|
for await (const entry of sub) {
|
||||||
if (!sub) break;
|
if (!sub) break;
|
||||||
|
@ -56,18 +56,10 @@ export default memo(function BackgroundService({ isLoggedIn }) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
}, 3000);
|
|
||||||
useEffect(() => {
|
|
||||||
// let sub;
|
|
||||||
if (isLoggedIn && visible) {
|
|
||||||
debouncedStartNotifications();
|
|
||||||
}
|
}
|
||||||
return () => {
|
return () => {
|
||||||
// sub?.unsubscribe?.();
|
sub?.unsubscribe?.();
|
||||||
// sub = null;
|
sub = null;
|
||||||
debouncedStartNotifications?.cancel?.();
|
|
||||||
subRef.current?.unsubscribe?.();
|
|
||||||
subRef.current = null;
|
|
||||||
};
|
};
|
||||||
}, [visible, isLoggedIn]);
|
}, [visible, isLoggedIn]);
|
||||||
|
|
||||||
|
|
|
@ -252,10 +252,6 @@ function Timeline({
|
||||||
},
|
},
|
||||||
[id, loadItems, checkForUpdates, snapStates.settings.autoRefresh],
|
[id, loadItems, checkForUpdates, snapStates.settings.autoRefresh],
|
||||||
);
|
);
|
||||||
const debouncedLoadOrCheckUpdates = useDebouncedCallback(
|
|
||||||
loadOrCheckUpdates,
|
|
||||||
3000,
|
|
||||||
);
|
|
||||||
|
|
||||||
const lastHiddenTime = useRef();
|
const lastHiddenTime = useRef();
|
||||||
usePageVisibility(
|
usePageVisibility(
|
||||||
|
@ -263,14 +259,12 @@ function Timeline({
|
||||||
if (visible) {
|
if (visible) {
|
||||||
const timeDiff = Date.now() - lastHiddenTime.current;
|
const timeDiff = Date.now() - lastHiddenTime.current;
|
||||||
if (!lastHiddenTime.current || timeDiff > 1000 * 60) {
|
if (!lastHiddenTime.current || timeDiff > 1000 * 60) {
|
||||||
// 1 minute
|
loadOrCheckUpdates({
|
||||||
debouncedLoadOrCheckUpdates({
|
|
||||||
disableIdleCheck: true,
|
disableIdleCheck: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
lastHiddenTime.current = Date.now();
|
lastHiddenTime.current = Date.now();
|
||||||
debouncedLoadOrCheckUpdates.cancel();
|
|
||||||
}
|
}
|
||||||
setVisible(visible);
|
setVisible(visible);
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue