Page MenuHomePhabricator

D13190.id43866.diff
No OneTemporary

D13190.id43866.diff

diff --git a/lib/selectors/thread-selectors.js b/lib/selectors/thread-selectors.js
--- a/lib/selectors/thread-selectors.js
+++ b/lib/selectors/thread-selectors.js
@@ -236,6 +236,19 @@
},
);
+const unreadThickThreadIDsSelector: (
+ state: BaseAppState<>,
+) => $ReadOnlyArray<string> = createSelector(
+ (state: BaseAppState<>) => state.threadStore.threadInfos,
+ (threadInfos: RawThreadInfos): $ReadOnlyArray<string> =>
+ Object.entries(threadInfos)
+ .filter(
+ ([, threadInfo]) =>
+ !!threadInfo.thick && !!threadInfo.currentUser.unread,
+ )
+ .map(([id]) => id),
+);
+
const unreadCount: (state: BaseAppState<>) => number = createSelector(
(state: BaseAppState<>) => state.threadStore.threadInfos,
(threadInfos: RawThreadInfos): number =>
@@ -538,4 +551,5 @@
savedEmojiAvatarSelectorForThread,
threadInfosSelectorForThreadType,
thickRawThreadInfosSelector,
+ unreadThickThreadIDsSelector,
};
diff --git a/native/push/push-handler.react.js b/native/push/push-handler.react.js
--- a/native/push/push-handler.react.js
+++ b/native/push/push-handler.react.js
@@ -28,9 +28,11 @@
import {
threadInfoSelector,
allUnreadCounts,
+ unreadThickThreadIDsSelector,
} from 'lib/selectors/thread-selectors.js';
import { isLoggedIn } from 'lib/selectors/user-selectors.js';
import { mergePrefixIntoBody } from 'lib/shared/notif-utils.js';
+import { useTunnelbroker } from 'lib/tunnelbroker/tunnelbroker-context.js';
import {
alertTypes,
type AlertInfo,
@@ -107,6 +109,7 @@
+activeThread: ?string,
// Redux state
+unreadCount: { +[keyserverID: string]: number },
+ +unreadThickThreadIDs: $ReadOnlyArray<string>,
+connection: { +[keyserverID: string]: ?ConnectionInfo },
+deviceTokens: {
+[keyserverID: string]: ?string,
@@ -134,6 +137,14 @@
// withRootContext
+rootContext: ?RootContextType,
+localToken: ?string,
+ +tunnelbrokerSocketState:
+ | {
+ +connected: true,
+ +isAuthorized: boolean,
+ }
+ | {
+ +connected: false,
+ },
};
type State = {
+inAppNotifProps: ?{
@@ -318,6 +329,10 @@
const curUnreadCounts = this.props.unreadCount;
const curConnections = this.props.connection;
+ const currentUnreadThickThreads = this.props.unreadThickThreadIDs;
+ const currentTunnelbrokerConnectionStatus =
+ this.props.tunnelbrokerSocketState.connected;
+
const notifStorageUpdates: Array<{
+id: string,
+unreadCount: number,
@@ -341,9 +356,21 @@
+unreadCount: number,
}> = [];
+ const handleUnreadThickThreadIDsInNotifsStorage = (async () => {
+ if (currentTunnelbrokerConnectionStatus) {
+ await commCoreModule.updateUnreadThickThreadsInNotifsStorage(
+ currentUnreadThickThreads,
+ );
+ return currentUnreadThickThreads;
+ }
+ return await commCoreModule.getUnreadThickThreadIDsFromNotifsStorage();
+ })();
+
+ let unreadThickThreadIDs: $ReadOnlyArray<string>;
try {
- [queriedKeyserverData] = await Promise.all([
+ [queriedKeyserverData, unreadThickThreadIDs] = await Promise.all([
commCoreModule.getKeyserverDataFromNotifStorage(notifsStorageQueries),
+ handleUnreadThickThreadIDsInNotifsStorage,
commCoreModule.updateKeyserverDataInNotifStorage(notifStorageUpdates),
]);
} catch (e) {
@@ -365,6 +392,7 @@
totalUnreadCount += keyserverData.unreadCount;
}
+ totalUnreadCount += unreadThickThreadIDs.length;
if (Platform.OS === 'ios') {
CommIOSNotifications.setBadgesCount(totalUnreadCount);
} else if (Platform.OS === 'android') {
@@ -799,8 +827,9 @@
React.memo<BaseProps>(function ConnectedPushHandler(props: BaseProps) {
const navContext = React.useContext(NavContext);
const activeThread = activeMessageListSelector(navContext);
- const boundUnreadCount = useSelector(allUnreadCounts);
- const boundConnection = useSelector(allConnectionInfosSelector);
+ const unreadCount = useSelector(allUnreadCounts);
+ const unreadThickThreadIDs = useSelector(unreadThickThreadIDsSelector);
+ const connection = useSelector(allConnectionInfosSelector);
const deviceTokens = useSelector(deviceTokensSelector);
const threadInfos = useSelector(threadInfoSelector);
const notifPermissionAlertInfo = useSelector(
@@ -818,12 +847,14 @@
const callSetDeviceToken = useSetDeviceToken();
const callSetDeviceTokenFanout = useSetDeviceTokenFanout();
const rootContext = React.useContext(RootContext);
+ const { socketState: tunnelbrokerSocketState } = useTunnelbroker();
return (
<PushHandler
{...props}
activeThread={activeThread}
- unreadCount={boundUnreadCount}
- connection={boundConnection}
+ unreadCount={unreadCount}
+ unreadThickThreadIDs={unreadThickThreadIDs}
+ connection={connection}
deviceTokens={deviceTokens}
threadInfos={threadInfos}
notifPermissionAlertInfo={notifPermissionAlertInfo}
@@ -837,6 +868,7 @@
setDeviceTokenFanout={callSetDeviceTokenFanout}
rootContext={rootContext}
localToken={localToken}
+ tunnelbrokerSocketState={tunnelbrokerSocketState}
/>
);
});

File Metadata

Mime Type
text/plain
Expires
Sat, Dec 21, 10:20 PM (21 h, 45 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2689740
Default Alt Text
D13190.id43866.diff (5 KB)

Event Timeline