mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-07-27 07:52:57 +02:00
Added refresh of top bar suggestion on day changed for birthdays.
This commit is contained in:
parent
606dfd29d3
commit
ba31bbace8
4 changed files with 49 additions and 54 deletions
|
@ -3629,10 +3629,7 @@ void Controller::rowClicked(not_null<PeerListRow*> row) {
|
||||||
void ChooseStarGiftRecipient(
|
void ChooseStarGiftRecipient(
|
||||||
not_null<Window::SessionController*> window) {
|
not_null<Window::SessionController*> window) {
|
||||||
const auto session = &window->session();
|
const auto session = &window->session();
|
||||||
const auto lifetime = std::make_shared<rpl::lifetime>();
|
session->promoSuggestions().requestContactBirthdays([=] {
|
||||||
session->promoSuggestions().contactBirthdays(
|
|
||||||
) | rpl::start_with_next(crl::guard(session, [=] {
|
|
||||||
lifetime->destroy();
|
|
||||||
auto controller = std::make_unique<Controller>(
|
auto controller = std::make_unique<Controller>(
|
||||||
session,
|
session,
|
||||||
[=](not_null<PeerData*> peer, PickType type) {
|
[=](not_null<PeerData*> peer, PickType type) {
|
||||||
|
@ -3657,7 +3654,7 @@ void ChooseStarGiftRecipient(
|
||||||
window->show(
|
window->show(
|
||||||
Box<PeerListBox>(std::move(controller), std::move(initBox)),
|
Box<PeerListBox>(std::move(controller), std::move(initBox)),
|
||||||
LayerOption::KeepOther);
|
LayerOption::KeepOther);
|
||||||
}), *lifetime);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowStarGiftBox(
|
void ShowStarGiftBox(
|
||||||
|
|
|
@ -134,9 +134,15 @@ void PromoSuggestions::refreshTopPromotion() {
|
||||||
changedCustom = true;
|
changedCustom = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto changedContactBirthdaysLastDayRequest =
|
||||||
|
_contactBirthdaysLastDayRequest != -1
|
||||||
|
&& _contactBirthdaysLastDayRequest
|
||||||
|
!= QDate::currentDate().day();
|
||||||
|
|
||||||
if (changedPendingSuggestions
|
if (changedPendingSuggestions
|
||||||
|| changedDismissedSuggestions
|
|| changedDismissedSuggestions
|
||||||
|| changedCustom) {
|
|| changedCustom
|
||||||
|
|| changedContactBirthdaysLastDayRequest) {
|
||||||
_refreshed.fire({});
|
_refreshed.fire({});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -234,58 +240,52 @@ std::optional<CustomSuggestion> PromoSuggestions::custom() const {
|
||||||
return _custom;
|
return _custom;
|
||||||
}
|
}
|
||||||
|
|
||||||
rpl::producer<UserIds> PromoSuggestions::contactBirthdays(bool force) {
|
void PromoSuggestions::requestContactBirthdays(Fn<void()> done, bool force) {
|
||||||
if ((_contactBirthdaysLastDayRequest != -1)
|
if ((_contactBirthdaysLastDayRequest != -1)
|
||||||
&& (_contactBirthdaysLastDayRequest == QDate::currentDate().day())
|
&& (_contactBirthdaysLastDayRequest == QDate::currentDate().day())
|
||||||
&& !force) {
|
&& !force) {
|
||||||
return rpl::single(_contactBirthdays);
|
return done();
|
||||||
}
|
}
|
||||||
if (_contactBirthdaysRequestId) {
|
if (_contactBirthdaysRequestId) {
|
||||||
_session->api().request(_contactBirthdaysRequestId).cancel();
|
_session->api().request(_contactBirthdaysRequestId).cancel();
|
||||||
}
|
}
|
||||||
return [=](auto consumer) {
|
_contactBirthdaysRequestId = _session->api().request(
|
||||||
auto lifetime = rpl::lifetime();
|
MTPcontacts_GetBirthdays()
|
||||||
|
).done([=](const MTPcontacts_ContactBirthdays &result) {
|
||||||
_contactBirthdaysRequestId = _session->api().request(
|
_contactBirthdaysRequestId = 0;
|
||||||
MTPcontacts_GetBirthdays()
|
_contactBirthdaysLastDayRequest = QDate::currentDate().day();
|
||||||
).done([=](const MTPcontacts_ContactBirthdays &result) {
|
auto users = UserIds();
|
||||||
_contactBirthdaysRequestId = 0;
|
auto today = UserIds();
|
||||||
_contactBirthdaysLastDayRequest = QDate::currentDate().day();
|
_session->data().processUsers(result.data().vusers());
|
||||||
auto users = UserIds();
|
for (const auto &tlContact : result.data().vcontacts().v) {
|
||||||
auto today = UserIds();
|
const auto peerId = tlContact.data().vcontact_id().v;
|
||||||
_session->data().processUsers(result.data().vusers());
|
if (const auto user = _session->data().user(peerId)) {
|
||||||
for (const auto &tlContact : result.data().vcontacts().v) {
|
const auto &data = tlContact.data().vbirthday().data();
|
||||||
const auto peerId = tlContact.data().vcontact_id().v;
|
user->setBirthday(Data::Birthday(
|
||||||
if (const auto user = _session->data().user(peerId)) {
|
data.vday().v,
|
||||||
const auto &data = tlContact.data().vbirthday().data();
|
data.vmonth().v,
|
||||||
user->setBirthday(Data::Birthday(
|
data.vyear().value_or_empty()));
|
||||||
data.vday().v,
|
if (user->isSelf()
|
||||||
data.vmonth().v,
|
|| user->isInaccessible()
|
||||||
data.vyear().value_or_empty()));
|
|| user->isBlocked()) {
|
||||||
if (user->isSelf()
|
continue;
|
||||||
|| user->isInaccessible()
|
|
||||||
|| user->isBlocked()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (Data::IsBirthdayToday(user->birthday())) {
|
|
||||||
today.push_back(peerToUser(user->id));
|
|
||||||
}
|
|
||||||
users.push_back(peerToUser(user->id));
|
|
||||||
}
|
}
|
||||||
|
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);
|
_contactBirthdays = std::move(users);
|
||||||
consumer.put_next_copy(_contactBirthdays);
|
_contactBirthdaysToday = std::move(today);
|
||||||
}).fail([=](const MTP::Error &error) {
|
done();
|
||||||
_contactBirthdaysRequestId = 0;
|
}).fail([=](const MTP::Error &error) {
|
||||||
_contactBirthdaysLastDayRequest = QDate::currentDate().day();
|
_contactBirthdaysRequestId = 0;
|
||||||
_contactBirthdays = {};
|
_contactBirthdaysLastDayRequest = QDate::currentDate().day();
|
||||||
_contactBirthdaysToday = {};
|
_contactBirthdays = {};
|
||||||
consumer.put_next({});
|
_contactBirthdaysToday = {};
|
||||||
}).send();
|
done();
|
||||||
|
}).send();
|
||||||
return lifetime;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<UserIds> PromoSuggestions::knownContactBirthdays() const {
|
std::optional<UserIds> PromoSuggestions::knownContactBirthdays() const {
|
||||||
|
|
|
@ -45,8 +45,7 @@ public:
|
||||||
rpl::producer<> value() const;
|
rpl::producer<> value() const;
|
||||||
// Create rpl::producer<> refreshed() const; on memand.
|
// Create rpl::producer<> refreshed() const; on memand.
|
||||||
|
|
||||||
[[nodiscard]] rpl::producer<std::vector<UserId>> contactBirthdays(
|
void requestContactBirthdays(Fn<void()> done, bool force = false);
|
||||||
bool force = false);
|
|
||||||
[[nodiscard]] auto knownContactBirthdays() const
|
[[nodiscard]] auto knownContactBirthdays() const
|
||||||
-> std::optional<std::vector<UserId>>;
|
-> std::optional<std::vector<UserId>>;
|
||||||
[[nodiscard]] auto knownBirthdaysToday() const
|
[[nodiscard]] auto knownBirthdaysToday() const
|
||||||
|
|
|
@ -240,8 +240,7 @@ rpl::producer<Ui::SlideWrap<Ui::RpWidget>*> TopBarSuggestionValue(
|
||||||
return;
|
return;
|
||||||
} else if (session->premiumCanBuy()
|
} else if (session->premiumCanBuy()
|
||||||
&& promo->current(kSugBirthdayContacts.utf8())) {
|
&& promo->current(kSugBirthdayContacts.utf8())) {
|
||||||
promo->contactBirthdays(
|
promo->requestContactBirthdays(crl::guard(content, [=] {
|
||||||
) | rpl::start_with_next(crl::guard(content, [=] {
|
|
||||||
const auto users = promo->knownBirthdaysToday().value_or(
|
const auto users = promo->knownBirthdaysToday().value_or(
|
||||||
std::vector<UserId>());
|
std::vector<UserId>());
|
||||||
if (users.empty()) {
|
if (users.empty()) {
|
||||||
|
@ -369,7 +368,7 @@ rpl::producer<Ui::SlideWrap<Ui::RpWidget>*> TopBarSuggestionValue(
|
||||||
|
|
||||||
state->desiredWrapToggle.force_assign(
|
state->desiredWrapToggle.force_assign(
|
||||||
Toggle{ true, anim::type::normal });
|
Toggle{ true, anim::type::normal });
|
||||||
}), state->giftsLifetime);
|
}));
|
||||||
return;
|
return;
|
||||||
} else if (promo->current(kSugSetBirthday.utf8())
|
} else if (promo->current(kSugSetBirthday.utf8())
|
||||||
&& !Data::IsBirthdayToday(session->user()->birthday())) {
|
&& !Data::IsBirthdayToday(session->user()->birthday())) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue