| 149 | |
| 150 | template <typename DoneCallback, typename FailCallback> |
| 151 | mtpRequestId SuggestMedia( |
| 152 | not_null<HistoryItem*> item, |
| 153 | const TextWithEntities &textWithEntities, |
| 154 | Data::WebPageDraft webpage, |
| 155 | SendOptions options, |
| 156 | DoneCallback &&done, |
| 157 | FailCallback &&fail, |
| 158 | std::optional<MTPInputMedia> inputMedia) { |
| 159 | Expects(options.suggest.exists); |
| 160 | Expects(!options.scheduled); |
| 161 | |
| 162 | const auto session = &item->history()->session(); |
| 163 | const auto api = &session->api(); |
| 164 | |
| 165 | const auto text = textWithEntities.text; |
| 166 | const auto sentEntities = EntitiesToMTP( |
| 167 | session, |
| 168 | textWithEntities.entities, |
| 169 | ConvertOption::SkipLocal); |
| 170 | |
| 171 | const auto updateRecentStickers = inputMedia |
| 172 | ? Api::HasAttachedStickers(*inputMedia) |
| 173 | : false; |
| 174 | |
| 175 | const auto emptyFlag = MTPmessages_SendMedia::Flag(0); |
| 176 | auto replyTo = FullReplyTo{ |
| 177 | .messageId = item->fullId(), |
| 178 | .monoforumPeerId = (item->history()->amMonoforumAdmin() |
| 179 | ? item->sublistPeerId() |
| 180 | : PeerId()), |
| 181 | }; |
| 182 | const auto flags = emptyFlag |
| 183 | | MTPmessages_SendMedia::Flag::f_reply_to |
| 184 | | MTPmessages_SendMedia::Flag::f_suggested_post |
| 185 | | (((!webpage.removed && !webpage.url.isEmpty() && webpage.invert) |
| 186 | || options.invertCaption) |
| 187 | ? MTPmessages_SendMedia::Flag::f_invert_media |
| 188 | : emptyFlag) |
| 189 | | (!sentEntities.v.isEmpty() |
| 190 | ? MTPmessages_SendMedia::Flag::f_entities |
| 191 | : emptyFlag) |
| 192 | | (options.starsApproved |
| 193 | ? MTPmessages_SendMedia::Flag::f_allow_paid_stars |
| 194 | : emptyFlag); |
| 195 | const auto randomId = base::RandomValue<uint64>(); |
| 196 | return api->request(MTPmessages_SendMedia( |
| 197 | MTP_flags(flags), |
| 198 | item->history()->peer->input(), |
| 199 | ReplyToForMTP(item->history(), replyTo), |
| 200 | inputMedia.value_or(Data::WebPageForMTP(webpage, text.isEmpty())), |
| 201 | MTP_string(text), |
| 202 | MTP_long(randomId), |
| 203 | MTPReplyMarkup(), |
| 204 | sentEntities, |
| 205 | MTPint(), // schedule_date |
| 206 | MTPint(), // schedule_repeat_period |
| 207 | MTPInputPeer(), // send_as |
| 208 | MTPInputQuickReplyShortcut(), // quick_reply_shortcut |
no test coverage detected