From cd0a7afa06cafc93510286d35a60e9e40ead36bf Mon Sep 17 00:00:00 2001
From: taehoon
Date: Wed, 24 Apr 2019 13:56:53 -0400
Subject: remove pinned timeline, instead, use simple entity of user object
---
src/modules/users.js | 3 +++
1 file changed, 3 insertions(+)
(limited to 'src/modules/users.js')
diff --git a/src/modules/users.js b/src/modules/users.js
index adcab233..def2b38c 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -160,6 +160,9 @@ export const mutations = {
saveMuteIds (state, muteIds) {
state.currentUser.muteIds = muteIds
},
+ savePinnedStatusIds (state, { userId, statusIds }) {
+ state.usersObject[userId].pinnedStatusIds = statusIds
+ },
addMuteId (state, muteId) {
if (state.currentUser.muteIds.indexOf(muteId) === -1) {
state.currentUser.muteIds.push(muteId)
--
cgit v1.2.3-70-g09d2
From e8abe1273b5c860b78b219973c2a2926014c0ca5 Mon Sep 17 00:00:00 2001
From: taehoon
Date: Wed, 24 Apr 2019 14:34:55 -0400
Subject: filter pinned statuses based on pinned entity instead of a separate
user entity
---
src/components/user_profile/user_profile.js | 8 +++++---
src/modules/statuses.js | 9 +++------
src/modules/users.js | 3 ---
src/services/entity_normalizer/entity_normalizer.service.js | 1 -
4 files changed, 8 insertions(+), 13 deletions(-)
(limited to 'src/modules/users.js')
diff --git a/src/components/user_profile/user_profile.js b/src/components/user_profile/user_profile.js
index 0071fa89..176ec228 100644
--- a/src/components/user_profile/user_profile.js
+++ b/src/components/user_profile/user_profile.js
@@ -1,4 +1,5 @@
import get from 'lodash/get'
+import filter from 'lodash/filter'
import UserCard from '../user_card/user_card.vue'
import FollowCard from '../follow_card/follow_card.vue'
import Timeline from '../timeline/timeline.vue'
@@ -41,6 +42,9 @@ const UserProfile = {
timeline () {
return this.$store.state.statuses.timelines.user
},
+ pinnedStatuses () {
+ return filter(this.timeline.statuses, { pinned: true })
+ },
favorites () {
return this.$store.state.statuses.timelines.favorites
},
@@ -54,9 +58,6 @@ const UserProfile = {
user () {
return this.$store.getters.findUser(this.userId)
},
- pinnedStatuses () {
- return this.user.pinnedStatusIds.map(id => this.$store.state.statuses.allStatusesObject[id])
- },
isExternal () {
return this.$route.name === 'external-user-profile'
},
@@ -99,6 +100,7 @@ const UserProfile = {
if (this.isUs) {
this.$store.dispatch('startFetchingTimeline', { timeline: 'favorites', userId })
}
+ // Fetch all pinned statuses immediately
this.$store.dispatch('fetchPinnedStatuses', userId)
},
cleanUp () {
diff --git a/src/modules/statuses.js b/src/modules/statuses.js
index 3b3ae9e3..8edd2e11 100644
--- a/src/modules/statuses.js
+++ b/src/modules/statuses.js
@@ -1,4 +1,4 @@
-import { remove, slice, each, findIndex, find, maxBy, minBy, merge, first, last, isArray, omitBy, map } from 'lodash'
+import { remove, slice, each, findIndex, find, maxBy, minBy, merge, first, last, isArray, omitBy } from 'lodash'
import { set } from 'vue'
import apiService from '../services/api/api.service.js'
// import parse from '../services/status_parser/status_parser.js'
@@ -541,12 +541,9 @@ const statuses = {
rootState.api.backendInteractor.unfavorite(status.id)
.then(status => commit('setFavoritedConfirm', { status, user: rootState.users.currentUser }))
},
- fetchPinnedStatuses ({ rootState, dispatch, commit }, userId) {
+ fetchPinnedStatuses ({ rootState, dispatch }, userId) {
rootState.api.backendInteractor.fetchPinnedStatuses(userId)
- .then(statuses => {
- dispatch('addNewStatuses', { statuses })
- commit('savePinnedStatusIds', { userId, statusIds: map(statuses, 'id') })
- })
+ .then(statuses => dispatch('addNewStatuses', { statuses, timeline: 'user', userId }))
},
updatePinned ({ rootState, commit }, status) {
commit('setPinned', { status })
diff --git a/src/modules/users.js b/src/modules/users.js
index def2b38c..adcab233 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -160,9 +160,6 @@ export const mutations = {
saveMuteIds (state, muteIds) {
state.currentUser.muteIds = muteIds
},
- savePinnedStatusIds (state, { userId, statusIds }) {
- state.usersObject[userId].pinnedStatusIds = statusIds
- },
addMuteId (state, muteId) {
if (state.currentUser.muteIds.indexOf(muteId) === -1) {
state.currentUser.muteIds.push(muteId)
diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js
index 3636c05b..7f03ae2a 100644
--- a/src/services/entity_normalizer/entity_normalizer.service.js
+++ b/src/services/entity_normalizer/entity_normalizer.service.js
@@ -131,7 +131,6 @@ export const parseUser = (data) => {
output.statuses_count = data.statuses_count
output.friendIds = []
output.followerIds = []
- output.pinnedStatusIds = []
if (data.pleroma) {
output.follow_request_count = data.pleroma.follow_request_count
--
cgit v1.2.3-70-g09d2
From 110c9d3b26e3871c8fc8157458be201ed4316d49 Mon Sep 17 00:00:00 2001
From: taehoon
Date: Tue, 30 Apr 2019 08:20:19 -0400
Subject: improve performance by caching pinned status ids into user object
---
src/components/user_profile/user_profile.js | 3 ---
src/components/user_profile/user_profile.vue | 16 +++++++++-------
src/modules/statuses.js | 6 +++---
src/modules/users.js | 17 +++++++++++++++--
.../entity_normalizer/entity_normalizer.service.js | 2 ++
5 files changed, 29 insertions(+), 15 deletions(-)
(limited to 'src/modules/users.js')
diff --git a/src/components/user_profile/user_profile.js b/src/components/user_profile/user_profile.js
index 176ec228..8d660780 100644
--- a/src/components/user_profile/user_profile.js
+++ b/src/components/user_profile/user_profile.js
@@ -42,9 +42,6 @@ const UserProfile = {
timeline () {
return this.$store.state.statuses.timelines.user
},
- pinnedStatuses () {
- return filter(this.timeline.statuses, { pinned: true })
- },
favorites () {
return this.$store.state.statuses.timelines.favorites
},
diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue
index 1e104403..36d75b9e 100644
--- a/src/components/user_profile/user_profile.vue
+++ b/src/components/user_profile/user_profile.vue
@@ -5,13 +5,15 @@
-
+
+
+
commit('setPinned', { status }))
+ .then((status) => commit('setPinned', status))
},
unpinStatus ({ rootState, commit }, statusId) {
rootState.api.backendInteractor.unpinOwnStatus(statusId)
- .then((status) => commit('setPinned', { status }))
+ .then((status) => commit('setPinned', status))
},
retweet ({ rootState, commit }, status) {
// Optimistic retweeting...
diff --git a/src/modules/users.js b/src/modules/users.js
index adcab233..e72a657c 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -165,6 +165,15 @@ export const mutations = {
state.currentUser.muteIds.push(muteId)
}
},
+ setPinned (state, status) {
+ const user = state.usersObject[status.user.id]
+ const index = user.pinnedStatuseIds.indexOf(status.id)
+ if (status.pinned && index === -1) {
+ user.pinnedStatuseIds.push(status.id)
+ } else if (!status.pinned && index !== -1) {
+ user.pinnedStatuseIds.splice(index, 1)
+ }
+ },
setUserForStatus (state, status) {
status.user = state.usersObject[status.user.id]
},
@@ -318,13 +327,17 @@ const users = {
store.commit('addNewUsers', users)
store.commit('addNewUsers', retweetedUsers)
- // Reconnect users to statuses
each(statuses, (status) => {
+ // Reconnect users to statuses
store.commit('setUserForStatus', status)
+ // Set pinned statuses to user
+ store.commit('setPinned', status)
})
- // Reconnect users to retweets
each(compact(map(statuses, 'retweeted_status')), (status) => {
+ // Reconnect users to retweets
store.commit('setUserForStatus', status)
+ // Set pinned retweets to user
+ store.commit('setPinned', status)
})
},
addNewNotifications (store, { notifications }) {
diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js
index 5b8ad8a4..e3d1646a 100644
--- a/src/services/entity_normalizer/entity_normalizer.service.js
+++ b/src/services/entity_normalizer/entity_normalizer.service.js
@@ -131,6 +131,8 @@ export const parseUser = (data) => {
output.statuses_count = data.statuses_count
output.friendIds = []
output.followerIds = []
+ output.pinnedStatuseIds = []
+
if (data.pleroma) {
output.follow_request_count = data.pleroma.follow_request_count
}
--
cgit v1.2.3-70-g09d2