From af6ca8d4f1f24ed97afabbee2f4b3f600776ec62 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 28 Oct 2022 12:54:06 +0400 Subject: [PATCH] Show "Topic Author" fake admin rank. --- Telegram/Resources/langs/lang.strings | 1 + Telegram/SourceFiles/data/data_forum_topic.cpp | 6 ++++++ Telegram/SourceFiles/data/data_forum_topic.h | 4 +++- .../history/admin_log/history_admin_log_inner.cpp | 4 ++++ .../history/admin_log/history_admin_log_inner.h | 2 ++ Telegram/SourceFiles/history/history_inner_widget.cpp | 4 ++++ .../SourceFiles/history/view/history_view_element.cpp | 5 +++++ .../SourceFiles/history/view/history_view_element.h | 3 +++ .../history/view/history_view_list_widget.cpp | 4 ++++ .../history/view/history_view_list_widget.h | 2 ++ .../SourceFiles/history/view/history_view_message.cpp | 11 +++++++---- .../history/view/history_view_pinned_section.cpp | 4 ++++ .../history/view/history_view_pinned_section.h | 1 + .../history/view/history_view_replies_section.cpp | 6 ++++++ .../history/view/history_view_replies_section.h | 1 + .../history/view/history_view_scheduled_section.cpp | 5 +++++ .../history/view/history_view_scheduled_section.h | 1 + 17 files changed, 59 insertions(+), 5 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 6bc4486142..d972b1b730 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -1682,6 +1682,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_admin_badge" = "admin"; "lng_owner_badge" = "owner"; "lng_channel_badge" = "channel"; +"lng_topic_author_badge" = "Topic Author"; "lng_fast_reply" = "Reply"; "lng_cancel_edit_post_sure" = "Cancel editing?"; "lng_cancel_edit_post_yes" = "Yes"; diff --git a/Telegram/SourceFiles/data/data_forum_topic.cpp b/Telegram/SourceFiles/data/data_forum_topic.cpp index a504cf9d8f..b2c79c2f95 100644 --- a/Telegram/SourceFiles/data/data_forum_topic.cpp +++ b/Telegram/SourceFiles/data/data_forum_topic.cpp @@ -149,6 +149,7 @@ ForumTopic::ForumTopic(not_null forum, MsgId rootId) rootId)) , _rootId(rootId) , _lastKnownServerMessageId(rootId) +, _creatorId(creating() ? forum->session().userPeerId() : 0) , _creationDate(creating() ? base::unixtime::now() : 0) , _flags(creating() ? Flag::My : Flag()) { Thread::setMuted(owner().notifySettings().isMuted(this)); @@ -203,6 +204,10 @@ MsgId ForumTopic::rootId() const { return _rootId; } +PeerId ForumTopic::creatorId() const { + return _creatorId; +} + TimeId ForumTopic::creationDate() const { return _creationDate; } @@ -267,6 +272,7 @@ void ForumTopic::readTillEnd() { void ForumTopic::applyTopic(const MTPDforumTopic &data) { Expects(_rootId == data.vid().v); + _creatorId = peerFromMTP(data.vfrom_id()); _creationDate = data.vdate().v; applyTitle(qs(data.vtitle())); diff --git a/Telegram/SourceFiles/data/data_forum_topic.h b/Telegram/SourceFiles/data/data_forum_topic.h index a2bd454f2d..0284971d45 100644 --- a/Telegram/SourceFiles/data/data_forum_topic.h +++ b/Telegram/SourceFiles/data/data_forum_topic.h @@ -60,6 +60,7 @@ public: [[nodiscard]] not_null forum() const; [[nodiscard]] rpl::producer<> destroyed() const; [[nodiscard]] MsgId rootId() const; + [[nodiscard]] PeerId creatorId() const; [[nodiscard]] TimeId creationDate() const; [[nodiscard]] bool my() const; @@ -172,8 +173,9 @@ private: DocumentId _iconId = 0; base::flat_set _titleWords; base::flat_set _titleFirstLetters; - int _titleVersion = 0; + PeerId _creatorId = 0; TimeId _creationDate = 0; + int _titleVersion = 0; int32 _colorId = 0; Flags _flags; diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp index 3652e36214..f54836a6a6 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -687,6 +687,10 @@ void InnerWidget::elementStartPremium( void InnerWidget::elementCancelPremium(not_null view) { } +QString InnerWidget::elementAuthorRank(not_null view) { + return {}; +} + void InnerWidget::saveState(not_null memento) { memento->setFilter(std::move(_filter)); memento->setAdmins(std::move(_admins)); diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h index bf43b683f5..7f1ce801b8 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h @@ -143,6 +143,8 @@ public: HistoryView::Element *replacing) override; void elementCancelPremium( not_null view) override; + QString elementAuthorRank( + not_null view) override; ~InnerWidget(); diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index 23dff0464b..907ffe34aa 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -275,6 +275,10 @@ public: } } + QString elementAuthorRank(not_null view) override { + return {}; + } + not_null delegate() override { return this; } diff --git a/Telegram/SourceFiles/history/view/history_view_element.cpp b/Telegram/SourceFiles/history/view/history_view_element.cpp index 6a0660de6b..73d6ec884f 100644 --- a/Telegram/SourceFiles/history/view/history_view_element.cpp +++ b/Telegram/SourceFiles/history/view/history_view_element.cpp @@ -225,6 +225,11 @@ void SimpleElementDelegate::elementCancelPremium( not_null view) { } +QString SimpleElementDelegate::elementAuthorRank( + not_null view) { + return {}; +} + TextSelection UnshiftItemSelection( TextSelection selection, uint16 byLength) { diff --git a/Telegram/SourceFiles/history/view/history_view_element.h b/Telegram/SourceFiles/history/view/history_view_element.h index b777d18006..744156ce6e 100644 --- a/Telegram/SourceFiles/history/view/history_view_element.h +++ b/Telegram/SourceFiles/history/view/history_view_element.h @@ -107,6 +107,7 @@ public: not_null view, Element *replacing) = 0; virtual void elementCancelPremium(not_null view) = 0; + virtual QString elementAuthorRank(not_null view) = 0; virtual ~ElementDelegate() { } @@ -168,6 +169,8 @@ public: not_null view, Element *replacing) override; void elementCancelPremium(not_null view) override; + QString elementAuthorRank(not_null view) override; + protected: [[nodiscard]] not_null controller() const { diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp index 0b1b7c315d..9f94de35a5 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp @@ -1658,6 +1658,10 @@ void ListWidget::elementCancelPremium(not_null view) { _emojiInteractions->cancelPremiumEffect(view); } +QString ListWidget::elementAuthorRank(not_null view) { + return _delegate->listElementAuthorRank(view); +} + void ListWidget::saveState(not_null memento) { memento->setAroundPosition(_aroundPosition); auto state = countScrollState(); diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.h b/Telegram/SourceFiles/history/view/history_view_list_widget.h index 0a9e7ff98f..aadc9fdff0 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.h +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.h @@ -139,6 +139,7 @@ public: virtual void listPaintEmpty( Painter &p, const Ui::ChatPaintContext &context) = 0; + virtual QString listElementAuthorRank(not_null view) = 0; }; struct SelectionData { @@ -319,6 +320,7 @@ public: not_null view, Element *replacing) override; void elementCancelPremium(not_null view) override; + QString elementAuthorRank(not_null view) override; void setEmptyInfoWidget(base::unique_qptr &&w); diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index 69669237fc..f961a39db1 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -329,7 +329,10 @@ not_null Message::message() const { void Message::refreshRightBadge() { const auto text = [&] { - if (data()->isDiscussionPost()) { + const auto author = delegate()->elementAuthorRank(this); + if (!author.isEmpty()) { + return author; + } else if (data()->isDiscussionPost()) { return (delegate()->elementContext() == Context::Replies) ? QString() : tr::lng_channel_badge(tr::now); @@ -345,8 +348,8 @@ void Message::refreshRightBadge() { return QString(); } const auto info = channel->mgInfo.get(); - const auto i = channel->mgInfo->admins.find(peerToUser(user->id)); - const auto custom = (i != channel->mgInfo->admins.end()) + const auto i = info->admins.find(peerToUser(user->id)); + const auto custom = (i != info->admins.end()) ? i->second : (info->creator == user) ? info->creatorRank @@ -355,7 +358,7 @@ void Message::refreshRightBadge() { ? custom : (info->creator == user) ? tr::lng_owner_badge(tr::now) - : (i != channel->mgInfo->admins.end()) + : (i != info->admins.end()) ? tr::lng_admin_badge(tr::now) : QString(); }(); diff --git a/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp b/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp index 3f38978b39..d5495dbd91 100644 --- a/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp @@ -613,6 +613,10 @@ void PinnedWidget::listPaintEmpty( const Ui::ChatPaintContext &context) { } +QString PinnedWidget::listElementAuthorRank(not_null view) { + return {}; +} + void PinnedWidget::confirmDeleteSelected() { ConfirmDeleteSelectedItems(_inner); } diff --git a/Telegram/SourceFiles/history/view/history_view_pinned_section.h b/Telegram/SourceFiles/history/view/history_view_pinned_section.h index 5d0280663a..37ad4dd669 100644 --- a/Telegram/SourceFiles/history/view/history_view_pinned_section.h +++ b/Telegram/SourceFiles/history/view/history_view_pinned_section.h @@ -124,6 +124,7 @@ public: void listPaintEmpty( Painter &p, const Ui::ChatPaintContext &context) override; + QString listElementAuthorRank(not_null view) override; // CornerButtonsDelegate delegate. void cornerButtonsShowAtPosition( diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index 3187957285..8164da1a32 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -2453,6 +2453,12 @@ void RepliesWidget::listPaintEmpty( _emptyPainter->paint(p, context.st, width(), _scroll->height()); } +QString RepliesWidget::listElementAuthorRank(not_null view) { + return (_topic && view->data()->from()->id == _topic->creatorId()) + ? tr::lng_topic_author_badge(tr::now) + : QString(); +} + void RepliesWidget::setupEmptyPainter() { Expects(_topic != nullptr); diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.h b/Telegram/SourceFiles/history/view/history_view_replies_section.h index aff49a0eba..10152586b9 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.h +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.h @@ -165,6 +165,7 @@ public: void listPaintEmpty( Painter &p, const Ui::ChatPaintContext &context) override; + QString listElementAuthorRank(not_null view) override; // CornerButtonsDelegate delegate. void cornerButtonsShowAtPosition( diff --git a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp index e476ba7be5..e2b7baedf7 100644 --- a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp @@ -1288,6 +1288,11 @@ void ScheduledWidget::listPaintEmpty( const Ui::ChatPaintContext &context) { } +QString ScheduledWidget::listElementAuthorRank( + not_null view) { + return {}; +} + void ScheduledWidget::confirmSendNowSelected() { ConfirmSendNowSelectedItems(_inner); } diff --git a/Telegram/SourceFiles/history/view/history_view_scheduled_section.h b/Telegram/SourceFiles/history/view/history_view_scheduled_section.h index 48e82455e1..a7e06a272f 100644 --- a/Telegram/SourceFiles/history/view/history_view_scheduled_section.h +++ b/Telegram/SourceFiles/history/view/history_view_scheduled_section.h @@ -147,6 +147,7 @@ public: void listPaintEmpty( Painter &p, const Ui::ChatPaintContext &context) override; + QString listElementAuthorRank(not_null view) override; // CornerButtonsDelegate delegate. void cornerButtonsShowAtPosition(