Added serialization from TL to statistics data for supergroups.
This commit is contained in:
parent
6f27aeef10
commit
cf82e12bf4
|
@ -110,6 +110,79 @@ namespace {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] Data::SupergroupStatistics SupergroupStatisticsFromTL(
|
||||||
|
const MTPDstats_megagroupStats &data) {
|
||||||
|
using Senders = MTPStatsGroupTopPoster;
|
||||||
|
using Administrators = MTPStatsGroupTopAdmin;
|
||||||
|
using Inviters = MTPStatsGroupTopInviter;
|
||||||
|
|
||||||
|
auto topSenders = ranges::views::all(
|
||||||
|
data.vtop_posters().v
|
||||||
|
) | ranges::views::transform([&](const Senders &tl) {
|
||||||
|
return Data::StatisticsMessageSenderInfo{
|
||||||
|
.userId = UserId(tl.data().vuser_id().v),
|
||||||
|
.sentMessageCount = tl.data().vmessages().v,
|
||||||
|
.averageCharacterCount = tl.data().vavg_chars().v,
|
||||||
|
};
|
||||||
|
}) | ranges::to_vector;
|
||||||
|
auto topAdministrators = ranges::views::all(
|
||||||
|
data.vtop_admins().v
|
||||||
|
) | ranges::views::transform([&](const Administrators &tl) {
|
||||||
|
return Data::StatisticsAdministratorActionsInfo{
|
||||||
|
.userId = UserId(tl.data().vuser_id().v),
|
||||||
|
.deletedMessageCount = tl.data().vdeleted().v,
|
||||||
|
.bannedUserCount = tl.data().vkicked().v,
|
||||||
|
.restrictedUserCount = tl.data().vbanned().v,
|
||||||
|
};
|
||||||
|
}) | ranges::to_vector;
|
||||||
|
auto topInviters = ranges::views::all(
|
||||||
|
data.vtop_inviters().v
|
||||||
|
) | ranges::views::transform([&](const Inviters &tl) {
|
||||||
|
return Data::StatisticsInviterInfo{
|
||||||
|
.userId = UserId(tl.data().vuser_id().v),
|
||||||
|
.addedMemberCount = tl.data().vinvitations().v,
|
||||||
|
};
|
||||||
|
}) | ranges::to_vector;
|
||||||
|
|
||||||
|
return {
|
||||||
|
.startDate = data.vperiod().data().vmin_date().v,
|
||||||
|
.endDate = data.vperiod().data().vmax_date().v,
|
||||||
|
|
||||||
|
.memberCount = StatisticalValueFromTL(data.vmembers()),
|
||||||
|
.messageCount = StatisticalValueFromTL(data.vmessages()),
|
||||||
|
.viewerCount = StatisticalValueFromTL(data.vviewers()),
|
||||||
|
.senderCount = StatisticalValueFromTL(data.vposters()),
|
||||||
|
|
||||||
|
.memberCountGraph = StatisticalGraphFromTL(
|
||||||
|
data.vgrowth_graph()),
|
||||||
|
|
||||||
|
.joinGraph = StatisticalGraphFromTL(
|
||||||
|
data.vmembers_graph()),
|
||||||
|
|
||||||
|
.joinBySourceGraph = StatisticalGraphFromTL(
|
||||||
|
data.vnew_members_by_source_graph()),
|
||||||
|
|
||||||
|
.languageGraph = StatisticalGraphFromTL(
|
||||||
|
data.vlanguages_graph()),
|
||||||
|
|
||||||
|
.messageContentGraph = StatisticalGraphFromTL(
|
||||||
|
data.vmessages_graph()),
|
||||||
|
|
||||||
|
.actionGraph = StatisticalGraphFromTL(
|
||||||
|
data.vactions_graph()),
|
||||||
|
|
||||||
|
.dayGraph = StatisticalGraphFromTL(
|
||||||
|
data.vtop_hours_graph()),
|
||||||
|
|
||||||
|
.weekGraph = StatisticalGraphFromTL(
|
||||||
|
data.vweekdays_graph()),
|
||||||
|
|
||||||
|
.topSenders = std::move(topSenders),
|
||||||
|
.topAdministrators = std::move(topAdministrators),
|
||||||
|
.topInviters = std::move(topInviters),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
Statistics::Statistics(not_null<ApiWrap*> api)
|
Statistics::Statistics(not_null<ApiWrap*> api)
|
||||||
|
@ -135,6 +208,17 @@ rpl::producer<rpl::no_value, QString> Statistics::request(
|
||||||
}).fail([=](const MTP::Error &error) {
|
}).fail([=](const MTP::Error &error) {
|
||||||
consumer.put_error_copy(error.type());
|
consumer.put_error_copy(error.type());
|
||||||
}).send();
|
}).send();
|
||||||
|
} else {
|
||||||
|
_api.request(MTPstats_GetMegagroupStats(
|
||||||
|
MTP_flags(MTPstats_GetMegagroupStats::Flags(0)),
|
||||||
|
channel->inputChannel
|
||||||
|
)).done([=](const MTPstats_MegagroupStats &result) {
|
||||||
|
_supergroupStats = SupergroupStatisticsFromTL(result.data());
|
||||||
|
peer->owner().processUsers(result.data().vusers());
|
||||||
|
consumer.put_done();
|
||||||
|
}).fail([=](const MTP::Error &error) {
|
||||||
|
consumer.put_error_copy(error.type());
|
||||||
|
}).send();
|
||||||
}
|
}
|
||||||
|
|
||||||
return lifetime;
|
return lifetime;
|
||||||
|
@ -173,4 +257,8 @@ Data::ChannelStatistics Statistics::channelStats() const {
|
||||||
return _channelStats;
|
return _channelStats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Data::SupergroupStatistics Statistics::supergroupStats() const {
|
||||||
|
return _supergroupStats;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Api
|
} // namespace Api
|
||||||
|
|
|
@ -27,9 +27,11 @@ public:
|
||||||
float64 x);
|
float64 x);
|
||||||
|
|
||||||
[[nodiscard]] Data::ChannelStatistics channelStats() const;
|
[[nodiscard]] Data::ChannelStatistics channelStats() const;
|
||||||
|
[[nodiscard]] Data::SupergroupStatistics supergroupStats() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Data::ChannelStatistics _channelStats;
|
Data::ChannelStatistics _channelStats;
|
||||||
|
Data::SupergroupStatistics _supergroupStats;
|
||||||
MTP::Sender _api;
|
MTP::Sender _api;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue