diff options
| author | Roger Braun <roger@rogerbraun.net> | 2017-02-16 17:49:11 +0100 |
|---|---|---|
| committer | Roger Braun <roger@rogerbraun.net> | 2017-02-16 17:49:11 +0100 |
| commit | f25ae61c5daf7e925fb38d1636a61b70a4dd2d1c (patch) | |
| tree | 883faa9a3bf7999c1e290d140951e35c13ae45a2 /src/modules | |
| parent | 319af91a4762c7edab567048f1f44b5a26005d5b (diff) | |
| parent | ce5b3d4c924d6e94b6fbde3c50fdb209e4ec1fab (diff) | |
Merge branch 'develop' into feature/hash-routed
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/api.js | 23 | ||||
| -rw-r--r-- | src/modules/config.js | 30 | ||||
| -rw-r--r-- | src/modules/statuses.js | 6 | ||||
| -rw-r--r-- | src/modules/users.js | 24 |
4 files changed, 76 insertions, 7 deletions
diff --git a/src/modules/api.js b/src/modules/api.js index 4000dc60..a32adfde 100644 --- 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/config.js b/src/modules/config.js new file mode 100644 index 00000000..4365d554 --- /dev/null +++ b/src/modules/config.js @@ -0,0 +1,30 @@ +import { set } from 'vue' +import StyleSetter from '../services/style_setter/style_setter.js' + +const defaultState = { + name: 'Pleroma FE' +} + +const config = { + state: defaultState, + mutations: { + setOption (state, { name, value }) { + set(state, name, value) + } + }, + actions: { + setOption ({ commit }, { name, value }) { + commit('setOption', {name, value}) + switch (name) { + case 'name': + document.title = value + break + case 'theme': + const fullPath = `/static/css/${value}` + StyleSetter.setStyle(fullPath) + } + } + } +} + +export default config diff --git a/src/modules/statuses.js b/src/modules/statuses.js index b1aa404a..871172b5 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -153,16 +153,18 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us } } + // Decide if we should treat the status as new for this timeline. + let resultForCurrentTimeline // Some statuses should only be added to the global status repository. if (timeline && addToTimeline) { - mergeOrAdd(timelineObject.statuses, status) + resultForCurrentTimeline = mergeOrAdd(timelineObject.statuses, status) } if (timeline && showImmediately) { // Add it directly to the visibleStatuses, don't change // newStatusCount mergeOrAdd(timelineObject.visibleStatuses, status) - } else if (timeline && addToTimeline && result.new) { + } else if (timeline && addToTimeline && resultForCurrentTimeline.new) { // Just change newStatuscount timelineObject.newStatusCount += 1 } diff --git a/src/modules/users.js b/src/modules/users.js index 8ba365f3..ae90abbd 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -1,6 +1,6 @@ -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' // TODO: Unify with mergeOrAdd in statuses.js export const mergeOrAdd = (arr, item) => { @@ -18,6 +18,10 @@ export const mergeOrAdd = (arr, item) => { } export const mutations = { + setMuted (state, { user: {id}, muted }) { + const user = find(state.users, {id}) + set(user, 'muted', muted) + }, setCurrentUser (state, user) { state.currentUser = user }, @@ -29,6 +33,9 @@ export const mutations = { }, addNewUsers (state, users) { each(users, (user) => mergeOrAdd(state.users, user)) + }, + setUserForStatus (state, status) { + status.user = find(state.users, status.user) } } @@ -47,6 +54,15 @@ const users = { const retweetedUsers = compact(map(statuses, 'retweeted_status.user')) store.commit('addNewUsers', users) store.commit('addNewUsers', retweetedUsers) + + // Reconnect users to statuses + each(statuses, (status) => { + store.commit('setUserForStatus', status) + }) + // Reconnect users to retweets + each(compact(map(statuses, 'retweeted_status')), (status) => { + store.commit('setUserForStatus', status) + }) }, loginUser (store, userCredentials) { const commit = store.commit @@ -60,12 +76,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)) |
