Merge remote-tracking branch 'upstream/develop' into shigusegubu
* upstream/develop: #486 - remove expand button on conversation page fix small bug Add await to login befor redirect to friends timeline Prevent repeated fetching Add space Separate timeline and notification Remove useless codes Fix notification bugs
This commit is contained in:
commit
66680e5471
12 changed files with 62 additions and 53 deletions
|
@ -13,7 +13,7 @@
|
||||||
:key="status.id"
|
:key="status.id"
|
||||||
:inlineExpanded="collapsable"
|
:inlineExpanded="collapsable"
|
||||||
:statusoid="status"
|
:statusoid="status"
|
||||||
:expandable='!expanded'
|
:expandable='!isExpanded'
|
||||||
:focused="focused(status.id)"
|
:focused="focused(status.id)"
|
||||||
:inConversation="isExpanded"
|
:inConversation="isExpanded"
|
||||||
:highlight="getHighlight()"
|
:highlight="getHighlight()"
|
||||||
|
|
|
@ -31,15 +31,19 @@ const LoginForm = {
|
||||||
username: this.user.username,
|
username: this.user.username,
|
||||||
password: this.user.password
|
password: this.user.password
|
||||||
}
|
}
|
||||||
).then((result) => {
|
).then(async (result) => {
|
||||||
if (result.error) {
|
if (result.error) {
|
||||||
this.authError = result.error
|
this.authError = result.error
|
||||||
this.user.password = ''
|
this.user.password = ''
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.$store.commit('setToken', result.access_token)
|
this.$store.commit('setToken', result.access_token)
|
||||||
this.$store.dispatch('loginUser', result.access_token)
|
try {
|
||||||
|
await this.$store.dispatch('loginUser', result.access_token)
|
||||||
this.$router.push({name: 'friends'})
|
this.$router.push({name: 'friends'})
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
|
@ -10,13 +10,6 @@ const Notifications = {
|
||||||
props: [
|
props: [
|
||||||
'noHeading'
|
'noHeading'
|
||||||
],
|
],
|
||||||
created () {
|
|
||||||
const store = this.$store
|
|
||||||
const credentials = store.state.users.currentUser.credentials
|
|
||||||
|
|
||||||
const fetcherId = notificationsFetcher.startFetching({ store, credentials })
|
|
||||||
this.$store.commit('setNotificationFetcher', { fetcherId })
|
|
||||||
},
|
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
bottomedOut: false
|
bottomedOut: false
|
||||||
|
|
|
@ -7,7 +7,7 @@ const PublicAndExternalTimeline = {
|
||||||
timeline () { return this.$store.state.statuses.timelines.publicAndExternal }
|
timeline () { return this.$store.state.statuses.timelines.publicAndExternal }
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
this.$store.dispatch('startFetching', { timeline: 'publicAndExternal' })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'publicAndExternal' })
|
||||||
},
|
},
|
||||||
destroyed () {
|
destroyed () {
|
||||||
this.$store.dispatch('stopFetching', 'publicAndExternal')
|
this.$store.dispatch('stopFetching', 'publicAndExternal')
|
||||||
|
|
|
@ -7,7 +7,7 @@ const PublicTimeline = {
|
||||||
timeline () { return this.$store.state.statuses.timelines.public }
|
timeline () { return this.$store.state.statuses.timelines.public }
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
this.$store.dispatch('startFetching', { timeline: 'public' })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'public' })
|
||||||
},
|
},
|
||||||
destroyed () {
|
destroyed () {
|
||||||
this.$store.dispatch('stopFetching', 'public')
|
this.$store.dispatch('stopFetching', 'public')
|
||||||
|
|
|
@ -3,7 +3,7 @@ import Timeline from '../timeline/timeline.vue'
|
||||||
const TagTimeline = {
|
const TagTimeline = {
|
||||||
created () {
|
created () {
|
||||||
this.$store.commit('clearTimeline', { timeline: 'tag' })
|
this.$store.commit('clearTimeline', { timeline: 'tag' })
|
||||||
this.$store.dispatch('startFetching', { timeline: 'tag', tag: this.tag })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'tag', tag: this.tag })
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
Timeline
|
Timeline
|
||||||
|
@ -15,7 +15,7 @@ const TagTimeline = {
|
||||||
watch: {
|
watch: {
|
||||||
tag () {
|
tag () {
|
||||||
this.$store.commit('clearTimeline', { timeline: 'tag' })
|
this.$store.commit('clearTimeline', { timeline: 'tag' })
|
||||||
this.$store.dispatch('startFetching', { timeline: 'tag', tag: this.tag })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'tag', tag: this.tag })
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
destroyed () {
|
destroyed () {
|
||||||
|
|
|
@ -52,7 +52,7 @@ const Timeline = {
|
||||||
|
|
||||||
window.addEventListener('scroll', this.scrollLoad)
|
window.addEventListener('scroll', this.scrollLoad)
|
||||||
|
|
||||||
if (this.timelineName === 'friends' && !credentials) { return false }
|
if (store.state.api.fetchers[this.timelineName]) { return false }
|
||||||
|
|
||||||
timelineFetcher.fetchAndUpdate({
|
timelineFetcher.fetchAndUpdate({
|
||||||
store,
|
store,
|
||||||
|
|
|
@ -91,7 +91,7 @@ const UserProfile = {
|
||||||
methods: {
|
methods: {
|
||||||
startFetchFavorites () {
|
startFetchFavorites () {
|
||||||
if (this.isUs) {
|
if (this.isUs) {
|
||||||
this.$store.dispatch('startFetching', { timeline: 'favorites', userId: this.userId })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'favorites', userId: this.userId })
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
fetchUserId () {
|
fetchUserId () {
|
||||||
|
@ -119,8 +119,8 @@ const UserProfile = {
|
||||||
},
|
},
|
||||||
startUp () {
|
startUp () {
|
||||||
if (this.userId) {
|
if (this.userId) {
|
||||||
this.$store.dispatch('startFetching', { timeline: 'user', userId: this.userId })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'user', userId: this.userId })
|
||||||
this.$store.dispatch('startFetching', { timeline: 'media', userId: this.userId })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'media', userId: this.userId })
|
||||||
this.startFetchFavorites()
|
this.startFetchFavorites()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -13,11 +13,11 @@ const api = {
|
||||||
setBackendInteractor (state, backendInteractor) {
|
setBackendInteractor (state, backendInteractor) {
|
||||||
state.backendInteractor = backendInteractor
|
state.backendInteractor = backendInteractor
|
||||||
},
|
},
|
||||||
addFetcher (state, {timeline, fetcher}) {
|
addFetcher (state, { fetcherName, fetcher }) {
|
||||||
state.fetchers[timeline] = fetcher
|
state.fetchers[fetcherName] = fetcher
|
||||||
},
|
},
|
||||||
removeFetcher (state, {timeline}) {
|
removeFetcher (state, { fetcherName }) {
|
||||||
delete state.fetchers[timeline]
|
delete state.fetchers[fetcherName]
|
||||||
},
|
},
|
||||||
setWsToken (state, token) {
|
setWsToken (state, token) {
|
||||||
state.wsToken = token
|
state.wsToken = token
|
||||||
|
@ -33,17 +33,24 @@ const api = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
startFetching (store, {timeline = 'friends', tag = false, userId = false}) {
|
startFetchingTimeline (store, { timeline = 'friends', tag = false, userId = false }) {
|
||||||
// Don't start fetching if we already are.
|
// Don't start fetching if we already are.
|
||||||
if (store.state.fetchers[timeline]) return
|
if (store.state.fetchers[timeline]) return
|
||||||
|
|
||||||
const fetcher = store.state.backendInteractor.startFetching({ timeline, store, userId, tag })
|
const fetcher = store.state.backendInteractor.startFetchingTimeline({ timeline, store, userId, tag })
|
||||||
store.commit('addFetcher', { timeline, fetcher })
|
store.commit('addFetcher', { fetcherName: timeline, fetcher })
|
||||||
},
|
},
|
||||||
stopFetching (store, timeline) {
|
startFetchingNotifications (store) {
|
||||||
const fetcher = store.state.fetchers[timeline]
|
// Don't start fetching if we already are.
|
||||||
|
if (store.state.fetchers['notifications']) return
|
||||||
|
|
||||||
|
const fetcher = store.state.backendInteractor.startFetchingNotifications({ store })
|
||||||
|
store.commit('addFetcher', { fetcherName: 'notifications', fetcher })
|
||||||
|
},
|
||||||
|
stopFetching (store, fetcherName) {
|
||||||
|
const fetcher = store.state.fetchers[fetcherName]
|
||||||
window.clearInterval(fetcher)
|
window.clearInterval(fetcher)
|
||||||
store.commit('removeFetcher', {timeline})
|
store.commit('removeFetcher', { fetcherName })
|
||||||
},
|
},
|
||||||
setWsToken (store, token) {
|
setWsToken (store, token) {
|
||||||
store.commit('setWsToken', token)
|
store.commit('setWsToken', token)
|
||||||
|
|
|
@ -20,20 +20,21 @@ const emptyTl = (userId = 0) => ({
|
||||||
flushMarker: 0
|
flushMarker: 0
|
||||||
})
|
})
|
||||||
|
|
||||||
export const defaultState = () => ({
|
const emptyNotifications = () => ({
|
||||||
allStatuses: [],
|
|
||||||
allStatusesObject: {},
|
|
||||||
maxId: 0,
|
|
||||||
notifications: {
|
|
||||||
desktopNotificationSilence: true,
|
desktopNotificationSilence: true,
|
||||||
maxId: 0,
|
maxId: 0,
|
||||||
minId: Number.POSITIVE_INFINITY,
|
minId: Number.POSITIVE_INFINITY,
|
||||||
data: [],
|
data: [],
|
||||||
idStore: {},
|
idStore: {},
|
||||||
loading: false,
|
loading: false,
|
||||||
error: false,
|
error: false
|
||||||
fetcherId: null
|
})
|
||||||
},
|
|
||||||
|
export const defaultState = () => ({
|
||||||
|
allStatuses: [],
|
||||||
|
allStatusesObject: {},
|
||||||
|
maxId: 0,
|
||||||
|
notifications: emptyNotifications(),
|
||||||
favorites: new Set(),
|
favorites: new Set(),
|
||||||
error: false,
|
error: false,
|
||||||
timelines: {
|
timelines: {
|
||||||
|
@ -359,9 +360,6 @@ export const mutations = {
|
||||||
oldTimeline.visibleStatusesObject = {}
|
oldTimeline.visibleStatusesObject = {}
|
||||||
each(oldTimeline.visibleStatuses, (status) => { oldTimeline.visibleStatusesObject[status.id] = status })
|
each(oldTimeline.visibleStatuses, (status) => { oldTimeline.visibleStatusesObject[status.id] = status })
|
||||||
},
|
},
|
||||||
setNotificationFetcher (state, { fetcherId }) {
|
|
||||||
state.notifications.fetcherId = fetcherId
|
|
||||||
},
|
|
||||||
resetStatuses (state) {
|
resetStatuses (state) {
|
||||||
const emptyState = defaultState()
|
const emptyState = defaultState()
|
||||||
Object.entries(emptyState).forEach(([key, value]) => {
|
Object.entries(emptyState).forEach(([key, value]) => {
|
||||||
|
@ -371,6 +369,9 @@ export const mutations = {
|
||||||
clearTimeline (state, { timeline }) {
|
clearTimeline (state, { timeline }) {
|
||||||
state.timelines[timeline] = emptyTl(state.timelines[timeline].userId)
|
state.timelines[timeline] = emptyTl(state.timelines[timeline].userId)
|
||||||
},
|
},
|
||||||
|
clearNotifications (state) {
|
||||||
|
state.notifications = emptyNotifications()
|
||||||
|
},
|
||||||
setFavorited (state, { status, value }) {
|
setFavorited (state, { status, value }) {
|
||||||
const newStatus = state.allStatusesObject[status.id]
|
const newStatus = state.allStatusesObject[status.id]
|
||||||
newStatus.favorited = value
|
newStatus.favorited = value
|
||||||
|
@ -454,12 +455,6 @@ const statuses = {
|
||||||
setNotificationsSilence ({ rootState, commit }, { value }) {
|
setNotificationsSilence ({ rootState, commit }, { value }) {
|
||||||
commit('setNotificationsSilence', { value })
|
commit('setNotificationsSilence', { value })
|
||||||
},
|
},
|
||||||
stopFetchingNotifications ({ rootState, commit }) {
|
|
||||||
if (rootState.statuses.notifications.fetcherId) {
|
|
||||||
window.clearInterval(rootState.statuses.notifications.fetcherId)
|
|
||||||
}
|
|
||||||
commit('setNotificationFetcher', { fetcherId: null })
|
|
||||||
},
|
|
||||||
deleteStatus ({ rootState, commit }, status) {
|
deleteStatus ({ rootState, commit }, status) {
|
||||||
commit('setDeleted', { status })
|
commit('setDeleted', { status })
|
||||||
apiService.deleteStatus({ id: status.id, credentials: rootState.users.currentUser.credentials })
|
apiService.deleteStatus({ id: status.id, credentials: rootState.users.currentUser.credentials })
|
||||||
|
|
|
@ -355,7 +355,8 @@ const users = {
|
||||||
store.commit('setToken', false)
|
store.commit('setToken', false)
|
||||||
store.dispatch('stopFetching', 'friends')
|
store.dispatch('stopFetching', 'friends')
|
||||||
store.commit('setBackendInteractor', backendInteractorService())
|
store.commit('setBackendInteractor', backendInteractorService())
|
||||||
store.dispatch('stopFetchingNotifications')
|
store.dispatch('stopFetching', 'notifications')
|
||||||
|
store.commit('clearNotifications')
|
||||||
store.commit('resetStatuses')
|
store.commit('resetStatuses')
|
||||||
},
|
},
|
||||||
loginUser (store, accessToken) {
|
loginUser (store, accessToken) {
|
||||||
|
@ -387,7 +388,10 @@ const users = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start getting fresh posts.
|
// Start getting fresh posts.
|
||||||
store.dispatch('startFetching', { timeline: 'friends' })
|
store.dispatch('startFetchingTimeline', { timeline: 'friends' })
|
||||||
|
|
||||||
|
// Start fetching notifications
|
||||||
|
store.dispatch('startFetchingNotifications')
|
||||||
|
|
||||||
// Get user mutes
|
// Get user mutes
|
||||||
store.dispatch('fetchMutes')
|
store.dispatch('fetchMutes')
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import apiService from '../api/api.service.js'
|
import apiService from '../api/api.service.js'
|
||||||
import timelineFetcherService from '../timeline_fetcher/timeline_fetcher.service.js'
|
import timelineFetcherService from '../timeline_fetcher/timeline_fetcher.service.js'
|
||||||
|
import notificationsFetcher from '../notifications_fetcher/notifications_fetcher.service.js'
|
||||||
|
|
||||||
const backendInteractorService = (credentials) => {
|
const backendInteractorService = (credentials) => {
|
||||||
const fetchStatus = ({id}) => {
|
const fetchStatus = ({id}) => {
|
||||||
|
@ -58,8 +59,12 @@ const backendInteractorService = (credentials) => {
|
||||||
return apiService.denyUser({credentials, id})
|
return apiService.denyUser({credentials, id})
|
||||||
}
|
}
|
||||||
|
|
||||||
const startFetching = ({timeline, store, userId = false, tag}) => {
|
const startFetchingTimeline = ({ timeline, store, userId = false, tag }) => {
|
||||||
return timelineFetcherService.startFetching({timeline, store, credentials, userId, tag})
|
return timelineFetcherService.startFetching({ timeline, store, credentials, userId, tag })
|
||||||
|
}
|
||||||
|
|
||||||
|
const startFetchingNotifications = ({ store }) => {
|
||||||
|
return notificationsFetcher.startFetching({ store, credentials })
|
||||||
}
|
}
|
||||||
|
|
||||||
const tagUser = ({screen_name}, tag) => {
|
const tagUser = ({screen_name}, tag) => {
|
||||||
|
@ -121,7 +126,8 @@ const backendInteractorService = (credentials) => {
|
||||||
fetchUserRelationship,
|
fetchUserRelationship,
|
||||||
fetchAllFollowing,
|
fetchAllFollowing,
|
||||||
verifyCredentials: apiService.verifyCredentials,
|
verifyCredentials: apiService.verifyCredentials,
|
||||||
startFetching,
|
startFetchingTimeline,
|
||||||
|
startFetchingNotifications,
|
||||||
fetchMutes,
|
fetchMutes,
|
||||||
muteUser,
|
muteUser,
|
||||||
unmuteUser,
|
unmuteUser,
|
||||||
|
|
Loading…
Add table
Reference in a new issue