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(),
|
replyToMsg->inReplyText(),
|
||||||
Ui::DialogTextOptions());
|
Ui::DialogTextOptions());
|
||||||
|
|
||||||
updateName();
|
updateName(holder);
|
||||||
|
|
||||||
setReplyToLinkFrom(holder);
|
setReplyToLinkFrom(holder);
|
||||||
if (!replyToMsg->Has<HistoryMessageForwarded>()) {
|
if (!replyToMsg->Has<HistoryMessageForwarded>()) {
|
||||||
@ -283,25 +283,60 @@ void HistoryMessageReply::clearData(not_null<HistoryMessage*> holder) {
|
|||||||
refreshReplyToMedia();
|
refreshReplyToMedia();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HistoryMessageReply::isNameUpdated() const {
|
PeerData *HistoryMessageReply::replyToFrom(
|
||||||
if (replyToMsg && replyToMsg->author()->nameVersion > replyToVersion) {
|
not_null<HistoryMessage*> holder) const {
|
||||||
updateName();
|
if (!replyToMsg) {
|
||||||
return true;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistoryMessageReply::updateName() const {
|
void HistoryMessageReply::updateName(
|
||||||
if (replyToMsg) {
|
not_null<HistoryMessage*> holder) const {
|
||||||
const auto from = [&] {
|
if (const auto name = replyToFromName(holder); !name.isEmpty()) {
|
||||||
if (const auto from = replyToMsg->displayFrom()) {
|
|
||||||
return from;
|
|
||||||
}
|
|
||||||
return replyToMsg->author().get();
|
|
||||||
}();
|
|
||||||
const auto name = (replyToVia && from->isUser())
|
|
||||||
? from->asUser()->firstName
|
|
||||||
: from->name;
|
|
||||||
replyToName.setText(st::fwdTextStyle, name, Ui::NameTextOptions());
|
replyToName.setText(st::fwdTextStyle, name, Ui::NameTextOptions());
|
||||||
replyToVersion = replyToMsg->author()->nameVersion;
|
replyToVersion = replyToMsg->author()->nameVersion;
|
||||||
bool hasPreview = replyToMsg->media() ? replyToMsg->media()->hasReplyPreview() : false;
|
bool hasPreview = replyToMsg->media() ? replyToMsg->media()->hasReplyPreview() : false;
|
||||||
|
@ -154,8 +154,13 @@ struct HistoryMessageReply : public RuntimeComponent<HistoryMessageReply, Histor
|
|||||||
// Must be called before destructor.
|
// Must be called before destructor.
|
||||||
void clearData(not_null<HistoryMessage*> holder);
|
void clearData(not_null<HistoryMessage*> holder);
|
||||||
|
|
||||||
bool isNameUpdated() const;
|
[[nodiscard]] PeerData *replyToFrom(
|
||||||
void updateName() const;
|
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 resize(int width) const;
|
||||||
void itemRemoved(HistoryMessage *holder, HistoryItem *removed);
|
void itemRemoved(HistoryMessage *holder, HistoryItem *removed);
|
||||||
|
|
||||||
|
@ -460,7 +460,7 @@ QSize Message::performCountOptimalSize() {
|
|||||||
forwarded->create(via);
|
forwarded->create(via);
|
||||||
}
|
}
|
||||||
if (reply) {
|
if (reply) {
|
||||||
reply->updateName();
|
reply->updateName(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto mediaDisplayed = false;
|
auto mediaDisplayed = false;
|
||||||
@ -931,7 +931,7 @@ void Message::draw(Painter &p, const PaintContext &context) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (const auto reply = displayedReply()) {
|
if (const auto reply = displayedReply()) {
|
||||||
if (reply->isNameUpdated()) {
|
if (reply->isNameUpdated(message())) {
|
||||||
const_cast<Message*>(this)->setPendingResize();
|
const_cast<Message*>(this)->setPendingResize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user