[Glitch] Fix public timelines being broken by new toots when they are not mounted
Port be1c634b2b4372a525d304d2ff830392f04c5cc5 to glitch-soc
This commit is contained in:
		
							parent
							
								
									5528719bc9
								
							
						
					
					
						commit
						6fe48dd050
					
				@ -175,7 +175,9 @@ export function submitCompose(routerHistory) {
 | 
				
			|||||||
      // To make the app more responsive, immediately get the status into the columns
 | 
					      // To make the app more responsive, immediately get the status into the columns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const insertIfOnline = (timelineId) => {
 | 
					      const insertIfOnline = (timelineId) => {
 | 
				
			||||||
        if (getState().getIn(['timelines', timelineId, 'items', 0]) !== null) {
 | 
					        const timeline = getState().getIn(['timelines', timelineId]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (timeline && timeline.get('items').size > 0 && timeline.getIn(['items', 0]) !== null && timeline.get('online')) {
 | 
				
			||||||
          dispatch(updateTimeline(timelineId, { ...response.data }));
 | 
					          dispatch(updateTimeline(timelineId, { ...response.data }));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ import {
 | 
				
			|||||||
  updateTimeline,
 | 
					  updateTimeline,
 | 
				
			||||||
  deleteFromTimelines,
 | 
					  deleteFromTimelines,
 | 
				
			||||||
  expandHomeTimeline,
 | 
					  expandHomeTimeline,
 | 
				
			||||||
 | 
					  connectTimeline,
 | 
				
			||||||
  disconnectTimeline,
 | 
					  disconnectTimeline,
 | 
				
			||||||
} from './timelines';
 | 
					} from './timelines';
 | 
				
			||||||
import { updateNotifications, expandNotifications } from './notifications';
 | 
					import { updateNotifications, expandNotifications } from './notifications';
 | 
				
			||||||
@ -15,7 +16,12 @@ export function connectTimelineStream (timelineId, path, pollingRefresh = null,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  return connectStream (path, pollingRefresh, (dispatch, getState) => {
 | 
					  return connectStream (path, pollingRefresh, (dispatch, getState) => {
 | 
				
			||||||
    const locale = getState().getIn(['meta', 'locale']);
 | 
					    const locale = getState().getIn(['meta', 'locale']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
 | 
					      onConnect() {
 | 
				
			||||||
 | 
					        dispatch(connectTimeline(timelineId));
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      onDisconnect() {
 | 
					      onDisconnect() {
 | 
				
			||||||
        dispatch(disconnectTimeline(timelineId));
 | 
					        dispatch(disconnectTimeline(timelineId));
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,7 @@ export const TIMELINE_EXPAND_FAIL    = 'TIMELINE_EXPAND_FAIL';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export const TIMELINE_SCROLL_TOP = 'TIMELINE_SCROLL_TOP';
 | 
					export const TIMELINE_SCROLL_TOP = 'TIMELINE_SCROLL_TOP';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const TIMELINE_CONNECT    = 'TIMELINE_CONNECT';
 | 
				
			||||||
export const TIMELINE_DISCONNECT = 'TIMELINE_DISCONNECT';
 | 
					export const TIMELINE_DISCONNECT = 'TIMELINE_DISCONNECT';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function updateTimeline(timeline, status, accept) {
 | 
					export function updateTimeline(timeline, status, accept) {
 | 
				
			||||||
@ -145,6 +146,13 @@ export function scrollTopTimeline(timeline, top) {
 | 
				
			|||||||
  };
 | 
					  };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function connectTimeline(timeline) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: TIMELINE_CONNECT,
 | 
				
			||||||
 | 
					    timeline,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function disconnectTimeline(timeline) {
 | 
					export function disconnectTimeline(timeline) {
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    type: TIMELINE_DISCONNECT,
 | 
					    type: TIMELINE_DISCONNECT,
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import {
 | 
				
			|||||||
  TIMELINE_EXPAND_REQUEST,
 | 
					  TIMELINE_EXPAND_REQUEST,
 | 
				
			||||||
  TIMELINE_EXPAND_FAIL,
 | 
					  TIMELINE_EXPAND_FAIL,
 | 
				
			||||||
  TIMELINE_SCROLL_TOP,
 | 
					  TIMELINE_SCROLL_TOP,
 | 
				
			||||||
 | 
					  TIMELINE_CONNECT,
 | 
				
			||||||
  TIMELINE_DISCONNECT,
 | 
					  TIMELINE_DISCONNECT,
 | 
				
			||||||
} from 'flavours/glitch/actions/timelines';
 | 
					} from 'flavours/glitch/actions/timelines';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
@ -20,6 +21,7 @@ const initialState = ImmutableMap();
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const initialTimeline = ImmutableMap({
 | 
					const initialTimeline = ImmutableMap({
 | 
				
			||||||
  unread: 0,
 | 
					  unread: 0,
 | 
				
			||||||
 | 
					  online: false,
 | 
				
			||||||
  top: true,
 | 
					  top: true,
 | 
				
			||||||
  isLoading: false,
 | 
					  isLoading: false,
 | 
				
			||||||
  hasMore: true,
 | 
					  hasMore: true,
 | 
				
			||||||
@ -137,14 +139,13 @@ export default function timelines(state = initialState, action) {
 | 
				
			|||||||
    return filterTimeline('home', state, action.relationship, action.statuses);
 | 
					    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:
 | 
				
			||||||
 | 
					    return state.update(action.timeline, initialTimeline, map => map.set('online', true));
 | 
				
			||||||
  case TIMELINE_DISCONNECT:
 | 
					  case TIMELINE_DISCONNECT:
 | 
				
			||||||
    return state.update(
 | 
					    return state.update(
 | 
				
			||||||
      action.timeline,
 | 
					      action.timeline,
 | 
				
			||||||
      initialTimeline,
 | 
					      initialTimeline,
 | 
				
			||||||
      map => map.update(
 | 
					      map => map.set('online', false).update('items', items => items.first() ? items.unshift(null) : items)
 | 
				
			||||||
        'items',
 | 
					 | 
				
			||||||
        items => items.first() ? items.unshift(null) : items
 | 
					 | 
				
			||||||
      )
 | 
					 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  default:
 | 
					  default:
 | 
				
			||||||
    return state;
 | 
					    return state;
 | 
				
			||||||
 | 
				
			|||||||
@ -2,11 +2,11 @@ import WebSocketClient from 'websocket.js';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const randomIntUpTo = max => Math.floor(Math.random() * Math.floor(max));
 | 
					const randomIntUpTo = max => Math.floor(Math.random() * Math.floor(max));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function connectStream(path, pollingRefresh = null, callbacks = () => ({ onDisconnect() {}, onReceive() {} })) {
 | 
					export function connectStream(path, pollingRefresh = null, callbacks = () => ({ onConnect() {}, onDisconnect() {}, onReceive() {} })) {
 | 
				
			||||||
  return (dispatch, getState) => {
 | 
					  return (dispatch, getState) => {
 | 
				
			||||||
    const streamingAPIBaseURL = getState().getIn(['meta', 'streaming_api_base_url']);
 | 
					    const streamingAPIBaseURL = getState().getIn(['meta', 'streaming_api_base_url']);
 | 
				
			||||||
    const accessToken = getState().getIn(['meta', 'access_token']);
 | 
					    const accessToken = getState().getIn(['meta', 'access_token']);
 | 
				
			||||||
    const { onDisconnect, onReceive } = callbacks(dispatch, getState);
 | 
					    const { onConnect, onDisconnect, onReceive } = callbacks(dispatch, getState);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let polling = null;
 | 
					    let polling = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -28,6 +28,8 @@ export function connectStream(path, pollingRefresh = null, callbacks = () => ({
 | 
				
			|||||||
        if (pollingRefresh) {
 | 
					        if (pollingRefresh) {
 | 
				
			||||||
          clearPolling();
 | 
					          clearPolling();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        onConnect();
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      disconnected () {
 | 
					      disconnected () {
 | 
				
			||||||
@ -47,6 +49,8 @@ export function connectStream(path, pollingRefresh = null, callbacks = () => ({
 | 
				
			|||||||
          clearPolling();
 | 
					          clearPolling();
 | 
				
			||||||
          pollingRefresh(dispatch);
 | 
					          pollingRefresh(dispatch);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        onConnect();
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user