aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/modules/api.js2
-rw-r--r--src/services/fetcher/fetcher.js23
-rw-r--r--src/services/follow_request_fetcher/follow_request_fetcher.service.js4
-rw-r--r--src/services/notifications_fetcher/notifications_fetcher.service.js7
-rw-r--r--src/services/timeline_fetcher/timeline_fetcher.service.js7
5 files changed, 34 insertions, 9 deletions
diff --git a/src/modules/api.js b/src/modules/api.js
index 5e213f0d..7ddd8dde 100644
--- a/src/modules/api.js
+++ b/src/modules/api.js
@@ -20,7 +20,7 @@ const api = {
state.fetchers[fetcherName] = fetcher
},
removeFetcher (state, { fetcherName, fetcher }) {
- window.clearInterval(fetcher)
+ state.fetchers[fetcherName]()
delete state.fetchers[fetcherName]
},
setWsToken (state, token) {
diff --git a/src/services/fetcher/fetcher.js b/src/services/fetcher/fetcher.js
new file mode 100644
index 00000000..1d9239cc
--- /dev/null
+++ b/src/services/fetcher/fetcher.js
@@ -0,0 +1,23 @@
+
+export const makeFetcher = (call, interval) => {
+ let stopped = false
+ let timeout = null
+ let func = () => {}
+
+ func = () => {
+ call().finally(() => {
+ console.log('callbacks')
+ if (stopped) return
+ timeout = window.setTimeout(func, interval)
+ })
+ }
+
+ const stopFetcher = () => {
+ stopped = true
+ window.cancelTimeout(timeout)
+ }
+
+ func()
+
+ return stopFetcher
+}
diff --git a/src/services/follow_request_fetcher/follow_request_fetcher.service.js b/src/services/follow_request_fetcher/follow_request_fetcher.service.js
index 93fac9bc..8d1aba7b 100644
--- a/src/services/follow_request_fetcher/follow_request_fetcher.service.js
+++ b/src/services/follow_request_fetcher/follow_request_fetcher.service.js
@@ -1,4 +1,5 @@
import apiService from '../api/api.service.js'
+import { makeFetcher } from '../fetcher/fetcher.js'
const fetchAndUpdate = ({ store, credentials }) => {
return apiService.fetchFollowRequests({ credentials })
@@ -10,9 +11,8 @@ const fetchAndUpdate = ({ store, credentials }) => {
}
const startFetching = ({ credentials, store }) => {
- fetchAndUpdate({ credentials, store })
const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })
- return setInterval(boundFetchAndUpdate, 10000)
+ return makeFetcher(boundFetchAndUpdate, 10000)
}
const followRequestFetcher = {
diff --git a/src/services/notifications_fetcher/notifications_fetcher.service.js b/src/services/notifications_fetcher/notifications_fetcher.service.js
index 80be02ca..2a3a17be 100644
--- a/src/services/notifications_fetcher/notifications_fetcher.service.js
+++ b/src/services/notifications_fetcher/notifications_fetcher.service.js
@@ -1,4 +1,5 @@
import apiService from '../api/api.service.js'
+import makeFetcher from '../fetcher/fetcher.js'
const update = ({ store, notifications, older }) => {
store.dispatch('setNotificationsError', { value: false })
@@ -39,6 +40,7 @@ const fetchAndUpdate = ({ store, credentials, older = false }) => {
args['since'] = Math.max(...readNotifsIds)
fetchNotifications({ store, args, older })
}
+
return result
}
}
@@ -53,13 +55,12 @@ const fetchNotifications = ({ store, args, older }) => {
}
const startFetching = ({ credentials, store }) => {
- fetchAndUpdate({ credentials, store })
- const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })
// Initially there's set flag to silence all desktop notifications so
// that there won't spam of them when user just opened up the FE we
// reset that flag after a while to show new notifications once again.
setTimeout(() => store.dispatch('setNotificationsSilence', false), 10000)
- return setInterval(boundFetchAndUpdate, 10000)
+ const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store, refetch: true })
+ return makeFetcher(boundFetchAndUpdate, 10000)
}
const notificationsFetcher = {
diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js
index d0cddf84..8bbec2c7 100644
--- a/src/services/timeline_fetcher/timeline_fetcher.service.js
+++ b/src/services/timeline_fetcher/timeline_fetcher.service.js
@@ -1,6 +1,7 @@
import { camelCase } from 'lodash'
import apiService from '../api/api.service.js'
+import { makeFetcher } from '../fetcher/fetcher.js'
const update = ({ store, statuses, timeline, showImmediately, userId, pagination }) => {
const ccTimeline = camelCase(timeline)
@@ -70,9 +71,9 @@ const startFetching = ({ timeline = 'friends', credentials, store, userId = fals
const timelineData = rootState.statuses.timelines[camelCase(timeline)]
const showImmediately = timelineData.visibleStatuses.length === 0
timelineData.userId = userId
- fetchAndUpdate({ timeline, credentials, store, showImmediately, userId, tag })
- const boundFetchAndUpdate = () => fetchAndUpdate({ timeline, credentials, store, userId, tag })
- return setInterval(boundFetchAndUpdate, 10000)
+ const boundFetchAndUpdate = () =>
+ fetchAndUpdate({ timeline, credentials, store, showImmediately, userId, tag })
+ return makeFetcher(boundFetchAndUpdate, 10000)
}
const timelineFetcher = {
fetchAndUpdate,