mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SponsoredMessages::canHaveFor(not_null<History*> history) const {
|
||||||
|
return history->isChannel();
|
||||||
|
}
|
||||||
|
|
||||||
void SponsoredMessages::request(not_null<History*> history) {
|
void SponsoredMessages::request(not_null<History*> history) {
|
||||||
|
if (!canHaveFor(history)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
auto &request = _requests[history];
|
auto &request = _requests[history];
|
||||||
if (request.requestId || TooEarlyForRequest(request.lastReceived)) {
|
if (request.requestId || TooEarlyForRequest(request.lastReceived)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const auto channel = history->peer->asChannel();
|
||||||
|
Assert(channel != nullptr);
|
||||||
request.requestId = _session->api().request(
|
request.requestId = _session->api().request(
|
||||||
MTPchannels_GetSponsoredMessages(
|
MTPchannels_GetSponsoredMessages(
|
||||||
_session->data().channel(history->channelId())->inputChannel
|
channel->inputChannel)
|
||||||
)).done([=](const MTPmessages_sponsoredMessages &result) {
|
).done([=](const MTPmessages_sponsoredMessages &result) {
|
||||||
parse(history, result);
|
parse(history, result);
|
||||||
}).fail([=](const MTP::Error &error) {
|
}).fail([=](const MTP::Error &error) {
|
||||||
_requests.remove(history);
|
_requests.remove(history);
|
||||||
|
@ -169,6 +178,9 @@ void SponsoredMessages::clearItems(not_null<History*> history) {
|
||||||
|
|
||||||
const SponsoredMessages::Entry *SponsoredMessages::find(
|
const SponsoredMessages::Entry *SponsoredMessages::find(
|
||||||
const FullMsgId &fullId) const {
|
const FullMsgId &fullId) const {
|
||||||
|
if (!fullId.channel) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
const auto history = _session->data().history(
|
const auto history = _session->data().history(
|
||||||
peerFromChannel(fullId.channel));
|
peerFromChannel(fullId.channel));
|
||||||
const auto it = _data.find(history);
|
const auto it = _data.find(history);
|
||||||
|
@ -195,12 +207,13 @@ void SponsoredMessages::view(const FullMsgId &fullId) {
|
||||||
if (request.requestId || TooEarlyForRequest(request.lastReceived)) {
|
if (request.requestId || TooEarlyForRequest(request.lastReceived)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto history = entryPtr->item->history();
|
const auto channel = entryPtr->item->history()->peer->asChannel();
|
||||||
|
Assert(channel != nullptr);
|
||||||
request.requestId = _session->api().request(
|
request.requestId = _session->api().request(
|
||||||
MTPchannels_ViewSponsoredMessage(
|
MTPchannels_ViewSponsoredMessage(
|
||||||
_session->data().channel(history->channelId())->inputChannel,
|
channel->inputChannel,
|
||||||
MTP_bytes(randomId)
|
MTP_bytes(randomId))
|
||||||
)).done([=] {
|
).done([=] {
|
||||||
auto &request = _viewRequests[randomId];
|
auto &request = _viewRequests[randomId];
|
||||||
request.lastReceived = crl::now();
|
request.lastReceived = crl::now();
|
||||||
request.requestId = 0;
|
request.requestId = 0;
|
||||||
|
|
|
@ -36,6 +36,7 @@ public:
|
||||||
SponsoredMessages &operator=(const SponsoredMessages &other) = delete;
|
SponsoredMessages &operator=(const SponsoredMessages &other) = delete;
|
||||||
~SponsoredMessages();
|
~SponsoredMessages();
|
||||||
|
|
||||||
|
[[nodiscard]] bool canHaveFor(not_null<History*> history) const;
|
||||||
void request(not_null<History*> history);
|
void request(not_null<History*> history);
|
||||||
[[nodiscard]] bool append(not_null<History*> history);
|
[[nodiscard]] bool append(not_null<History*> history);
|
||||||
void clearItems(not_null<History*> history);
|
void clearItems(not_null<History*> history);
|
||||||
|
|
|
@ -2674,10 +2674,6 @@ 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;
|
||||||
|
|
|
@ -282,8 +282,6 @@ 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;
|
||||||
|
|
|
@ -679,18 +679,20 @@ void HistoryInner::paintEvent(QPaintEvent *e) {
|
||||||
seltoy - mtop);
|
seltoy - mtop);
|
||||||
view->draw(p, context);
|
view->draw(p, context);
|
||||||
|
|
||||||
if (item->hasViews()) {
|
const auto height = view->height();
|
||||||
session().api().views().scheduleIncrement(item);
|
const auto middle = top + height / 2;
|
||||||
}
|
const auto bottom = top + height;
|
||||||
if (item->isSponsored()) {
|
if (_visibleAreaBottom >= middle
|
||||||
session().data().sponsoredMessages().view(item->fullId());
|
&& _visibleAreaTop <= middle) {
|
||||||
}
|
if (item->hasViews()) {
|
||||||
if (item->isUnreadMention() && !item->isUnreadMedia()) {
|
session().api().views().scheduleIncrement(item);
|
||||||
readMentions.insert(item);
|
}
|
||||||
_widget->enqueueMessageHighlight(view);
|
if (item->isUnreadMention() && !item->isUnreadMedia()) {
|
||||||
|
readMentions.insert(item);
|
||||||
|
_widget->enqueueMessageHighlight(view);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto height = view->height();
|
|
||||||
top += height;
|
top += height;
|
||||||
context.translate(0, -height);
|
context.translate(0, -height);
|
||||||
p.translate(0, height);
|
p.translate(0, height);
|
||||||
|
@ -739,16 +741,16 @@ void HistoryInner::paintEvent(QPaintEvent *e) {
|
||||||
if (!item->out() && item->unread()) {
|
if (!item->out() && item->unread()) {
|
||||||
readTill = item;
|
readTill = item;
|
||||||
}
|
}
|
||||||
|
if (item->isSponsored()) {
|
||||||
|
session().data().sponsoredMessages().view(
|
||||||
|
item->fullId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (_visibleAreaBottom >= middle
|
if (_visibleAreaBottom >= middle
|
||||||
&& _visibleAreaTop <= middle) {
|
&& _visibleAreaTop <= middle) {
|
||||||
if (item->hasViews()) {
|
if (item->hasViews()) {
|
||||||
session().api().views().scheduleIncrement(item);
|
session().api().views().scheduleIncrement(item);
|
||||||
}
|
}
|
||||||
if (item->isSponsored()) {
|
|
||||||
session().data().sponsoredMessages().view(
|
|
||||||
item->fullId());
|
|
||||||
}
|
|
||||||
if (item->isUnreadMention() && !item->isUnreadMedia()) {
|
if (item->isUnreadMention() && !item->isUnreadMedia()) {
|
||||||
readMentions.insert(item);
|
readMentions.insert(item);
|
||||||
_widget->enqueueMessageHighlight(view);
|
_widget->enqueueMessageHighlight(view);
|
||||||
|
|
|
@ -2189,11 +2189,9 @@ void HistoryWidget::showHistory(
|
||||||
showAboutTopPromotion();
|
showAboutTopPromotion();
|
||||||
|
|
||||||
{
|
{
|
||||||
const auto hasSponsored = _history->canHaveSponsoredMessages();
|
auto &sponsored = session().data().sponsoredMessages();
|
||||||
_scroll->setTrackingContent(hasSponsored);
|
sponsored.request(_history);
|
||||||
if (hasSponsored) {
|
_scroll->setTrackingContent(sponsored.canHaveFor(_history));
|
||||||
session().data().sponsoredMessages().request(_history);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_chooseForReport = nullptr;
|
_chooseForReport = nullptr;
|
||||||
|
|
Loading…
Add table
Reference in a new issue