Drop link preview if you can't send them.

Just drop the preview when message with a web page preview is
forwarded and we're restricted to send them in the megagroup.
This commit is contained in:
John Preston 2017-06-16 19:04:30 +03:00
parent b35d2505a4
commit 9de95cee23
1 changed files with 48 additions and 32 deletions

View File

@ -87,6 +87,38 @@ style::color fromNameFgSelected(int index) {
return colors[index];
}
MTPDmessage::Flags newForwardedFlags(PeerData *peer, int32 from, HistoryMessage *fwd) {
auto result = newMessageFlags(peer) | MTPDmessage::Flag::f_fwd_from;
if (from) {
result |= MTPDmessage::Flag::f_from_id;
}
if (fwd->Has<HistoryMessageVia>()) {
result |= MTPDmessage::Flag::f_via_bot_id;
}
if (auto channel = peer->asChannel()) {
if (auto media = fwd->getMedia()) {
if (media->type() == MediaTypeWebPage) {
// Drop web page if we're not allowed to send it.
if (channel->restrictedRights().is_embed_links()) {
result &= MTPDmessage::Flag::f_media;
}
}
}
} else {
if (auto media = fwd->getMedia()) {
if (media->type() == MediaTypeVoiceFile) {
result |= MTPDmessage::Flag::f_media_unread;
// } else if (media->type() == MediaTypeVideo) {
// result |= MTPDmessage::flag_media_unread;
}
}
}
if (fwd->hasViews()) {
result |= MTPDmessage::Flag::f_views;
}
return result;
}
} // namespace
void historyInitMessages() {
@ -419,33 +451,6 @@ HistoryMessage::HistoryMessage(History *history, const MTPDmessageService &msg)
setText(TextWithEntities {});
}
namespace {
MTPDmessage::Flags newForwardedFlags(PeerData *p, int32 from, HistoryMessage *fwd) {
MTPDmessage::Flags result = newMessageFlags(p) | MTPDmessage::Flag::f_fwd_from;
if (from) {
result |= MTPDmessage::Flag::f_from_id;
}
if (fwd->Has<HistoryMessageVia>()) {
result |= MTPDmessage::Flag::f_via_bot_id;
}
if (!p->isChannel()) {
if (HistoryMedia *media = fwd->getMedia()) {
if (media->type() == MediaTypeVoiceFile) {
result |= MTPDmessage::Flag::f_media_unread;
// } else if (media->type() == MediaTypeVideo) {
// result |= MTPDmessage::flag_media_unread;
}
}
}
if (fwd->hasViews()) {
result |= MTPDmessage::Flag::f_views;
}
return result;
}
} // namespace
HistoryMessage::HistoryMessage(History *history, MsgId id, MTPDmessage::Flags flags, QDateTime date, int32 from, HistoryMessage *fwd)
: HistoryItem(history, id, newForwardedFlags(history->peer, from, fwd) | flags, date, from) {
CreateConfig config;
@ -470,13 +475,24 @@ HistoryMessage::HistoryMessage(History *history, MsgId id, MTPDmessage::Flags fl
// Copy inline keyboard when forwarding messages with a game.
auto mediaOriginal = fwd->getMedia();
if (mediaOriginal && mediaOriginal->type() == MediaTypeGame) {
auto mediaType = mediaOriginal ? mediaOriginal->type() : MediaTypeCount;
if (mediaOriginal && mediaType == MediaTypeGame) {
config.inlineMarkup = fwd->inlineReplyMarkup();
}
createComponents(config);
if (mediaOriginal) {
auto cloneMedia = [this, history, mediaType] {
if (mediaType == MediaTypeWebPage) {
if (auto channel = history->peer->asChannel()) {
if (channel->restrictedRights().is_embed_links()) {
return false;
}
}
}
return (mediaType != MediaTypeCount);
};
if (cloneMedia()) {
_media = mediaOriginal->clone(this);
}
setText(fwd->originalText());