[Refactoring] Add util function for server time (#1396)

This commit is contained in:
Alexander Zinchuk 2021-08-20 23:46:52 +03:00
parent 48b6a263cf
commit 88cd5e32d1
9 changed files with 27 additions and 19 deletions

View File

@ -12,6 +12,7 @@ import {
isInputPeerChannel, isInputPeerChat, isInputPeerUser, isPeerChat, isPeerUser,
} from './peers';
import { omitVirtualClassFields } from './helpers';
import { getServerTime } from '../../../util/serverTime';
type PeerEntityApiChatFields = Omit<ApiChat, (
'id' | 'type' | 'title' |
@ -63,7 +64,7 @@ export function buildApiChatFromDialog(
peer, folderId, unreadMark, unreadCount, unreadMentionsCount, notifySettings: { silent, muteUntil },
readOutboxMaxId, readInboxMaxId, draft,
} = dialog;
const isMuted = silent || (typeof muteUntil === 'number' && Date.now() + serverTimeOffset * 1000 < muteUntil * 1000);
const isMuted = silent || (typeof muteUntil === 'number' && getServerTime(serverTimeOffset) < muteUntil);
return {
id: getApiChatIdFromMtpPeer(peer),

View File

@ -6,6 +6,7 @@ import { ApiPrivacySettings, ApiPrivacyKey, PrivacyVisibility } from '../../../t
import { buildApiDocument } from './messages';
import { getApiChatIdFromMtpPeer } from './chats';
import { pick } from '../../../util/iteratees';
import { getServerTime } from '../../../util/serverTime';
export function buildApiWallpaper(wallpaper: GramJs.TypeWallPaper): ApiWallpaper | undefined {
if (wallpaper instanceof GramJs.WallPaperNoFile) {
@ -107,7 +108,7 @@ export function buildApiNotifyException(
return {
chatId: getApiChatIdFromMtpPeer(peer),
isMuted: silent || (typeof muteUntil === 'number' && Date.now() + serverTimeOffset * 1000 < muteUntil * 1000),
isMuted: silent || (typeof muteUntil === 'number' && getServerTime(serverTimeOffset) < muteUntil),
...(sound === '' && { isSilent: true }),
...(showPreviews !== undefined && { shouldShowPreviews: Boolean(showPreviews) }),
};

View File

@ -18,6 +18,7 @@ import { invokeRequest, uploadFile, getClient } from './client';
import { omitVirtualClassFields } from '../apiBuilders/helpers';
import { buildCollectionByKey } from '../../../util/iteratees';
import localDb from '../localDb';
import { getServerTime } from '../../../util/serverTime';
const MAX_INT_32 = 2 ** 31 - 1;
const BETA_LANG_CODES = ['ar', 'fa', 'id', 'ko', 'uz'];
@ -219,17 +220,17 @@ export async function fetchNotificationSettings({
hasContactJoinedNotifications: !isMutedContactSignUpNotification,
hasPrivateChatsNotifications: !(
privateSilent
|| (typeof privateMuteUntil === 'number' && Date.now() + serverTimeOffset * 1000 < privateMuteUntil * 1000)
|| (typeof privateMuteUntil === 'number' && getServerTime(serverTimeOffset) < privateMuteUntil)
),
hasPrivateChatsMessagePreview: privateShowPreviews,
hasGroupNotifications: !(
groupSilent || (typeof groupMuteUntil === 'number'
&& Date.now() + serverTimeOffset * 1000 < groupMuteUntil * 1000)
&& getServerTime(serverTimeOffset) < groupMuteUntil)
),
hasGroupMessagePreview: groupShowPreviews,
hasBroadcastNotifications: !(
broadcastSilent || (typeof broadcastMuteUntil === 'number'
&& Date.now() + serverTimeOffset * 1000 < broadcastMuteUntil * 1000)
&& getServerTime(serverTimeOffset) < broadcastMuteUntil)
),
hasBroadcastMessagePreview: broadcastShowPreviews,
};

View File

@ -66,6 +66,7 @@ import useContextMenuHandlers from '../../../hooks/useContextMenuHandlers';
import useLang from '../../../hooks/useLang';
import useInlineBotTooltip from './hooks/useInlineBotTooltip';
import windowSize from '../../../util/windowSize';
import { getServerTime } from '../../../util/serverTime';
import DeleteMessageModal from '../../common/DeleteMessageModal.async';
import Button from '../../ui/Button';
@ -476,7 +477,7 @@ const Composer: FC<OwnProps & StateProps & DispatchProps> = ({
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<OwnProps & StateProps & DispatchProps> = ({
forwardMessages();
}
lastMessageSendTimeSeconds.current = Math.floor(Date.now() / 1000) + serverTimeOffset;
lastMessageSendTimeSeconds.current = getServerTime(serverTimeOffset);
clearDraft({ chatId, localOnly: true });
@ -527,7 +528,7 @@ const Composer: FC<OwnProps & StateProps & DispatchProps> = ({
resetComposer();
});
}, [
connectionState, attachments, activeVoiceRecording, isForwarding, serverTimeOffset, clearDraft, chatId,
connectionState, attachments, activeVoiceRecording, isForwarding, clearDraft, chatId, serverTimeOffset,
resetComposer, stopRecordingVoice, showDialog, slowMode, isAdmin, sendMessage, forwardMessages, lang,
]);

View File

@ -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);

View File

@ -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);

View File

@ -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,

View File

@ -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)

3
src/util/serverTime.ts Normal file
View File

@ -0,0 +1,3 @@
export const getServerTime = (serverTimeOffset: number) => {
return Math.floor(Date.now() / 1000) + serverTimeOffset;
};