logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe
commit: 832bd3cdd27d5ca10df6f67a51ac84c8cfa9c05d
parent: 14f07dde5ddeb968b26fed239ebf03ad95aa408d
Author: Roger Braun <roger@rogerbraun.net>
Date:   Thu, 16 Feb 2017 11:17:47 +0100

Fetch Public and TWKN timelines when viewed.

Diffstat:

Msrc/components/public_and_external_timeline/public_and_external_timeline.js6++++++
Msrc/components/public_timeline/public_timeline.js7+++++++
Msrc/modules/api.js23++++++++++++++++++++++-
Msrc/modules/users.js7+++----
Msrc/services/backend_interactor_service/backend_interactor_service.js8+++++++-
Msrc/services/timeline_fetcher/timeline_fetcher.service.js3+--
6 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/src/components/public_and_external_timeline/public_and_external_timeline.js b/src/components/public_and_external_timeline/public_and_external_timeline.js @@ -5,6 +5,12 @@ const PublicAndExternalTimeline = { }, computed: { timeline () { return this.$store.state.statuses.timelines.publicAndExternal } + }, + created () { + this.$store.dispatch('startFetching', 'publicAndExternal') + }, + destroyed () { + this.$store.dispatch('stopFetching', 'publicAndExternal') } } diff --git a/src/components/public_timeline/public_timeline.js b/src/components/public_timeline/public_timeline.js @@ -5,7 +5,14 @@ const PublicTimeline = { }, computed: { timeline () { return this.$store.state.statuses.timelines.public } + }, + created () { + this.$store.dispatch('startFetching', 'public') + }, + destroyed () { + this.$store.dispatch('stopFetching', 'public') } + } export default PublicTimeline diff --git a/src/modules/api.js b/src/modules/api.js @@ -2,11 +2,32 @@ import backendInteractorService from '../services/backend_interactor_service/bac const api = { state: { - backendInteractor: backendInteractorService() + backendInteractor: backendInteractorService(), + fetchers: {} }, mutations: { setBackendInteractor (state, backendInteractor) { state.backendInteractor = backendInteractor + }, + addFetcher (state, {timeline, fetcher}) { + state.fetchers[timeline] = fetcher + }, + removeFetcher (state, {timeline}) { + delete state.fetchers[timeline] + } + }, + actions: { + startFetching (store, timeline) { + // Don't start fetching if we already are. + if (!store.state.fetchers[timeline]) { + const fetcher = store.state.backendInteractor.startFetching({timeline, store}) + store.commit('addFetcher', {timeline, fetcher}) + } + }, + stopFetching (store, timeline) { + const fetcher = store.state.fetchers[timeline] + window.clearInterval(fetcher) + store.commit('removeFetcher', {timeline}) } } } diff --git a/src/modules/users.js b/src/modules/users.js @@ -1,4 +1,3 @@ -import timelineFetcher from '../services/timeline_fetcher/timeline_fetcher.service.js' import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js' import { compact, map, each, find, merge } from 'lodash' import { set } from 'vue' @@ -74,12 +73,12 @@ const users = { commit('setCurrentUser', user) commit('addNewUsers', [user]) - // Start getting fresh tweets. - timelineFetcher.startFetching({store, credentials: userCredentials}) - // Set our new backend interactor commit('setBackendInteractor', backendInteractorService(userCredentials)) + // Start getting fresh tweets. + store.dispatch('startFetching', 'friends') + // Fetch our friends store.rootState.api.backendInteractor.fetchFriends() .then((friends) => commit('addNewUsers', friends)) diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js @@ -1,4 +1,5 @@ import apiService from '../api/api.service.js' +import timelineFetcherService from '../timeline_fetcher/timeline_fetcher.service.js' const backendInteractorService = (credentials) => { const fetchStatus = ({id}) => { @@ -29,6 +30,10 @@ const backendInteractorService = (credentials) => { return apiService.unfollowUser({credentials, id}) } + const startFetching = ({timeline, store}) => { + return timelineFetcherService.startFetching({timeline, store, credentials}) + } + const backendInteractorServiceInstance = { fetchStatus, fetchConversation, @@ -37,7 +42,8 @@ const backendInteractorService = (credentials) => { followUser, unfollowUser, fetchAllFollowing, - verifyCredentials: apiService.verifyCredentials + verifyCredentials: apiService.verifyCredentials, + startFetching } return backendInteractorServiceInstance diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js @@ -30,8 +30,7 @@ const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false const startFetching = ({ timeline = 'friends', credentials, store }) => { fetchAndUpdate({timeline, credentials, store, showImmediately: true}) const boundFetchAndUpdate = () => fetchAndUpdate({ timeline, credentials, store }) - - setInterval(boundFetchAndUpdate, 10000) + return setInterval(boundFetchAndUpdate, 10000) } const timelineFetcher = { fetchAndUpdate,