From 48dad5f4776df6029a2ef7da9414eb24f6adf505 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 26 Oct 2020 16:27:01 +0300 Subject: [PATCH] Improve typing status sending. --- .../SourceFiles/api/api_send_progress.cpp | 9 +++++- .../SourceFiles/dialogs/dialogs_layout.cpp | 32 ++++++++++++------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/Telegram/SourceFiles/api/api_send_progress.cpp b/Telegram/SourceFiles/api/api_send_progress.cpp index d4cfcba39..6def1f9cd 100644 --- a/Telegram/SourceFiles/api/api_send_progress.cpp +++ b/Telegram/SourceFiles/api/api_send_progress.cpp @@ -152,7 +152,14 @@ bool SendProgressManager::skipRequest(const Key &key) const { return true; } const auto recently = base::unixtime::now() - kSendTypingsToOfflineFor; - return !Data::OnlineTextActive(user->onlineTill, recently); + const auto online = user->onlineTill; + if (online == -2) { // last seen recently + return false; + } else if (online < 0) { + return (-online < recently); + } else { + return (online < recently); + } } void SendProgressManager::done( diff --git a/Telegram/SourceFiles/dialogs/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/dialogs_layout.cpp index c8641fa1c..4683e9a36 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_layout.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_layout.cpp @@ -39,10 +39,16 @@ namespace { constexpr int kRecentlyInSeconds = 20 * 3600; const auto kPsaBadgePrefix = "cloud_lng_badge_psa_"; -bool ShowUserBotIcon(not_null user) { +[[nodiscard]] bool ShowUserBotIcon(not_null user) { return user->isBot() && !user->isSupport() && !user->isRepliesChat(); } +[[nodiscard]] bool ShowSendActionInDialogs(History *history) { + return history + && (!history->peer->isUser() + || history->peer->asUser()->onlineTill > 0); +} + void PaintRowTopRight(Painter &p, const QString &text, QRect &rectForName, bool active, bool selected) { const auto width = st::dialogsDateFont->width(text); rectForName.setWidth(rectForName.width() - width - st::dialogsDateSkip); @@ -362,7 +368,8 @@ void paintRow( p.setFont(st::dialogsTextFont); auto &color = active ? st::dialogsTextFgServiceActive : (selected ? st::dialogsTextFgServiceOver : st::dialogsTextFgService); - if (history && !history->sendActionPainter()->paint(p, nameleft, texttop, availableWidth, fullWidth, color, ms)) { + if (ShowSendActionInDialogs(history) + && !history->sendActionPainter()->paint(p, nameleft, texttop, availableWidth, fullWidth, color, ms)) { if (history->cloudDraftTextCache.isEmpty()) { auto draftWrapped = textcmdLink(1, tr::lng_dialogs_text_from_wrapped(tr::now, lt_from, tr::lng_from_draft(tr::now))); auto draftText = supportMode @@ -389,7 +396,8 @@ void paintRow( auto &color = active ? st::dialogsTextFgServiceActive : (selected ? st::dialogsTextFgServiceOver : st::dialogsTextFgService); p.setFont(st::dialogsTextFont); - if (history && !history->sendActionPainter()->paint(p, nameleft, texttop, availableWidth, fullWidth, color, ms)) { + if (ShowSendActionInDialogs(history) + && !history->sendActionPainter()->paint(p, nameleft, texttop, availableWidth, fullWidth, color, ms)) { // Empty history } } else if (!item->isEmpty()) { @@ -741,14 +749,16 @@ void RowPainter::paint( texttop, availableWidth, st::dialogsTextFont->height); - const auto actionWasPainted = history ? history->sendActionPainter()->paint( - p, - itemRect.x(), - itemRect.y(), - itemRect.width(), - fullWidth, - color, - ms) : false; + const auto actionWasPainted = ShowSendActionInDialogs(history) + ? history->sendActionPainter()->paint( + p, + itemRect.x(), + itemRect.y(), + itemRect.width(), + fullWidth, + color, + ms) + : false; if (const auto folder = row->folder()) { PaintListEntryText(p, itemRect, active, selected, row); } else if (!actionWasPainted) {