iOS: Fix wrong forwards order (#3576)

This commit is contained in:
Alexander Zinchuk 2023-07-20 15:58:29 +02:00
parent faab9b15e8
commit c3e86fb157
4 changed files with 32 additions and 23 deletions

View File

@ -226,7 +226,6 @@ export async function fetchMessage({ chat, messageId }: { chat: ApiChat; message
}
let mediaQueue = Promise.resolve();
let lastSendMessagePromise = Promise.resolve();
export function sendMessage(
{
@ -319,7 +318,7 @@ export function sendMessage(
}, randomId, localMessage, onProgress);
}
lastSendMessagePromise = (async () => {
const messagePromise = (async () => {
let media: GramJs.TypeInputMedia | undefined;
if (attachment) {
try {
@ -382,7 +381,7 @@ export function sendMessage(
}
})();
return lastSendMessagePromise;
return messagePromise;
}
const groupedUploads: Record<string, {
@ -497,8 +496,6 @@ function sendGroupedMedia(
if (update) handleMultipleLocalMessagesUpdate(localMessages, update);
})();
lastSendMessagePromise = mediaQueue;
return mediaQueue;
}
@ -1325,8 +1322,6 @@ export async function forwardMessages({
});
});
await lastSendMessagePromise;
try {
const update = await invokeRequest(new GramJs.messages.ForwardMessages({
fromPeer: buildInputPeer(fromChat.id, fromChat.accessHash),

View File

@ -106,10 +106,12 @@ import { ensureProtocol } from '../../../util/ensureProtocol';
import { updateTabState } from '../../reducers/tabs';
import { getCurrentTabId } from '../../../util/establishMultitabRole';
import { deleteMessages } from '../apiUpdaters/messages';
import Deferred from '../../../util/Deferred';
const AUTOLOGIN_TOKEN_KEY = 'autologin_token';
const uploadProgressCallbacks = new Map<number, ApiOnProgress>();
let lastSendMessageDeferred = Deferred.resolved();
const runDebouncedForMarkRead = debounce((cb) => cb(), 500, false);
@ -798,19 +800,22 @@ addActionHandler('forwardMessages', (global, actions, payload): ActionReturnType
const realMessages = messages.filter((m) => !isServiceNotificationMessage(m));
if (realMessages.length) {
void callApi('forwardMessages', {
fromChat,
toChat,
toThreadId,
messages: realMessages,
isSilent,
scheduledAt,
sendAs,
withMyScore,
noAuthors,
noCaptions,
isCurrentUserPremium,
});
(async () => {
await lastSendMessageDeferred.promise;
await callApi('forwardMessages', {
fromChat,
toChat,
toThreadId,
messages: realMessages,
isSilent,
scheduledAt,
sendAs,
withMyScore,
noAuthors,
noCaptions,
isCurrentUserPremium,
});
})();
}
messages
@ -1168,6 +1173,7 @@ async function sendMessage<T extends GlobalState>(global: T, params: {
replyingToTopId?: number;
groupedId?: string;
}) {
lastSendMessageDeferred = new Deferred();
let localId: number | undefined;
const progressCallback = params.attachment ? (progress: number, messageLocalId: number) => {
if (!uploadProgressCallbacks.has(messageLocalId)) {
@ -1212,6 +1218,8 @@ async function sendMessage<T extends GlobalState>(global: T, params: {
if (progressCallback && localId) {
uploadProgressCallbacks.delete(localId);
}
lastSendMessageDeferred.resolve();
}
addActionHandler('loadPinnedMessages', async (global, actions, payload): Promise<void> => {

View File

@ -9,8 +9,6 @@ type ShareData = {
files?: File[];
};
const RESOLVED_DEFERRED = new Deferred<void>();
RESOLVED_DEFERRED.resolve();
const READY_CLIENT_DEFERREDS = new Map<string, Deferred<void>>();
export async function respondForShare(e: FetchEvent) {
@ -38,7 +36,7 @@ export function handleClientMessage(e: ExtendableMessageEvent) {
if (deferred) {
deferred.resolve();
} else {
READY_CLIENT_DEFERREDS.set(id, RESOLVED_DEFERRED);
READY_CLIENT_DEFERREDS.set(id, Deferred.resolved());
}
}
}

View File

@ -11,4 +11,12 @@ export default class Deferred<T = void> {
this.resolve = resolve;
});
}
static resolved(): Deferred<void>;
static resolved<T>(value: T): Deferred<T>;
static resolved<T>(value?: T): Deferred<T | void> {
const deferred = new Deferred<T | void>();
deferred.resolve(value);
return deferred;
}
}