Use server provided default stars count for direct.

This commit is contained in:
John Preston 2025-06-04 18:42:17 +04:00
parent 8654ffb6fb
commit a72782e232
3 changed files with 32 additions and 19 deletions

View file

@ -45,7 +45,6 @@ namespace {
constexpr auto kPremiumsRowId = PeerId(FakeChatId(BareId(1))).value; constexpr auto kPremiumsRowId = PeerId(FakeChatId(BareId(1))).value;
constexpr auto kMiniAppsRowId = PeerId(FakeChatId(BareId(2))).value; constexpr auto kMiniAppsRowId = PeerId(FakeChatId(BareId(2))).value;
constexpr auto kDefaultDirectMessagesPrice = 10;
constexpr auto kDefaultPrivateMessagesPrice = 10; constexpr auto kDefaultPrivateMessagesPrice = 10;
using Exceptions = Api::UserPrivacy::Exceptions; using Exceptions = Api::UserPrivacy::Exceptions;
@ -1227,24 +1226,33 @@ rpl::producer<int> SetupChargeSlider(
const auto skip = 2 * st::defaultVerticalListSkip; const auto skip = 2 * st::defaultVerticalListSkip;
Ui::AddSkip(container, skip); Ui::AddSkip(container, skip);
auto dollars = state->stars.value() | rpl::map([=](int stars) { const auto details = container->add(
const auto ratio = peer->session().appConfig().starsWithdrawRate(); object_ptr<Ui::VerticalLayout>(container));
state->stars.value() | rpl::start_with_next([=](int stars) {
while (details->count()) {
delete details->widgetAt(0);
}
if (!stars) {
Ui::AddDivider(details);
return;
}
const auto &appConfig = peer->session().appConfig();
const auto percent = appConfig.paidMessageCommission();
const auto ratio = appConfig.starsWithdrawRate();
const auto dollars = int(base::SafeRound(stars * ratio)); const auto dollars = int(base::SafeRound(stars * ratio));
return '~' + Ui::FillAmountAndCurrency(dollars, u"USD"_q); const auto amount = Ui::FillAmountAndCurrency(dollars, u"USD"_q);
}); Ui::AddDividerText(
const auto percent = peer->session().appConfig().paidMessageCommission(); details,
Ui::AddDividerText( (broadcast
container, ? tr::lng_manage_monoforum_price_about
(broadcast : group
? tr::lng_manage_monoforum_price_about ? tr::lng_rights_charge_price_about
: group : tr::lng_messages_privacy_price_about)(
? tr::lng_rights_charge_price_about lt_percent,
: tr::lng_messages_privacy_price_about)( rpl::single(QString::number(percent / 10.) + '%'),
lt_percent, lt_amount,
rpl::single(QString::number(percent / 10.) + '%'), rpl::single('~' + amount)));
lt_amount, }, details->lifetime());
std::move(dollars)));
return state->stars.value(); return state->stars.value();
} }
@ -1298,7 +1306,7 @@ void EditDirectMessagesPriceBox(
inner, inner,
channel, channel,
savedValue, savedValue,
kDefaultDirectMessagesPrice, channel->session().appConfig().paidMessageChannelStarsDefault(),
true true
) | rpl::start_with_next([=](int stars) { ) | rpl::start_with_next([=](int stars) {
*result = stars; *result = stars;

View file

@ -105,6 +105,10 @@ int AppConfig::paidMessageCommission() const {
return get<int>(u"stars_paid_message_commission_permille"_q, 850); return get<int>(u"stars_paid_message_commission_permille"_q, 850);
} }
int AppConfig::paidMessageChannelStarsDefault() const {
return get<int>(u"stars_paid_messages_channel_amount_default"_q, 10);
}
int AppConfig::pinnedGiftsLimit() const { int AppConfig::pinnedGiftsLimit() const {
return get<int>(u"stargifts_pinned_to_top_limit"_q, 6); return get<int>(u"stargifts_pinned_to_top_limit"_q, 6);
} }

View file

@ -71,6 +71,7 @@ public:
[[nodiscard]] bool paidMessagesAvailable() const; [[nodiscard]] bool paidMessagesAvailable() const;
[[nodiscard]] int paidMessageStarsMax() const; [[nodiscard]] int paidMessageStarsMax() const;
[[nodiscard]] int paidMessageCommission() const; [[nodiscard]] int paidMessageCommission() const;
[[nodiscard]] int paidMessageChannelStarsDefault() const;
[[nodiscard]] int pinnedGiftsLimit() const; [[nodiscard]] int pinnedGiftsLimit() const;