Drop sponsored message cache when Premium state is changed.
This commit is contained in:
parent
ec1310a0e7
commit
0497c09047
@ -117,6 +117,7 @@ struct SponsoredMessageManager::DialogSponsoredMessages {
|
|||||||
vector<SponsoredMessage> messages;
|
vector<SponsoredMessage> messages;
|
||||||
FlatHashMap<int64, string> message_random_ids;
|
FlatHashMap<int64, string> message_random_ids;
|
||||||
int32 messages_between = 0;
|
int32 messages_between = 0;
|
||||||
|
bool is_premium = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
SponsoredMessageManager::SponsoredMessageManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) {
|
SponsoredMessageManager::SponsoredMessageManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) {
|
||||||
@ -147,9 +148,9 @@ void SponsoredMessageManager::delete_cached_sponsored_messages(DialogId dialog_i
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto it = dialog_sponsored_messages_.find(dialog_id);
|
auto it = dialog_sponsored_messages_.find(dialog_id);
|
||||||
CHECK(it != dialog_sponsored_messages_.end());
|
if (it != dialog_sponsored_messages_.end() && it->second->promises.empty()) {
|
||||||
CHECK(it->second->promises.empty());
|
dialog_sponsored_messages_.erase(it);
|
||||||
dialog_sponsored_messages_.erase(it);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
td_api::object_ptr<td_api::sponsoredMessage> SponsoredMessageManager::get_sponsored_message_object(
|
td_api::object_ptr<td_api::sponsoredMessage> SponsoredMessageManager::get_sponsored_message_object(
|
||||||
@ -216,7 +217,14 @@ void SponsoredMessageManager::get_dialog_sponsored_messages(
|
|||||||
|
|
||||||
auto &messages = dialog_sponsored_messages_[dialog_id];
|
auto &messages = dialog_sponsored_messages_[dialog_id];
|
||||||
if (messages != nullptr && messages->promises.empty()) {
|
if (messages != nullptr && messages->promises.empty()) {
|
||||||
return promise.set_value(get_sponsored_messages_object(dialog_id, *messages));
|
if (messages->is_premium == td_->option_manager_->get_option_boolean("is_premium", false)) {
|
||||||
|
// use cached value
|
||||||
|
return promise.set_value(get_sponsored_messages_object(dialog_id, *messages));
|
||||||
|
} else {
|
||||||
|
// drop cache
|
||||||
|
messages = nullptr;
|
||||||
|
delete_cached_sponsored_messages_timeout_.cancel_timeout(dialog_id.get());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (messages == nullptr) {
|
if (messages == nullptr) {
|
||||||
@ -336,6 +344,7 @@ void SponsoredMessageManager::on_get_dialog_sponsored_messages(
|
|||||||
default:
|
default:
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
messages->is_premium = td_->option_manager_->get_option_boolean("is_premium", false);
|
||||||
|
|
||||||
for (auto &promise : promises) {
|
for (auto &promise : promises) {
|
||||||
promise.set_value(get_sponsored_messages_object(dialog_id, *messages));
|
promise.set_value(get_sponsored_messages_object(dialog_id, *messages));
|
||||||
|
Loading…
Reference in New Issue
Block a user