mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-08-31 06:26:18 +00:00
Provide unavailable reasons for messages.
This commit is contained in:
@@ -82,6 +82,50 @@ UnavailableReason UnavailableReason::Sensitive() {
|
||||
return { u"sensitive"_q };
|
||||
}
|
||||
|
||||
QString UnavailableReason::Compute(
|
||||
not_null<Main::Session*> session,
|
||||
const std::vector<UnavailableReason> &list) {
|
||||
const auto &config = session->appConfig();
|
||||
const auto skip = config.get<std::vector<QString>>(
|
||||
"ignore_restriction_reasons",
|
||||
std::vector<QString>());
|
||||
auto &&filtered = ranges::views::all(
|
||||
list
|
||||
) | ranges::views::filter([&](const Data::UnavailableReason &reason) {
|
||||
return !reason.sensitive()
|
||||
&& !ranges::contains(skip, reason.reason);
|
||||
});
|
||||
const auto first = filtered.begin();
|
||||
return (first != filtered.end()) ? first->text : QString();
|
||||
}
|
||||
|
||||
// We should get a full restriction in "{full}: {reason}" format and we
|
||||
// need to find an "-all" tag in {full}, otherwise ignore this restriction.
|
||||
std::vector<UnavailableReason> UnavailableReason::Extract(
|
||||
const MTPvector<MTPRestrictionReason> *list) {
|
||||
if (!list) {
|
||||
return {};
|
||||
}
|
||||
return ranges::views::all(
|
||||
list->v
|
||||
) | ranges::views::filter([](const MTPRestrictionReason &restriction) {
|
||||
return restriction.match([&](const MTPDrestrictionReason &data) {
|
||||
const auto platform = data.vplatform().v;
|
||||
return false
|
||||
#ifdef OS_MAC_STORE
|
||||
|| (platform == "ios"_q)
|
||||
#elif defined OS_WIN_STORE // OS_MAC_STORE
|
||||
|| (platform == "ms"_q)
|
||||
#endif // OS_MAC_STORE || OS_WIN_STORE
|
||||
|| (platform == "all"_q);
|
||||
});
|
||||
}) | ranges::views::transform([](const MTPRestrictionReason &restriction) {
|
||||
return restriction.match([&](const MTPDrestrictionReason &data) {
|
||||
return UnavailableReason{ qs(data.vreason()), qs(data.vtext()) };
|
||||
});
|
||||
}) | ranges::to_vector;
|
||||
}
|
||||
|
||||
bool ApplyBotMenuButton(
|
||||
not_null<BotInfo*> info,
|
||||
const MTPBotMenuButton *button) {
|
||||
@@ -505,19 +549,9 @@ auto PeerData::unavailableReasons() const
|
||||
}
|
||||
|
||||
QString PeerData::computeUnavailableReason() const {
|
||||
const auto &list = unavailableReasons();
|
||||
const auto &config = session().appConfig();
|
||||
const auto skip = config.get<std::vector<QString>>(
|
||||
"ignore_restriction_reasons",
|
||||
std::vector<QString>());
|
||||
auto &&filtered = ranges::views::all(
|
||||
list
|
||||
) | ranges::views::filter([&](const Data::UnavailableReason &reason) {
|
||||
return !reason.sensitive()
|
||||
&& !ranges::contains(skip, reason.reason);
|
||||
});
|
||||
const auto first = filtered.begin();
|
||||
return (first != filtered.end()) ? first->text : QString();
|
||||
return Data::UnavailableReason::Compute(
|
||||
&session(),
|
||||
unavailableReasons());
|
||||
}
|
||||
|
||||
bool PeerData::isUnavailableSensitive() const {
|
||||
|
Reference in New Issue
Block a user