aboutsummaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorRoger Braun <roger@rogerbraun.net>2017-02-16 17:49:11 +0100
committerRoger Braun <roger@rogerbraun.net>2017-02-16 17:49:11 +0100
commitf25ae61c5daf7e925fb38d1636a61b70a4dd2d1c (patch)
tree883faa9a3bf7999c1e290d140951e35c13ae45a2 /src/modules
parent319af91a4762c7edab567048f1f44b5a26005d5b (diff)
parentce5b3d4c924d6e94b6fbde3c50fdb209e4ec1fab (diff)
Merge branch 'develop' into feature/hash-routed
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/api.js23
-rw-r--r--src/modules/config.js30
-rw-r--r--src/modules/statuses.js6
-rw-r--r--src/modules/users.js24
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))