mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Fixed refreshing of file reference in api media spoiler editing module.
This commit is contained in:
parent
334fd4e951
commit
7a95b38d3c
1 changed files with 69 additions and 15 deletions
|
@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "ui/boxes/confirm_box.h"
|
#include "ui/boxes/confirm_box.h"
|
||||||
#include "data/business/data_shortcut_messages.h"
|
#include "data/business/data_shortcut_messages.h"
|
||||||
#include "data/components/scheduled_messages.h"
|
#include "data/components/scheduled_messages.h"
|
||||||
|
#include "data/data_file_origin.h"
|
||||||
#include "data/data_histories.h"
|
#include "data/data_histories.h"
|
||||||
#include "data/data_session.h"
|
#include "data/data_session.h"
|
||||||
#include "data/data_web_page.h"
|
#include "data/data_web_page.h"
|
||||||
|
@ -254,37 +255,90 @@ mtpRequestId EditTextMessage(
|
||||||
Fn<void(mtpRequestId requestId)> done,
|
Fn<void(mtpRequestId requestId)> done,
|
||||||
Fn<void(const QString &error, mtpRequestId requestId)> fail,
|
Fn<void(const QString &error, mtpRequestId requestId)> fail,
|
||||||
std::optional<bool> spoilerMediaOverride) {
|
std::optional<bool> spoilerMediaOverride) {
|
||||||
const auto callback = [=](Fn<void()> applyUpdates, mtpRequestId id) {
|
|
||||||
applyUpdates();
|
|
||||||
done(id);
|
|
||||||
};
|
|
||||||
auto inputMedia = std::optional<MTPInputMedia>();
|
|
||||||
if (spoilerMediaOverride) {
|
if (spoilerMediaOverride) {
|
||||||
const auto spoiler = *spoilerMediaOverride;
|
const auto spoiler = *spoilerMediaOverride;
|
||||||
if (const auto media = item->media()) {
|
if (const auto media = item->media()) {
|
||||||
|
auto takeInputMedia = Fn<std::optional<MTPInputMedia>()>(nullptr);
|
||||||
|
auto takeFileReference = Fn<QByteArray()>(nullptr);
|
||||||
if (const auto photo = media->photo()) {
|
if (const auto photo = media->photo()) {
|
||||||
using Flag = MTPDinputMediaPhoto::Flag;
|
using Flag = MTPDinputMediaPhoto::Flag;
|
||||||
const auto flags = Flag()
|
const auto flags = Flag()
|
||||||
| (media->ttlSeconds() ? Flag::f_ttl_seconds : Flag())
|
| (media->ttlSeconds() ? Flag::f_ttl_seconds : Flag())
|
||||||
| (spoiler ? Flag::f_spoiler : Flag());
|
| (spoiler ? Flag::f_spoiler : Flag());
|
||||||
inputMedia = MTP_inputMediaPhoto(
|
takeInputMedia = [=] {
|
||||||
MTP_flags(flags),
|
return MTP_inputMediaPhoto(
|
||||||
photo->mtpInput(),
|
MTP_flags(flags),
|
||||||
MTP_int(media->ttlSeconds()));
|
photo->mtpInput(),
|
||||||
|
MTP_int(media->ttlSeconds()));
|
||||||
|
};
|
||||||
|
takeFileReference = [=] { return photo->fileReference(); };
|
||||||
} else if (const auto document = media->document()) {
|
} else if (const auto document = media->document()) {
|
||||||
using Flag = MTPDinputMediaDocument::Flag;
|
using Flag = MTPDinputMediaDocument::Flag;
|
||||||
const auto flags = Flag()
|
const auto flags = Flag()
|
||||||
| (media->ttlSeconds() ? Flag::f_ttl_seconds : Flag())
|
| (media->ttlSeconds() ? Flag::f_ttl_seconds : Flag())
|
||||||
| (spoiler ? Flag::f_spoiler : Flag());
|
| (spoiler ? Flag::f_spoiler : Flag());
|
||||||
inputMedia = MTP_inputMediaDocument(
|
takeInputMedia = [=] {
|
||||||
MTP_flags(flags),
|
return MTP_inputMediaDocument(
|
||||||
document->mtpInput(),
|
MTP_flags(flags),
|
||||||
MTP_int(media->ttlSeconds()),
|
document->mtpInput(),
|
||||||
MTPstring()); // query
|
MTP_int(media->ttlSeconds()),
|
||||||
|
MTPstring()); // query
|
||||||
|
};
|
||||||
|
takeFileReference = [=] { return document->fileReference(); };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto usedFileReference = takeFileReference
|
||||||
|
? takeFileReference()
|
||||||
|
: QByteArray();
|
||||||
|
const auto origin = item->fullId();
|
||||||
|
const auto api = &item->history()->session().api();
|
||||||
|
const auto performRequest = [=](
|
||||||
|
const auto &repeatRequest,
|
||||||
|
mtpRequestId originalRequestId) -> mtpRequestId {
|
||||||
|
const auto handleReference = [=](
|
||||||
|
const QString &error,
|
||||||
|
mtpRequestId requestId) {
|
||||||
|
if (error.startsWith(u"FILE_REFERENCE_"_q)) {
|
||||||
|
api->refreshFileReference(origin, [=](const auto &) {
|
||||||
|
if (takeFileReference &&
|
||||||
|
(takeFileReference() != usedFileReference)) {
|
||||||
|
repeatRequest(
|
||||||
|
repeatRequest,
|
||||||
|
originalRequestId
|
||||||
|
? originalRequestId
|
||||||
|
: requestId);
|
||||||
|
} else {
|
||||||
|
fail(error, requestId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
fail(error, requestId);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const auto callback = [=](
|
||||||
|
Fn<void()> applyUpdates,
|
||||||
|
mtpRequestId requestId) {
|
||||||
|
applyUpdates();
|
||||||
|
done(originalRequestId ? originalRequestId : requestId);
|
||||||
|
};
|
||||||
|
const auto requestId = EditMessage(
|
||||||
|
item,
|
||||||
|
caption,
|
||||||
|
webpage,
|
||||||
|
options,
|
||||||
|
callback,
|
||||||
|
handleReference,
|
||||||
|
takeInputMedia ? takeInputMedia() : std::nullopt);
|
||||||
|
return originalRequestId ? originalRequestId : requestId;
|
||||||
|
};
|
||||||
|
return performRequest(performRequest, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto callback = [=](Fn<void()> applyUpdates, mtpRequestId id) {
|
||||||
|
applyUpdates();
|
||||||
|
done(id);
|
||||||
|
};
|
||||||
return EditMessage(
|
return EditMessage(
|
||||||
item,
|
item,
|
||||||
caption,
|
caption,
|
||||||
|
@ -292,7 +346,7 @@ mtpRequestId EditTextMessage(
|
||||||
options,
|
options,
|
||||||
callback,
|
callback,
|
||||||
fail,
|
fail,
|
||||||
inputMedia);
|
std::nullopt);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Api
|
} // namespace Api
|
||||||
|
|
Loading…
Add table
Reference in a new issue