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 mediaQueue = Promise.resolve();
|
||||||
let lastSendMessagePromise = Promise.resolve();
|
|
||||||
|
|
||||||
export function sendMessage(
|
export function sendMessage(
|
||||||
{
|
{
|
||||||
@ -319,7 +318,7 @@ export function sendMessage(
|
|||||||
}, randomId, localMessage, onProgress);
|
}, randomId, localMessage, onProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
lastSendMessagePromise = (async () => {
|
const messagePromise = (async () => {
|
||||||
let media: GramJs.TypeInputMedia | undefined;
|
let media: GramJs.TypeInputMedia | undefined;
|
||||||
if (attachment) {
|
if (attachment) {
|
||||||
try {
|
try {
|
||||||
@ -382,7 +381,7 @@ export function sendMessage(
|
|||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
return lastSendMessagePromise;
|
return messagePromise;
|
||||||
}
|
}
|
||||||
|
|
||||||
const groupedUploads: Record<string, {
|
const groupedUploads: Record<string, {
|
||||||
@ -497,8 +496,6 @@ function sendGroupedMedia(
|
|||||||
if (update) handleMultipleLocalMessagesUpdate(localMessages, update);
|
if (update) handleMultipleLocalMessagesUpdate(localMessages, update);
|
||||||
})();
|
})();
|
||||||
|
|
||||||
lastSendMessagePromise = mediaQueue;
|
|
||||||
|
|
||||||
return mediaQueue;
|
return mediaQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1325,8 +1322,6 @@ export async function forwardMessages({
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
await lastSendMessagePromise;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const update = await invokeRequest(new GramJs.messages.ForwardMessages({
|
const update = await invokeRequest(new GramJs.messages.ForwardMessages({
|
||||||
fromPeer: buildInputPeer(fromChat.id, fromChat.accessHash),
|
fromPeer: buildInputPeer(fromChat.id, fromChat.accessHash),
|
||||||
|
|||||||
@ -106,10 +106,12 @@ import { ensureProtocol } from '../../../util/ensureProtocol';
|
|||||||
import { updateTabState } from '../../reducers/tabs';
|
import { updateTabState } from '../../reducers/tabs';
|
||||||
import { getCurrentTabId } from '../../../util/establishMultitabRole';
|
import { getCurrentTabId } from '../../../util/establishMultitabRole';
|
||||||
import { deleteMessages } from '../apiUpdaters/messages';
|
import { deleteMessages } from '../apiUpdaters/messages';
|
||||||
|
import Deferred from '../../../util/Deferred';
|
||||||
|
|
||||||
const AUTOLOGIN_TOKEN_KEY = 'autologin_token';
|
const AUTOLOGIN_TOKEN_KEY = 'autologin_token';
|
||||||
|
|
||||||
const uploadProgressCallbacks = new Map<number, ApiOnProgress>();
|
const uploadProgressCallbacks = new Map<number, ApiOnProgress>();
|
||||||
|
let lastSendMessageDeferred = Deferred.resolved();
|
||||||
|
|
||||||
const runDebouncedForMarkRead = debounce((cb) => cb(), 500, false);
|
const runDebouncedForMarkRead = debounce((cb) => cb(), 500, false);
|
||||||
|
|
||||||
@ -798,19 +800,22 @@ addActionHandler('forwardMessages', (global, actions, payload): ActionReturnType
|
|||||||
|
|
||||||
const realMessages = messages.filter((m) => !isServiceNotificationMessage(m));
|
const realMessages = messages.filter((m) => !isServiceNotificationMessage(m));
|
||||||
if (realMessages.length) {
|
if (realMessages.length) {
|
||||||
void callApi('forwardMessages', {
|
(async () => {
|
||||||
fromChat,
|
await lastSendMessageDeferred.promise;
|
||||||
toChat,
|
await callApi('forwardMessages', {
|
||||||
toThreadId,
|
fromChat,
|
||||||
messages: realMessages,
|
toChat,
|
||||||
isSilent,
|
toThreadId,
|
||||||
scheduledAt,
|
messages: realMessages,
|
||||||
sendAs,
|
isSilent,
|
||||||
withMyScore,
|
scheduledAt,
|
||||||
noAuthors,
|
sendAs,
|
||||||
noCaptions,
|
withMyScore,
|
||||||
isCurrentUserPremium,
|
noAuthors,
|
||||||
});
|
noCaptions,
|
||||||
|
isCurrentUserPremium,
|
||||||
|
});
|
||||||
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
messages
|
messages
|
||||||
@ -1168,6 +1173,7 @@ async function sendMessage<T extends GlobalState>(global: T, params: {
|
|||||||
replyingToTopId?: number;
|
replyingToTopId?: number;
|
||||||
groupedId?: string;
|
groupedId?: string;
|
||||||
}) {
|
}) {
|
||||||
|
lastSendMessageDeferred = new Deferred();
|
||||||
let localId: number | undefined;
|
let localId: number | undefined;
|
||||||
const progressCallback = params.attachment ? (progress: number, messageLocalId: number) => {
|
const progressCallback = params.attachment ? (progress: number, messageLocalId: number) => {
|
||||||
if (!uploadProgressCallbacks.has(messageLocalId)) {
|
if (!uploadProgressCallbacks.has(messageLocalId)) {
|
||||||
@ -1212,6 +1218,8 @@ async function sendMessage<T extends GlobalState>(global: T, params: {
|
|||||||
if (progressCallback && localId) {
|
if (progressCallback && localId) {
|
||||||
uploadProgressCallbacks.delete(localId);
|
uploadProgressCallbacks.delete(localId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lastSendMessageDeferred.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
addActionHandler('loadPinnedMessages', async (global, actions, payload): Promise<void> => {
|
addActionHandler('loadPinnedMessages', async (global, actions, payload): Promise<void> => {
|
||||||
|
|||||||
@ -9,8 +9,6 @@ type ShareData = {
|
|||||||
files?: File[];
|
files?: File[];
|
||||||
};
|
};
|
||||||
|
|
||||||
const RESOLVED_DEFERRED = new Deferred<void>();
|
|
||||||
RESOLVED_DEFERRED.resolve();
|
|
||||||
const READY_CLIENT_DEFERREDS = new Map<string, Deferred<void>>();
|
const READY_CLIENT_DEFERREDS = new Map<string, Deferred<void>>();
|
||||||
|
|
||||||
export async function respondForShare(e: FetchEvent) {
|
export async function respondForShare(e: FetchEvent) {
|
||||||
@ -38,7 +36,7 @@ export function handleClientMessage(e: ExtendableMessageEvent) {
|
|||||||
if (deferred) {
|
if (deferred) {
|
||||||
deferred.resolve();
|
deferred.resolve();
|
||||||
} else {
|
} 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;
|
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