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:
		@@ -122,7 +122,7 @@ export function unfollowAccount(id) {
 | 
			
		||||
    dispatch(unfollowAccountRequest(id));
 | 
			
		||||
 | 
			
		||||
    api(getState).post(`/api/v1/accounts/${id}/unfollow`).then(response => {
 | 
			
		||||
      dispatch(unfollowAccountSuccess(response.data));
 | 
			
		||||
      dispatch(unfollowAccountSuccess(response.data, getState().get('statuses')));
 | 
			
		||||
    }).catch(error => {
 | 
			
		||||
      dispatch(unfollowAccountFail(error));
 | 
			
		||||
    });
 | 
			
		||||
@@ -157,10 +157,11 @@ export function unfollowAccountRequest(id) {
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export function unfollowAccountSuccess(relationship) {
 | 
			
		||||
export function unfollowAccountSuccess(relationship, statuses) {
 | 
			
		||||
  return {
 | 
			
		||||
    type: ACCOUNT_UNFOLLOW_SUCCESS,
 | 
			
		||||
    relationship,
 | 
			
		||||
    statuses,
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@ import {
 | 
			
		||||
import {
 | 
			
		||||
  ACCOUNT_BLOCK_SUCCESS,
 | 
			
		||||
  ACCOUNT_MUTE_SUCCESS,
 | 
			
		||||
  ACCOUNT_UNFOLLOW_SUCCESS,
 | 
			
		||||
} from '../actions/accounts';
 | 
			
		||||
import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
 | 
			
		||||
 | 
			
		||||
@@ -108,6 +109,12 @@ const filterTimelines = (state, relationship, statuses) => {
 | 
			
		||||
  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) => {
 | 
			
		||||
  return state.update(timeline, initialTimeline, map => map.withMutations(mMap => {
 | 
			
		||||
    if (top) mMap.set('unread', 0);
 | 
			
		||||
@@ -134,6 +141,8 @@ export default function timelines(state = initialState, action) {
 | 
			
		||||
  case ACCOUNT_BLOCK_SUCCESS:
 | 
			
		||||
  case ACCOUNT_MUTE_SUCCESS:
 | 
			
		||||
    return filterTimelines(state, action.relationship, action.statuses);
 | 
			
		||||
  case ACCOUNT_UNFOLLOW_SUCCESS:
 | 
			
		||||
    return filterTimeline('home', state, action.relationship, action.statuses);
 | 
			
		||||
  case TIMELINE_SCROLL_TOP:
 | 
			
		||||
    return updateTop(state, action.timeline, action.top);
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user