Allow editing caption of forwarded audio file.

Fixes https://bugs.telegram.org/c/3025
This commit is contained in:
John Preston 2021-08-18 16:29:05 +03:00
parent 8e0b9b685c
commit c5c94276c2
9 changed files with 42 additions and 19 deletions

View File

@ -244,6 +244,14 @@ bool Media::forwardedBecomesUnread() const {
return false;
}
bool Media::dropForwardedInfo() const {
return false;
}
bool Media::forceForwardedInfo() const {
return false;
}
QString Media::errorTextForForward(not_null<PeerData*> peer) const {
return QString();
}
@ -625,6 +633,10 @@ bool MediaFile::forwardedBecomesUnread() const {
|| _document->isVideoMessage();
}
bool MediaFile::dropForwardedInfo() const {
return _document->isSong();
}
QString MediaFile::errorTextForForward(not_null<PeerData*> peer) const {
if (const auto sticker = _document->sticker()) {
if (const auto error = Data::RestrictionError(
@ -1140,6 +1152,10 @@ QString MediaGame::errorTextForForward(not_null<PeerData*> peer) const {
).value_or(QString());
}
bool MediaGame::dropForwardedInfo() const {
return true;
}
bool MediaGame::consumeMessageText(const TextWithEntities &text) {
_consumedText = text;
return true;
@ -1347,6 +1363,10 @@ TextForMimeData MediaDice::clipboardText() const {
return { notificationText() };
}
bool MediaDice::forceForwardedInfo() const {
return true;
}
bool MediaDice::updateInlineResultMedia(const MTPMessageMedia &media) {
return updateSentMedia(media);
}

View File

@ -102,6 +102,8 @@ public:
virtual bool allowsEditMedia() const;
virtual bool allowsRevoke(TimeId now) const;
virtual bool forwardedBecomesUnread() const;
virtual bool dropForwardedInfo() const;
virtual bool forceForwardedInfo() const;
virtual QString errorTextForForward(not_null<PeerData*> peer) const;
[[nodiscard]] virtual bool consumeMessageText(
@ -191,6 +193,7 @@ public:
bool allowsEditCaption() const override;
bool allowsEditMedia() const override;
bool forwardedBecomesUnread() const override;
bool dropForwardedInfo() const override;
QString errorTextForForward(not_null<PeerData*> peer) const override;
bool updateInlineResultMedia(const MTPMessageMedia &media) override;
@ -352,6 +355,7 @@ public:
QString pinnedTextSubstring() const override;
TextForMimeData clipboardText() const override;
QString errorTextForForward(not_null<PeerData*> peer) const override;
bool dropForwardedInfo() const override;
bool consumeMessageText(const TextWithEntities &text) override;
TextWithEntities consumedMessageText() const override;
@ -442,6 +446,8 @@ public:
QString notificationText() const override;
QString pinnedTextSubstring() const override;
TextForMimeData clipboardText() const override;
bool forceForwardedInfo() const override;
bool updateInlineResultMedia(const MTPMessageMedia &media) override;
bool updateSentMedia(const MTPMessageMedia &media) override;
std::unique_ptr<HistoryView::Media> createView(

View File

@ -562,8 +562,14 @@ HistoryMessage::HistoryMessage(
auto config = CreateConfig();
if (original->Has<HistoryMessageForwarded>() || !original->history()->peer->isSelf()) {
// Server doesn't add "fwd_from" to non-forwarded messages from chat with yourself.
const auto originalMedia = original->media();
const auto dropForwardInfo = (originalMedia
&& originalMedia->dropForwardedInfo())
|| (original->history()->peer->isSelf()
&& !history->peer->isSelf()
&& !original->Has<HistoryMessageForwarded>()
&& (!originalMedia || !originalMedia->forceForwardedInfo()));
if (!dropForwardInfo) {
config.originalDate = original->dateOriginal();
if (const auto info = original->hiddenForwardedInfo()) {
config.senderNameOriginal = info->name;
@ -595,6 +601,12 @@ HistoryMessage::HistoryMessage(
}
if (const auto fwdViaBot = original->viaBot()) {
config.viaBotId = peerToUser(fwdViaBot->id);
} else if (originalMedia && originalMedia->game()) {
if (const auto user = original->history()->peer->asUser()) {
if (user->isBot()) {
config.viaBotId = peerToUser(user->id);
}
}
}
const auto fwdViewsCount = original->viewsCount();
if (fwdViewsCount > 0) {

View File

@ -2128,10 +2128,8 @@ bool Message::displayForwardedFrom() const {
return false;
}
}
const auto media = this->media();
return !media
|| !media->isDisplayed()
|| !media->hideForwardedFrom();
const auto media = item->media();
return !media || !media->dropForwardedInfo();
}
return false;
}

View File

@ -950,10 +950,6 @@ QMargins Document::bubbleMargins() const {
return QMargins(padding.left(), padding.top(), padding.left(), padding.bottom());
}
bool Document::hideForwardedFrom() const {
return _data->isSong();
}
QSize Document::sizeForGroupingOptimal(int maxWidth) const {
const auto thumbed = Get<HistoryDocumentThumbed>();
const auto &st = (thumbed ? st::msgFileThumbLayoutGrouped : st::msgFileLayoutGrouped);

View File

@ -60,7 +60,6 @@ public:
return false;
}
QMargins bubbleMargins() const override;
bool hideForwardedFrom() const override;
QSize sizeForGroupingOptimal(int maxWidth) const override;
QSize sizeForGrouping(int width) const override;

View File

@ -202,9 +202,6 @@ public:
[[nodiscard]] virtual QMargins bubbleMargins() const {
return QMargins();
}
[[nodiscard]] virtual bool hideForwardedFrom() const {
return false;
}
[[nodiscard]] virtual bool overrideEditedDate() const {
return false;

View File

@ -695,10 +695,6 @@ bool GroupedMedia::needsBubble() const {
return _needBubble;
}
bool GroupedMedia::hideForwardedFrom() const {
return main()->hideForwardedFrom();
}
bool GroupedMedia::computeNeedBubble() const {
if (!_caption.isEmpty() || _mode == Mode::Column) {
return true;

View File

@ -91,7 +91,6 @@ public:
bool customHighlight() const override {
return true;
}
bool hideForwardedFrom() const override;
void stopAnimation() override;
void checkAnimation() override;