mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-20 00:18:55 +00:00
fix(monitor): preserve the saved auto-refresh preference
This commit is contained in:
@@ -4,6 +4,7 @@ export interface UseAutoRefreshOptions {
|
||||
storageKey: string
|
||||
intervals?: readonly number[]
|
||||
defaultInterval?: number
|
||||
defaultEnabled?: boolean
|
||||
onRefresh: () => Promise<void> | void
|
||||
/** Skip tick when this returns true (e.g. modal open, document hidden). */
|
||||
shouldPause?: () => boolean
|
||||
@@ -18,7 +19,7 @@ export function useAutoRefresh(options: UseAutoRefreshOptions) {
|
||||
shouldPause,
|
||||
} = options
|
||||
|
||||
const enabled = ref(false)
|
||||
const enabled = ref(options.defaultEnabled ?? false)
|
||||
const intervalSeconds = ref(defaultInterval ?? intervals[intervals.length - 1])
|
||||
const countdown = ref(0)
|
||||
const fetching = ref(false)
|
||||
|
||||
@@ -66,6 +66,7 @@ const autoRefresh = useAutoRefresh({
|
||||
storageKey: 'channel-status-auto-refresh',
|
||||
intervals: [30, 60, 120] as const,
|
||||
defaultInterval: DEFAULT_INTERVAL_SECONDS,
|
||||
defaultEnabled: true,
|
||||
onRefresh: () => reload(true),
|
||||
shouldPause: () => document.hidden || loading.value,
|
||||
})
|
||||
@@ -162,7 +163,7 @@ watch(
|
||||
onMounted(() => {
|
||||
void reload(false)
|
||||
if (appStore.cachedPublicSettings?.channel_monitor_enabled !== false) {
|
||||
autoRefresh.setEnabled(true)
|
||||
autoRefresh.setEnabled(autoRefresh.enabled.value)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -24,6 +24,25 @@ beforeEach(() => { vi.useFakeTimers(); localStorage.clear(); list.mockReset().mo
|
||||
afterEach(() => { wrapper?.unmount(); vi.useRealTimers(); localStorage.clear() })
|
||||
|
||||
describe('channel monitor refresh interval', () => {
|
||||
it('keeps automatic refresh disabled after reopening the page', async () => {
|
||||
wrapper = mountView(); await flushPromises()
|
||||
await wrapper.get('.disable').trigger('click')
|
||||
wrapper.unmount()
|
||||
wrapper = mountView(); await flushPromises()
|
||||
const calls = list.mock.calls.length
|
||||
await vi.advanceTimersByTimeAsync(240000)
|
||||
expect(list).toHaveBeenCalledTimes(calls)
|
||||
expect(JSON.parse(localStorage.getItem('channel-status-auto-refresh')!).enabled).toBe(false)
|
||||
await wrapper.get('.refresh').trigger('click'); await flushPromises()
|
||||
expect(list).toHaveBeenCalledTimes(calls + 1)
|
||||
})
|
||||
|
||||
it('starts automatic refresh for a first visit', async () => {
|
||||
wrapper = mountView(); await flushPromises()
|
||||
await vi.advanceTimersByTimeAsync(120000)
|
||||
expect(list.mock.calls.length).toBeGreaterThan(1)
|
||||
})
|
||||
|
||||
it('refreshes at the selected interval on successive automatic refreshes', async () => {
|
||||
wrapper = mountView(); await flushPromises()
|
||||
await wrapper.get('.interval').trigger('click')
|
||||
|
||||
Reference in New Issue
Block a user