mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-03-11 08:48:14 +00:00
Slightly improved appearing of usernames list.
This commit is contained in:
parent
d55ff7aa4a
commit
17623640b3
@ -199,5 +199,28 @@ Data::Usernames Usernames::FromTL(const MTPVector<MTPUsername> &usernames) {
|
||||
) | ranges::views::transform(UsernameFromTL) | ranges::to_vector;
|
||||
}
|
||||
|
||||
void Usernames::requestToCache(not_null<PeerData*> peer) {
|
||||
_tinyCache = {};
|
||||
if (const auto user = peer->asUser()) {
|
||||
if (user->usernames().empty()) {
|
||||
return;
|
||||
}
|
||||
} else if (const auto channel = peer->asChannel()) {
|
||||
if (channel->usernames().empty()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
const auto lifetime = std::make_shared<rpl::lifetime>();
|
||||
*lifetime = loadUsernames(
|
||||
peer
|
||||
) | rpl::start_with_next([=, id = peer->id](Data::Usernames usernames) {
|
||||
_tinyCache = std::make_pair(id, std::move(usernames));
|
||||
lifetime->destroy();
|
||||
});
|
||||
}
|
||||
|
||||
Data::Usernames Usernames::cacheFor(PeerId id) {
|
||||
return (_tinyCache.first == id) ? _tinyCache.second : Data::Usernames();
|
||||
}
|
||||
|
||||
} // namespace Api
|
||||
|
@ -33,6 +33,9 @@ public:
|
||||
not_null<PeerData*> peer,
|
||||
const std::vector<QString> &usernames);
|
||||
|
||||
void requestToCache(not_null<PeerData*> peer);
|
||||
[[nodiscard]] Data::Usernames cacheFor(PeerId id);
|
||||
|
||||
static Data::Usernames FromTL(const MTPVector<MTPUsername> &usernames);
|
||||
|
||||
private:
|
||||
@ -47,6 +50,8 @@ private:
|
||||
};
|
||||
base::flat_map<Key, Entry> _toggleRequests;
|
||||
base::flat_map<Key, mtpRequestId> _reorderRequests;
|
||||
// Used for a seamless display of usernames list.
|
||||
std::pair<Key, Data::Usernames> _tinyCache;
|
||||
|
||||
};
|
||||
|
||||
|
@ -635,7 +635,7 @@ void Controller::showEditPeerTypeBox(
|
||||
});
|
||||
_typeDataSavedValue->hasLinkedChat
|
||||
= (_linkedChatSavedValue.value_or(nullptr) != nullptr);
|
||||
_navigation->parentController()->show(
|
||||
const auto box = _navigation->parentController()->show(
|
||||
Box<EditPeerTypeBox>(
|
||||
_navigation,
|
||||
_peer,
|
||||
@ -644,6 +644,10 @@ void Controller::showEditPeerTypeBox(
|
||||
_typeDataSavedValue,
|
||||
error),
|
||||
Ui::LayerOption::KeepOther);
|
||||
box->boxClosing(
|
||||
) | rpl::start_with_next([peer = _peer] {
|
||||
peer->session().api().usernames().requestToCache(peer);
|
||||
}, box->lifetime());
|
||||
}
|
||||
|
||||
void Controller::showEditLinkedChatBox() {
|
||||
@ -740,6 +744,9 @@ void Controller::fillPrivacyTypeButton() {
|
||||
: tr::lng_manage_peer_channel_type)(),
|
||||
_privacyTypeUpdates.events(
|
||||
) | rpl::map([=](Privacy flag) {
|
||||
if (flag == Privacy::HasUsername) {
|
||||
_peer->session().api().usernames().requestToCache(_peer);
|
||||
}
|
||||
return (flag == Privacy::HasUsername)
|
||||
? (hasLocation
|
||||
? tr::lng_manage_peer_link_permanent
|
||||
|
@ -113,6 +113,13 @@ UsernamesList::UsernamesList(
|
||||
: RpWidget(parent)
|
||||
, _show(show)
|
||||
, _peer(peer) {
|
||||
{
|
||||
auto &api = _peer->session().api();
|
||||
const auto usernames = api.usernames().cacheFor(_peer->id);
|
||||
if (!usernames.empty()) {
|
||||
rebuild(usernames);
|
||||
}
|
||||
}
|
||||
load();
|
||||
}
|
||||
|
||||
|
@ -48,6 +48,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
#include "window/window_peer_menu.h"
|
||||
#include "apiwrap.h"
|
||||
#include "api/api_peer_photo.h"
|
||||
#include "api/api_user_names.h"
|
||||
#include "core/file_utilities.h"
|
||||
#include "base/call_delayed.h"
|
||||
#include "base/unixtime.h"
|
||||
@ -445,12 +446,19 @@ void SetupRows(
|
||||
"internal:edit_username" });
|
||||
return result;
|
||||
});
|
||||
session->api().usernames().requestToCache(session->user());
|
||||
AddRow(
|
||||
container,
|
||||
std::move(label),
|
||||
std::move(value),
|
||||
tr::lng_context_copy_mention(tr::now),
|
||||
[=] { controller->show(Box(UsernamesBox, session)); },
|
||||
[=] {
|
||||
const auto box = controller->show(Box(UsernamesBox, session));
|
||||
box->boxClosing(
|
||||
) | rpl::start_with_next([=] {
|
||||
session->api().usernames().requestToCache(session->user());
|
||||
}, box->lifetime());
|
||||
},
|
||||
{ &st::settingsIconMention, kIconLightOrange });
|
||||
|
||||
AddSkip(container);
|
||||
|
Loading…
Reference in New Issue
Block a user