Update API scheme on layer 138.

This commit is contained in:
John Preston 2022-01-21 15:48:14 +03:00
parent 846cabeda5
commit 581b84afe0
9 changed files with 59 additions and 53 deletions

View File

@ -190,7 +190,7 @@ messageActionGroupCallScheduled#b3a07661 call:InputGroupCall schedule_date:int =
messageActionSetChatTheme#aa786345 emoticon:string = MessageAction;
messageActionChatJoinedByRequest#ebbca3cb = MessageAction;
dialog#2c171f72 flags:# pinned:flags.2?true unread_mark:flags.3?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int = Dialog;
dialog#a8edd0f5 flags:# pinned:flags.2?true unread_mark:flags.3?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int = Dialog;
dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog;
photoEmpty#2331b22d id:long = Photo;
@ -1307,11 +1307,9 @@ auth.loggedOut#c3a2835f flags:# future_auth_token:flags.0?bytes = auth.LoggedOut
reactionCount#6fb250d1 flags:# chosen:flags.0?true reaction:string count:int = ReactionCount;
messageReactions#87b6e36 flags:# min:flags.0?true can_see_list:flags.2?true results:Vector<ReactionCount> recent_reactons:flags.1?Vector<MessageUserReaction> = MessageReactions;
messageReactions#4f2b9479 flags:# min:flags.0?true can_see_list:flags.2?true results:Vector<ReactionCount> recent_reactions:flags.1?Vector<MessagePeerReaction> = MessageReactions;
messageUserReaction#932844fa user_id:long reaction:string = MessageUserReaction;
messages.messageReactionsList#a366923c flags:# count:int reactions:Vector<MessageUserReaction> users:Vector<User> next_offset:flags.0?string = messages.MessageReactionsList;
messages.messageReactionsList#31bd492d flags:# count:int reactions:Vector<MessagePeerReaction> chats:Vector<Chat> users:Vector<User> next_offset:flags.0?string = messages.MessageReactionsList;
availableReaction#c077ec01 flags:# inactive:flags.0?true reaction:string title:string static_icon:Document appear_animation:Document select_animation:Document activate_animation:Document effect_animation:Document around_animation:flags.1?Document center_icon:flags.1?Document = AvailableReaction;
@ -1321,6 +1319,8 @@ messages.availableReactions#768e3aad hash:int reactions:Vector<AvailableReaction
messages.translateNoResult#67ca4737 = messages.TranslatedText;
messages.translateResultText#a214f7d0 text:string = messages.TranslatedText;
messagePeerReaction#51b67eff flags:# big:flags.0?true unread:flags.1?true peer_id:Peer reaction:string = MessagePeerReaction;
---functions---
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
@ -1599,13 +1599,15 @@ messages.hideChatJoinRequest#7fe7e815 flags:# approved:flags.0?true peer:InputPe
messages.hideAllChatJoinRequests#e085f4ea flags:# approved:flags.0?true peer:InputPeer link:flags.1?string = Updates;
messages.toggleNoForwards#b11eafa2 peer:InputPeer enabled:Bool = Updates;
messages.saveDefaultSendAs#ccfddf96 peer:InputPeer send_as:InputPeer = Bool;
messages.sendReaction#25690ce4 flags:# peer:InputPeer msg_id:int reaction:flags.0?string = Updates;
messages.sendReaction#25690ce4 flags:# big:flags.1?true peer:InputPeer msg_id:int reaction:flags.0?string = Updates;
messages.getMessagesReactions#8bba90e6 peer:InputPeer id:Vector<int> = Updates;
messages.getMessageReactionsList#e0ee6b77 flags:# peer:InputPeer id:int reaction:flags.0?string offset:flags.1?string limit:int = messages.MessageReactionsList;
messages.setChatAvailableReactions#14050ea6 peer:InputPeer available_reactions:Vector<string> = Updates;
messages.getAvailableReactions#18dea0ac hash:int = messages.AvailableReactions;
messages.setDefaultReaction#d960c4d4 reaction:string = Bool;
messages.translateText#24ce6dee flags:# peer:flags.0?InputPeer msg_id:flags.0?int text:flags.1?string from_lang:flags.2?string to_lang:string = messages.TranslatedText;
messages.getUnreadReactions#e85bae1a peer:InputPeer offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages;
messages.readReactions#82e251d7 peer:InputPeer = messages.AffectedHistory;
updates.getState#edd4882a = updates.State;
updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference;

View File

@ -289,6 +289,7 @@ struct State {
result.match([&](
const MTPDmessages_messageReactionsList &data) {
session->data().processUsers(data.vusers());
session->data().processChats(data.vchats());
auto parsed = PeersWithReactions{
.fullReactionsCount = data.vcount().v,
@ -297,7 +298,7 @@ struct State {
for (const auto &vote : data.vreactions().v) {
vote.match([&](const auto &data) {
parsed.list.push_back(PeerWithReaction{
.peer = peerFromUser(data.vuser_id()),
.peer = peerFromMTP(data.vpeer_id()),
.reaction = qs(data.vreaction()),
});
});

View File

@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_session.h"
#include "main/main_account.h"
#include "main/main_app_config.h"
#include "data/data_user.h"
#include "data/data_session.h"
#include "data/data_changes.h"
#include "data/data_document.h"
@ -516,7 +517,7 @@ void MessageReactions::remove() {
void MessageReactions::set(
const QVector<MTPReactionCount> &list,
const QVector<MTPMessageUserReaction> &recent,
const QVector<MTPMessagePeerReaction> &recent,
bool ignoreChosen) {
auto &owner = _item->history()->owner();
if (owner.reactions().sending(_item)) {
@ -558,12 +559,13 @@ void MessageReactions::set(
}
auto parsed = base::flat_map<
QString,
std::vector<not_null<UserData*>>>();
std::vector<not_null<PeerData*>>>();
for (const auto &reaction : recent) {
reaction.match([&](const MTPDmessageUserReaction &data) {
reaction.match([&](const MTPDmessagePeerReaction &data) {
const auto emoji = qs(data.vreaction());
if (_list.contains(emoji)) {
parsed[emoji].push_back(owner.user(data.vuser_id()));
parsed[emoji].push_back(
owner.peer(peerFromMTP(data.vpeer_id())));
}
});
}
@ -582,7 +584,7 @@ const base::flat_map<QString, int> &MessageReactions::list() const {
}
auto MessageReactions::recent() const
-> const base::flat_map<QString, std::vector<not_null<UserData*>>> & {
-> const base::flat_map<QString, std::vector<not_null<PeerData*>>> & {
return _recent;
}

View File

@ -133,11 +133,11 @@ public:
void remove();
void set(
const QVector<MTPReactionCount> &list,
const QVector<MTPMessageUserReaction> &recent,
const QVector<MTPMessagePeerReaction> &recent,
bool ignoreChosen);
[[nodiscard]] const base::flat_map<QString, int> &list() const;
[[nodiscard]] auto recent() const
-> const base::flat_map<QString, std::vector<not_null<UserData*>>> &;
-> const base::flat_map<QString, std::vector<not_null<PeerData*>>> &;
[[nodiscard]] QString chosen() const;
[[nodiscard]] bool empty() const;
@ -146,7 +146,7 @@ private:
QString _chosen;
base::flat_map<QString, int> _list;
base::flat_map<QString, std::vector<not_null<UserData*>>> _recent;
base::flat_map<QString, std::vector<not_null<PeerData*>>> _recent;
};

View File

@ -862,7 +862,7 @@ void HistoryItem::setReactions(const MTPMessageReactions *reactions) {
}
_reactions->set(
data.vresults().v,
data.vrecent_reactons().value_or_empty(),
data.vrecent_reactions().value_or_empty(),
data.is_min());
});
}
@ -877,10 +877,10 @@ const base::flat_map<QString, int> &HistoryItem::reactions() const {
}
auto HistoryItem::recentReactions() const
-> const base::flat_map<QString, std::vector<not_null<UserData*>>> & {
-> const base::flat_map<QString, std::vector<not_null<PeerData*>>> & {
static const auto kEmpty = base::flat_map<
QString,
std::vector<not_null<UserData*>>>();
std::vector<not_null<PeerData*>>>();
return _reactions ? _reactions->recent() : kEmpty;
}

View File

@ -360,7 +360,7 @@ public:
void updateReactionsUnknown();
[[nodiscard]] const base::flat_map<QString, int> &reactions() const;
[[nodiscard]] auto recentReactions() const
-> const base::flat_map<QString, std::vector<not_null<UserData*>>> &;
-> const base::flat_map<QString, std::vector<not_null<PeerData*>>> &;
[[nodiscard]] bool canViewReactions() const;
[[nodiscard]] QString chosenReaction() const;
[[nodiscard]] QString lookupHisReaction() const;

View File

@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "history/view/history_view_group_call_bar.h"
#include "core/click_handler_types.h"
#include "data/data_message_reactions.h"
#include "data/data_user.h"
#include "data/data_peer.h"
#include "lang/lang_tag.h"
#include "ui/chat/chat_style.h"
#include "styles/style_chat.h"
@ -125,18 +125,18 @@ void InlineList::setButtonCount(Button &button, int count) {
void InlineList::setButtonUserpics(
Button &button,
const std::vector<not_null<UserData*>> &users) {
const std::vector<not_null<PeerData*>> &peers) {
if (!button.userpics) {
button.userpics = std::make_unique<Userpics>();
}
const auto count = button.count = int(users.size());
const auto count = button.count = int(peers.size());
auto &list = button.userpics->list;
const auto regenerate = [&] {
if (list.size() != count) {
return true;
}
for (auto i = 0; i != count; ++i) {
if (users[i] != list[i].peer) {
if (peers[i] != list[i].peer) {
return true;
}
}
@ -150,10 +150,10 @@ void InlineList::setButtonUserpics(
for (auto i = 0; i != count; ++i) {
if (i == list.size()) {
list.push_back(UserpicInRow{
users[i]
peers[i]
});
} else if (list[i].peer != users[i]) {
list[i].peer = users[i];
} else if (list[i].peer != peers[i]) {
list[i].peer = peers[i];
}
}
while (list.size() > count) {

View File

@ -40,7 +40,7 @@ struct InlineListData {
using Flags = base::flags<Flag>;
base::flat_map<QString, int> reactions;
base::flat_map<QString, std::vector<not_null<UserData*>>> recent;
base::flat_map<QString, std::vector<not_null<PeerData*>>> recent;
QString chosenReaction;
Flags flags = {};
};
@ -101,7 +101,7 @@ private:
void setButtonCount(Button &button, int count);
void setButtonUserpics(
Button &button,
const std::vector<not_null<UserData*>> &users);
const std::vector<not_null<PeerData*>> &peers);
[[nodiscard]] Button prepareButtonWithEmoji(const QString &emoji);
void resolveUserpicsImage(const Button &button) const;

View File

@ -17,7 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/controls/who_reacted_context_action.h"
#include "main/main_session.h"
#include "data/data_session.h"
#include "data/data_user.h"
#include "data/data_peer.h"
#include "lang/lang_keys.h"
namespace HistoryView {
@ -61,13 +61,13 @@ public:
void loadMoreRows() override;
private:
using AllEntry = std::pair<not_null<UserData*>, QString>;
using AllEntry = std::pair<not_null<PeerData*>, QString>;
void fillWhoRead();
void loadMore(const QString &reaction);
bool appendRow(not_null<UserData*> user, QString reaction);
bool appendRow(not_null<PeerData*> peer, QString reaction);
std::unique_ptr<PeerListRow> createRow(
not_null<UserData*> user,
not_null<PeerData*> peer,
QString reaction) const;
void showReaction(const QString &reaction);
@ -77,12 +77,12 @@ private:
QString _shownReaction;
std::shared_ptr<Api::WhoReadList> _whoReadIds;
std::vector<not_null<UserData*>> _whoRead;
std::vector<not_null<PeerData*>> _whoRead;
std::vector<AllEntry> _all;
QString _allOffset;
std::vector<not_null<UserData*>> _filtered;
std::vector<not_null<PeerData*>> _filtered;
QString _filteredOffset;
mtpRequestId _loadRequestId = 0;
@ -179,8 +179,8 @@ void Controller::showReaction(const QString &reaction) {
fillWhoRead();
} else if (_shownReaction.isEmpty()) {
_filtered.clear();
for (const auto &[user, reaction] : _all) {
appendRow(user, reaction);
for (const auto &[peer, reaction] : _all) {
appendRow(peer, reaction);
}
} else {
_filtered = _all | ranges::view::filter([&](const AllEntry &entry) {
@ -188,8 +188,8 @@ void Controller::showReaction(const QString &reaction) {
}) | ranges::view::transform(
&AllEntry::first
) | ranges::to_vector;
for (const auto user : _filtered) {
appendRow(user, _shownReaction);
for (const auto peer : _filtered) {
appendRow(peer, _shownReaction);
}
_filteredOffset = QString();
}
@ -204,13 +204,13 @@ void Controller::fillWhoRead() {
if (_whoReadIds && !_whoReadIds->list.empty() && _whoRead.empty()) {
auto &owner = _window->session().data();
for (const auto &peerId : _whoReadIds->list) {
if (const auto user = owner.userLoaded(peerToUser(peerId))) {
_whoRead.push_back(user);
if (const auto peer = owner.peerLoaded(peerId)) {
_whoRead.push_back(peer);
}
}
}
for (const auto &user : _whoRead) {
appendRow(user, QString());
for (const auto &peer : _whoRead) {
appendRow(peer, QString());
}
}
@ -255,18 +255,19 @@ void Controller::loadMore(const QString &reaction) {
result.match([&](const MTPDmessages_messageReactionsList &data) {
const auto sessionData = &session().data();
sessionData->processUsers(data.vusers());
sessionData->processChats(data.vchats());
(filtered ? _filteredOffset : _allOffset)
= data.vnext_offset().value_or_empty();
for (const auto &reaction : data.vreactions().v) {
reaction.match([&](const MTPDmessageUserReaction &data) {
const auto user = sessionData->userLoaded(
data.vuser_id().v);
reaction.match([&](const MTPDmessagePeerReaction &data) {
const auto peer = sessionData->peerLoaded(
peerFromMTP(data.vpeer_id()));
const auto reaction = qs(data.vreaction());
if (user && (!shown || appendRow(user, reaction))) {
if (peer && (!shown || appendRow(peer, reaction))) {
if (filtered) {
_filtered.emplace_back(user);
_filtered.emplace_back(peer);
} else {
_all.emplace_back(user, reaction);
_all.emplace_back(peer, reaction);
}
}
});
@ -287,18 +288,18 @@ void Controller::rowClicked(not_null<PeerListRow*> row) {
});
}
bool Controller::appendRow(not_null<UserData*> user, QString reaction) {
if (delegate()->peerListFindRow(user->id.value)) {
bool Controller::appendRow(not_null<PeerData*> peer, QString reaction) {
if (delegate()->peerListFindRow(peer->id.value)) {
return false;
}
delegate()->peerListAppendRow(createRow(user, reaction));
delegate()->peerListAppendRow(createRow(peer, reaction));
return true;
}
std::unique_ptr<PeerListRow> Controller::createRow(
not_null<UserData*> user,
not_null<PeerData*> peer,
QString reaction) const {
return std::make_unique<Row>(user, reaction);
return std::make_unique<Row>(peer, reaction);
}
} // namespace