MCPcopy Create free account
hub / github.com/TDesktop-x64/tdesktop / AddAccountsMenu

Function AddAccountsMenu

Telegram/SourceFiles/boxes/url_auth_box.cpp:89–204  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

87}
88
89[[nodiscard]] SwitchAccountResult AddAccountsMenu(
90 not_null<Ui::RpWidget*> parent,
91 UserId userIdHint = UserId()) {
92 const auto session = &Core::App().domain().active().session();
93 const auto widget = Ui::CreateChild<SwitchableUserpicButton>(
94 parent,
95 st::restoreUserpicIcon.photoSize + st::lineWidth * 8);
96 struct State {
97 base::unique_qptr<Ui::PopupMenu> menu;
98 UserData *currentUser = nullptr;
99 Fn<void()> onUserChanged;
100 };
101 const auto state = widget->lifetime().make_state<State>();
102
103 const auto isCurrentTest = session->isTestMode();
104 const auto findHintedUser = [&]() -> UserData* {
105 if (!userIdHint) {
106 return session->user().get();
107 }
108 for (const auto &account : Core::App().domain().orderedAccounts()) {
109 if (!account->sessionExists()
110 || (account->session().isTestMode() != isCurrentTest)) {
111 continue;
112 }
113 if (account->session().userId() == userIdHint) {
114 return account->session().user();
115 }
116 }
117 return session->user().get();
118 };
119
120 state->currentUser = findHintedUser();
121 const auto userpic = Ui::CreateChild<Ui::UserpicButton>(
122 parent,
123 state->currentUser,
124 st::restoreUserpicIcon);
125 widget->setUserpic(userpic);
126 const auto filtered = [=] {
127 auto result = std::vector<not_null<Main::Session*>>();
128 for (const auto &account : Core::App().domain().orderedAccounts()) {
129 if (!account->sessionExists()
130 || (account->session().user() == state->currentUser)
131 || (account->session().isTestMode() != isCurrentTest)) {
132 continue;
133 }
134 result.push_back(&account->session());
135 }
136 return result;
137 };
138 const auto isSingle = filtered().empty();
139 widget->setExpanded(!isSingle);
140 widget->setAttribute(Qt::WA_TransparentForMouseEvents, isSingle);
141 widget->setClickedCallback([=] {
142 const auto &st = st::popupMenuWithIcons;
143 state->menu = base::make_unique_q<Ui::PopupMenu>(widget, st);
144 for (const auto &anotherSession : filtered()) {
145 const auto user = anotherSession->user();
146 const auto action = new QAction(user->name(), state->menu);

Callers 1

RequestUrlFunction · 0.85

Calls 15

AppClass · 0.85
orderedAccountsMethod · 0.80
sessionExistsMethod · 0.80
menuMethod · 0.80
stMethod · 0.80
popupMethod · 0.80
UserIdClass · 0.50
sessionMethod · 0.45
activeMethod · 0.45
isTestModeMethod · 0.45
getMethod · 0.45
userMethod · 0.45

Tested by

no test coverage detected