When unfollowing, remove from home in web UI immediately (#5369)
Do NOT send "delete" through streaming API when unmerging from home timeline. "delete" implies that the original status was deleted, which is not true!
This commit is contained in:
		
							parent
							
								
									95fe20b78a
								
							
						
					
					
						commit
						388d093beb
					
				
					 3 changed files with 13 additions and 3 deletions
				
			
		|  | @ -122,7 +122,7 @@ export function unfollowAccount(id) { | ||||||
|     dispatch(unfollowAccountRequest(id)); |     dispatch(unfollowAccountRequest(id)); | ||||||
| 
 | 
 | ||||||
|     api(getState).post(`/api/v1/accounts/${id}/unfollow`).then(response => { |     api(getState).post(`/api/v1/accounts/${id}/unfollow`).then(response => { | ||||||
|       dispatch(unfollowAccountSuccess(response.data)); |       dispatch(unfollowAccountSuccess(response.data, getState().get('statuses'))); | ||||||
|     }).catch(error => { |     }).catch(error => { | ||||||
|       dispatch(unfollowAccountFail(error)); |       dispatch(unfollowAccountFail(error)); | ||||||
|     }); |     }); | ||||||
|  | @ -157,10 +157,11 @@ export function unfollowAccountRequest(id) { | ||||||
|   }; |   }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export function unfollowAccountSuccess(relationship) { | export function unfollowAccountSuccess(relationship, statuses) { | ||||||
|   return { |   return { | ||||||
|     type: ACCOUNT_UNFOLLOW_SUCCESS, |     type: ACCOUNT_UNFOLLOW_SUCCESS, | ||||||
|     relationship, |     relationship, | ||||||
|  |     statuses, | ||||||
|   }; |   }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -14,6 +14,7 @@ import { | ||||||
| import { | import { | ||||||
|   ACCOUNT_BLOCK_SUCCESS, |   ACCOUNT_BLOCK_SUCCESS, | ||||||
|   ACCOUNT_MUTE_SUCCESS, |   ACCOUNT_MUTE_SUCCESS, | ||||||
|  |   ACCOUNT_UNFOLLOW_SUCCESS, | ||||||
| } from '../actions/accounts'; | } from '../actions/accounts'; | ||||||
| import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; | import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; | ||||||
| 
 | 
 | ||||||
|  | @ -108,6 +109,12 @@ const filterTimelines = (state, relationship, statuses) => { | ||||||
|   return state; |   return state; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | const filterTimeline = (timeline, state, relationship, statuses) => | ||||||
|  |   state.updateIn([timeline, 'items'], ImmutableList(), list => | ||||||
|  |     list.filterNot(statusId => | ||||||
|  |       statuses.getIn([statusId, 'account']) === relationship.id | ||||||
|  |     )); | ||||||
|  | 
 | ||||||
| const updateTop = (state, timeline, top) => { | const updateTop = (state, timeline, top) => { | ||||||
|   return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { |   return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { | ||||||
|     if (top) mMap.set('unread', 0); |     if (top) mMap.set('unread', 0); | ||||||
|  | @ -134,6 +141,8 @@ export default function timelines(state = initialState, action) { | ||||||
|   case ACCOUNT_BLOCK_SUCCESS: |   case ACCOUNT_BLOCK_SUCCESS: | ||||||
|   case ACCOUNT_MUTE_SUCCESS: |   case ACCOUNT_MUTE_SUCCESS: | ||||||
|     return filterTimelines(state, action.relationship, action.statuses); |     return filterTimelines(state, action.relationship, action.statuses); | ||||||
|  |   case ACCOUNT_UNFOLLOW_SUCCESS: | ||||||
|  |     return filterTimeline('home', state, action.relationship, action.statuses); | ||||||
|   case TIMELINE_SCROLL_TOP: |   case TIMELINE_SCROLL_TOP: | ||||||
|     return updateTop(state, action.timeline, action.top); |     return updateTop(state, action.timeline, action.top); | ||||||
|   case TIMELINE_CONNECT: |   case TIMELINE_CONNECT: | ||||||
|  |  | ||||||
|  | @ -85,7 +85,7 @@ class FeedManager | ||||||
|     oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true)&.first&.last&.to_i || 0 |     oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true)&.first&.last&.to_i || 0 | ||||||
| 
 | 
 | ||||||
|     from_account.statuses.select('id, reblog_of_id').where('id > ?', oldest_home_score).reorder(nil).find_each do |status| |     from_account.statuses.select('id, reblog_of_id').where('id > ?', oldest_home_score).reorder(nil).find_each do |status| | ||||||
|       unpush(:home, into_account, status) |       remove_from_feed(:home, into_account, status) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Reference in a new issue