Allow sending one-time round videos.

This commit is contained in:
John Preston 2024-10-19 11:12:54 +04:00
parent 302e9371c8
commit c010ecfe38
3 changed files with 28 additions and 24 deletions

View file

@ -456,6 +456,7 @@ void SendConfirmedFile(
not_null<Main::Session*> session,
const std::shared_ptr<FilePrepareResult> &file) {
const auto isEditing = (file->type != SendMediaType::Audio)
&& (file->type != SendMediaType::Round)
&& (file->to.replaceMediaOf != 0);
const auto newId = FullMsgId(
file->to.peer,
@ -525,7 +526,8 @@ void SendConfirmedFile(
// Shortcut messages have no 'edited' badge.
flags |= MessageFlag::HideEdited;
}
if (file->type == SendMediaType::Audio) {
if (file->type == SendMediaType::Audio
|| file->type == SendMediaType::Round) {
if (!peer->isChannel() || peer->isMegagroup()) {
flags |= MessageFlag::MediaIsUnread;
}
@ -551,29 +553,25 @@ void SendConfirmedFile(
MTPint());
} else if (file->type == SendMediaType::Audio) {
const auto ttlSeconds = file->to.options.ttlSeconds;
const auto isVoice = [&] {
return file->document.match([](const MTPDdocumentEmpty &d) {
return false;
}, [](const MTPDdocument &d) {
return ranges::any_of(d.vattributes().v, [&](
const MTPDocumentAttribute &attribute) {
using Att = MTPDdocumentAttributeAudio;
return attribute.match([](const Att &data) -> bool {
return data.vflags().v & Att::Flag::f_voice;
}, [](const auto &) {
return false;
});
});
});
}();
using Flag = MTPDmessageMediaDocument::Flag;
return MTP_messageMediaDocument(
MTP_flags(Flag::f_document
| (isVoice ? Flag::f_voice : Flag())
| Flag::f_voice
| (ttlSeconds ? Flag::f_ttl_seconds : Flag())),
file->document,
MTPVector<MTPDocument>(), // alt_documents
MTP_int(ttlSeconds));
} else if (file->type == SendMediaType::Round) {
using Flag = MTPDmessageMediaDocument::Flag;
const auto ttlSeconds = file->to.options.ttlSeconds;
return MTP_messageMediaDocument(
MTP_flags(Flag::f_document
| Flag::f_round
| (ttlSeconds ? Flag::f_ttl_seconds : Flag())
| (file->spoiler ? Flag::f_spoiler : Flag())),
file->document,
MTPVector<MTPDocument>(), // alt_documents
MTP_int(ttlSeconds));
} else {
Unexpected("Type in sendFilesConfirmed.");
}

View file

@ -124,7 +124,8 @@ Uploader::Entry::Entry(
: file->thumbId) {
if (file->type == SendMediaType::File
|| file->type == SendMediaType::ThemeFile
|| file->type == SendMediaType::Audio) {
|| file->type == SendMediaType::Audio
|| file->type == SendMediaType::Round) {
setDocSize(file->filesize);
}
}
@ -294,7 +295,8 @@ void Uploader::upload(
file->partssize);
} else if (file->type == SendMediaType::File
|| file->type == SendMediaType::ThemeFile
|| file->type == SendMediaType::Audio) {
|| file->type == SendMediaType::Audio
|| file->type == SendMediaType::Round) {
const auto document = file->thumb.isNull()
? session().data().processDocument(file->document)
: session().data().processDocument(
@ -356,7 +358,8 @@ void Uploader::notifyFailed(const Entry &entry) {
_photoFailed.fire_copy(entry.itemId);
} else if (type == SendMediaType::File
|| type == SendMediaType::ThemeFile
|| type == SendMediaType::Audio) {
|| type == SendMediaType::Audio
|| type == SendMediaType::Round) {
const auto document = session().data().document(entry.file->id);
if (document->uploading()) {
document->status = FileUploadFailed;
@ -385,7 +388,8 @@ QByteArray Uploader::readDocPart(not_null<Entry*> entry) {
const auto checked = [&](QByteArray result) {
if ((entry->file->type == SendMediaType::File
|| entry->file->type == SendMediaType::ThemeFile
|| entry->file->type == SendMediaType::Audio)
|| entry->file->type == SendMediaType::Audio
|| entry->file->type == SendMediaType::Round)
&& entry->docSize <= kUseBigFilesFrom) {
entry->md5Hash.feed(result.data(), result.size());
}
@ -756,7 +760,8 @@ void Uploader::partLoaded(const MTPBool &result, mtpRequestId requestId) {
_photoProgress.fire_copy(itemId);
} else if (entry.file->type == SendMediaType::File
|| entry.file->type == SendMediaType::ThemeFile
|| entry.file->type == SendMediaType::Audio) {
|| entry.file->type == SendMediaType::Audio
|| entry.file->type == SendMediaType::Round) {
const auto document = session().data().document(entry.file->id);
if (document->uploading()) {
document->uploadingData->offset = std::min(
@ -856,7 +861,8 @@ void Uploader::finishFront() {
});
} else if (entry.file->type == SendMediaType::File
|| entry.file->type == SendMediaType::ThemeFile
|| entry.file->type == SendMediaType::Audio) {
|| entry.file->type == SendMediaType::Audio
|| entry.file->type == SendMediaType::Round) {
QByteArray docMd5(32, Qt::Uninitialized);
hashMd5Hex(entry.md5Hash.result(), docMd5.data());

View file

@ -1014,7 +1014,7 @@ void FileLoadTask::process(Args &&args) {
MTPVector<MTPVideoSize>(),
MTP_int(_dcId),
MTP_vector<MTPDocumentAttribute>(attributes));
_type = SendMediaType::File;
_type = isRound ? SendMediaType::Round : SendMediaType::File;
}
if (_information) {