QString HistoryItem::inDialogsText(DrawInDialog way) const { auto getText = [this]() { if (_media) { return _media->chatListText(); } else if (!emptyText()) { return TextUtilities::Clean(_text.originalText()); } return QString(); }; const auto plainText = getText(); const auto sender = [&]() -> PeerData* { if (isPost() || isEmpty() || (way == DrawInDialog::WithoutSender)) { return nullptr; } else if (!_history->peer->isUser() || out()) { return author(); } else if (_history->peer->isSelf() && !Has<HistoryMessageForwarded>()) { return senderOriginal(); } return nullptr; }(); if (sender) { auto fromText = sender->isSelf() ? lang(lng_from_you) : sender->shortName(); auto fromWrapped = textcmdLink(1, lng_dialogs_text_from_wrapped(lt_from, TextUtilities::Clean(fromText))); return lng_dialogs_text_with_from(lt_from_part, fromWrapped, lt_message, plainText); } return plainText; }
bool Element::computeIsAttachToPrevious(not_null<Element*> previous) { const auto item = data(); if (!Has<DateBadge>() && !Has<UnreadBar>()) { const auto prev = previous->data(); const auto possible = !item->serviceMsg() && !prev->serviceMsg() && !item->isEmpty() && !prev->isEmpty() && (std::abs(prev->date() - item->date()) < kAttachMessageToPreviousSecondsDelta) && (_context == Context::Feed || (!item->isPost() && !prev->isPost())); if (possible) { if (item->history()->peer->isSelf()) { return prev->senderOriginal() == item->senderOriginal() && (prev->Has<HistoryMessageForwarded>() == item->Has<HistoryMessageForwarded>()); } else { return prev->from() == item->from(); } } } return false; }
not_null<PeerData*> HistoryMessage::displayFrom() const { return history()->peer->isSelf() ? senderOriginal() : author(); }