mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-03-06 14:27:46 +00:00
Fix reply-to names in forwarded messages.
This commit is contained in:
parent
03d9876c8a
commit
efdc39a273
@ -244,7 +244,7 @@ bool HistoryMessageReply::updateData(
|
||||
replyToMsg->inReplyText(),
|
||||
Ui::DialogTextOptions());
|
||||
|
||||
updateName();
|
||||
updateName(holder);
|
||||
|
||||
setReplyToLinkFrom(holder);
|
||||
if (!replyToMsg->Has<HistoryMessageForwarded>()) {
|
||||
@ -283,25 +283,60 @@ void HistoryMessageReply::clearData(not_null<HistoryMessage*> holder) {
|
||||
refreshReplyToMedia();
|
||||
}
|
||||
|
||||
bool HistoryMessageReply::isNameUpdated() const {
|
||||
if (replyToMsg && replyToMsg->author()->nameVersion > replyToVersion) {
|
||||
updateName();
|
||||
return true;
|
||||
PeerData *HistoryMessageReply::replyToFrom(
|
||||
not_null<HistoryMessage*> holder) const {
|
||||
if (!replyToMsg) {
|
||||
return nullptr;
|
||||
} else if (holder->Has<HistoryMessageForwarded>()) {
|
||||
if (const auto fwd = replyToMsg->Get<HistoryMessageForwarded>()) {
|
||||
return fwd->originalSender;
|
||||
}
|
||||
}
|
||||
if (const auto from = replyToMsg->displayFrom()) {
|
||||
return from;
|
||||
}
|
||||
return replyToMsg->author().get();
|
||||
}
|
||||
|
||||
QString HistoryMessageReply::replyToFromName(
|
||||
not_null<HistoryMessage*> holder) const {
|
||||
if (!replyToMsg) {
|
||||
return QString();
|
||||
} else if (holder->Has<HistoryMessageForwarded>()) {
|
||||
if (const auto fwd = replyToMsg->Get<HistoryMessageForwarded>()) {
|
||||
return fwd->originalSender
|
||||
? replyToFromName(fwd->originalSender)
|
||||
: fwd->hiddenSenderInfo->name;
|
||||
}
|
||||
}
|
||||
if (const auto from = replyToMsg->displayFrom()) {
|
||||
return replyToFromName(from);
|
||||
}
|
||||
return replyToFromName(replyToMsg->author());
|
||||
}
|
||||
|
||||
QString HistoryMessageReply::replyToFromName(
|
||||
not_null<PeerData*> peer) const {
|
||||
if (const auto user = replyToVia ? peer->asUser() : nullptr) {
|
||||
return user->firstName;
|
||||
}
|
||||
return peer->name;
|
||||
}
|
||||
|
||||
bool HistoryMessageReply::isNameUpdated(
|
||||
not_null<HistoryMessage*> holder) const {
|
||||
if (const auto from = replyToFrom(holder)) {
|
||||
if (from->nameVersion > replyToVersion) {
|
||||
updateName(holder);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void HistoryMessageReply::updateName() const {
|
||||
if (replyToMsg) {
|
||||
const auto from = [&] {
|
||||
if (const auto from = replyToMsg->displayFrom()) {
|
||||
return from;
|
||||
}
|
||||
return replyToMsg->author().get();
|
||||
}();
|
||||
const auto name = (replyToVia && from->isUser())
|
||||
? from->asUser()->firstName
|
||||
: from->name;
|
||||
void HistoryMessageReply::updateName(
|
||||
not_null<HistoryMessage*> holder) const {
|
||||
if (const auto name = replyToFromName(holder); !name.isEmpty()) {
|
||||
replyToName.setText(st::fwdTextStyle, name, Ui::NameTextOptions());
|
||||
replyToVersion = replyToMsg->author()->nameVersion;
|
||||
bool hasPreview = replyToMsg->media() ? replyToMsg->media()->hasReplyPreview() : false;
|
||||
|
@ -154,8 +154,13 @@ struct HistoryMessageReply : public RuntimeComponent<HistoryMessageReply, Histor
|
||||
// Must be called before destructor.
|
||||
void clearData(not_null<HistoryMessage*> holder);
|
||||
|
||||
bool isNameUpdated() const;
|
||||
void updateName() const;
|
||||
[[nodiscard]] PeerData *replyToFrom(
|
||||
not_null<HistoryMessage*> holder) const;
|
||||
[[nodiscard]] QString replyToFromName(
|
||||
not_null<HistoryMessage*> holder) const;
|
||||
[[nodiscard]] QString replyToFromName(not_null<PeerData*> peer) const;
|
||||
[[nodiscard]] bool isNameUpdated(not_null<HistoryMessage*> holder) const;
|
||||
void updateName(not_null<HistoryMessage*> holder) const;
|
||||
void resize(int width) const;
|
||||
void itemRemoved(HistoryMessage *holder, HistoryItem *removed);
|
||||
|
||||
|
@ -460,7 +460,7 @@ QSize Message::performCountOptimalSize() {
|
||||
forwarded->create(via);
|
||||
}
|
||||
if (reply) {
|
||||
reply->updateName();
|
||||
reply->updateName(item);
|
||||
}
|
||||
|
||||
auto mediaDisplayed = false;
|
||||
@ -931,7 +931,7 @@ void Message::draw(Painter &p, const PaintContext &context) const {
|
||||
}
|
||||
|
||||
if (const auto reply = displayedReply()) {
|
||||
if (reply->isNameUpdated()) {
|
||||
if (reply->isNameUpdated(message())) {
|
||||
const_cast<Message*>(this)->setPendingResize();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user