mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Don't use MTP* for PeerSettings flags.
This commit is contained in:
parent
878c890bc2
commit
f22e68fc32
8 changed files with 55 additions and 52 deletions
|
@ -1817,11 +1817,7 @@ void Updates::feedUpdate(const MTPUpdate &update) {
|
||||||
const auto &d = update.c_updatePeerSettings();
|
const auto &d = update.c_updatePeerSettings();
|
||||||
const auto peerId = peerFromMTP(d.vpeer());
|
const auto peerId = peerFromMTP(d.vpeer());
|
||||||
if (const auto peer = session().data().peerLoaded(peerId)) {
|
if (const auto peer = session().data().peerLoaded(peerId)) {
|
||||||
const auto settings = d.vsettings().match([](
|
peer->setSettings(d.vsettings());
|
||||||
const MTPDpeerSettings &data) {
|
|
||||||
return data.vflags().v;
|
|
||||||
});
|
|
||||||
peer->setSettings(settings);
|
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
|
|
@ -1224,9 +1224,7 @@ void ApiWrap::requestPeerSettings(not_null<PeerData*> peer) {
|
||||||
request(MTPmessages_GetPeerSettings(
|
request(MTPmessages_GetPeerSettings(
|
||||||
peer->input
|
peer->input
|
||||||
)).done([=](const MTPPeerSettings &result) {
|
)).done([=](const MTPPeerSettings &result) {
|
||||||
peer->setSettings(result.match([&](const MTPDpeerSettings &data) {
|
peer->setSettings(result);
|
||||||
return data.vflags().v;
|
|
||||||
}));
|
|
||||||
_requestedPeerSettings.erase(peer);
|
_requestedPeerSettings.erase(peer);
|
||||||
}).fail([=](const MTP::Error &error) {
|
}).fail([=](const MTP::Error &error) {
|
||||||
_requestedPeerSettings.erase(peer);
|
_requestedPeerSettings.erase(peer);
|
||||||
|
|
|
@ -60,10 +60,9 @@ void SendRequest(
|
||||||
user->username);
|
user->username);
|
||||||
user->session().api().applyUpdates(result);
|
user->session().api().applyUpdates(result);
|
||||||
if (const auto settings = user->settings()) {
|
if (const auto settings = user->settings()) {
|
||||||
using Flag = MTPDpeerSettings::Flag;
|
const auto flags = PeerSetting::AddContact
|
||||||
const auto flags = Flag::f_add_contact
|
| PeerSetting::BlockContact
|
||||||
| Flag::f_block_contact
|
| PeerSetting::ReportSpam;
|
||||||
| Flag::f_report_spam;
|
|
||||||
user->setSettings(*settings & ~flags);
|
user->setSettings(*settings & ~flags);
|
||||||
}
|
}
|
||||||
if (box) {
|
if (box) {
|
||||||
|
@ -241,9 +240,8 @@ void Controller::setupWarning() {
|
||||||
|
|
||||||
void Controller::setupSharePhoneNumber() {
|
void Controller::setupSharePhoneNumber() {
|
||||||
const auto settings = _user->settings();
|
const auto settings = _user->settings();
|
||||||
using Setting = MTPDpeerSettings::Flag;
|
|
||||||
if (!settings
|
if (!settings
|
||||||
|| !((*settings) & Setting::f_need_contacts_exception)) {
|
|| !((*settings) & PeerSetting::NeedContactsException)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_sharePhone = _box->addRow(
|
_sharePhone = _box->addRow(
|
||||||
|
|
|
@ -574,6 +574,22 @@ void PeerData::checkFolder(FolderId folderId) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PeerData::setSettings(const MTPPeerSettings &data) {
|
||||||
|
data.match([&](const MTPDpeerSettings &data) {
|
||||||
|
using Flag = PeerSetting;
|
||||||
|
setSettings((data.is_add_contact() ? Flag::AddContact : Flag())
|
||||||
|
| (data.is_autoarchived() ? Flag::AutoArchived : Flag())
|
||||||
|
| (data.is_block_contact() ? Flag::BlockContact : Flag())
|
||||||
|
//| (data.is_invite_members() ? Flag::InviteMembers : Flag())
|
||||||
|
| (data.is_need_contacts_exception()
|
||||||
|
? Flag::NeedContactsException
|
||||||
|
: Flag())
|
||||||
|
//| (data.is_report_geo() ? Flag::ReportGeo : Flag())
|
||||||
|
| (data.is_report_spam() ? Flag::ReportSpam : Flag())
|
||||||
|
| (data.is_share_contact() ? Flag::ShareContact : Flag()));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void PeerData::fillNames() {
|
void PeerData::fillNames() {
|
||||||
_nameWords.clear();
|
_nameWords.clear();
|
||||||
_nameFirstLetters.clear();
|
_nameFirstLetters.clear();
|
||||||
|
|
|
@ -188,25 +188,26 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class PeerData {
|
enum class PeerSetting {
|
||||||
private:
|
ReportSpam = (1 << 0),
|
||||||
static constexpr auto kSettingsUnknown = MTPDpeerSettings::Flag(1U << 9);
|
AddContact = (1 << 1),
|
||||||
|
BlockContact = (1 << 2),
|
||||||
|
ShareContact = (1 << 3),
|
||||||
|
NeedContactsException = (1 << 4),
|
||||||
|
AutoArchived = (1 << 5),
|
||||||
|
Unknown = (1 << 6),
|
||||||
|
};
|
||||||
|
inline constexpr bool is_flag_type(PeerSetting) { return true; };
|
||||||
|
using PeerSettings = base::flags<PeerSetting>;
|
||||||
|
|
||||||
|
class PeerData {
|
||||||
protected:
|
protected:
|
||||||
PeerData(not_null<Data::Session*> owner, PeerId id);
|
PeerData(not_null<Data::Session*> owner, PeerId id);
|
||||||
PeerData(const PeerData &other) = delete;
|
PeerData(const PeerData &other) = delete;
|
||||||
PeerData &operator=(const PeerData &other) = delete;
|
PeerData &operator=(const PeerData &other) = delete;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static constexpr auto kEssentialSettings = 0
|
using Settings = Data::Flags<PeerSettings>;
|
||||||
| MTPDpeerSettings::Flag::f_report_spam
|
|
||||||
| MTPDpeerSettings::Flag::f_add_contact
|
|
||||||
| MTPDpeerSettings::Flag::f_block_contact
|
|
||||||
| MTPDpeerSettings::Flag::f_share_contact
|
|
||||||
| kSettingsUnknown;
|
|
||||||
using Settings = Data::Flags<
|
|
||||||
MTPDpeerSettings::Flags,
|
|
||||||
kEssentialSettings.value()>;
|
|
||||||
|
|
||||||
virtual ~PeerData();
|
virtual ~PeerData();
|
||||||
|
|
||||||
|
@ -414,20 +415,22 @@ public:
|
||||||
|
|
||||||
void checkFolder(FolderId folderId);
|
void checkFolder(FolderId folderId);
|
||||||
|
|
||||||
void setSettings(MTPDpeerSettings::Flags which) {
|
void setSettings(PeerSettings which) {
|
||||||
_settings.set(which);
|
_settings.set(which);
|
||||||
}
|
}
|
||||||
auto settings() const {
|
auto settings() const {
|
||||||
return (_settings.current() & kSettingsUnknown)
|
return (_settings.current() & PeerSetting::Unknown)
|
||||||
? std::nullopt
|
? std::nullopt
|
||||||
: std::make_optional(_settings.current());
|
: std::make_optional(_settings.current());
|
||||||
}
|
}
|
||||||
auto settingsValue() const {
|
auto settingsValue() const {
|
||||||
return (_settings.current() & kSettingsUnknown)
|
return (_settings.current() & PeerSetting::Unknown)
|
||||||
? _settings.changes()
|
? _settings.changes()
|
||||||
: (_settings.value() | rpl::type_erased());
|
: (_settings.value() | rpl::type_erased());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setSettings(const MTPPeerSettings &data);
|
||||||
|
|
||||||
enum class BlockStatus : char {
|
enum class BlockStatus : char {
|
||||||
Unknown,
|
Unknown,
|
||||||
Blocked,
|
Blocked,
|
||||||
|
@ -503,7 +506,7 @@ private:
|
||||||
TimeId _ttlPeriod = 0;
|
TimeId _ttlPeriod = 0;
|
||||||
bool _hasPinnedMessages = false;
|
bool _hasPinnedMessages = false;
|
||||||
|
|
||||||
Settings _settings = { kSettingsUnknown };
|
Settings _settings = PeerSettings(PeerSetting::Unknown);
|
||||||
BlockStatus _blockStatus = BlockStatus::Unknown;
|
BlockStatus _blockStatus = BlockStatus::Unknown;
|
||||||
LoadedStatus _loadedStatus = LoadedStatus::Not;
|
LoadedStatus _loadedStatus = LoadedStatus::Not;
|
||||||
|
|
||||||
|
|
|
@ -192,11 +192,7 @@ void ApplyUserUpdate(not_null<UserData*> user, const MTPDuserFull &update) {
|
||||||
if (const auto photo = update.vprofile_photo()) {
|
if (const auto photo = update.vprofile_photo()) {
|
||||||
user->owner().processPhoto(*photo);
|
user->owner().processPhoto(*photo);
|
||||||
}
|
}
|
||||||
const auto settings = update.vsettings().match([&](
|
user->setSettings(update.vsettings());
|
||||||
const MTPDpeerSettings &data) {
|
|
||||||
return data.vflags().v;
|
|
||||||
});
|
|
||||||
user->setSettings(settings);
|
|
||||||
user->session().api().applyNotifySettings(
|
user->session().api().applyNotifySettings(
|
||||||
MTP_inputNotifyPeer(user->input),
|
MTP_inputNotifyPeer(user->input),
|
||||||
update.vnotify_settings());
|
update.vnotify_settings());
|
||||||
|
|
|
@ -40,15 +40,14 @@ bool BarCurrentlyHidden(not_null<PeerData*> peer) {
|
||||||
} else if (!(*settings)) {
|
} else if (!(*settings)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
using Setting = MTPDpeerSettings::Flag;
|
|
||||||
if (const auto user = peer->asUser()) {
|
if (const auto user = peer->asUser()) {
|
||||||
if (user->isBlocked()) {
|
if (user->isBlocked()) {
|
||||||
return true;
|
return true;
|
||||||
} else if (user->isContact()
|
} else if (user->isContact()
|
||||||
&& !((*settings) & Setting::f_share_contact)) {
|
&& !((*settings) & PeerSetting::ShareContact)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (!((*settings) & Setting::f_report_spam)) {
|
} else if (!((*settings) & PeerSetting::ReportSpam)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -231,7 +230,6 @@ void ContactStatus::setupWidgets(not_null<Ui::RpWidget*> parent) {
|
||||||
auto ContactStatus::PeerState(not_null<PeerData*> peer)
|
auto ContactStatus::PeerState(not_null<PeerData*> peer)
|
||||||
-> rpl::producer<State> {
|
-> rpl::producer<State> {
|
||||||
using SettingsChange = PeerData::Settings::Change;
|
using SettingsChange = PeerData::Settings::Change;
|
||||||
using Setting = MTPDpeerSettings::Flag;
|
|
||||||
if (const auto user = peer->asUser()) {
|
if (const auto user = peer->asUser()) {
|
||||||
using FlagsChange = UserData::Flags::Change;
|
using FlagsChange = UserData::Flags::Change;
|
||||||
using Flag = UserDataFlag;
|
using Flag = UserDataFlag;
|
||||||
|
@ -250,16 +248,16 @@ auto ContactStatus::PeerState(not_null<PeerData*> peer)
|
||||||
if (flags.value & Flag::Blocked) {
|
if (flags.value & Flag::Blocked) {
|
||||||
return State::None;
|
return State::None;
|
||||||
} else if (user->isContact()) {
|
} else if (user->isContact()) {
|
||||||
if (settings.value & Setting::f_share_contact) {
|
if (settings.value & PeerSetting::ShareContact) {
|
||||||
return State::SharePhoneNumber;
|
return State::SharePhoneNumber;
|
||||||
} else {
|
} else {
|
||||||
return State::None;
|
return State::None;
|
||||||
}
|
}
|
||||||
} else if (settings.value & Setting::f_autoarchived) {
|
} else if (settings.value & PeerSetting::AutoArchived) {
|
||||||
return State::UnarchiveOrBlock;
|
return State::UnarchiveOrBlock;
|
||||||
} else if (settings.value & Setting::f_block_contact) {
|
} else if (settings.value & PeerSetting::BlockContact) {
|
||||||
return State::AddOrBlock;
|
return State::AddOrBlock;
|
||||||
} else if (settings.value & Setting::f_add_contact) {
|
} else if (settings.value & PeerSetting::AddContact) {
|
||||||
return State::Add;
|
return State::Add;
|
||||||
} else {
|
} else {
|
||||||
return State::None;
|
return State::None;
|
||||||
|
@ -269,9 +267,9 @@ auto ContactStatus::PeerState(not_null<PeerData*> peer)
|
||||||
|
|
||||||
return peer->settingsValue(
|
return peer->settingsValue(
|
||||||
) | rpl::map([=](SettingsChange settings) {
|
) | rpl::map([=](SettingsChange settings) {
|
||||||
return (settings.value & Setting::f_autoarchived)
|
return (settings.value & PeerSetting::AutoArchived)
|
||||||
? State::UnarchiveOrReport
|
? State::UnarchiveOrReport
|
||||||
: (settings.value & Setting::f_report_spam)
|
: (settings.value & PeerSetting::ReportSpam)
|
||||||
? State::ReportSpam
|
? State::ReportSpam
|
||||||
: State::None;
|
: State::None;
|
||||||
});
|
});
|
||||||
|
@ -362,10 +360,9 @@ void ContactStatus::setupUnarchiveHandler(not_null<PeerData*> peer) {
|
||||||
Window::ToggleHistoryArchived(peer->owner().history(peer), false);
|
Window::ToggleHistoryArchived(peer->owner().history(peer), false);
|
||||||
peer->owner().resetNotifySettingsToDefault(peer);
|
peer->owner().resetNotifySettingsToDefault(peer);
|
||||||
if (const auto settings = peer->settings()) {
|
if (const auto settings = peer->settings()) {
|
||||||
using Flag = MTPDpeerSettings::Flag;
|
const auto flags = PeerSetting::AutoArchived
|
||||||
const auto flags = Flag::f_autoarchived
|
| PeerSetting::BlockContact
|
||||||
| Flag::f_block_contact
|
| PeerSetting::ReportSpam;
|
||||||
| Flag::f_report_spam;
|
|
||||||
peer->setSettings(*settings & ~flags);
|
peer->setSettings(*settings & ~flags);
|
||||||
}
|
}
|
||||||
}, _bar.lifetime());
|
}, _bar.lifetime());
|
||||||
|
|
|
@ -834,10 +834,9 @@ void PeerMenuBlockUserBox(
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
std::variant<v::null_t, bool> suggestReport,
|
std::variant<v::null_t, bool> suggestReport,
|
||||||
std::variant<v::null_t, ClearChat, ClearReply> suggestClear) {
|
std::variant<v::null_t, ClearChat, ClearReply> suggestClear) {
|
||||||
using Flag = MTPDpeerSettings::Flag;
|
const auto settings = peer->settings().value_or(PeerSettings(0));
|
||||||
const auto settings = peer->settings().value_or(Flag(0));
|
|
||||||
const auto reportNeeded = v::is_null(suggestReport)
|
const auto reportNeeded = v::is_null(suggestReport)
|
||||||
? ((settings & Flag::f_report_spam) != 0)
|
? ((settings & PeerSetting::ReportSpam) != 0)
|
||||||
: v::get<bool>(suggestReport);
|
: v::get<bool>(suggestReport);
|
||||||
|
|
||||||
const auto user = peer->asUser();
|
const auto user = peer->asUser();
|
||||||
|
|
Loading…
Add table
Reference in a new issue