diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 269be8d8c9..352fdc8287 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -1070,6 +1070,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_edited" = "edited"; "lng_edited_date" = "Edited: {date}"; "lng_admin_badge" = "admin"; +"lng_channel_badge" = "channel"; "lng_fast_reply" = "Reply"; "lng_cancel_edit_post_sure" = "Cancel editing?"; "lng_cancel_edit_post_yes" = "Yes"; diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index 937be612d6..5627225fd4 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -610,6 +610,11 @@ bool HistoryMessage::allowsForward() const { return !_media || _media->allowsForward(); } +bool HistoryMessage::hasMessageBadge() const { + return hasAdminBadge() + || (displayForwardedAsOriginal() && !history()->peer->isSelf()); +} + bool HistoryMessage::isTooOldForEdit(TimeId now) const { const auto peer = _history->peer; if (peer->isSelf()) { diff --git a/Telegram/SourceFiles/history/history_message.h b/Telegram/SourceFiles/history/history_message.h index cf07030156..3c69810244 100644 --- a/Telegram/SourceFiles/history/history_message.h +++ b/Telegram/SourceFiles/history/history_message.h @@ -90,13 +90,18 @@ public: void refreshSentMedia(const MTPMessageMedia *media); void returnSavedMedia() override; void setMedia(const MTPMessageMedia &media); - static std::unique_ptr CreateMedia( + [[nodiscard]] static std::unique_ptr CreateMedia( not_null item, const MTPMessageMedia &media); - bool allowsForward() const override; - bool allowsEdit(TimeId now) const override; - bool uploading() const; + [[nodiscard]] bool allowsForward() const override; + [[nodiscard]] bool allowsEdit(TimeId now) const override; + [[nodiscard]] bool uploading() const; + + [[nodiscard]] bool hasAdminBadge() const { + return _flags & MTPDmessage_ClientFlag::f_has_admin_badge; + } + [[nodiscard]] bool hasMessageBadge() const; void applyGroupAdminChanges( const base::flat_map &changes) override; @@ -106,7 +111,7 @@ public: void dependencyItemRemoved(HistoryItem *dependency) override; - QString notificationHeader() const override; + [[nodiscard]] QString notificationHeader() const override; void applyEdition(const MTPDmessage &message) override; void applyEdition(const MTPDmessageService &message) override; @@ -118,40 +123,38 @@ public: void addToUnreadMentions(UnreadMentionType type) override; void eraseFromUnreadMentions() override; - Storage::SharedMediaTypesMask sharedMediaTypes() const override; + [[nodiscard]] Storage::SharedMediaTypesMask sharedMediaTypes() const override; void setText(const TextWithEntities &textWithEntities) override; - TextWithEntities originalText() const override; - TextForMimeData clipboardText() const override; - bool textHasLinks() const override; + [[nodiscard]] TextWithEntities originalText() const override; + [[nodiscard]] TextForMimeData clipboardText() const override; + [[nodiscard]] bool textHasLinks() const override; - int viewsCount() const override; - PeerData *displayFrom() const; + [[nodiscard]] int viewsCount() const override; + [[nodiscard]] PeerData *displayFrom() const; bool updateDependencyItem() override; - MsgId dependencyMsgId() const override { + [[nodiscard]] MsgId dependencyMsgId() const override { return replyToId(); } - bool displayForwardedAsOriginal() const; + [[nodiscard]] bool displayForwardedAsOriginal() const; - HistoryMessage *toHistoryMessage() override { // dynamic_cast optimize + // dynamic_cast optimization. + [[nodiscard]] HistoryMessage *toHistoryMessage() override { return this; } - const HistoryMessage *toHistoryMessage() const override { // dynamic_cast optimize + [[nodiscard]] const HistoryMessage *toHistoryMessage() const override { return this; } - std::unique_ptr createView( + [[nodiscard]] std::unique_ptr createView( not_null delegate) override; ~HistoryMessage(); private: void setEmptyText(); - bool hasAdminBadge() const { - return _flags & MTPDmessage_ClientFlag::f_has_admin_badge; - } - bool isTooOldForEdit(TimeId now) const; - bool isLegacyMessage() const { + [[nodiscard]] bool isTooOldForEdit(TimeId now) const; + [[nodiscard]] bool isLegacyMessage() const { return _flags & MTPDmessage::Flag::f_legacy; } diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index 91f53881c5..a6f212165b 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -121,8 +121,10 @@ int KeyboardStyle::minButtonWidth( return result; } -QString AdminBadgeText() { - return lang(lng_admin_badge); +QString MessageBadgeText(not_null message) { + return lang(message->hasAdminBadge() + ? lng_admin_badge + : lng_channel_badge); } QString FastReplyText() { @@ -302,9 +304,9 @@ QSize Message::performCountOptimalSize() { const auto replyWidth = hasFastReply() ? st::msgFont->width(FastReplyText()) : 0; - if (item->hasAdminBadge()) { + if (item->hasMessageBadge()) { const auto badgeWidth = st::msgFont->width( - AdminBadgeText()); + MessageBadgeText(item)); namew += st::msgPadding.right() + std::max(badgeWidth, replyWidth); } else if (replyWidth) { @@ -521,8 +523,8 @@ void Message::paintFromName( const auto item = message(); if (displayFromName()) { const auto badgeWidth = [&] { - if (item->hasAdminBadge()) { - return st::msgFont->width(AdminBadgeText()); + if (item->hasMessageBadge()) { + return st::msgFont->width(MessageBadgeText(item)); } return 0; }(); @@ -577,7 +579,7 @@ void Message::paintFromName( p.drawText( trect.left() + trect.width() - rightWidth, trect.top() + st::msgFont->ascent, - replyWidth ? FastReplyText() : AdminBadgeText()); + replyWidth ? FastReplyText() : MessageBadgeText(item)); } trect.setY(trect.y() + st::msgNameFont->height); } @@ -1541,8 +1543,8 @@ void Message::fromNameUpdated(int width) const { const auto replyWidth = hasFastReply() ? st::msgFont->width(FastReplyText()) : 0; - if (item->hasAdminBadge()) { - const auto badgeWidth = st::msgFont->width(AdminBadgeText()); + if (item->hasMessageBadge()) { + const auto badgeWidth = st::msgFont->width(MessageBadgeText(item)); width -= st::msgPadding.right() + std::max(badgeWidth, replyWidth); } else if (replyWidth) { width -= st::msgPadding.right() + replyWidth;