iOS: Fix wrong forwards order (#3576)
This commit is contained in:
parent
faab9b15e8
commit
c3e86fb157
@ -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),
|
||||
|
||||
@ -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> => {
|
||||
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user