mirror of
https://github.com/navidrome/navidrome.git
synced 2025-06-04 01:21:19 +03:00
Fix race condition that could cause multiple EventSource connections from the same client
This commit is contained in:
parent
4f90fa9924
commit
f2fd7ed016
@ -40,9 +40,7 @@ const authProvider = {
|
|||||||
// Avoid going to create admin dialog after logout/login without a refresh
|
// Avoid going to create admin dialog after logout/login without a refresh
|
||||||
config.firstTime = false
|
config.firstTime = false
|
||||||
if (config.devActivityPanel) {
|
if (config.devActivityPanel) {
|
||||||
startEventStream().catch((e) =>
|
startEventStream()
|
||||||
console.log('error setting up event stream:', e)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
return response
|
return response
|
||||||
})
|
})
|
||||||
|
@ -13,12 +13,10 @@ let timeout = null
|
|||||||
|
|
||||||
const getEventStream = async () => {
|
const getEventStream = async () => {
|
||||||
if (es === null) {
|
if (es === null) {
|
||||||
return httpClient(`${REST_URL}/keepalive/eventSource`).then(() => {
|
await httpClient(`${REST_URL}/keepalive/eventSource`)
|
||||||
es = new EventSource(
|
es = new EventSource(
|
||||||
baseUrl(`/app/api/events?jwt=${localStorage.getItem('token')}`)
|
baseUrl(`${REST_URL}/events?jwt=${localStorage.getItem('token')}`)
|
||||||
)
|
)
|
||||||
return es
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
return es
|
return es
|
||||||
}
|
}
|
||||||
@ -70,18 +68,21 @@ const startEventStream = async () => {
|
|||||||
console.log('Cannot create a unauthenticated EventSource connection')
|
console.log('Cannot create a unauthenticated EventSource connection')
|
||||||
return Promise.reject()
|
return Promise.reject()
|
||||||
}
|
}
|
||||||
getEventStream().then((newStream) => {
|
return getEventStream()
|
||||||
newStream.addEventListener('serverStart', eventHandler)
|
.then((newStream) => {
|
||||||
newStream.addEventListener('scanStatus', eventHandler)
|
newStream.addEventListener('serverStart', eventHandler)
|
||||||
newStream.addEventListener('keepAlive', eventHandler)
|
newStream.addEventListener('scanStatus', eventHandler)
|
||||||
newStream.onerror = (e) => {
|
newStream.addEventListener('keepAlive', eventHandler)
|
||||||
console.log('EventStream error', e)
|
newStream.onerror = (e) => {
|
||||||
setTimeout(reconnectIntervalCheck)
|
console.log('EventStream error', e)
|
||||||
dispatch(serverDown())
|
setTimeout(reconnectIntervalCheck)
|
||||||
}
|
dispatch(serverDown())
|
||||||
es = newStream
|
}
|
||||||
return es
|
return newStream
|
||||||
})
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
console.log(`Error connecting to server:`, e)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { setDispatch, startEventStream, stopEventStream }
|
export { setDispatch, startEventStream, stopEventStream }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user