[Refactoring] Add util function for server time (#1396)
This commit is contained in:
parent
48b6a263cf
commit
88cd5e32d1
@ -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),
|
||||
|
||||
@ -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) }),
|
||||
};
|
||||
|
||||
@ -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,
|
||||
};
|
||||
|
||||
@ -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,
|
||||
]);
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
3
src/util/serverTime.ts
Normal file
@ -0,0 +1,3 @@
|
||||
export const getServerTime = (serverTimeOffset: number) => {
|
||||
return Math.floor(Date.now() / 1000) + serverTimeOffset;
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user