Correctly display discussion posts.

This commit is contained in:
John Preston 2019-05-25 16:09:48 +02:00
parent 371f1a51c3
commit 6b9675a5b1
3 changed files with 32 additions and 13 deletions

View File

@ -553,18 +553,30 @@ int HistoryMessage::viewsCount() const {
return HistoryItem::viewsCount();
}
bool HistoryMessage::displayForwardedAsOriginal() const {
if (const auto forwarded = Get<HistoryMessageForwarded>()) {
const auto peer = history()->peer;
return peer->isSelf() || (peer->isMegagroup() && (peer == from()));
ChannelData *HistoryMessage::discussionPostOriginalSender() const {
if (!history()->peer->isMegagroup()) {
return nullptr;
}
return false;
if (const auto forwarded = Get<HistoryMessageForwarded>()) {
const auto from = forwarded->savedFromPeer;
if (const auto result = from ? from->asChannel() : nullptr) {
return result;
}
}
return nullptr;
}
bool HistoryMessage::isDiscussionPost() const {
return (discussionPostOriginalSender() != nullptr);
}
PeerData *HistoryMessage::displayFrom() const {
return displayForwardedAsOriginal()
? senderOriginal()
: author().get();
if (const auto sender = discussionPostOriginalSender()) {
return sender;
} else if (history()->peer->isSelf()) {
return senderOriginal();
}
return author().get();
}
bool HistoryMessage::updateDependencyItem() {
@ -611,8 +623,7 @@ bool HistoryMessage::allowsForward() const {
}
bool HistoryMessage::hasMessageBadge() const {
return hasAdminBadge()
|| (displayForwardedAsOriginal() && !history()->peer->isSelf());
return hasAdminBadge() || isDiscussionPost();
}
bool HistoryMessage::isTooOldForEdit(TimeId now) const {

View File

@ -136,7 +136,8 @@ public:
[[nodiscard]] MsgId dependencyMsgId() const override {
return replyToId();
}
[[nodiscard]] bool displayForwardedAsOriginal() const;
[[nodiscard]] ChannelData *discussionPostOriginalSender() const;
[[nodiscard]] bool isDiscussionPost() const;
// dynamic_cast optimization.
[[nodiscard]] HistoryMessage *toHistoryMessage() override {

View File

@ -16,6 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/toast/toast.h"
#include "data/data_session.h"
#include "data/data_user.h"
#include "data/data_channel.h"
#include "lang/lang_keys.h"
#include "mainwidget.h"
#include "mainwindow.h"
@ -1337,9 +1338,15 @@ bool Message::displayFromName() const {
bool Message::displayForwardedFrom() const {
const auto item = message();
if (item->displayForwardedAsOriginal()) {
if (item->history()->peer->isSelf()) {
return false;
} else if (const auto forwarded = item->Get<HistoryMessageForwarded>()) {
}
if (const auto forwarded = item->Get<HistoryMessageForwarded>()) {
if (const auto sender = item->discussionPostOriginalSender()) {
if (sender == forwarded->originalSender) {
return false;
}
}
const auto media = this->media();
return item->Has<HistoryMessageVia>()
|| !media