Use isConstant bool instead of ContactStatus enum.

This commit is contained in:
John Preston 2019-06-06 19:48:42 +03:00
parent 14b82698f8
commit 30dea3a2e7
9 changed files with 35 additions and 71 deletions

View File

@ -743,8 +743,7 @@ void ApiWrap::requestContacts() {
const auto userId = contact.c_contact().vuser_id.v; const auto userId = contact.c_contact().vuser_id.v;
if (userId == _session->userId()) { if (userId == _session->userId()) {
_session->user()->setContactStatus( _session->user()->setIsContact(true);
UserData::ContactStatus::Contact);
} }
} }
_session->data().contactsLoaded() = true; _session->data().contactsLoaded() = true;

View File

@ -362,8 +362,7 @@ void AddContactBox::onImportDone(const MTPcontacts_ImportedContacts &res) {
return nullptr; return nullptr;
}(); }();
if (user) { if (user) {
if (user->contactStatus() == UserData::ContactStatus::Contact if (user->isContact() || user->session().supportMode()) {
|| user->session().supportMode()) {
Ui::showPeerHistory(user, ShowAtTheEndMsgId); Ui::showPeerHistory(user, ShowAtTheEndMsgId);
} }
Ui::hideLayer(); Ui::hideLayer();

View File

@ -309,7 +309,7 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
} }
result->setBotInfoVersion(-1); result->setBotInfoVersion(-1);
status = &emptyStatus; status = &emptyStatus;
result->setContactStatus(UserData::ContactStatus::PhoneUnknown); result->setIsContact(false);
if (canShareThisContact != result->canShareThisContactFast()) { if (canShareThisContact != result->canShareThisContactFast()) {
update.flags |= UpdateFlag::UserCanShareContact; update.flags |= UpdateFlag::UserCanShareContact;
} }
@ -371,15 +371,16 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
&& !data.is_mutual_contact(); && !data.is_mutual_contact();
auto showPhoneChanged = !result->isServiceUser() auto showPhoneChanged = !result->isServiceUser()
&& !data.is_self() && !data.is_self()
&& ((showPhone && ((showPhone && result->isContact())
&& result->contactStatus() == UserData::ContactStatus::Contact)
|| (!showPhone || (!showPhone
&& result->contactStatus() == UserData::ContactStatus::CanAdd)); && !result->isContact()
&& !result->phone().isEmpty()));
if (minimal) { if (minimal) {
showPhoneChanged = false; showPhoneChanged = false;
showPhone = !result->isServiceUser() showPhone = !result->isServiceUser()
&& (result->id != _session->userPeerId()) && !result->isContact()
&& (result->contactStatus() == UserData::ContactStatus::CanAdd); && !result->phone().isEmpty()
&& (result->id != _session->userPeerId());
} }
// see also Local::readPeer // see also Local::readPeer
@ -416,11 +417,8 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
} else { } else {
result->setBotInfoVersion(-1); result->setBotInfoVersion(-1);
} }
result->setContactStatus((data.is_contact() || data.is_mutual_contact()) result->setIsContact(data.is_contact()
? UserData::ContactStatus::Contact || data.is_mutual_contact());
: result->phone().isEmpty()
? UserData::ContactStatus::PhoneUnknown
: UserData::ContactStatus::CanAdd);
} }
if (canShareThisContact != result->canShareThisContactFast()) { if (canShareThisContact != result->canShareThisContactFast()) {
@ -448,11 +446,6 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
} }
} }
if (result->contactStatus() == UserData::ContactStatus::PhoneUnknown
&& !result->phone().isEmpty()
&& !result->isSelf()) {
result->setContactStatus(UserData::ContactStatus::CanAdd);
}
if (App::main()) { if (App::main()) {
if (update.flags) { if (update.flags) {
update.peer = result; update.peer = result;
@ -1013,7 +1006,7 @@ void Session::setupUserIsContactViewer() {
"userIsContactChanged() called for a not loaded user!")); "userIsContactChanged() called for a not loaded user!"));
return; return;
} }
if (user->contactStatus() == UserData::ContactStatus::Contact) { if (user->isContact()) {
const auto history = user->owner().history(user->id); const auto history = user->owner().history(user->id);
_contactsList.addByName(history); _contactsList.addByName(history);
if (!history->inChatList()) { if (!history->inChatList()) {

View File

@ -58,18 +58,14 @@ bool UserData::canShareThisContact() const {
|| !owner().findContactPhone(peerToUser(id)).isEmpty(); || !owner().findContactPhone(peerToUser(id)).isEmpty();
} }
void UserData::setContactStatus(ContactStatus status) { void UserData::setIsContact(bool is) {
if (_contactStatus != status) { if (_isContact != is) {
const auto changed = (_contactStatus == ContactStatus::Contact) _isContact = is;
!= (status == ContactStatus::Contact);
_contactStatus = status;
if (changed) {
Notify::peerUpdatedDelayed( Notify::peerUpdatedDelayed(
this, this,
Notify::PeerUpdate::Flag::UserIsContact); Notify::PeerUpdate::Flag::UserIsContact);
} }
} if (_isContact
if (_contactStatus == ContactStatus::Contact
&& cReportSpamStatuses().value(id, dbiprsHidden) != dbiprsHidden) { && cReportSpamStatuses().value(id, dbiprsHidden) != dbiprsHidden) {
cRefReportSpamStatuses().insert(id, dbiprsHidden); cRefReportSpamStatuses().insert(id, dbiprsHidden);
Local::writeReportSpamStatuses(); Local::writeReportSpamStatuses();
@ -262,6 +258,7 @@ void ApplyUserUpdate(not_null<UserData*> user, const MTPDuserFull &update) {
user->owner().processPhoto(update.vprofile_photo); user->owner().processPhoto(update.vprofile_photo);
} }
update.vsettings.match([&](const MTPDpeerSettings &data) { update.vsettings.match([&](const MTPDpeerSettings &data) {
//user->owner().processUserSettings(data);
//App::feedUserLink( //App::feedUserLink(
// MTP_int(peerToUser(user->id)), // MTP_int(peerToUser(user->id)),
// link.vmy_link, // link.vmy_link,

View File

@ -138,9 +138,6 @@ public:
// Duplicated in Data::CanWriteValue(). // Duplicated in Data::CanWriteValue().
return !isInaccessible(); return !isInaccessible();
} }
bool isContact() const {
return (_contactStatus == ContactStatus::Contact);
}
bool canShareThisContact() const; bool canShareThisContact() const;
bool canAddContact() const { bool canAddContact() const {
@ -166,15 +163,10 @@ public:
Text phoneText; Text phoneText;
TimeId onlineTill = 0; TimeId onlineTill = 0;
enum class ContactStatus : char { [[nodiscard]] bool isContact() const {
PhoneUnknown, return _isContact;
CanAdd,
Contact,
};
ContactStatus contactStatus() const {
return _contactStatus;
} }
void setContactStatus(ContactStatus status); void setIsContact(bool is);
enum class BlockStatus : char { enum class BlockStatus : char {
Unknown, Unknown,
@ -217,7 +209,7 @@ private:
QString _unavailableReason; QString _unavailableReason;
QString _phone; QString _phone;
ContactStatus _contactStatus = ContactStatus::PhoneUnknown; bool _isContact = false;
BlockStatus _blockStatus = BlockStatus::Unknown; BlockStatus _blockStatus = BlockStatus::Unknown;
CallsStatus _callsStatus = CallsStatus::Unknown; CallsStatus _callsStatus = CallsStatus::Unknown;
int _commonChatsCount = 0; int _commonChatsCount = 0;

View File

@ -1960,8 +1960,7 @@ void HistoryWidget::updateReportSpamStatus() {
if (i != cReportSpamStatuses().cend()) { if (i != cReportSpamStatuses().cend()) {
if (i.value() == dbiprsNoButton) { if (i.value() == dbiprsNoButton) {
setReportSpamStatus(dbiprsHidden); setReportSpamStatus(dbiprsHidden);
if (!_peer->isUser() if (!_peer->isUser() || !_peer->asUser()->isContact()) {
|| _peer->asUser()->contactStatus() != UserData::ContactStatus::Contact) {
MTP::send(MTPmessages_HidePeerSettingsBar(_peer->input)); MTP::send(MTPmessages_HidePeerSettingsBar(_peer->input));
} }
@ -1979,8 +1978,7 @@ void HistoryWidget::updateReportSpamStatus() {
if (i != cReportSpamStatuses().cend()) { if (i != cReportSpamStatuses().cend()) {
if (i.value() == dbiprsNoButton) { if (i.value() == dbiprsNoButton) {
setReportSpamStatus(dbiprsHidden); setReportSpamStatus(dbiprsHidden);
if (!_peer->isUser() if (!_peer->isUser() || !_peer->asUser()->isContact()) {
|| _peer->asUser()->contactStatus() != UserData::ContactStatus::Contact) {
MTP::send(MTPmessages_HidePeerSettingsBar(_peer->input)); MTP::send(MTPmessages_HidePeerSettingsBar(_peer->input));
} }
} else { } else {
@ -1998,8 +1996,7 @@ void HistoryWidget::updateReportSpamStatus() {
auto status = dbiprsRequesting; auto status = dbiprsRequesting;
if (!session().data().contactsLoaded().current() || _firstLoadRequest) { if (!session().data().contactsLoaded().current() || _firstLoadRequest) {
status = dbiprsUnknown; status = dbiprsUnknown;
} else if (_peer->isUser() } else if (_peer->isUser() && _peer->asUser()->isContact()) {
&& _peer->asUser()->contactStatus() == UserData::ContactStatus::Contact) {
status = dbiprsHidden; status = dbiprsHidden;
} else { } else {
requestReportSpamSetting(); requestReportSpamSetting();

View File

@ -107,8 +107,7 @@ QSize HistoryContact::countOptimalSize() {
: Data::FakePeerIdForJustName(full)), : Data::FakePeerIdForJustName(full)),
full); full);
} }
if (_contact if (_contact && _contact->isContact()) {
&& _contact->contactStatus() == UserData::ContactStatus::Contact) {
_linkl = sendMessageClickHandler(_contact); _linkl = sendMessageClickHandler(_contact);
_link = lang(lng_profile_send_message).toUpper(); _link = lang(lng_profile_send_message).toUpper();
} else if (_userId) { } else if (_userId) {

View File

@ -4181,7 +4181,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
case mtpc_updateUserName: { case mtpc_updateUserName: {
auto &d = update.c_updateUserName(); auto &d = update.c_updateUserName();
if (auto user = session().data().userLoaded(d.vuser_id.v)) { if (auto user = session().data().userLoaded(d.vuser_id.v)) {
if (user->contactStatus() != UserData::ContactStatus::Contact) { if (!user->isContact()) {
user->setName( user->setName(
TextUtilities::SingleLine(qs(d.vfirst_name)), TextUtilities::SingleLine(qs(d.vfirst_name)),
TextUtilities::SingleLine(qs(d.vlast_name)), TextUtilities::SingleLine(qs(d.vlast_name)),
@ -4234,15 +4234,15 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
} break; } break;
case mtpc_updateUserPhone: { case mtpc_updateUserPhone: {
auto &d = update.c_updateUserPhone(); const auto &d = update.c_updateUserPhone();
if (auto user = session().data().userLoaded(d.vuser_id.v)) { if (const auto user = session().data().userLoaded(d.vuser_id.v)) {
auto newPhone = qs(d.vphone); const auto newPhone = qs(d.vphone);
if (newPhone != user->phone()) { if (newPhone != user->phone()) {
user->setPhone(newPhone); user->setPhone(newPhone);
user->setName( user->setName(
user->firstName, user->firstName,
user->lastName, user->lastName,
((user->contactStatus() == UserData::ContactStatus::Contact ((user->isContact()
|| user->isServiceUser() || user->isServiceUser()
|| user->isSelf() || user->isSelf()
|| user->phone().isEmpty()) || user->phone().isEmpty())

View File

@ -128,17 +128,9 @@ void writePeer(QDataStream &stream, PeerData *peer) {
: QString(); : QString();
stream << botInlinePlaceholder; stream << botInlinePlaceholder;
} }
const auto contactSerialized = [&] {
switch (user->contactStatus()) {
case UserData::ContactStatus::Contact: return 1;
case UserData::ContactStatus::CanAdd: return 0;
case UserData::ContactStatus::PhoneUnknown: return -1;
}
Unexpected("contactStatus in _writePeer()");
}();
stream stream
<< qint32(user->onlineTill) << qint32(user->onlineTill)
<< qint32(contactSerialized) << qint32(user->isContact() ? 1 : 0)
<< qint32(user->botInfo ? user->botInfo->version : -1); << qint32(user->botInfo ? user->botInfo->version : -1);
} else if (const auto chat = peer->asChat()) { } else if (const auto chat = peer->asChat()) {
stream stream
@ -209,11 +201,7 @@ PeerData *readPeer(int streamAppVersion, QDataStream &stream) {
user->setFlags(MTPDuser::Flags::from_raw(flags)); user->setFlags(MTPDuser::Flags::from_raw(flags));
user->setAccessHash(access); user->setAccessHash(access);
user->onlineTill = onlineTill; user->onlineTill = onlineTill;
user->setContactStatus((contact > 0) user->setIsContact(contact == 1);
? UserData::ContactStatus::Contact
: (contact == 0)
? UserData::ContactStatus::CanAdd
: UserData::ContactStatus::PhoneUnknown);
user->setBotInfoVersion(botInfoVersion); user->setBotInfoVersion(botInfoVersion);
if (!inlinePlaceholder.isEmpty() && user->botInfo) { if (!inlinePlaceholder.isEmpty() && user->botInfo) {
user->botInfo->inlinePlaceholder = inlinePlaceholder; user->botInfo->inlinePlaceholder = inlinePlaceholder;