mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-26 20:50:30 +08:00
fix: add delay to WebSocket reconnection and improve event listener cleanup
This commit is contained in:
parent
51720296cc
commit
67aa17f6bb
@ -278,7 +278,7 @@ const mihomoTraffic = async (): Promise<void> => {
|
||||
mihomoTrafficWs.onclose = (): void => {
|
||||
if (trafficRetry) {
|
||||
trafficRetry--
|
||||
mihomoTraffic()
|
||||
setTimeout(mihomoTraffic, 1000)
|
||||
}
|
||||
}
|
||||
|
||||
@ -325,7 +325,7 @@ const mihomoMemory = async (): Promise<void> => {
|
||||
mihomoMemoryWs.onclose = (): void => {
|
||||
if (memoryRetry) {
|
||||
memoryRetry--
|
||||
mihomoMemory()
|
||||
setTimeout(mihomoMemory, 1000)
|
||||
}
|
||||
}
|
||||
|
||||
@ -373,7 +373,7 @@ const mihomoLogs = async (): Promise<void> => {
|
||||
mihomoLogsWs.onclose = (): void => {
|
||||
if (logsRetry) {
|
||||
logsRetry--
|
||||
mihomoLogs()
|
||||
setTimeout(mihomoLogs, 1000)
|
||||
}
|
||||
}
|
||||
|
||||
@ -419,7 +419,7 @@ const mihomoConnections = async (): Promise<void> => {
|
||||
mihomoConnectionsWs.onclose = (): void => {
|
||||
if (connectionsRetry) {
|
||||
connectionsRetry--
|
||||
mihomoConnections()
|
||||
setTimeout(mihomoConnections, 1000)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -121,17 +121,14 @@ const Logs: React.FC = () => {
|
||||
<Virtuoso
|
||||
ref={virtuosoRef}
|
||||
data={filteredLogs}
|
||||
itemContent={(i, log) => {
|
||||
return (
|
||||
itemContent={(i, log) => (
|
||||
<LogItem
|
||||
index={i}
|
||||
key={log.payload + i}
|
||||
time={log.time}
|
||||
type={log.type}
|
||||
payload={log.payload}
|
||||
/>
|
||||
)
|
||||
}}
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
</BasePage>
|
||||
|
||||
@ -75,18 +75,29 @@ const Override: React.FC = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const addOverrideItemRef = useRef(addOverrideItem)
|
||||
addOverrideItemRef.current = addOverrideItem
|
||||
|
||||
const tRef = useRef(t)
|
||||
tRef.current = t
|
||||
|
||||
useEffect(() => {
|
||||
pageRef.current?.addEventListener('dragover', (e) => {
|
||||
const element = pageRef.current
|
||||
if (!element) return
|
||||
|
||||
const handleDragOver = (e: DragEvent): void => {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
setFileOver(true)
|
||||
})
|
||||
pageRef.current?.addEventListener('dragleave', (e) => {
|
||||
}
|
||||
|
||||
const handleDragLeave = (e: DragEvent): void => {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
setFileOver(false)
|
||||
})
|
||||
pageRef.current?.addEventListener('drop', async (event) => {
|
||||
}
|
||||
|
||||
const handleDrop = async (event: DragEvent): Promise<void> => {
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
if (event.dataTransfer?.files) {
|
||||
@ -94,7 +105,7 @@ const Override: React.FC = () => {
|
||||
if (file.name.endsWith('.js') || file.name.endsWith('.yaml')) {
|
||||
const content = await readTextFile((file as File & { path: string }).path)
|
||||
try {
|
||||
await addOverrideItem({
|
||||
await addOverrideItemRef.current({
|
||||
name: file.name,
|
||||
type: 'local',
|
||||
file: content,
|
||||
@ -104,15 +115,20 @@ const Override: React.FC = () => {
|
||||
setFileOver(false)
|
||||
}
|
||||
} else {
|
||||
alert(t('override.unsupportedFileType'))
|
||||
alert(tRef.current('override.unsupportedFileType'))
|
||||
}
|
||||
}
|
||||
setFileOver(false)
|
||||
})
|
||||
}
|
||||
|
||||
element.addEventListener('dragover', handleDragOver)
|
||||
element.addEventListener('dragleave', handleDragLeave)
|
||||
element.addEventListener('drop', handleDrop)
|
||||
|
||||
return (): void => {
|
||||
pageRef.current?.removeEventListener('dragover', () => {})
|
||||
pageRef.current?.removeEventListener('dragleave', () => {})
|
||||
pageRef.current?.removeEventListener('drop', () => {})
|
||||
element.removeEventListener('dragover', handleDragOver)
|
||||
element.removeEventListener('dragleave', handleDragLeave)
|
||||
element.removeEventListener('drop', handleDrop)
|
||||
}
|
||||
}, [])
|
||||
|
||||
|
||||
@ -156,26 +156,37 @@ const Profiles: React.FC = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const handleInputKeyUp = useCallback(
|
||||
(e: KeyboardEvent<HTMLInputElement>) => {
|
||||
if (e.key !== 'Enter' || isUrlEmpty) return
|
||||
handleImport()
|
||||
},
|
||||
[isUrlEmpty]
|
||||
)
|
||||
const handleImportRef = useRef(handleImport)
|
||||
handleImportRef.current = handleImport
|
||||
|
||||
const addProfileItemRef = useRef(addProfileItem)
|
||||
addProfileItemRef.current = addProfileItem
|
||||
|
||||
const tRef = useRef(t)
|
||||
tRef.current = t
|
||||
|
||||
const handleInputKeyUp = useCallback((e: KeyboardEvent<HTMLInputElement>) => {
|
||||
if (e.key !== 'Enter' || e.currentTarget.value.trim() === '') return
|
||||
handleImportRef.current()
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
pageRef.current?.addEventListener('dragover', (e) => {
|
||||
const element = pageRef.current
|
||||
if (!element) return
|
||||
|
||||
const handleDragOver = (e: DragEvent): void => {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
setFileOver(true)
|
||||
})
|
||||
pageRef.current?.addEventListener('dragleave', (e) => {
|
||||
}
|
||||
|
||||
const handleDragLeave = (e: DragEvent): void => {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
setFileOver(false)
|
||||
})
|
||||
pageRef.current?.addEventListener('drop', async (event) => {
|
||||
}
|
||||
|
||||
const handleDrop = async (event: DragEvent): Promise<void> => {
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
if (event.dataTransfer?.files) {
|
||||
@ -184,20 +195,25 @@ const Profiles: React.FC = () => {
|
||||
try {
|
||||
const path = window.api.webUtils.getPathForFile(file)
|
||||
const content = await readTextFile(path)
|
||||
await addProfileItem({ name: file.name, type: 'local', file: content })
|
||||
await addProfileItemRef.current({ name: file.name, type: 'local', file: content })
|
||||
} catch (e) {
|
||||
alert(e)
|
||||
}
|
||||
} else {
|
||||
alert(t('profiles.error.unsupportedFileType'))
|
||||
alert(tRef.current('profiles.error.unsupportedFileType'))
|
||||
}
|
||||
}
|
||||
setFileOver(false)
|
||||
})
|
||||
}
|
||||
|
||||
element.addEventListener('dragover', handleDragOver)
|
||||
element.addEventListener('dragleave', handleDragLeave)
|
||||
element.addEventListener('drop', handleDrop)
|
||||
|
||||
return (): void => {
|
||||
pageRef.current?.removeEventListener('dragover', () => {})
|
||||
pageRef.current?.removeEventListener('dragleave', () => {})
|
||||
pageRef.current?.removeEventListener('drop', () => {})
|
||||
element.removeEventListener('dragover', handleDragOver)
|
||||
element.removeEventListener('dragleave', handleDragLeave)
|
||||
element.removeEventListener('drop', handleDrop)
|
||||
}
|
||||
}, [])
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user