Added api support of flag to view credits stats from full channel.

This commit is contained in:
23rd 2024-07-14 22:59:27 +03:00 committed by John Preston
parent 6818b8d8dc
commit 1d5e4040f4
4 changed files with 18 additions and 4 deletions

View file

@ -1089,7 +1089,8 @@ void ApplyChannelUpdate(
| Flag::CanGetStatistics | Flag::CanGetStatistics
| Flag::ViewAsMessages | Flag::ViewAsMessages
| Flag::CanViewRevenue | Flag::CanViewRevenue
| Flag::PaidMediaAllowed; | Flag::PaidMediaAllowed
| Flag::CanViewCreditsRevenue;
channel->setFlags((channel->flags() & ~mask) channel->setFlags((channel->flags() & ~mask)
| (update.is_can_set_username() ? Flag::CanSetUsername : Flag()) | (update.is_can_set_username() ? Flag::CanSetUsername : Flag())
| (update.is_can_view_participants() | (update.is_can_view_participants()
@ -1107,7 +1108,10 @@ void ApplyChannelUpdate(
? Flag::ViewAsMessages ? Flag::ViewAsMessages
: Flag()) : Flag())
| (update.is_paid_media_allowed() ? Flag::PaidMediaAllowed : Flag()) | (update.is_paid_media_allowed() ? Flag::PaidMediaAllowed : Flag())
| (update.is_can_view_revenue() ? Flag::CanViewRevenue : Flag())); | (update.is_can_view_revenue() ? Flag::CanViewRevenue : Flag())
| (update.is_can_view_stars_revenue()
? Flag::CanViewCreditsRevenue
: Flag()));
channel->setUserpicPhoto(update.vchat_photo()); channel->setUserpicPhoto(update.vchat_photo());
if (const auto migratedFrom = update.vmigrated_from_chat_id()) { if (const auto migratedFrom = update.vmigrated_from_chat_id()) {
channel->addFlags(Flag::Megagroup); channel->addFlags(Flag::Megagroup);

View file

@ -67,6 +67,7 @@ enum class ChannelDataFlag : uint64 {
SimilarExpanded = (1ULL << 31), SimilarExpanded = (1ULL << 31),
CanViewRevenue = (1ULL << 32), CanViewRevenue = (1ULL << 32),
PaidMediaAllowed = (1ULL << 33), PaidMediaAllowed = (1ULL << 33),
CanViewCreditsRevenue = (1ULL << 34),
}; };
inline constexpr bool is_flag_type(ChannelDataFlag) { return true; }; inline constexpr bool is_flag_type(ChannelDataFlag) { return true; };
using ChannelDataFlags = base::flags<ChannelDataFlag>; using ChannelDataFlags = base::flags<ChannelDataFlag>;

View file

@ -281,6 +281,9 @@ void InnerWidget::load() {
rpl::lifetime apiPremiumBotLifetime; rpl::lifetime apiPremiumBotLifetime;
}; };
const auto state = lifetime().make_state<State>(_peer); const auto state = lifetime().make_state<State>(_peer);
using ChannelFlag = ChannelDataFlag;
const auto canViewCredits = !_peer->isChannel()
|| (_peer->asChannel()->flags() & ChannelFlag::CanViewCreditsRevenue);
Info::Statistics::FillLoading( Info::Statistics::FillLoading(
this, this,
@ -363,7 +366,11 @@ void InnerWidget::load() {
_state.premiumBotId = bot->id; _state.premiumBotId = bot->id;
state->apiCredits.request( state->apiCredits.request(
) | rpl::start_with_error_done([=](const QString &error) { ) | rpl::start_with_error_done([=](const QString &error) {
fail(error); if (canViewCredits) {
fail(error);
} else {
_state.creditsEarn = {};
}
finish(); finish();
}, [=] { }, [=] {
_state.creditsEarn = state->apiCredits.data(); _state.creditsEarn = state->apiCredits.data();

View file

@ -1090,6 +1090,8 @@ void Filler::addViewStatistics() {
using Flag = ChannelDataFlag; using Flag = ChannelDataFlag;
const auto canGetStats = (channel->flags() & Flag::CanGetStatistics); const auto canGetStats = (channel->flags() & Flag::CanGetStatistics);
const auto canViewEarn = (channel->flags() & Flag::CanViewRevenue); const auto canViewEarn = (channel->flags() & Flag::CanViewRevenue);
const auto canViewCreditsEarn
= (channel->flags() & Flag::CanViewCreditsRevenue);
if (canGetStats) { if (canGetStats) {
_addAction(tr::lng_stats_title(tr::now), [=] { _addAction(tr::lng_stats_title(tr::now), [=] {
if (const auto strong = weak.get()) { if (const auto strong = weak.get()) {
@ -1107,7 +1109,7 @@ void Filler::addViewStatistics() {
} }
}, &st::menuIconBoosts); }, &st::menuIconBoosts);
} }
if (canViewEarn) { if (canViewEarn || canViewCreditsEarn) {
_addAction(tr::lng_channel_earn_title(tr::now), [=] { _addAction(tr::lng_channel_earn_title(tr::now), [=] {
if (const auto strong = weak.get()) { if (const auto strong = weak.get()) {
controller->showSection(Info::ChannelEarn::Make(peer)); controller->showSection(Info::ChannelEarn::Make(peer));