File: data_user_names.cpp

package info (click to toggle)
telegram-desktop 4.6.5%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 53,300 kB
  • sloc: cpp: 605,857; python: 3,978; ansic: 1,636; sh: 965; makefile: 841; objc: 652; javascript: 187; xml: 165
file content (83 lines) | stat: -rw-r--r-- 2,187 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.

For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include "data/data_user_names.h"

namespace Data {

UsernamesInfo::UsernamesInfo() = default;

void UsernamesInfo::setUsername(const QString &username) {
	if (_usernames.empty()) {
		if (username.isEmpty()) {
			_indexEditableUsername = -1;
		} else {
			_usernames.push_back(username);
			_indexEditableUsername = 0;
		}
	} else if ((_indexEditableUsername < 0)
			|| (_indexEditableUsername >= _usernames.size())) {
		if (username.isEmpty()) {
			_indexEditableUsername = -1;
		} else {
			_usernames.push_back(username);
			_indexEditableUsername = 0;
		}
	} else if (_usernames[_indexEditableUsername] != username) {
		if (username.isEmpty()) {
			_usernames.erase(begin(_usernames) + _indexEditableUsername);
			_indexEditableUsername = -1;
		} else {
			_usernames[_indexEditableUsername] = username;
		}
	}
}

void UsernamesInfo::setUsernames(const Usernames &usernames) {
	auto editableUsername = QString();
	auto newUsernames = ranges::views::all(
		usernames
	) | ranges::views::filter([&](const Data::Username &username) {
		if (username.editable) {
			editableUsername = username.username;
			return true;
		}
		return username.active;
	}) | ranges::views::transform([](const Data::Username &username) {
		return username.username;
	}) | ranges::to_vector;

	if (!ranges::equal(_usernames, newUsernames)) {
		_usernames = std::move(newUsernames);
	}
	if (!editableUsername.isEmpty()) {
		for (auto i = 0; i < _usernames.size(); i++) {
			if (_usernames[i] == editableUsername) {
				_indexEditableUsername = i;
				break;
			}
		}
	} else {
		_indexEditableUsername = -1;
	}
}

QString UsernamesInfo::username() const {
	return _usernames.empty() ? QString() : _usernames.front();
}

QString UsernamesInfo::editableUsername() const {
	return (_indexEditableUsername < 0)
		? QString()
		: _usernames[_indexEditableUsername];
}

const std::vector<QString> &UsernamesInfo::usernames() const {
	return _usernames;
}

} // namespace Data