Added sponsored messages to HistoryWidget.

This commit is contained in:
23rd 2021-09-30 15:59:08 +03:00 committed by John Preston
parent c2c53df886
commit 419f6345b3
4 changed files with 38 additions and 1 deletions

View file

@ -2675,6 +2675,10 @@ QString History::topPromotionMessage() const {
return _topPromotedMessage; return _topPromotedMessage;
} }
bool History::canHaveSponsoredMessages() const {
return isChannel();
}
bool History::clearUnreadOnClientSide() const { bool History::clearUnreadOnClientSide() const {
if (!session().supportMode()) { if (!session().supportMode()) {
return false; return false;

View file

@ -282,6 +282,8 @@ public:
[[nodiscard]] bool topPromotionAboutShown() const; [[nodiscard]] bool topPromotionAboutShown() const;
void markTopPromotionAboutShown(); void markTopPromotionAboutShown();
[[nodiscard]] bool canHaveSponsoredMessages() const;
MsgId minMsgId() const; MsgId minMsgId() const;
MsgId maxMsgId() const; MsgId maxMsgId() const;
MsgId msgIdForRead() const; MsgId msgIdForRead() const;

View file

@ -56,6 +56,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_user.h" #include "data/data_user.h"
#include "data/data_chat_filters.h" #include "data/data_chat_filters.h"
#include "data/data_scheduled_messages.h" #include "data/data_scheduled_messages.h"
#include "data/data_sponsored_messages.h"
#include "data/data_file_origin.h" #include "data/data_file_origin.h"
#include "data/data_histories.h" #include "data/data_histories.h"
#include "data/data_group_call.h" #include "data/data_group_call.h"
@ -109,6 +110,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/chat/group_call_bar.h" #include "ui/chat/group_call_bar.h"
#include "ui/chat/chat_theme.h" #include "ui/chat/chat_theme.h"
#include "ui/chat/chat_style.h" #include "ui/chat/chat_style.h"
#include "ui/chat/continuous_scroll.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/item_text_options.h" #include "ui/item_text_options.h"
#include "ui/unread_badge.h" #include "ui/unread_badge.h"
@ -260,6 +262,14 @@ HistoryWidget::HistoryWidget(
) | rpl::start_with_next(crl::guard(_list, [=] { ) | rpl::start_with_next(crl::guard(_list, [=] {
_list->onParentGeometryChanged(); _list->onParentGeometryChanged();
}), lifetime()); }), lifetime());
_scroll->addContentRequests(
) | rpl::start_with_next([=] {
if (_history->loadedAtBottom()
&& session().data().sponsoredMessages().append(_history)) {
_scroll->contentAdded();
}
}, lifetime());
_historyDown->addClickHandler([=] { historyDownClicked(); }); _historyDown->addClickHandler([=] { historyDownClicked(); });
_unreadMentions->addClickHandler([=] { showNextUnreadMention(); }); _unreadMentions->addClickHandler([=] { showNextUnreadMention(); });
_fieldBarCancel->addClickHandler([=] { cancelFieldAreaState(); }); _fieldBarCancel->addClickHandler([=] { cancelFieldAreaState(); });
@ -1966,6 +1976,8 @@ void HistoryWidget::showHistory(
} }
} }
return; return;
} else {
session().data().sponsoredMessages().clearItems(_history);
} }
session().sendProgressManager().update( session().sendProgressManager().update(
_history, _history,
@ -2169,6 +2181,14 @@ void HistoryWidget::showHistory(
} }
unreadCountUpdated(); // set _historyDown badge. unreadCountUpdated(); // set _historyDown badge.
showAboutTopPromotion(); showAboutTopPromotion();
{
const auto hasSponsored = _history->canHaveSponsoredMessages();
_scroll->setTrackingContent(hasSponsored);
if (hasSponsored) {
session().data().sponsoredMessages().request(_history);
}
}
} else { } else {
_chooseForReport = nullptr; _chooseForReport = nullptr;
refreshTopBarActiveChat(); refreshTopBarActiveChat();
@ -2616,6 +2636,16 @@ void HistoryWidget::newItemAdded(not_null<HistoryItem*> item) {
|| item->isScheduled()) { || item->isScheduled()) {
return; return;
} }
if (item->isSponsored()) {
if (const auto view = item->mainView()) {
view->resizeGetHeight(width());
updateHistoryGeometry(
false,
true,
{ ScrollChangeNoJumpToBottom, 0 });
}
return;
}
// If we get here in non-resized state we can't rely on results of // If we get here in non-resized state we can't rely on results of
// doWeReadServerHistory() and mark chat as read. // doWeReadServerHistory() and mark chat as read.

View file

@ -80,6 +80,7 @@ namespace Toast {
class Instance; class Instance;
} // namespace Toast } // namespace Toast
class ChooseThemeController; class ChooseThemeController;
class ContinuousScroll;
} // namespace Ui } // namespace Ui
namespace Window { namespace Window {
@ -675,7 +676,7 @@ private:
int _delayedShowAtRequest = 0; // Not real mtpRequestId. int _delayedShowAtRequest = 0; // Not real mtpRequestId.
object_ptr<HistoryView::TopBarWidget> _topBar; object_ptr<HistoryView::TopBarWidget> _topBar;
object_ptr<Ui::ScrollArea> _scroll; object_ptr<Ui::ContinuousScroll> _scroll;
QPointer<HistoryInner> _list; QPointer<HistoryInner> _list;
History *_migrated = nullptr; History *_migrated = nullptr;
History *_history = nullptr; History *_history = nullptr;