void PeerData::updateNameDelayed( const QString &newName, const QString &newNameOrPhone, const QString &newUsername) { if (name == newName) { if (isUser()) { if (asUser()->nameOrPhone == newNameOrPhone && asUser()->username == newUsername) { return; } } else if (isChannel()) { if (asChannel()->username == newUsername) { return; } } else if (isChat()) { return; } } ++nameVersion; name = newName; nameText.setText(st::msgNameStyle, name, Ui::NameTextOptions()); refreshEmptyUserpic(); Notify::PeerUpdate update(this); update.flags |= UpdateFlag::NameChanged; update.oldNameFirstChars = nameFirstChars(); if (isUser()) { if (asUser()->username != newUsername) { asUser()->username = newUsername; update.flags |= UpdateFlag::UsernameChanged; } asUser()->setNameOrPhone(newNameOrPhone); } else if (isChannel()) { if (asChannel()->username != newUsername) { asChannel()->username = newUsername; if (newUsername.isEmpty()) { asChannel()->removeFlags( MTPDchannel::Flag::f_username); } else { asChannel()->addFlags(MTPDchannel::Flag::f_username); } update.flags |= UpdateFlag::UsernameChanged; } } fillNames(); Notify::PeerUpdated().notify(update, true); }
bool HistoryItem::canDeleteForEveryone(TimeId now) const { const auto peer = history()->peer; const auto messageToMyself = peer->isSelf(); const auto messageTooOld = messageToMyself ? false : peer->isUser() ? (now - date() >= Global::RevokePrivateTimeLimit()) : (now - date() >= Global::RevokeTimeLimit()); if (id < 0 || messageToMyself || messageTooOld || isPost()) { return false; } if (peer->isChannel()) { return false; } else if (const auto user = peer->asUser()) { // Bots receive all messages and there is no sense in revoking them. // See https://github.com/telegramdesktop/tdesktop/issues/3818 if (user->botInfo) { return false; } } if (!toHistoryMessage()) { return false; } else if (const auto media = this->media()) { if (!media->allowsRevoke()) { return false; } } if (!out()) { if (const auto chat = peer->asChat()) { if (!chat->amCreator() && !(chat->adminRights() & ChatAdminRight::f_delete_messages)) { return false; } } else if (peer->isUser()) { return Global::RevokePrivateInbox(); } else { return false; } } return true; }
void PeerData::fillNames() { _nameWords.clear(); _nameFirstChars.clear(); auto toIndexList = QStringList(); auto appendToIndex = [&](const QString &value) { if (!value.isEmpty()) { toIndexList.push_back(TextUtilities::RemoveAccents(value)); } }; appendToIndex(name); const auto appendTranslit = !toIndexList.isEmpty() && cRussianLetters().match(toIndexList.front()).hasMatch(); if (appendTranslit) { appendToIndex(translitRusEng(toIndexList.front())); } if (auto user = asUser()) { if (user->nameOrPhone != name) { appendToIndex(user->nameOrPhone); } appendToIndex(user->username); if (isSelf()) { appendToIndex(lang(lng_saved_messages)); } } else if (auto channel = asChannel()) { appendToIndex(channel->username); } auto toIndex = toIndexList.join(' '); toIndex += ' ' + rusKeyboardLayoutSwitch(toIndex); const auto namesList = TextUtilities::PrepareSearchWords(toIndex); for (const auto &name : namesList) { _nameWords.insert(name); _nameFirstChars.insert(name[0]); } }