[Glitch] Fix “slow mode” issues

Port f109867578 to glitch-soc

Signed-off-by: Thibaut Girka <thib@sitedethib.com>
This commit is contained in:
ThibG
2019-09-16 15:45:06 +02:00
committed by Thibaut Girka
parent 15a37a967c
commit 75673cf8e3
5 changed files with 18 additions and 7 deletions

View File

@ -51,7 +51,7 @@ const notificationToMap = (state, notification) => ImmutableMap({
const normalizeNotification = (state, notification, usePendingItems) => {
if (usePendingItems) {
return state.update('pendingItems', list => list.unshift(notificationToMap(state, notification)));
return state.update('pendingItems', list => list.unshift(notificationToMap(state, notification))).update('unread', unread => unread + 1);
}
const top = !shouldCountUnreadNotifications(state);
@ -117,7 +117,7 @@ const filterNotifications = (state, accountIds) => {
};
const clearUnread = (state) => {
state = state.set('unread', 0);
state = state.set('unread', state.get('pendingItems').size);
const lastNotification = state.get('items').find(item => item !== null);
return state.set('lastReadId', lastNotification ? lastNotification.get('id') : '0');
}
@ -140,6 +140,8 @@ const deleteByStatus = (state, statusId) => {
state = state.update('unread', unread => unread - deletedUnread.size);
}
const helper = list => list.filterNot(item => item !== null && item.get('status') === statusId);
const deletedUnread = state.get('pendingItems').filter(item => item !== null && item.get('status') === statusId && compareId(item.get('id'), lastReadId) > 0);
state = state.update('unread', unread => unread - deletedUnread.size);
return state.update('items', helper).update('pendingItems', helper);
};

View File

@ -64,7 +64,7 @@ const updateTimeline = (state, timeline, status, usePendingItems) => {
return state;
}
return state.update(timeline, initialTimeline, map => map.update('pendingItems', list => list.unshift(status.get('id'))));
return state.update(timeline, initialTimeline, map => map.update('pendingItems', list => list.unshift(status.get('id'))).update('unread', unread => unread + 1));
}
const top = state.getIn([timeline, 'top']);
@ -127,7 +127,7 @@ const filterTimeline = (timeline, state, relationship, statuses) => {
const updateTop = (state, timeline, top) => {
return state.update(timeline, initialTimeline, map => map.withMutations(mMap => {
if (top) mMap.set('unread', 0);
if (top) mMap.set('unread', mMap.get('pendingItems').size);
mMap.set('top', top);
}));
};