aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/user_card_content/user_card_content.js71
-rw-r--r--src/modules/statuses.js23
-rw-r--r--src/services/api/api.service.js7
3 files changed, 80 insertions, 21 deletions
diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js
index 41e4e817..8bc01941 100644
--- a/src/components/user_card_content/user_card_content.js
+++ b/src/components/user_card_content/user_card_content.js
@@ -1,4 +1,5 @@
import UserAvatar from '../user_avatar/user_avatar.vue'
+import apiService from '../../services/api/api.service.js'
import { hex2rgb } from '../../services/color_convert/color_convert.js'
import { requestFollow, requestUnfollow } from '../../services/follow_manipulate/follow_manipulate'
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
@@ -99,9 +100,24 @@ export default {
this.followRequestInProgress = false
this.followRequestSent = sent
- store.dispatch('stopFetching', 'friends')
- store.commit('clearTimeline', { timeline: 'friends' })
- store.dispatch('startFetching', { timeline: 'friends' })
+ const rootState = store.rootState || store.state
+ const credentials = store.state.users.currentUser.credentials
+ const timelineData = rootState.statuses.timelines['friends']
+ apiService.fetchTimeline({
+ store,
+ credentials,
+ userId: this.user.id,
+ timeline: 'user',
+ between: true,
+ until: timelineData.maxId,
+ since: timelineData.minVisibleId
+ }).then((statuses) => {
+ store.dispatch('addNewStatuses', {
+ timeline: 'friends',
+ statuses,
+ showImmediately: true
+ })
+ }, () => store.dispatch('setError', { value: true }))
})
},
unfollowUser () {
@@ -110,9 +126,7 @@ export default {
requestUnfollow(this.user, store).then(() => {
this.followRequestInProgress = false
- store.dispatch('stopFetching', 'friends')
- store.commit('clearTimeline', { timeline: 'friends' })
- store.dispatch('startFetching', { timeline: 'friends' })
+ store.commit('removeStatus', { timeline: 'friends', userId: this.user.id })
})
},
blockUser () {
@@ -121,12 +135,9 @@ export default {
.then((blockedUser) => {
store.commit('addNewUsers', [blockedUser])
- store.dispatch('stopFetching', 'friends')
- store.commit('clearTimeline', { timeline: 'friends' })
- store.dispatch('startFetching', { timeline: 'friends' })
-
- store.commit('clearTimeline', { timeline: 'public' })
- store.commit('clearTimeline', { timeline: 'publicAndExternal' })
+ store.commit('removeStatus', { timeline: 'friends', userId: this.user.id })
+ store.commit('removeStatus', { timeline: 'public', userId: this.user.id })
+ store.commit('removeStatus', { timeline: 'publicAndExternal', userId: this.user.id })
})
},
unblockUser () {
@@ -135,12 +146,36 @@ export default {
.then((unblockedUser) => {
store.commit('addNewUsers', [unblockedUser])
- store.dispatch('stopFetching', 'friends')
- store.commit('clearTimeline', { timeline: 'friends' })
- store.dispatch('startFetching', { timeline: 'friends' })
-
- store.commit('clearTimeline', { timeline: 'public' })
- store.commit('clearTimeline', { timeline: 'publicAndExternal' })
+ const rootState = store.rootState || store.state
+ const credentials = store.state.users.currentUser.credentials
+ const timelineData = rootState.statuses.timelines['friends']
+ apiService.fetchTimeline({
+ store,
+ credentials,
+ userId: this.user.id,
+ timeline: 'user',
+ between: true,
+ until: timelineData.maxId,
+ since: timelineData.minVisibleId
+ }).then((statuses) => {
+ store.dispatch('addNewStatuses', {
+ timeline: 'public',
+ statuses,
+ showImmediately: true
+ })
+ store.dispatch('addNewStatuses', {
+ timeline: 'publicAndExternal',
+ statuses,
+ showImmediately: true
+ })
+ if (this.user.follows_you) {
+ store.dispatch('addNewStatuses', {
+ timeline: 'friends',
+ statuses,
+ showImmediately: true
+ })
+ }
+ }, () => store.dispatch('setError', { value: true }))
})
},
toggleMute () {
diff --git a/src/modules/statuses.js b/src/modules/statuses.js
index 46117fd7..57095f37 100644
--- a/src/modules/statuses.js
+++ b/src/modules/statuses.js
@@ -307,9 +307,32 @@ const addNewNotifications = (state, { dispatch, notifications, older, visibleNot
})
}
+const removeStatus = (state, { timeline, userId }) => {
+ const timelineObject = state.timelines[timeline]
+ if (userId) {
+ remove(timelineObject.statuses, { user: { id: userId } })
+ remove(timelineObject.visibleStatuses, { user: { id: userId } })
+ const statusesObject = timelineObject.statusesObject
+ const visibleStatusesObject = timelineObject.visibleStatusesObject
+ each(statusesObject, (status, key) => {
+ if (status.user.id === userId) {
+ delete statusesObject[key]
+ }
+ })
+ each(visibleStatusesObject, (status, key) => {
+ if (status.user.id === userId) {
+ delete visibleStatusesObject[key]
+ }
+ })
+ timelineObject.minVisibleId = (last(timeline.visibleStatuses) || {}).id
+ timelineObject.maxId = statuses.length > 0 ? maxBy(statuses, 'id').id : 0
+ }
+}
+
export const mutations = {
addNewStatuses,
addNewNotifications,
+ removeStatus,
showNewStatuses (state, { timeline }) {
const oldTimeline = (state.timelines[timeline])
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index 92daa04e..d35c72b1 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -329,7 +329,7 @@ const setUserMute = ({id, credentials, muted = true}) => {
})
}
-const fetchTimeline = ({timeline, credentials, since = false, until = false, userId = false, tag = false}) => {
+const fetchTimeline = ({timeline, credentials, since = false, until = false, between = false, count = 20, userId = false, tag = false}) => {
const timelineUrls = {
public: PUBLIC_TIMELINE_URL,
friends: FRIENDS_TIMELINE_URL,
@@ -362,8 +362,9 @@ const fetchTimeline = ({timeline, credentials, since = false, until = false, use
if (timeline === 'media') {
params.push(['only_media', 1])
}
-
- params.push(['count', 20])
+ if (!between) {
+ params.push(['count', count])
+ }
const queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&')
url += `?${queryString}`