2
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-08-31 14:38:15 +00:00

Added refresh of top bar suggestion on day changed for birthdays.

This commit is contained in:
23rd
2025-05-15 09:21:29 +03:00
parent 606dfd29d3
commit ba31bbace8
4 changed files with 49 additions and 54 deletions

View File

@@ -134,9 +134,15 @@ void PromoSuggestions::refreshTopPromotion() {
changedCustom = true;
}
const auto changedContactBirthdaysLastDayRequest =
_contactBirthdaysLastDayRequest != -1
&& _contactBirthdaysLastDayRequest
!= QDate::currentDate().day();
if (changedPendingSuggestions
|| changedDismissedSuggestions
|| changedCustom) {
|| changedCustom
|| changedContactBirthdaysLastDayRequest) {
_refreshed.fire({});
}
});
@@ -234,58 +240,52 @@ std::optional<CustomSuggestion> PromoSuggestions::custom() const {
return _custom;
}
rpl::producer<UserIds> PromoSuggestions::contactBirthdays(bool force) {
void PromoSuggestions::requestContactBirthdays(Fn<void()> done, bool force) {
if ((_contactBirthdaysLastDayRequest != -1)
&& (_contactBirthdaysLastDayRequest == QDate::currentDate().day())
&& !force) {
return rpl::single(_contactBirthdays);
return done();
}
if (_contactBirthdaysRequestId) {
_session->api().request(_contactBirthdaysRequestId).cancel();
}
return [=](auto consumer) {
auto lifetime = rpl::lifetime();
_contactBirthdaysRequestId = _session->api().request(
MTPcontacts_GetBirthdays()
).done([=](const MTPcontacts_ContactBirthdays &result) {
_contactBirthdaysRequestId = 0;
_contactBirthdaysLastDayRequest = QDate::currentDate().day();
auto users = UserIds();
auto today = UserIds();
_session->data().processUsers(result.data().vusers());
for (const auto &tlContact : result.data().vcontacts().v) {
const auto peerId = tlContact.data().vcontact_id().v;
if (const auto user = _session->data().user(peerId)) {
const auto &data = tlContact.data().vbirthday().data();
user->setBirthday(Data::Birthday(
data.vday().v,
data.vmonth().v,
data.vyear().value_or_empty()));
if (user->isSelf()
|| user->isInaccessible()
|| user->isBlocked()) {
continue;
}
if (Data::IsBirthdayToday(user->birthday())) {
today.push_back(peerToUser(user->id));
}
users.push_back(peerToUser(user->id));
_contactBirthdaysRequestId = _session->api().request(
MTPcontacts_GetBirthdays()
).done([=](const MTPcontacts_ContactBirthdays &result) {
_contactBirthdaysRequestId = 0;
_contactBirthdaysLastDayRequest = QDate::currentDate().day();
auto users = UserIds();
auto today = UserIds();
_session->data().processUsers(result.data().vusers());
for (const auto &tlContact : result.data().vcontacts().v) {
const auto peerId = tlContact.data().vcontact_id().v;
if (const auto user = _session->data().user(peerId)) {
const auto &data = tlContact.data().vbirthday().data();
user->setBirthday(Data::Birthday(
data.vday().v,
data.vmonth().v,
data.vyear().value_or_empty()));
if (user->isSelf()
|| user->isInaccessible()
|| user->isBlocked()) {
continue;
}
if (Data::IsBirthdayToday(user->birthday())) {
today.push_back(peerToUser(user->id));
}
users.push_back(peerToUser(user->id));
}
_contactBirthdays = std::move(users);
_contactBirthdaysToday = std::move(today);
consumer.put_next_copy(_contactBirthdays);
}).fail([=](const MTP::Error &error) {
_contactBirthdaysRequestId = 0;
_contactBirthdaysLastDayRequest = QDate::currentDate().day();
_contactBirthdays = {};
_contactBirthdaysToday = {};
consumer.put_next({});
}).send();
return lifetime;
};
}
_contactBirthdays = std::move(users);
_contactBirthdaysToday = std::move(today);
done();
}).fail([=](const MTP::Error &error) {
_contactBirthdaysRequestId = 0;
_contactBirthdaysLastDayRequest = QDate::currentDate().day();
_contactBirthdays = {};
_contactBirthdaysToday = {};
done();
}).send();
}
std::optional<UserIds> PromoSuggestions::knownContactBirthdays() const {