From 88cd5e32d1b3b38e7ec4ba14bb1685fd144a9c95 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 20 Aug 2021 23:46:52 +0300 Subject: [PATCH] [Refactoring] Add util function for server time (#1396) --- src/api/gramjs/apiBuilders/chats.ts | 3 ++- src/api/gramjs/apiBuilders/misc.ts | 3 ++- src/api/gramjs/methods/settings.ts | 7 ++++--- src/components/middle/composer/Composer.tsx | 7 ++++--- src/modules/actions/api/bots.ts | 8 ++++---- src/modules/actions/api/users.ts | 6 +++--- src/modules/helpers/users.ts | 3 ++- src/modules/selectors/messages.ts | 6 +++--- src/util/serverTime.ts | 3 +++ 9 files changed, 27 insertions(+), 19 deletions(-) create mode 100644 src/util/serverTime.ts diff --git a/src/api/gramjs/apiBuilders/chats.ts b/src/api/gramjs/apiBuilders/chats.ts index bf3372898..8b219ded5 100644 --- a/src/api/gramjs/apiBuilders/chats.ts +++ b/src/api/gramjs/apiBuilders/chats.ts @@ -12,6 +12,7 @@ import { isInputPeerChannel, isInputPeerChat, isInputPeerUser, isPeerChat, isPeerUser, } from './peers'; import { omitVirtualClassFields } from './helpers'; +import { getServerTime } from '../../../util/serverTime'; type PeerEntityApiChatFields = Omit = ({ if (currentAttachments.length || text) { if (slowMode && !isAdmin) { - const nowSeconds = Math.floor(Date.now() / 1000) + serverTimeOffset; + const nowSeconds = getServerTime(serverTimeOffset); const secondsSinceLastMessage = lastMessageSendTimeSeconds.current && Math.floor(nowSeconds - lastMessageSendTimeSeconds.current); const nextSendDateNotReached = slowMode.nextSendDate && slowMode.nextSendDate > nowSeconds; @@ -514,7 +515,7 @@ const Composer: FC = ({ forwardMessages(); } - lastMessageSendTimeSeconds.current = Math.floor(Date.now() / 1000) + serverTimeOffset; + lastMessageSendTimeSeconds.current = getServerTime(serverTimeOffset); clearDraft({ chatId, localOnly: true }); @@ -527,7 +528,7 @@ const Composer: FC = ({ resetComposer(); }); }, [ - connectionState, attachments, activeVoiceRecording, isForwarding, serverTimeOffset, clearDraft, chatId, + connectionState, attachments, activeVoiceRecording, isForwarding, clearDraft, chatId, serverTimeOffset, resetComposer, stopRecordingVoice, showDialog, slowMode, isAdmin, sendMessage, forwardMessages, lang, ]); diff --git a/src/modules/actions/api/bots.ts b/src/modules/actions/api/bots.ts index 3afb454ea..fdb1ea689 100644 --- a/src/modules/actions/api/bots.ts +++ b/src/modules/actions/api/bots.ts @@ -15,8 +15,9 @@ import { addChats, addUsers, removeBlockedContact } from '../../reducers'; import { buildCollectionByKey } from '../../../util/iteratees'; import { debounce } from '../../../util/schedulers'; import { replaceInlineBotSettings, replaceInlineBotsIsLoading } from '../../reducers/bots'; +import { getServerTime } from '../../../util/serverTime'; -const TOP_PEERS_REQUEST_COOLDOWN = 60000; // 1 min +const TOP_PEERS_REQUEST_COOLDOWN = 60; // 1 min const runDebouncedForSearch = debounce((cb) => cb(), 500, false); addReducer('clickInlineButton', (global, actions, payload) => { @@ -96,10 +97,9 @@ addReducer('restartBot', (global, actions, payload) => { }); addReducer('loadTopInlineBots', (global) => { - const { serverTimeOffset } = global; const { hash, lastRequestedAt } = global.topInlineBots; - if (lastRequestedAt && Date.now() + serverTimeOffset * 1000 - lastRequestedAt < TOP_PEERS_REQUEST_COOLDOWN) { + if (lastRequestedAt && getServerTime(global.serverTimeOffset) - lastRequestedAt < TOP_PEERS_REQUEST_COOLDOWN) { return; } @@ -119,7 +119,7 @@ addReducer('loadTopInlineBots', (global) => { ...newGlobal.topInlineBots, hash: newHash, userIds: ids, - lastRequestedAt: Date.now() + serverTimeOffset * 1000, + lastRequestedAt: getServerTime(global.serverTimeOffset), }, }; setGlobal(newGlobal); diff --git a/src/modules/actions/api/users.ts b/src/modules/actions/api/users.ts index df0246a4d..d535168d2 100644 --- a/src/modules/actions/api/users.ts +++ b/src/modules/actions/api/users.ts @@ -14,6 +14,7 @@ import { addChats, addUsers, updateChat, updateManagementProgress, updateUser, updateUsers, updateUserSearch, updateUserSearchFetchingStatus, } from '../../reducers'; +import { getServerTime } from '../../../util/serverTime'; const runDebouncedForFetchFullUser = debounce((cb) => cb(), 500, false, true); const TOP_PEERS_REQUEST_COOLDOWN = 60; // 1 min @@ -52,13 +53,12 @@ addReducer('loadUser', (global, actions, payload) => { addReducer('loadTopUsers', (global) => { const { - serverTimeOffset, topPeers: { hash, lastRequestedAt, }, } = global; - if (!lastRequestedAt || Date.now() / 1000 + serverTimeOffset - lastRequestedAt > TOP_PEERS_REQUEST_COOLDOWN) { + if (!lastRequestedAt || getServerTime(global.serverTimeOffset) - lastRequestedAt > TOP_PEERS_REQUEST_COOLDOWN) { void loadTopUsers(hash); } }); @@ -102,7 +102,7 @@ async function loadTopUsers(usersHash?: number) { ...global.topPeers, hash, userIds: ids, - lastRequestedAt: Date.now() / 1000 + global.serverTimeOffset, + lastRequestedAt: getServerTime(global.serverTimeOffset), }, }; setGlobal(global); diff --git a/src/modules/helpers/users.ts b/src/modules/helpers/users.ts index e37443e89..9919e5dff 100644 --- a/src/modules/helpers/users.ts +++ b/src/modules/helpers/users.ts @@ -4,6 +4,7 @@ import { SERVICE_NOTIFICATIONS_USER_ID } from '../../config'; import { formatFullDate, formatTime } from '../../util/dateFormat'; import { orderBy } from '../../util/iteratees'; import { LangFn } from '../../hooks/useLang'; +import { getServerTime } from '../../util/serverTime'; const USER_COLOR_KEYS = [1, 8, 5, 2, 7, 4, 6]; @@ -189,7 +190,7 @@ export function sortUserIds( serverTimeOffset = 0, ) { return orderBy(userIds, (id) => { - const now = Date.now() / 1000 + serverTimeOffset; + const now = getServerTime(serverTimeOffset); if (priorityIds && priorityIds.includes(id)) { // Assuming that online status expiration date can't be as far as two days from now, diff --git a/src/modules/selectors/messages.ts b/src/modules/selectors/messages.ts index 73571c1b2..be75a4e60 100644 --- a/src/modules/selectors/messages.ts +++ b/src/modules/selectors/messages.ts @@ -33,8 +33,9 @@ import { } from '../helpers'; import { findLast } from '../../util/iteratees'; import { selectIsStickerFavorite } from './symbols'; +import { getServerTime } from '../../util/serverTime'; -const MESSAGE_EDIT_ALLOWED_TIME_MS = 172800000; // 48 hours +const MESSAGE_EDIT_ALLOWED_TIME = 172800; // 48 hours export function selectCurrentMessageList(global: GlobalState) { const { messageLists } = global.messages; @@ -340,7 +341,6 @@ export function selectForwardedSender(global: GlobalState, message: ApiMessage): } export function selectAllowedMessageActions(global: GlobalState, message: ApiMessage, threadId: number) { - const { serverTimeOffset } = global; const chat = selectChat(global, message.chatId); if (!chat || chat.isRestricted) { return {}; @@ -361,7 +361,7 @@ export function selectAllowedMessageActions(global: GlobalState, message: ApiMes || (isChannel && getHasAdminRight(chat, 'editMessages')); const isMessageEditable = ( (canEditMessagesIndefinitely - || Date.now() + serverTimeOffset * 1000 - message.date * 1000 < MESSAGE_EDIT_ALLOWED_TIME_MS) + || getServerTime(global.serverTimeOffset) - message.date < MESSAGE_EDIT_ALLOWED_TIME) && !( content.sticker || content.contact || content.poll || content.action || content.audio || (content.video && content.video.isRound) diff --git a/src/util/serverTime.ts b/src/util/serverTime.ts new file mode 100644 index 000000000..9d05b52d0 --- /dev/null +++ b/src/util/serverTime.ts @@ -0,0 +1,3 @@ +export const getServerTime = (serverTimeOffset: number) => { + return Math.floor(Date.now() / 1000) + serverTimeOffset; +};