mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 14:17:12 +02:00
Register sponsored view only on full message show.
This commit is contained in:
parent
52bacb3cde
commit
7a57174ab1
6 changed files with 39 additions and 31 deletions
|
@ -92,15 +92,24 @@ bool SponsoredMessages::append(not_null<History*> history) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool SponsoredMessages::canHaveFor(not_null<History*> history) const {
|
||||
return history->isChannel();
|
||||
}
|
||||
|
||||
void SponsoredMessages::request(not_null<History*> history) {
|
||||
if (!canHaveFor(history)) {
|
||||
return;
|
||||
}
|
||||
auto &request = _requests[history];
|
||||
if (request.requestId || TooEarlyForRequest(request.lastReceived)) {
|
||||
return;
|
||||
}
|
||||
const auto channel = history->peer->asChannel();
|
||||
Assert(channel != nullptr);
|
||||
request.requestId = _session->api().request(
|
||||
MTPchannels_GetSponsoredMessages(
|
||||
_session->data().channel(history->channelId())->inputChannel
|
||||
)).done([=](const MTPmessages_sponsoredMessages &result) {
|
||||
channel->inputChannel)
|
||||
).done([=](const MTPmessages_sponsoredMessages &result) {
|
||||
parse(history, result);
|
||||
}).fail([=](const MTP::Error &error) {
|
||||
_requests.remove(history);
|
||||
|
@ -169,6 +178,9 @@ void SponsoredMessages::clearItems(not_null<History*> history) {
|
|||
|
||||
const SponsoredMessages::Entry *SponsoredMessages::find(
|
||||
const FullMsgId &fullId) const {
|
||||
if (!fullId.channel) {
|
||||
return nullptr;
|
||||
}
|
||||
const auto history = _session->data().history(
|
||||
peerFromChannel(fullId.channel));
|
||||
const auto it = _data.find(history);
|
||||
|
@ -195,12 +207,13 @@ void SponsoredMessages::view(const FullMsgId &fullId) {
|
|||
if (request.requestId || TooEarlyForRequest(request.lastReceived)) {
|
||||
return;
|
||||
}
|
||||
const auto history = entryPtr->item->history();
|
||||
const auto channel = entryPtr->item->history()->peer->asChannel();
|
||||
Assert(channel != nullptr);
|
||||
request.requestId = _session->api().request(
|
||||
MTPchannels_ViewSponsoredMessage(
|
||||
_session->data().channel(history->channelId())->inputChannel,
|
||||
MTP_bytes(randomId)
|
||||
)).done([=] {
|
||||
channel->inputChannel,
|
||||
MTP_bytes(randomId))
|
||||
).done([=] {
|
||||
auto &request = _viewRequests[randomId];
|
||||
request.lastReceived = crl::now();
|
||||
request.requestId = 0;
|
||||
|
|
|
@ -36,6 +36,7 @@ public:
|
|||
SponsoredMessages &operator=(const SponsoredMessages &other) = delete;
|
||||
~SponsoredMessages();
|
||||
|
||||
[[nodiscard]] bool canHaveFor(not_null<History*> history) const;
|
||||
void request(not_null<History*> history);
|
||||
[[nodiscard]] bool append(not_null<History*> history);
|
||||
void clearItems(not_null<History*> history);
|
||||
|
|
|
@ -2674,10 +2674,6 @@ QString History::topPromotionMessage() const {
|
|||
return _topPromotedMessage;
|
||||
}
|
||||
|
||||
bool History::canHaveSponsoredMessages() const {
|
||||
return isChannel();
|
||||
}
|
||||
|
||||
bool History::clearUnreadOnClientSide() const {
|
||||
if (!session().supportMode()) {
|
||||
return false;
|
||||
|
|
|
@ -282,8 +282,6 @@ public:
|
|||
[[nodiscard]] bool topPromotionAboutShown() const;
|
||||
void markTopPromotionAboutShown();
|
||||
|
||||
[[nodiscard]] bool canHaveSponsoredMessages() const;
|
||||
|
||||
MsgId minMsgId() const;
|
||||
MsgId maxMsgId() const;
|
||||
MsgId msgIdForRead() const;
|
||||
|
|
|
@ -679,18 +679,20 @@ void HistoryInner::paintEvent(QPaintEvent *e) {
|
|||
seltoy - mtop);
|
||||
view->draw(p, context);
|
||||
|
||||
if (item->hasViews()) {
|
||||
session().api().views().scheduleIncrement(item);
|
||||
}
|
||||
if (item->isSponsored()) {
|
||||
session().data().sponsoredMessages().view(item->fullId());
|
||||
}
|
||||
if (item->isUnreadMention() && !item->isUnreadMedia()) {
|
||||
readMentions.insert(item);
|
||||
_widget->enqueueMessageHighlight(view);
|
||||
const auto height = view->height();
|
||||
const auto middle = top + height / 2;
|
||||
const auto bottom = top + height;
|
||||
if (_visibleAreaBottom >= middle
|
||||
&& _visibleAreaTop <= middle) {
|
||||
if (item->hasViews()) {
|
||||
session().api().views().scheduleIncrement(item);
|
||||
}
|
||||
if (item->isUnreadMention() && !item->isUnreadMedia()) {
|
||||
readMentions.insert(item);
|
||||
_widget->enqueueMessageHighlight(view);
|
||||
}
|
||||
}
|
||||
|
||||
const auto height = view->height();
|
||||
top += height;
|
||||
context.translate(0, -height);
|
||||
p.translate(0, height);
|
||||
|
@ -739,16 +741,16 @@ void HistoryInner::paintEvent(QPaintEvent *e) {
|
|||
if (!item->out() && item->unread()) {
|
||||
readTill = item;
|
||||
}
|
||||
if (item->isSponsored()) {
|
||||
session().data().sponsoredMessages().view(
|
||||
item->fullId());
|
||||
}
|
||||
}
|
||||
if (_visibleAreaBottom >= middle
|
||||
&& _visibleAreaTop <= middle) {
|
||||
if (item->hasViews()) {
|
||||
session().api().views().scheduleIncrement(item);
|
||||
}
|
||||
if (item->isSponsored()) {
|
||||
session().data().sponsoredMessages().view(
|
||||
item->fullId());
|
||||
}
|
||||
if (item->isUnreadMention() && !item->isUnreadMedia()) {
|
||||
readMentions.insert(item);
|
||||
_widget->enqueueMessageHighlight(view);
|
||||
|
|
|
@ -2189,11 +2189,9 @@ void HistoryWidget::showHistory(
|
|||
showAboutTopPromotion();
|
||||
|
||||
{
|
||||
const auto hasSponsored = _history->canHaveSponsoredMessages();
|
||||
_scroll->setTrackingContent(hasSponsored);
|
||||
if (hasSponsored) {
|
||||
session().data().sponsoredMessages().request(_history);
|
||||
}
|
||||
auto &sponsored = session().data().sponsoredMessages();
|
||||
sponsored.request(_history);
|
||||
_scroll->setTrackingContent(sponsored.canHaveFor(_history));
|
||||
}
|
||||
} else {
|
||||
_chooseForReport = nullptr;
|
||||
|
|
Loading…
Add table
Reference in a new issue