[Glitch] Fix potentially missing statuses when reconnecting to websocket

Port ebe01ea194 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
Claire 2022-04-07 16:08:17 +02:00
parent ff73d43b35
commit 43aff90d0e
2 changed files with 13 additions and 1 deletions

View File

@ -199,6 +199,7 @@ export function connectTimeline(timeline) {
return { return {
type: TIMELINE_CONNECT, type: TIMELINE_CONNECT,
timeline, timeline,
usePendingItems: preferPendingItems,
}; };
}; };

View File

@ -177,6 +177,17 @@ const updateTop = (state, timeline, top) => {
})); }));
}; };
const reconnectTimeline = (state, usePendingItems) => {
if (state.get('online')) {
return state;
}
return state.withMutations(mMap => {
mMap.update(usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items);
mMap.set('online', true);
});
};
export default function timelines(state = initialState, action) { export default function timelines(state = initialState, action) {
switch(action.type) { switch(action.type) {
case TIMELINE_LOAD_PENDING: case TIMELINE_LOAD_PENDING:
@ -202,7 +213,7 @@ export default function timelines(state = initialState, action) {
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:
return state.update(action.timeline, initialTimeline, map => map.set('online', true)); return state.update(action.timeline, initialTimeline, map => reconnectTimeline(map, action.usePendingItems));
case TIMELINE_DISCONNECT: case TIMELINE_DISCONNECT:
return state.update( return state.update(
action.timeline, action.timeline,