From 6c8ccf2733c780543a9afc5ffbe7942064ad2596 Mon Sep 17 00:00:00 2001 From: jasper Date: Fri, 15 Feb 2019 07:52:34 -0800 Subject: [PATCH 1/4] Remove posts immediately by blocking --- .../user_card_content/user_card_content.js | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js index 7a7b89d4..41e4e817 100644 --- a/src/components/user_card_content/user_card_content.js +++ b/src/components/user_card_content/user_card_content.js @@ -93,27 +93,55 @@ export default { }, methods: { followUser () { + const store = this.$store this.followRequestInProgress = true - requestFollow(this.user, this.$store).then(({sent}) => { + requestFollow(this.user, store).then(({sent}) => { this.followRequestInProgress = false this.followRequestSent = sent + + store.dispatch('stopFetching', 'friends') + store.commit('clearTimeline', { timeline: 'friends' }) + store.dispatch('startFetching', { timeline: 'friends' }) }) }, unfollowUser () { + const store = this.$store this.followRequestInProgress = true - requestUnfollow(this.user, this.$store).then(() => { + requestUnfollow(this.user, store).then(() => { this.followRequestInProgress = false + + store.dispatch('stopFetching', 'friends') + store.commit('clearTimeline', { timeline: 'friends' }) + store.dispatch('startFetching', { timeline: 'friends' }) }) }, blockUser () { const store = this.$store store.state.api.backendInteractor.blockUser(this.user.id) - .then((blockedUser) => store.commit('addNewUsers', [blockedUser])) + .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' }) + }) }, unblockUser () { const store = this.$store store.state.api.backendInteractor.unblockUser(this.user.id) - .then((unblockedUser) => store.commit('addNewUsers', [unblockedUser])) + .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' }) + }) }, toggleMute () { const store = this.$store From 24d7f9917b1a4a147b92bd31ec65511c1d528c6f Mon Sep 17 00:00:00 2001 From: jasper Date: Mon, 18 Feb 2019 11:39:35 -0800 Subject: [PATCH 2/4] Remove posts by blocking or following --- .../user_card_content/user_card_content.js | 71 ++++++++++++++----- src/modules/statuses.js | 23 ++++++ src/services/api/api.service.js | 7 +- 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}` From 4e79300232288fd9b7c4456e8b461f7c1cbac6fa Mon Sep 17 00:00:00 2001 From: jasper Date: Mon, 25 Feb 2019 14:35:47 -0800 Subject: [PATCH 3/4] Remove posts by blocking or unfollowing --- .../user_card_content/user_card_content.js | 51 ------------------- src/modules/statuses.js | 18 ++----- src/services/api/api.service.js | 6 +-- 3 files changed, 5 insertions(+), 70 deletions(-) diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js index 8bc01941..d2a97a84 100644 --- a/src/components/user_card_content/user_card_content.js +++ b/src/components/user_card_content/user_card_content.js @@ -1,5 +1,4 @@ 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,25 +98,6 @@ export default { requestFollow(this.user, store).then(({sent}) => { this.followRequestInProgress = false this.followRequestSent = sent - - 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 () { @@ -145,37 +125,6 @@ export default { store.state.api.backendInteractor.unblockUser(this.user.id) .then((unblockedUser) => { store.commit('addNewUsers', [unblockedUser]) - - 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 57095f37..d144702e 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -1,4 +1,4 @@ -import { remove, slice, each, find, maxBy, minBy, merge, last, isArray } from 'lodash' +import { remove, slice, each, find, maxBy, minBy, merge, first, last, isArray } from 'lodash' import apiService from '../services/api/api.service.js' // import parse from '../services/status_parser/status_parser.js' @@ -312,20 +312,8 @@ const removeStatus = (state, { timeline, userId }) => { 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 + timelineObject.minVisibleId = timelineObject.visibleStatuses.length > 0 ? last(timelineObject.visibleStatuses).id : 0 + timelineObject.maxId = timelineObject.statuses.length > 0 ? first(timelineObject.statuses).id : 0 } } diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index d35c72b1..c5fdcb72 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, between = false, count = 20, userId = false, tag = false}) => { +const fetchTimeline = ({timeline, credentials, since = false, until = false, userId = false, tag = false}) => { const timelineUrls = { public: PUBLIC_TIMELINE_URL, friends: FRIENDS_TIMELINE_URL, @@ -362,9 +362,7 @@ const fetchTimeline = ({timeline, credentials, since = false, until = false, bet if (timeline === 'media') { params.push(['only_media', 1]) } - if (!between) { - params.push(['count', count]) - } + params.push(['count', 20]) const queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&') url += `?${queryString}` From 7698a6fb0dad962a15855adc2a9c4134abe13de7 Mon Sep 17 00:00:00 2001 From: jasper Date: Tue, 26 Feb 2019 23:21:04 -0800 Subject: [PATCH 4/4] Remove posts by blocking or unfollowing --- src/components/user_card_content/user_card_content.js | 6 +----- src/services/api/api.service.js | 1 + 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js index d2a97a84..35139504 100644 --- a/src/components/user_card_content/user_card_content.js +++ b/src/components/user_card_content/user_card_content.js @@ -105,7 +105,6 @@ export default { this.followRequestInProgress = true requestUnfollow(this.user, store).then(() => { this.followRequestInProgress = false - store.commit('removeStatus', { timeline: 'friends', userId: this.user.id }) }) }, @@ -114,7 +113,6 @@ export default { store.state.api.backendInteractor.blockUser(this.user.id) .then((blockedUser) => { store.commit('addNewUsers', [blockedUser]) - 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 }) @@ -123,9 +121,7 @@ export default { unblockUser () { const store = this.$store store.state.api.backendInteractor.unblockUser(this.user.id) - .then((unblockedUser) => { - store.commit('addNewUsers', [unblockedUser]) - }) + .then((unblockedUser) => store.commit('addNewUsers', [unblockedUser])) }, toggleMute () { const store = this.$store diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index c5fdcb72..92daa04e 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -362,6 +362,7 @@ const fetchTimeline = ({timeline, credentials, since = false, until = false, use if (timeline === 'media') { params.push(['only_media', 1]) } + params.push(['count', 20]) const queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&')