From 33ddf51ba6204a32e84398ad4053189b61d50d0f Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Fri, 9 Feb 2024 10:21:15 +1100 Subject: [PATCH] fix: add some debugging messageinfo (not released) --- _locales/en/messages.json | 5 ++ package.json | 1 + .../message-content/MessageReactBar.tsx | 20 ++++++-- .../message-info/components/MessageInfo.tsx | 51 +++++++++++++++++++ ts/models/conversation.ts | 2 +- ts/state/selectors/messages.ts | 20 ++++++++ ts/types/LocalizerKeys.ts | 5 ++ yarn.lock | 5 ++ 8 files changed, 104 insertions(+), 5 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 56cd35866..e10d612da 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -197,6 +197,11 @@ "timerModeRead": "read", "timerModeSent": "sent", "confirm": "Confirm", + "messageHash": "Message Hash", + "serverId": "Server ID", + "expirationType": "Expiration Type", + "expirationDuration": "Expiration Duration", + "disappears": "Disappears", "followSetting": "Follow Setting", "followSettingDisabled": "Messages you send will no longer disappear. Are you sure you want to turn off disappearing messages?", "followSettingTimeAndType": "Set your messages to disappear $time$ after they have been $type$?", diff --git a/package.json b/package.json index 458252637..56d76b071 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,7 @@ "config": "1.28.1", "country-code-lookup": "^0.0.19", "curve25519-js": "https://github.com/oxen-io/curve25519-js", + "date-fns": "^3.3.1", "dompurify": "^2.0.7", "electron-localshortcut": "^3.2.1", "electron-updater": "^4.2.2", diff --git a/ts/components/conversation/message/message-content/MessageReactBar.tsx b/ts/components/conversation/message/message-content/MessageReactBar.tsx index 9052ddf14..e6ab3a87c 100644 --- a/ts/components/conversation/message/message-content/MessageReactBar.tsx +++ b/ts/components/conversation/message/message-content/MessageReactBar.tsx @@ -3,7 +3,10 @@ import styled from 'styled-components'; import { isEmpty } from 'lodash'; import moment from 'moment'; +import useBoolean from 'react-use/lib/useBoolean'; +import useInterval from 'react-use/lib/useInterval'; import { useMessageExpirationPropsById } from '../../../../hooks/useParamSelector'; +import { DURATION } from '../../../../session/constants'; import { nativeEmojiData } from '../../../../util/emoji'; import { getRecentReactions } from '../../../../util/storage'; import { SpacerSM } from '../../../basic/Text'; @@ -91,8 +94,7 @@ function useIsRenderedExpiresInItem(messageId: string) { return expiryDetails.expirationTimestamp; } -function formatExpiry({ expirationTimestamp }: { expirationTimestamp: number }) { - const diffMs = expirationTimestamp - Date.now(); +function formatExpiry({ diffMs }: { diffMs: number }) { const diff = moment(diffMs).utc(); if (diffMs <= 0) { @@ -132,7 +134,17 @@ function formatExpiry({ expirationTimestamp }: { expirationTimestamp: number }) } const ExpiresInItem = ({ expirationTimestamp }: { expirationTimestamp?: number | null }) => { - if (!expirationTimestamp) { + // this boolean is just used to forceRefresh the state when we get to display seconds in the contextmenu + const [refresh, setRefresh] = useBoolean(false); + const diffMs = (expirationTimestamp || 0) - Date.now(); + + useInterval( + () => { + setRefresh(!refresh); + }, + diffMs > 0 && diffMs <= 2 * DURATION.MINUTES ? 500 : null + ); + if (!expirationTimestamp || diffMs < 0) { return null; } @@ -140,7 +152,7 @@ const ExpiresInItem = ({ expirationTimestamp }: { expirationTimestamp?: number | - {formatExpiry({ expirationTimestamp })} + {formatExpiry({ diffMs })} ); }; diff --git a/ts/components/conversation/right-panel/overlay/message-info/components/MessageInfo.tsx b/ts/components/conversation/right-panel/overlay/message-info/components/MessageInfo.tsx index 624032ab3..6b80bc9e2 100644 --- a/ts/components/conversation/right-panel/overlay/message-info/components/MessageInfo.tsx +++ b/ts/components/conversation/right-panel/overlay/message-info/components/MessageInfo.tsx @@ -1,13 +1,20 @@ +import { format, formatDistanceStrict } from 'date-fns'; import { ipcRenderer } from 'electron'; import { isEmpty } from 'lodash'; import moment from 'moment'; + import React from 'react'; import styled from 'styled-components'; import { MessageFrom } from '.'; import { useMessageDirection, + useMessageExpirationDurationMs, + useMessageExpirationTimestamp, + useMessageExpirationType, + useMessageHash, useMessageReceivedAt, useMessageSender, + useMessageServerId, useMessageServerTimestamp, useMessageTimestamp, } from '../../../../../../state/selectors'; @@ -57,6 +64,48 @@ const showDebugLog = () => { ipcRenderer.send('show-debug-log'); }; +const showDebugMessageInfo = false; + +const DebugMessageInfo = ({ messageId }: { messageId: string }) => { + const messageHash = useMessageHash(messageId); + const serverId = useMessageServerId(messageId); + const expirationType = useMessageExpirationType(messageId); + const expirationDurationMs = useMessageExpirationDurationMs(messageId); + const expirationTimestamp = useMessageExpirationTimestamp(messageId); + + if (!showDebugMessageInfo) { + return null; + } + + return ( + <> + {messageHash ? ( + + ) : null} + {serverId ? ( + + ) : null} + {expirationType ? ( + + ) : null} + {expirationDurationMs ? ( + + ) : null} + {expirationTimestamp ? ( + + ) : null} + + ); +}; + export const MessageInfo = ({ messageId, errors }: { messageId: string; errors: Array }) => { const sender = useMessageSender(messageId); const direction = useMessageDirection(messageId); @@ -83,6 +132,8 @@ export const MessageInfo = ({ messageId, errors }: { messageId: string; errors: return ( + + {direction === 'incoming' ? ( ) : null} diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index ce7445fca..3b2699951 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -2616,7 +2616,7 @@ async function cleanUpExpireHistoryFromConvo(conversationId: string, isPrivate: conversationId, isPrivate ); - window.inboxStore.dispatch( + window?.inboxStore?.dispatch( messagesDeleted(updateIdsRemoved.map(m => ({ conversationKey: conversationId, messageId: m }))) ); } diff --git a/ts/state/selectors/messages.ts b/ts/state/selectors/messages.ts index b97ee2fef..5a23dfc4f 100644 --- a/ts/state/selectors/messages.ts +++ b/ts/state/selectors/messages.ts @@ -136,6 +136,26 @@ export const useMessageQuote = (messageId: string | undefined): PropsForQuote | return useMessagePropsByMessageId(messageId)?.propsForMessage.quote; }; +export const useMessageHash = (messageId: string | undefined) => { + return useMessagePropsByMessageId(messageId)?.propsForMessage.messageHash; +}; + +export const useMessageExpirationType = (messageId: string | undefined) => { + return useMessagePropsByMessageId(messageId)?.propsForMessage.expirationType; +}; + +export const useMessageExpirationDurationMs = (messageId: string | undefined) => { + return useMessagePropsByMessageId(messageId)?.propsForMessage.expirationDurationMs; +}; + +export const useMessageExpirationTimestamp = (messageId: string | undefined) => { + return useMessagePropsByMessageId(messageId)?.propsForMessage.expirationTimestamp; +}; + +export const useMessageServerId = (messageId: string | undefined) => { + return useMessagePropsByMessageId(messageId)?.propsForMessage.serverId; +}; + export const useMessageText = (messageId: string | undefined): string | undefined => { return useMessagePropsByMessageId(messageId)?.propsForMessage.text; }; diff --git a/ts/types/LocalizerKeys.ts b/ts/types/LocalizerKeys.ts index 87a80c1ac..abbdadb23 100644 --- a/ts/types/LocalizerKeys.ts +++ b/ts/types/LocalizerKeys.ts @@ -159,6 +159,7 @@ export type LocalizerKeys = | 'disappearingMessagesModeLegacySubtitle' | 'disappearingMessagesModeOff' | 'disappearingMessagesModeOutdated' + | 'disappears' | 'displayName' | 'displayNameEmpty' | 'displayNameTooLong' @@ -198,6 +199,8 @@ export type LocalizerKeys = | 'error' | 'establishingConnection' | 'expandedReactionsText' + | 'expirationDuration' + | 'expirationType' | 'failed' | 'failedResolveOns' | 'failedToAddAsModerator' @@ -296,6 +299,7 @@ export type LocalizerKeys = | 'messageBodyMissing' | 'messageDeletedPlaceholder' | 'messageDeletionForbidden' + | 'messageHash' | 'messageInfo' | 'messageRequestAccepted' | 'messageRequestAcceptedOurs' @@ -444,6 +448,7 @@ export type LocalizerKeys = | 'sendRecoveryPhraseTitle' | 'sending' | 'sent' + | 'serverId' | 'sessionMessenger' | 'set' | 'setAccountPasswordDescription' diff --git a/yarn.lock b/yarn.lock index ff41fe0d2..882884599 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2641,6 +2641,11 @@ data-urls@^4.0.0: whatwg-mimetype "^3.0.0" whatwg-url "^12.0.0" +date-fns@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.3.1.tgz#7581daca0892d139736697717a168afbb908cfed" + integrity sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw== + debug@4, debug@4.3.4, debug@^4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"