| 289 | |
| 290 | template <typename DoneCallback, typename FailCallback> |
| 291 | mtpRequestId EditMessage( |
| 292 | not_null<HistoryItem*> item, |
| 293 | const TextWithEntities &textWithEntities, |
| 294 | Data::WebPageDraft webpage, |
| 295 | SendOptions options, |
| 296 | DoneCallback &&done, |
| 297 | FailCallback &&fail, |
| 298 | std::optional<MTPInputMedia> inputMedia = std::nullopt) { |
| 299 | if (item->computeSuggestionActions() |
| 300 | == SuggestionActions::AcceptAndDecline) { |
| 301 | return SuggestMessageOrMedia( |
| 302 | item, |
| 303 | textWithEntities, |
| 304 | webpage, |
| 305 | options, |
| 306 | std::move(done), |
| 307 | std::move(fail), |
| 308 | inputMedia); |
| 309 | } |
| 310 | |
| 311 | const auto session = &item->history()->session(); |
| 312 | const auto api = &session->api(); |
| 313 | |
| 314 | const auto text = textWithEntities.text; |
| 315 | const auto sentEntities = EntitiesToMTP( |
| 316 | session, |
| 317 | textWithEntities.entities, |
| 318 | ConvertOption::SkipLocal); |
| 319 | const auto media = item->media(); |
| 320 | |
| 321 | const auto updateRecentStickers = inputMedia.has_value() |
| 322 | ? Api::HasAttachedStickers(*inputMedia) |
| 323 | : false; |
| 324 | |
| 325 | const auto flags = ComputeEditMessageFlags( |
| 326 | item, |
| 327 | sentEntities, |
| 328 | webpage, |
| 329 | options, |
| 330 | (!text.isEmpty() || media), |
| 331 | ((media && inputMedia.has_value()) |
| 332 | || (!webpage.removed && !webpage.url.isEmpty())), |
| 333 | false); |
| 334 | |
| 335 | const auto id = EditMessageRequestId(item); |
| 336 | return api->request(MTPmessages_EditMessage( |
| 337 | MTP_flags(flags), |
| 338 | item->history()->peer->input(), |
| 339 | MTP_int(id), |
| 340 | MTP_string(text), |
| 341 | inputMedia.value_or(Data::WebPageForMTP(webpage, text.isEmpty())), |
| 342 | MTPReplyMarkup(), |
| 343 | sentEntities, |
| 344 | MTP_int(options.scheduled), |
| 345 | MTP_int(options.scheduleRepeatPeriod), |
| 346 | MTP_int(item->shortcutId()), |
| 347 | MTPInputRichMessage() |
| 348 | )).done([=]( |
no test coverage detected