Added behavior to hide spoilers when switching sections.

This commit is contained in:
23rd 2021-12-29 18:26:25 +03:00 committed by John Preston
parent a381439e3e
commit 3aacae2cb2
11 changed files with 54 additions and 0 deletions

View file

@ -1596,6 +1596,25 @@ void Session::unloadHeavyViewParts(
}
}
void Session::registerShownSpoiler(FullMsgId id) {
if (const auto item = message(id)) {
_shownSpoilers.emplace(item);
}
}
void Session::unregisterShownSpoiler(FullMsgId id) {
if (const auto item = message(id)) {
_shownSpoilers.remove(item);
}
}
void Session::hideShownSpoilers() {
for (const auto &item : _shownSpoilers) {
item->hideSpoilers();
}
_shownSpoilers = base::flat_set<not_null<HistoryItem*>>();
}
void Session::removeMegagroupParticipant(
not_null<ChannelData*> channel,
not_null<UserData*> user) {

View file

@ -282,6 +282,10 @@ public:
int from,
int till);
void registerShownSpoiler(FullMsgId id);
void unregisterShownSpoiler(FullMsgId id);
void hideShownSpoilers();
using MegagroupParticipant = std::tuple<
not_null<ChannelData*>,
not_null<UserData*>>;
@ -943,6 +947,8 @@ private:
rpl::event_stream<InviteToCall> _invitesToCalls;
base::flat_map<uint64, base::flat_set<not_null<UserData*>>> _invitedToCallUsers;
base::flat_set<not_null<HistoryItem*>> _shownSpoilers;
History *_topPromoted = nullptr;
NotifySettings _defaultUserNotifySettings;

View file

@ -333,6 +333,8 @@ public:
virtual void setRealId(MsgId newId);
virtual void incrementReplyToTopCounter() {
}
virtual void hideSpoilers() {
}
[[nodiscard]] bool emptyText() const {
return _text.isEmpty();

View file

@ -998,6 +998,10 @@ void HistoryMessage::setCommentsItemId(FullMsgId id) {
}
}
void HistoryMessage::hideSpoilers() {
HistoryView::HideSpoilers(_text);
}
bool HistoryMessage::updateDependencyItem() {
if (const auto reply = Get<HistoryMessageReply>()) {
const auto documentId = reply->replyToDocumentId;

View file

@ -201,6 +201,7 @@ public:
[[nodiscard]] MsgId dependencyMsgId() const override {
return replyToId();
}
void hideSpoilers() override;
void applySentMessage(const MTPDmessage &data) override;
void applySentMessage(

View file

@ -998,6 +998,10 @@ void HistoryService::setServiceText(const PreparedText &prepared) {
_textHeight = 0;
}
void HistoryService::hideSpoilers() {
HistoryView::HideSpoilers(_text);
}
void HistoryService::markMediaAsReadHook() {
if (const auto selfdestruct = Get<HistoryServiceSelfDestruct>()) {
if (!selfdestruct->destructAt) {

View file

@ -120,6 +120,8 @@ public:
void setServiceText(const PreparedText &prepared);
void hideSpoilers() override;
~HistoryService();
protected:

View file

@ -2007,6 +2007,7 @@ void HistoryWidget::showHistory(
return;
} else {
session().data().sponsoredMessages().clearItems(_history);
session().data().hideShownSpoilers();
}
session().sendProgressManager().update(
_history,

View file

@ -8,7 +8,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "history/view/history_view_spoiler_click_handler.h"
#include "core/click_handler_types.h" // ClickHandlerContext
#include "data/data_session.h"
#include "history/view/history_view_element.h"
#include "main/main_session.h"
#include "window/window_session_controller.h"
#include "ui/spoiler_click_handler.h"
namespace HistoryView {
@ -33,6 +36,10 @@ void AnimatedSpoilerClickHandler::onClick(ClickContext context) const {
const auto nonconst = const_cast<AnimatedSpoilerClickHandler*>(this);
nonconst->setStartMs(crl::now());
SpoilerClickHandler::onClick({});
if (const auto controller = my.sessionWindow.get()) {
controller->session().data().registerShownSpoiler(my.itemId);
}
}
}
@ -46,4 +53,10 @@ void FillTextWithAnimatedSpoilers(Ui::Text::String &text) {
}
}
void HideSpoilers(Ui::Text::String &text) {
for (auto i = 0; i < text.spoilersCount(); i++) {
text.setSpoilerShown(i + 1, false);
}
}
} // namespace HistoryView

View file

@ -10,5 +10,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace HistoryView {
void FillTextWithAnimatedSpoilers(Ui::Text::String &text);
void HideSpoilers(Ui::Text::String &text);
} // namespace HistoryView

View file

@ -1276,6 +1276,7 @@ void MainWidget::ui_showPeerHistory(
if (IsServerMsgId(showAtMsgId)
&& _mainSection
&& _mainSection->showMessage(peerId, params, showAtMsgId)) {
session().data().hideShownSpoilers();
return;
}