Always show reaction userpics in private chats.

This commit is contained in:
John Preston 2022-08-31 18:00:02 +04:00
parent 2618ee3d75
commit 742b819c7e

View file

@ -17,7 +17,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/stickers/data_custom_emoji.h" #include "data/stickers/data_custom_emoji.h"
#include "data/data_message_reactions.h" #include "data/data_message_reactions.h"
#include "data/data_peer.h" #include "data/data_peer.h"
#include "data/data_user.h"
#include "data/data_session.h" #include "data/data_session.h"
#include "main/main_session.h"
#include "lang/lang_tag.h" #include "lang/lang_tag.h"
#include "ui/text/text_custom_emoji.h" #include "ui/text/text_custom_emoji.h"
#include "ui/chat/chat_style.h" #include "ui/chat/chat_style.h"
@ -595,29 +597,45 @@ InlineListData InlineListDataFromMessage(not_null<Message*> message) {
const auto item = message->message(); const auto item = message->message();
auto result = InlineListData(); auto result = InlineListData();
result.reactions = item->reactions(); result.reactions = item->reactions();
const auto &recent = item->recentReactions(); if (const auto user = item->history()->peer->asUser()) {
const auto showUserpics = [&] { // Always show userpics, we have all information.
if (recent.size() != result.reactions.size()) { result.recent.reserve(result.reactions.size());
return false; const auto self = user->session().user();
}
auto sum = 0;
for (const auto &reaction : result.reactions) { for (const auto &reaction : result.reactions) {
if ((sum += reaction.count) > kMaxRecentUserpics) { auto &list = result.recent[reaction.id];
return false; list.reserve(reaction.count);
if (!reaction.my || reaction.count > 1) {
list.push_back(user);
} }
const auto i = recent.find(reaction.id); if (reaction.my) {
if (i == end(recent) || reaction.count != i->second.size()) { list.push_back(self);
return false;
} }
} }
return true; } else {
}(); const auto &recent = item->recentReactions();
if (showUserpics) { const auto showUserpics = [&] {
result.recent.reserve(recent.size()); if (recent.size() != result.reactions.size()) {
for (const auto &[id, list] : recent) { return false;
result.recent.emplace(id).first->second = list }
| ranges::view::transform(&Data::RecentReaction::peer) auto sum = 0;
| ranges::to_vector; for (const auto &reaction : result.reactions) {
if ((sum += reaction.count) > kMaxRecentUserpics) {
return false;
}
const auto i = recent.find(reaction.id);
if (i == end(recent) || reaction.count != i->second.size()) {
return false;
}
}
return true;
}();
if (showUserpics) {
result.recent.reserve(recent.size());
for (const auto &[id, list] : recent) {
result.recent.emplace(id).first->second = list
| ranges::view::transform(&Data::RecentReaction::peer)
| ranges::to_vector;
}
} }
} }
result.flags = (message->hasOutLayout() ? Flag::OutLayout : Flag()) result.flags = (message->hasOutLayout() ? Flag::OutLayout : Flag())