forked from AkkomaGang/akkoma-fe
improved initial notifications fetching
This commit is contained in:
parent
319bb4ac28
commit
172ebaf4e6
4 changed files with 33 additions and 6 deletions
|
@ -47,6 +47,11 @@ const Notifications = {
|
|||
components: {
|
||||
Notification
|
||||
},
|
||||
created () {
|
||||
const { dispatch } = this.$store
|
||||
|
||||
dispatch('fetchAndUpdateNotifications')
|
||||
},
|
||||
watch: {
|
||||
unseenCount (count) {
|
||||
if (count > 0) {
|
||||
|
|
|
@ -31,18 +31,32 @@ const api = {
|
|||
},
|
||||
actions: {
|
||||
startMastoSocket (store) {
|
||||
store.state.mastoSocket = store.state.backendInteractor
|
||||
const { state, dispatch } = store
|
||||
state.mastoSocket = state.backendInteractor
|
||||
.startUserSocket({
|
||||
store,
|
||||
onMessage: (message) => {
|
||||
if (!message) return
|
||||
if (message.event === 'notification') {
|
||||
store.dispatch('addNewNotifications', { notifications: [message.notification], older: false })
|
||||
dispatch('addNewNotifications', {
|
||||
notifications: [message.notification],
|
||||
older: false
|
||||
})
|
||||
} else if (message.event === 'update') {
|
||||
store.dispatch('addNewStatuses', { statuses: [message.status], userId: false, showImmediately: false, timeline: 'friends' })
|
||||
dispatch('addNewStatuses', {
|
||||
statuses: [message.status],
|
||||
userId: false,
|
||||
showImmediately: false,
|
||||
timeline: 'friends'
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
state.mastoSocket.addEventListener('error', error => {
|
||||
console.error('Error with MastoAPI websocket:', error)
|
||||
dispatch('startFetchingTimeline', { timeline: 'friends' })
|
||||
dispatch('startFetchingNotifications')
|
||||
})
|
||||
},
|
||||
startFetchingTimeline (store, { timeline = 'friends', tag = false, userId = false }) {
|
||||
// Don't start fetching if we already are.
|
||||
|
@ -58,6 +72,9 @@ const api = {
|
|||
const fetcher = store.state.backendInteractor.startFetchingNotifications({ store })
|
||||
store.commit('addFetcher', { fetcherName: 'notifications', fetcher })
|
||||
},
|
||||
fetchAndUpdateNotifications (store) {
|
||||
store.state.backendInteractor.fetchAndUpdateNotifications({ store })
|
||||
},
|
||||
startFetchingFollowRequest (store) {
|
||||
// Don't start fetching if we already are.
|
||||
if (store.state.fetchers['followRequest']) return
|
||||
|
|
|
@ -470,7 +470,7 @@ const users = {
|
|||
}
|
||||
|
||||
store.dispatch('startMastoSocket').catch((error) => {
|
||||
console.error(error)
|
||||
console.error('Failed initializing MastoAPI Streaming socket', error)
|
||||
// Start getting fresh posts.
|
||||
store.dispatch('startFetchingTimeline', { timeline: 'friends' })
|
||||
|
||||
|
|
|
@ -12,18 +12,23 @@ const backendInteractorService = credentials => ({
|
|||
return notificationsFetcher.startFetching({ store, credentials })
|
||||
},
|
||||
|
||||
fetchAndUpdateNotifications ({ store }) {
|
||||
return notificationsFetcher.fetchAndUpdate({ store, credentials })
|
||||
},
|
||||
|
||||
startFetchingFollowRequest ({ store }) {
|
||||
return followRequestFetcher.startFetching({ store, credentials })
|
||||
},
|
||||
|
||||
startUserSocket ({ store, onMessage }) {
|
||||
const serv = store.rootState.instance.server.replace('https', 'wss')
|
||||
// const serb = 'ws://localhost:8080/'
|
||||
const serv = store.rootState.instance.server.replace('http', 'ws')
|
||||
const url = serv + getMastodonSocketURI({ credentials, stream: 'user' })
|
||||
const socket = new WebSocket(url)
|
||||
console.log(socket)
|
||||
if (socket) {
|
||||
socket.addEventListener('message', (wsEvent) => onMessage(handleMastoWS(wsEvent)))
|
||||
socket.addEventListener('error', (error) => console.error('WebSocket Error:', error))
|
||||
return socket
|
||||
} else {
|
||||
throw new Error('failed to connect to socket')
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue