File size: 2,889 Bytes
a21c316 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | import { useEffect, useRef } from 'react';
import { useConfigStore } from '../../stores/useConfigStore';
import { useAccountStore } from '../../stores/useAccountStore';
function BackgroundTaskRunner() {
const { config } = useConfigStore();
const { refreshAllQuotas } = useAccountStore();
// Use refs to track previous state to detect "off -> on" transitions
const prevAutoRefreshRef = useRef(false);
const prevAutoSyncRef = useRef(false);
// Auto Refresh Quota Effect
useEffect(() => {
if (!config) return;
let intervalId: ReturnType<typeof setTimeout> | null = null;
const { auto_refresh, refresh_interval } = config;
// Check if we just turned it on
if (auto_refresh && !prevAutoRefreshRef.current) {
console.log('[BackgroundTask] Auto-refresh enabled, executing immediately...');
refreshAllQuotas();
}
prevAutoRefreshRef.current = auto_refresh;
if (auto_refresh && refresh_interval > 0) {
console.log(`[BackgroundTask] Starting auto-refresh quota timer: ${refresh_interval} mins`);
intervalId = setInterval(() => {
console.log('[BackgroundTask] Auto-refreshing all quotas...');
refreshAllQuotas();
}, Math.min(refresh_interval * 60 * 1000, 2147483647));
}
return () => {
if (intervalId) {
console.log('[BackgroundTask] Clearing auto-refresh timer');
clearInterval(intervalId);
}
};
}, [config?.auto_refresh, config?.refresh_interval]);
// Auto Sync Current Account Effect
useEffect(() => {
if (!config) return;
let intervalId: ReturnType<typeof setTimeout> | null = null;
const { auto_sync, sync_interval } = config;
const { syncAccountFromDb } = useAccountStore.getState();
// Check if we just turned it on
if (auto_sync && !prevAutoSyncRef.current) {
console.log('[BackgroundTask] Auto-sync enabled, executing immediately...');
syncAccountFromDb();
}
prevAutoSyncRef.current = auto_sync;
if (auto_sync && sync_interval > 0) {
console.log(`[BackgroundTask] Starting auto-sync account timer: ${sync_interval} mins`);
intervalId = setInterval(() => {
console.log('[BackgroundTask] Auto-syncing current account from DB...');
syncAccountFromDb();
}, Math.min(sync_interval * 60 * 1000, 2147483647));
}
return () => {
if (intervalId) {
console.log('[BackgroundTask] Clearing auto-sync timer');
clearInterval(intervalId);
}
};
}, [config?.auto_sync, config?.sync_interval]);
// Render nothing
return null;
}
export default BackgroundTaskRunner;
|