mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-18 04:47:42 +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
|
||||
config.firstTime = false
|
||||
if (config.devActivityPanel) {
|
||||
startEventStream().catch((e) =>
|
||||
console.log('error setting up event stream:', e)
|
||||
)
|
||||
startEventStream()
|
||||
}
|
||||
return response
|
||||
})
|
||||
|
@ -13,12 +13,10 @@ let timeout = null
|
||||
|
||||
const getEventStream = async () => {
|
||||
if (es === null) {
|
||||
return httpClient(`${REST_URL}/keepalive/eventSource`).then(() => {
|
||||
es = new EventSource(
|
||||
baseUrl(`/app/api/events?jwt=${localStorage.getItem('token')}`)
|
||||
)
|
||||
return es
|
||||
})
|
||||
await httpClient(`${REST_URL}/keepalive/eventSource`)
|
||||
es = new EventSource(
|
||||
baseUrl(`${REST_URL}/events?jwt=${localStorage.getItem('token')}`)
|
||||
)
|
||||
}
|
||||
return es
|
||||
}
|
||||
@ -70,18 +68,21 @@ const startEventStream = async () => {
|
||||
console.log('Cannot create a unauthenticated EventSource connection')
|
||||
return Promise.reject()
|
||||
}
|
||||
getEventStream().then((newStream) => {
|
||||
newStream.addEventListener('serverStart', eventHandler)
|
||||
newStream.addEventListener('scanStatus', eventHandler)
|
||||
newStream.addEventListener('keepAlive', eventHandler)
|
||||
newStream.onerror = (e) => {
|
||||
console.log('EventStream error', e)
|
||||
setTimeout(reconnectIntervalCheck)
|
||||
dispatch(serverDown())
|
||||
}
|
||||
es = newStream
|
||||
return es
|
||||
})
|
||||
return getEventStream()
|
||||
.then((newStream) => {
|
||||
newStream.addEventListener('serverStart', eventHandler)
|
||||
newStream.addEventListener('scanStatus', eventHandler)
|
||||
newStream.addEventListener('keepAlive', eventHandler)
|
||||
newStream.onerror = (e) => {
|
||||
console.log('EventStream error', e)
|
||||
setTimeout(reconnectIntervalCheck)
|
||||
dispatch(serverDown())
|
||||
}
|
||||
return newStream
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(`Error connecting to server:`, e)
|
||||
})
|
||||
}
|
||||
|
||||
export { setDispatch, startEventStream, stopEventStream }
|
||||
|
Loading…
x
Reference in New Issue
Block a user