| 483 | } |
| 484 | |
| 485 | mtpRequestId EditTextMessage( |
| 486 | not_null<HistoryItem*> item, |
| 487 | const TextWithEntities &caption, |
| 488 | Data::WebPageDraft webpage, |
| 489 | SendOptions options, |
| 490 | Fn<void(mtpRequestId requestId)> done, |
| 491 | Fn<void(const QString &error, mtpRequestId requestId)> fail, |
| 492 | bool spoilered) { |
| 493 | const auto media = item->media(); |
| 494 | if (media |
| 495 | && HistoryView::MediaEditManager::CanBeSpoilered(item) |
| 496 | && spoilered != media->hasSpoiler()) { |
| 497 | auto takeInputMedia = Fn<std::optional<MTPInputMedia>()>(nullptr); |
| 498 | auto takeFileReference = Fn<QByteArray()>(nullptr); |
| 499 | if (const auto photo = media->photo()) { |
| 500 | using Flag = MTPDinputMediaPhoto::Flag; |
| 501 | const auto flags = Flag() |
| 502 | | (media->ttlSeconds() ? Flag::f_ttl_seconds : Flag()) |
| 503 | | (spoilered ? Flag::f_spoiler : Flag()); |
| 504 | takeInputMedia = [=] { |
| 505 | return MTP_inputMediaPhoto( |
| 506 | MTP_flags(flags), |
| 507 | photo->mtpInput(), |
| 508 | MTP_int(media->ttlSeconds()), |
| 509 | MTPInputDocument()); // video |
| 510 | }; |
| 511 | takeFileReference = [=] { return photo->fileReference(); }; |
| 512 | } else if (const auto document = media->document()) { |
| 513 | using Flag = MTPDinputMediaDocument::Flag; |
| 514 | const auto videoCover = media->videoCover(); |
| 515 | const auto videoTimestamp = media->videoTimestamp(); |
| 516 | const auto flags = Flag() |
| 517 | | (media->ttlSeconds() ? Flag::f_ttl_seconds : Flag()) |
| 518 | | (spoilered ? Flag::f_spoiler : Flag()) |
| 519 | | (videoTimestamp ? Flag::f_video_timestamp : Flag()) |
| 520 | | (videoCover ? Flag::f_video_cover : Flag()); |
| 521 | takeInputMedia = [=] { |
| 522 | return MTP_inputMediaDocument( |
| 523 | MTP_flags(flags), |
| 524 | document->mtpInput(), |
| 525 | (videoCover |
| 526 | ? videoCover->mtpInput() |
| 527 | : MTPInputPhoto()), |
| 528 | MTP_int(media->ttlSeconds()), |
| 529 | MTP_int(videoTimestamp), |
| 530 | MTPstring()); // query |
| 531 | }; |
| 532 | takeFileReference = [=] { return document->fileReference(); }; |
| 533 | } |
| 534 | |
| 535 | const auto usedFileReference = takeFileReference |
| 536 | ? takeFileReference() |
| 537 | : QByteArray(); |
| 538 | const auto origin = item->fullId(); |
| 539 | const auto api = &item->history()->session().api(); |
| 540 | const auto performRequest = [=]( |
| 541 | const auto &repeatRequest, |
| 542 | mtpRequestId originalRequestId) -> mtpRequestId { |
no test coverage detected