Show custom ranks, allow toggling on.

This commit is contained in:
John Preston
2026-02-10 16:39:56 +04:00
parent 62d32a1bdf
commit 7969795a01
18 changed files with 270 additions and 50 deletions
@@ -405,6 +405,7 @@ private:
std::optional<bool> signatures;
std::optional<bool> signatureProfiles;
std::optional<bool> noForwards;
std::optional<bool> customRanks;
std::optional<bool> joinToWrite;
std::optional<bool> requestToJoin;
std::optional<ChannelData*> discussionLink;
@@ -465,6 +466,7 @@ private:
[[nodiscard]] bool validateAutotranslate(Saving &to) const;
[[nodiscard]] bool validateSignatures(Saving &to) const;
[[nodiscard]] bool validateForwards(Saving &to) const;
[[nodiscard]] bool validateCustomRanks(Saving &to) const;
[[nodiscard]] bool validateJoinToWrite(Saving &to) const;
[[nodiscard]] bool validateRequestToJoin(Saving &to) const;
@@ -480,6 +482,7 @@ private:
void saveAutotranslate();
void saveSignatures();
void saveForwards();
void saveCustomRanks();
void saveJoinToWrite();
void saveRequestToJoin();
void savePhoto();
@@ -999,6 +1002,11 @@ void Controller::fillPrivacyTypeButton() {
? _peer->asChannel()->usernames()
: std::vector<QString>()),
.noForwards = !_peer->allowsForwarding(),
.customRanks = (_peer->isChat()
? _peer->asChat()->customRanksEnabled()
: _peer->isChannel()
? _peer->asChannel()->customRanksEnabled()
: false),
.joinToWrite = (_peer->isMegagroup()
&& _peer->asChannel()->joinToWrite()),
.requestToJoin = (_peer->isMegagroup()
@@ -2096,6 +2104,7 @@ std::optional<Controller::Saving> Controller::validate() const {
&& validateAutotranslate(result)
&& validateSignatures(result)
&& validateForwards(result)
&& validateCustomRanks(result)
&& validateJoinToWrite(result)
&& validateRequestToJoin(result)) {
return result;
@@ -2218,6 +2227,14 @@ bool Controller::validateForwards(Saving &to) const {
return true;
}
bool Controller::validateCustomRanks(Saving &to) const {
if (!_typeDataSavedValue) {
return true;
}
to.customRanks = _typeDataSavedValue->customRanks;
return true;
}
bool Controller::validateJoinToWrite(Saving &to) const {
if (!_typeDataSavedValue) {
return true;
@@ -2253,6 +2270,7 @@ void Controller::save() {
pushSaveStage([=] { saveAutotranslate(); });
pushSaveStage([=] { saveSignatures(); });
pushSaveStage([=] { saveForwards(); });
pushSaveStage([=] { saveCustomRanks(); });
pushSaveStage([=] { saveJoinToWrite(); });
pushSaveStage([=] { saveRequestToJoin(); });
pushSaveStage([=] { savePhoto(); });
@@ -2761,6 +2779,32 @@ void Controller::saveForwards() {
}).send();
}
void Controller::saveCustomRanks() {
const auto isEnabled = _peer->isChat()
? _peer->asChat()->customRanksEnabled()
: _peer->isChannel()
? _peer->asChannel()->customRanksEnabled()
: false;
if (!_savingData.customRanks
|| *_savingData.customRanks == isEnabled) {
return continueSave();
}
_api.request(MTPmessages_ToggleChatCustomRanks(
_peer->input(),
MTP_bool(*_savingData.customRanks)
)).done([=](const MTPUpdates &result) {
_peer->session().api().applyUpdates(result);
continueSave();
}).fail([=](const MTP::Error &error) {
if (error.type() == u"CHAT_NOT_MODIFIED"_q) {
continueSave();
} else {
_navigation->showToast(error.type());
cancelSave();
}
}).send();
}
void Controller::saveJoinToWrite() {
const auto joinToWrite = _peer->isMegagroup()
&& _peer->asChannel()->joinToWrite();