aboutsummaryrefslogtreecommitdiffhomepage
path: root/td/telegram/Usernames.cpp
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2025-10-23 16:26:34 +0300
committerlevlam <levlam@telegram.org>2025-10-23 16:26:34 +0300
commit3cf06a038599dd442f335996a78946ef7a03e400 (patch)
tree2a8c22781173259af2c0307a12507513334ac0e6 /td/telegram/Usernames.cpp
parentfe1bffce6ebc022ac80f94473f7c85408faf9b12 (diff)
Add usernames.collectible_usernames.
Diffstat (limited to 'td/telegram/Usernames.cpp')
-rw-r--r--td/telegram/Usernames.cpp42
1 files changed, 26 insertions, 16 deletions
diff --git a/td/telegram/Usernames.cpp b/td/telegram/Usernames.cpp
index 0e21758ec..5f1f396d2 100644
--- a/td/telegram/Usernames.cpp
+++ b/td/telegram/Usernames.cpp
@@ -29,17 +29,6 @@ Usernames::Usernames(string &&first_username, vector<telegram_api::object_ptr<te
}
bool was_editable = false;
bool is_editable_username_disabled = false;
- for (auto &username : usernames) {
- if (username->editable_) {
- if (was_editable) {
- username->editable_ = false;
- } else {
- is_editable_username_disabled = !username->active_;
- was_editable = true;
- }
- }
- }
-
FlatHashSet<string> received_usernames;
for (auto &username : usernames) {
if (username->username_.empty()) {
@@ -50,16 +39,24 @@ Usernames::Usernames(string &&first_username, vector<telegram_api::object_ptr<te
LOG(ERROR) << "Receive duplicate username";
continue;
}
+ if (username->editable_) {
+ if (was_editable) {
+ username->editable_ = false;
+ other_editable_usernames_.push_back(username->username_);
+ } else {
+ was_editable = true;
+ }
+ }
if (username->active_) {
active_usernames_.push_back(std::move(username->username_));
if (username->editable_) {
- CHECK(!is_editable_username_disabled);
+ is_editable_username_disabled = false;
editable_username_pos_ = narrow_cast<int32>(active_usernames_.size() - 1);
}
} else {
disabled_usernames_.push_back(std::move(username->username_));
if (username->editable_) {
- CHECK(is_editable_username_disabled);
+ is_editable_username_disabled = true;
editable_username_pos_ = narrow_cast<int32>(disabled_usernames_.size() - 1);
}
}
@@ -69,12 +66,25 @@ Usernames::Usernames(string &&first_username, vector<telegram_api::object_ptr<te
check_validness();
}
-tl_object_ptr<td_api::usernames> Usernames::get_usernames_object() const {
+td_api::object_ptr<td_api::usernames> Usernames::get_usernames_object() const {
if (is_empty()) {
return nullptr;
}
- return make_tl_object<td_api::usernames>(vector<string>(active_usernames_), vector<string>(disabled_usernames_),
- get_editable_username().str());
+
+ auto editable_username = get_editable_username();
+ vector<string> collectible_usernames;
+ for (const auto &username : active_usernames_) {
+ if (username != editable_username && !td::contains(other_editable_usernames_, username)) {
+ collectible_usernames.push_back(username);
+ }
+ }
+ for (const auto &username : disabled_usernames_) {
+ if (username != editable_username && !td::contains(other_editable_usernames_, username)) {
+ collectible_usernames.push_back(username);
+ }
+ }
+ return td_api::make_object<td_api::usernames>(vector<string>(active_usernames_), vector<string>(disabled_usernames_),
+ get_editable_username().str(), std::move(collectible_usernames));
}
Usernames Usernames::change_editable_username(string &&new_username) const {