Handle already-premium state in gift link usage.
This commit is contained in:
parent
d35c8232d2
commit
d21418cf04
|
@ -1103,7 +1103,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_edit_privacy_everyone" = "Everybody";
|
"lng_edit_privacy_everyone" = "Everybody";
|
||||||
"lng_edit_privacy_contacts" = "My contacts";
|
"lng_edit_privacy_contacts" = "My contacts";
|
||||||
"lng_edit_privacy_close_friends" = "Close friends";
|
"lng_edit_privacy_close_friends" = "Close friends";
|
||||||
"lng_edit_privacy_contacts_and_premium" = "Contacts and Premium";
|
"lng_edit_privacy_contacts_and_premium" = "Contacts & Premium";
|
||||||
"lng_edit_privacy_nobody" = "Nobody";
|
"lng_edit_privacy_nobody" = "Nobody";
|
||||||
"lng_edit_privacy_premium" = "Premium users";
|
"lng_edit_privacy_premium" = "Premium users";
|
||||||
"lng_edit_privacy_exceptions" = "Add exceptions";
|
"lng_edit_privacy_exceptions" = "Add exceptions";
|
||||||
|
@ -2687,6 +2687,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_gift_link_also_send" = "You can also {link} to a friend as a gift.";
|
"lng_gift_link_also_send" = "You can also {link} to a friend as a gift.";
|
||||||
"lng_gift_link_also_send_link" = "send this link";
|
"lng_gift_link_also_send_link" = "send this link";
|
||||||
"lng_gift_link_use" = "Use Link";
|
"lng_gift_link_use" = "Use Link";
|
||||||
|
"lng_gift_link_already_title" = "You already have Telegram Premium";
|
||||||
|
"lng_gift_link_already_about" = "You can activate this link after {date} or {link} to a friend.";
|
||||||
|
"lng_gift_link_already_link" = "send the link";
|
||||||
"lng_gift_link_used_title" = "Used Gift Link";
|
"lng_gift_link_used_title" = "Used Gift Link";
|
||||||
"lng_gift_link_used_about" = "This link was used to activate\na **Telegram Premium** subscription.";
|
"lng_gift_link_used_about" = "This link was used to activate\na **Telegram Premium** subscription.";
|
||||||
"lng_gift_link_used_footer" = "This link was used on {date}.";
|
"lng_gift_link_used_footer" = "This link was used on {date}.";
|
||||||
|
|
|
@ -45,6 +45,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "ui/rect.h"
|
#include "ui/rect.h"
|
||||||
#include "ui/vertical_list.h"
|
#include "ui/vertical_list.h"
|
||||||
#include "ui/text/text_utilities.h"
|
#include "ui/text/text_utilities.h"
|
||||||
|
#include "ui/toast/toast.h"
|
||||||
#include "ui/widgets/checkbox.h"
|
#include "ui/widgets/checkbox.h"
|
||||||
#include "ui/widgets/gradient_round_button.h"
|
#include "ui/widgets/gradient_round_button.h"
|
||||||
#include "ui/wrap/padding_wrap.h"
|
#include "ui/wrap/padding_wrap.h"
|
||||||
|
@ -892,6 +893,52 @@ void AddTable(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShareWithFriend(
|
||||||
|
not_null<Window::SessionNavigation*> navigation,
|
||||||
|
const QString &slug) {
|
||||||
|
const auto chosen = [=](not_null<Data::Thread*> thread) {
|
||||||
|
const auto content = navigation->parentController()->content();
|
||||||
|
return content->shareUrl(
|
||||||
|
thread,
|
||||||
|
MakeGiftCodeLink(&navigation->session(), slug).link,
|
||||||
|
QString());
|
||||||
|
};
|
||||||
|
Window::ShowChooseRecipientBox(navigation, chosen);
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] void ShowAlreadyPremiumToast(
|
||||||
|
not_null<Window::SessionNavigation*> navigation,
|
||||||
|
const QString &slug,
|
||||||
|
TimeId date) {
|
||||||
|
const auto instance = std::make_shared<
|
||||||
|
base::weak_ptr<Ui::Toast::Instance>
|
||||||
|
>();
|
||||||
|
const auto shareLink = [=](
|
||||||
|
const ClickHandlerPtr &,
|
||||||
|
Qt::MouseButton button) {
|
||||||
|
if (button == Qt::LeftButton) {
|
||||||
|
if (const auto strong = instance->get()) {
|
||||||
|
strong->hideAnimated();
|
||||||
|
}
|
||||||
|
ShareWithFriend(navigation, slug);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
*instance = navigation->showToast({
|
||||||
|
.title = tr::lng_gift_link_already_title(tr::now),
|
||||||
|
.text = tr::lng_gift_link_already_about(
|
||||||
|
tr::now,
|
||||||
|
lt_date,
|
||||||
|
Ui::Text::Bold(langDateTime(base::unixtime::parse(date))),
|
||||||
|
lt_link,
|
||||||
|
Ui::Text::Link(
|
||||||
|
Ui::Text::Bold(tr::lng_gift_link_already_link(tr::now))),
|
||||||
|
Ui::Text::WithEntities),
|
||||||
|
.duration = 6 * crl::time(1000),
|
||||||
|
.filter = crl::guard(navigation, shareLink),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
GiftPremiumValidator::GiftPremiumValidator(
|
GiftPremiumValidator::GiftPremiumValidator(
|
||||||
|
@ -1157,14 +1204,7 @@ void GiftCodeBox(
|
||||||
st::giveawayGiftCodeFooter),
|
st::giveawayGiftCodeFooter),
|
||||||
st::giveawayGiftCodeFooterMargin);
|
st::giveawayGiftCodeFooterMargin);
|
||||||
footer->setClickHandlerFilter([=](const auto &...) {
|
footer->setClickHandlerFilter([=](const auto &...) {
|
||||||
const auto chosen = [=](not_null<Data::Thread*> thread) {
|
ShareWithFriend(controller, slug);
|
||||||
const auto content = controller->parentController()->content();
|
|
||||||
return content->shareUrl(
|
|
||||||
thread,
|
|
||||||
MakeGiftCodeLink(&controller->session(), slug).link,
|
|
||||||
QString());
|
|
||||||
};
|
|
||||||
Window::ShowChooseRecipientBox(controller, chosen);
|
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1189,14 +1229,20 @@ void GiftCodeBox(
|
||||||
} else if (!state->sent) {
|
} else if (!state->sent) {
|
||||||
state->sent = true;
|
state->sent = true;
|
||||||
const auto done = crl::guard(box, [=](const QString &error) {
|
const auto done = crl::guard(box, [=](const QString &error) {
|
||||||
|
const auto activePrefix = u"PREMIUM_SUB_ACTIVE_UNTIL_"_q;
|
||||||
if (error.isEmpty()) {
|
if (error.isEmpty()) {
|
||||||
auto copy = state->data.current();
|
auto copy = state->data.current();
|
||||||
copy.used = base::unixtime::now();
|
copy.used = base::unixtime::now();
|
||||||
state->data = std::move(copy);
|
state->data = std::move(copy);
|
||||||
|
|
||||||
Ui::StartFireworks(box->parentWidget());
|
Ui::StartFireworks(box->parentWidget());
|
||||||
|
} else if (error.startsWith(activePrefix)) {
|
||||||
|
const auto date = error.mid(activePrefix.size()).toInt();
|
||||||
|
ShowAlreadyPremiumToast(controller, slug, date);
|
||||||
|
state->sent = false;
|
||||||
} else {
|
} else {
|
||||||
box->uiShow()->showToast(error);
|
box->uiShow()->showToast(error);
|
||||||
|
state->sent = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
controller->session().api().premium().applyGiftCode(slug, done);
|
controller->session().api().premium().applyGiftCode(slug, done);
|
||||||
|
|
Loading…
Reference in New Issue