mirror of https://github.com/procxx/kepka.git
Prepare code for dialogFeed handling.
This commit is contained in:
parent
ac57000437
commit
139ef5411a
|
@ -146,6 +146,29 @@ void ApiWrap::applyUpdates(
|
||||||
App::main()->feedUpdates(updates, sentMessageRandomId);
|
App::main()->feedUpdates(updates, sentMessageRandomId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ApiWrap::applyDialogsPinned(const QVector<MTPDialog> &list) {
|
||||||
|
for (auto i = list.size(); i != 0;) {
|
||||||
|
const auto &dialog = list[--i];
|
||||||
|
switch (dialog.type()) {
|
||||||
|
case mtpc_dialog: {
|
||||||
|
const auto &dialogData = dialog.c_dialog();
|
||||||
|
if (const auto peer = peerFromMTP(dialogData.vpeer)) {
|
||||||
|
const auto history = App::history(peer);
|
||||||
|
history->setPinnedDialog(dialogData.is_pinned());
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case mtpc_dialogFeed: {
|
||||||
|
const auto &feedData = dialog.c_dialogFeed();
|
||||||
|
const auto feedId = feedData.vfeed_id.v;
|
||||||
|
// #TODO feeds
|
||||||
|
} break;
|
||||||
|
|
||||||
|
default: Unexpected("Type in ApiWrap::applyDialogsPinned.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ApiWrap::sendMessageFail(const RPCError &error) {
|
void ApiWrap::sendMessageFail(const RPCError &error) {
|
||||||
if (error.type() == qstr("PEER_FLOOD")) {
|
if (error.type() == qstr("PEER_FLOOD")) {
|
||||||
Ui::show(Box<InformBox>(
|
Ui::show(Box<InformBox>(
|
||||||
|
|
|
@ -45,8 +45,13 @@ public:
|
||||||
|
|
||||||
void applyUpdates(const MTPUpdates &updates, uint64 sentMessageRandomId = 0);
|
void applyUpdates(const MTPUpdates &updates, uint64 sentMessageRandomId = 0);
|
||||||
|
|
||||||
|
void applyDialogsPinned(const QVector<MTPDialog> &list);
|
||||||
|
|
||||||
using RequestMessageDataCallback = base::lambda<void(ChannelData*, MsgId)>;
|
using RequestMessageDataCallback = base::lambda<void(ChannelData*, MsgId)>;
|
||||||
void requestMessageData(ChannelData *channel, MsgId msgId, RequestMessageDataCallback callback);
|
void requestMessageData(
|
||||||
|
ChannelData *channel,
|
||||||
|
MsgId msgId,
|
||||||
|
RequestMessageDataCallback callback);
|
||||||
|
|
||||||
void requestContacts();
|
void requestContacts();
|
||||||
|
|
||||||
|
|
|
@ -1494,25 +1494,38 @@ void DialogsInner::itemRemoved(not_null<const HistoryItem*> item) {
|
||||||
|
|
||||||
void DialogsInner::dialogsReceived(const QVector<MTPDialog> &added) {
|
void DialogsInner::dialogsReceived(const QVector<MTPDialog> &added) {
|
||||||
for (const auto &dialog : added) {
|
for (const auto &dialog : added) {
|
||||||
if (dialog.type() != mtpc_dialog) {
|
switch (dialog.type()) {
|
||||||
continue;
|
case mtpc_dialog: applyDialog(dialog.c_dialog()); break;
|
||||||
|
case mtpc_dialogFeed: applyFeedDialog(dialog.c_dialogFeed()); break;
|
||||||
|
default: Unexpected("Type in DialogsInner::dialogsReceived");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Notify::unreadCounterUpdated();
|
||||||
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto &d = dialog.c_dialog();
|
void DialogsInner::applyDialog(const MTPDdialog &dialog) {
|
||||||
const auto peerId = peerFromMTP(d.vpeer);
|
const auto peerId = peerFromMTP(dialog.vpeer);
|
||||||
if (!peerId) {
|
if (!peerId) {
|
||||||
continue;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto history = App::historyFromDialog(peerId, d.vunread_count.v, d.vread_inbox_max_id.v, d.vread_outbox_max_id.v);
|
const auto history = App::historyFromDialog(
|
||||||
history->setUnreadMentionsCount(d.vunread_mentions_count.v);
|
peerId,
|
||||||
auto peer = history->peer;
|
dialog.vunread_count.v,
|
||||||
if (auto channel = peer->asChannel()) {
|
dialog.vread_inbox_max_id.v,
|
||||||
if (d.has_pts()) {
|
dialog.vread_outbox_max_id.v);
|
||||||
channel->ptsReceived(d.vpts.v);
|
history->setUnreadMentionsCount(dialog.vunread_mentions_count.v);
|
||||||
|
const auto peer = history->peer;
|
||||||
|
if (const auto channel = peer->asChannel()) {
|
||||||
|
if (dialog.has_pts()) {
|
||||||
|
channel->ptsReceived(dialog.vpts.v);
|
||||||
}
|
}
|
||||||
if (!channel->amCreator()) {
|
if (!channel->amCreator()) {
|
||||||
if (auto topMsg = App::histItemById(channel, d.vtop_message.v)) {
|
const auto topMsgId = FullMsgId(
|
||||||
|
peerToChannel(channel->id),
|
||||||
|
dialog.vtop_message.v);
|
||||||
|
if (const auto topMsg = App::histItemById(topMsgId)) {
|
||||||
if (topMsg->date <= date(channel->date)) {
|
if (topMsg->date <= date(channel->date)) {
|
||||||
Auth().api().requestSelfParticipant(channel);
|
Auth().api().requestSelfParticipant(channel);
|
||||||
}
|
}
|
||||||
|
@ -1520,8 +1533,8 @@ void DialogsInner::dialogsReceived(const QVector<MTPDialog> &added) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
App::main()->applyNotifySetting(
|
App::main()->applyNotifySetting(
|
||||||
MTP_notifyPeer(d.vpeer),
|
MTP_notifyPeer(dialog.vpeer),
|
||||||
d.vnotify_settings,
|
dialog.vnotify_settings,
|
||||||
history);
|
history);
|
||||||
|
|
||||||
if (!history->isPinnedDialog() && !history->lastMsgDate.isNull()) {
|
if (!history->isPinnedDialog() && !history->lastMsgDate.isNull()) {
|
||||||
|
@ -1534,19 +1547,20 @@ void DialogsInner::dialogsReceived(const QVector<MTPDialog> &added) {
|
||||||
removeDialog(history);
|
removeDialog(history);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d.has_draft() && d.vdraft.type() == mtpc_draftMessage) {
|
if (dialog.has_draft() && dialog.vdraft.type() == mtpc_draftMessage) {
|
||||||
auto &draft = d.vdraft.c_draftMessage();
|
const auto &draft = dialog.vdraft.c_draftMessage();
|
||||||
Data::applyPeerCloudDraft(peerId, draft);
|
Data::applyPeerCloudDraft(peerId, draft);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Notify::unreadCounterUpdated();
|
|
||||||
refresh();
|
void DialogsInner::applyFeedDialog(const MTPDdialogFeed &dialog) {
|
||||||
|
// #TODO feeds
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogsInner::addSavedPeersAfter(const QDateTime &date) {
|
void DialogsInner::addSavedPeersAfter(const QDateTime &date) {
|
||||||
SavedPeersByTime &saved(cRefSavedPeersByTime());
|
auto &saved = cRefSavedPeersByTime();
|
||||||
while (!saved.isEmpty() && (date.isNull() || date < saved.lastKey())) {
|
while (!saved.isEmpty() && (date.isNull() || date < saved.lastKey())) {
|
||||||
History *history = App::history(saved.last()->id);
|
const auto history = App::history(saved.last()->id);
|
||||||
history->setChatsListDate(saved.lastKey());
|
history->setChatsListDate(saved.lastKey());
|
||||||
_contactsNoDialogs->del(history->peer);
|
_contactsNoDialogs->del(history->peer);
|
||||||
saved.remove(saved.lastKey(), saved.last());
|
saved.remove(saved.lastKey(), saved.last());
|
||||||
|
|
|
@ -152,12 +152,27 @@ private:
|
||||||
void setPeerSearchPressed(int pressed);
|
void setPeerSearchPressed(int pressed);
|
||||||
void setSearchedPressed(int pressed);
|
void setSearchedPressed(int pressed);
|
||||||
bool isPressed() const {
|
bool isPressed() const {
|
||||||
return _importantSwitchPressed || _pressed || (_hashtagPressed >= 0) || (_filteredPressed >= 0) || (_peerSearchPressed >= 0) || (_searchedPressed >= 0);
|
return _importantSwitchPressed
|
||||||
|
|| _pressed
|
||||||
|
|| (_hashtagPressed >= 0)
|
||||||
|
|| (_filteredPressed >= 0)
|
||||||
|
|| (_peerSearchPressed >= 0)
|
||||||
|
|| (_searchedPressed >= 0);
|
||||||
}
|
}
|
||||||
bool isSelected() const {
|
bool isSelected() const {
|
||||||
return _importantSwitchSelected || _selected || (_hashtagSelected >= 0) || (_filteredSelected >= 0) || (_peerSearchSelected >= 0) || (_searchedSelected >= 0);
|
return _importantSwitchSelected
|
||||||
|
|| _selected
|
||||||
|
|| (_hashtagSelected >= 0)
|
||||||
|
|| (_filteredSelected >= 0)
|
||||||
|
|| (_peerSearchSelected >= 0)
|
||||||
|
|| (_searchedSelected >= 0);
|
||||||
}
|
}
|
||||||
void handlePeerNameChange(not_null<PeerData*> peer, const PeerData::NameFirstChars &oldChars);
|
void handlePeerNameChange(
|
||||||
|
not_null<PeerData*> peer,
|
||||||
|
const PeerData::NameFirstChars &oldChars);
|
||||||
|
|
||||||
|
void applyDialog(const MTPDdialog &dialog);
|
||||||
|
void applyFeedDialog(const MTPDdialogFeed &dialog);
|
||||||
|
|
||||||
void itemRemoved(not_null<const HistoryItem*> item);
|
void itemRemoved(not_null<const HistoryItem*> item);
|
||||||
enum class UpdateRowSection {
|
enum class UpdateRowSection {
|
||||||
|
@ -170,7 +185,11 @@ private:
|
||||||
using UpdateRowSections = base::flags<UpdateRowSection>;
|
using UpdateRowSections = base::flags<UpdateRowSection>;
|
||||||
friend inline constexpr auto is_flag_type(UpdateRowSection) { return true; };
|
friend inline constexpr auto is_flag_type(UpdateRowSection) { return true; };
|
||||||
|
|
||||||
void updateDialogRow(PeerData *peer, MsgId msgId, QRect updateRect, UpdateRowSections sections = UpdateRowSection::All);
|
void updateDialogRow(
|
||||||
|
PeerData *peer,
|
||||||
|
MsgId msgId,
|
||||||
|
QRect updateRect,
|
||||||
|
UpdateRowSections sections = UpdateRowSection::All);
|
||||||
|
|
||||||
int dialogsOffset() const;
|
int dialogsOffset() const;
|
||||||
int filteredOffset() const;
|
int filteredOffset() const;
|
||||||
|
|
|
@ -313,68 +313,82 @@ void DialogsWidget::notify_historyMuteUpdated(History *history) {
|
||||||
_inner->notify_historyMuteUpdated(history);
|
_inner->notify_historyMuteUpdated(history);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogsWidget::unreadCountsReceived(const QVector<MTPDialog> &dialogs) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void DialogsWidget::dialogsReceived(
|
void DialogsWidget::dialogsReceived(
|
||||||
const MTPmessages_Dialogs &dialogs,
|
const MTPmessages_Dialogs &dialogs,
|
||||||
mtpRequestId requestId) {
|
mtpRequestId requestId) {
|
||||||
if (_dialogsRequestId != requestId) return;
|
if (_dialogsRequestId != requestId) return;
|
||||||
|
|
||||||
const QVector<MTPDialog> *dialogsList = 0;
|
const auto [dialogsList, messagesList] = [&] {
|
||||||
const QVector<MTPMessage> *messagesList = 0;
|
const auto process = [&](const auto &data) {
|
||||||
|
App::feedUsers(data.vusers);
|
||||||
|
App::feedChats(data.vchats);
|
||||||
|
return std::make_tuple(&data.vdialogs.v, &data.vmessages.v);
|
||||||
|
};
|
||||||
switch (dialogs.type()) {
|
switch (dialogs.type()) {
|
||||||
case mtpc_messages_dialogs: {
|
case mtpc_messages_dialogs:
|
||||||
auto &data = dialogs.c_messages_dialogs();
|
|
||||||
App::feedUsers(data.vusers);
|
|
||||||
App::feedChats(data.vchats);
|
|
||||||
messagesList = &data.vmessages.v;
|
|
||||||
dialogsList = &data.vdialogs.v;
|
|
||||||
_dialogsFull = true;
|
_dialogsFull = true;
|
||||||
} break;
|
return process(dialogs.c_messages_dialogs());
|
||||||
case mtpc_messages_dialogsSlice: {
|
|
||||||
auto &data = dialogs.c_messages_dialogsSlice();
|
|
||||||
App::feedUsers(data.vusers);
|
|
||||||
App::feedChats(data.vchats);
|
|
||||||
messagesList = &data.vmessages.v;
|
|
||||||
dialogsList = &data.vdialogs.v;
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
case mtpc_messages_dialogsSlice:
|
||||||
|
return process(dialogs.c_messages_dialogsSlice());
|
||||||
|
}
|
||||||
|
Unexpected("Type in DialogsWidget::dialogsReceived");
|
||||||
|
}();
|
||||||
|
|
||||||
|
updateDialogsOffset(*dialogsList, *messagesList);
|
||||||
|
|
||||||
|
applyReceivedDialogs(*dialogsList, *messagesList);
|
||||||
|
|
||||||
|
_dialogsRequestId = 0;
|
||||||
|
loadDialogs();
|
||||||
|
|
||||||
|
Auth().data().moreChatsLoaded().notify();
|
||||||
|
if (_dialogsFull && _pinnedDialogsReceived) {
|
||||||
|
Auth().data().allChatsLoaded().set(true);
|
||||||
|
}
|
||||||
Auth().api().requestContacts();
|
Auth().api().requestContacts();
|
||||||
|
|
||||||
if (dialogsList) {
|
|
||||||
TimeId lastDate = 0;
|
|
||||||
PeerId lastPeer = 0;
|
|
||||||
MsgId lastMsgId = 0;
|
|
||||||
for (int i = dialogsList->size(); i > 0;) {
|
|
||||||
auto &dialog = dialogsList->at(--i);
|
|
||||||
if (dialog.type() != mtpc_dialog) {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto &dialogData = dialog.c_dialog();
|
void DialogsWidget::updateDialogsOffset(
|
||||||
if (const auto peer = peerFromMTP(dialogData.vpeer)) {
|
const QVector<MTPDialog> &dialogs,
|
||||||
const auto history = App::history(peer);
|
const QVector<MTPMessage> &messages) {
|
||||||
history->setPinnedDialog(dialogData.is_pinned());
|
auto lastDate = TimeId(0);
|
||||||
|
auto lastPeer = PeerId(0);
|
||||||
if (!lastDate) {
|
auto lastMsgId = MsgId(0);
|
||||||
if (!lastPeer) lastPeer = peer;
|
const auto fillFromDialog = [&](const auto &dialog) {
|
||||||
if (auto msgId = dialogData.vtop_message.v) {
|
const auto peer = peerFromMTP(dialog.vpeer);
|
||||||
if (!lastMsgId) lastMsgId = msgId;
|
const auto msgId = dialog.vtop_message.v;
|
||||||
for (int j = messagesList->size(); j > 0;) {
|
if (!peer || !msgId) {
|
||||||
auto &message = messagesList->at(--j);
|
return;
|
||||||
if (idFromMessage(message) == msgId && peerFromMessage(message) == peer) {
|
}
|
||||||
if (auto date = dateFromMessage(message)) {
|
if (!lastPeer) {
|
||||||
|
lastPeer = peer;
|
||||||
|
}
|
||||||
|
if (!lastMsgId) {
|
||||||
|
lastMsgId = msgId;
|
||||||
|
}
|
||||||
|
for (auto j = messages.size(); j != 0;) {
|
||||||
|
const auto &message = messages[--j];
|
||||||
|
if (idFromMessage(message) == msgId
|
||||||
|
&& peerFromMessage(message) == peer) {
|
||||||
|
if (const auto date = dateFromMessage(message)) {
|
||||||
lastDate = date;
|
lastDate = date;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for (auto i = dialogs.size(); i != 0;) {
|
||||||
|
const auto &dialog = dialogs[--i];
|
||||||
|
switch (dialog.type()) {
|
||||||
|
case mtpc_dialog: fillFromDialog(dialog.c_dialog()); break;
|
||||||
|
case mtpc_dialogFeed: fillFromDialog(dialog.c_dialogFeed()); break;
|
||||||
|
default: Unexpected("Type in DialogsWidget::updateDialogsOffset");
|
||||||
|
}
|
||||||
|
if (lastDate) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (lastDate) {
|
if (lastDate) {
|
||||||
_dialogsOffsetDate = lastDate;
|
_dialogsOffsetDate = lastDate;
|
||||||
_dialogsOffsetId = lastMsgId;
|
_dialogsOffsetId = lastMsgId;
|
||||||
|
@ -382,58 +396,39 @@ void DialogsWidget::dialogsReceived(
|
||||||
} else {
|
} else {
|
||||||
_dialogsFull = true;
|
_dialogsFull = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Assert(messagesList != nullptr);
|
|
||||||
App::feedMsgs(*messagesList, NewMessageLast);
|
|
||||||
|
|
||||||
unreadCountsReceived(*dialogsList);
|
|
||||||
_inner->dialogsReceived(*dialogsList);
|
|
||||||
onListScroll();
|
|
||||||
} else {
|
|
||||||
_dialogsFull = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_dialogsRequestId = 0;
|
void DialogsWidget::pinnedDialogsReceived(
|
||||||
loadDialogs();
|
const MTPmessages_PeerDialogs &result,
|
||||||
|
mtpRequestId requestId) {
|
||||||
|
Expects(result.type() == mtpc_messages_peerDialogs);
|
||||||
|
|
||||||
Auth().data().moreChatsLoaded().notify();
|
|
||||||
if (_dialogsFull) {
|
|
||||||
Auth().data().allChatsLoaded().set(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DialogsWidget::pinnedDialogsReceived(const MTPmessages_PeerDialogs &dialogs, mtpRequestId requestId) {
|
|
||||||
if (_pinnedDialogsRequestId != requestId) return;
|
if (_pinnedDialogsRequestId != requestId) return;
|
||||||
|
|
||||||
if (dialogs.type() == mtpc_messages_peerDialogs) {
|
|
||||||
App::histories().clearPinned();
|
App::histories().clearPinned();
|
||||||
|
|
||||||
auto &dialogsData = dialogs.c_messages_peerDialogs();
|
auto &data = result.c_messages_peerDialogs();
|
||||||
App::feedUsers(dialogsData.vusers);
|
App::feedUsers(data.vusers);
|
||||||
App::feedChats(dialogsData.vchats);
|
App::feedChats(data.vchats);
|
||||||
auto &list = dialogsData.vdialogs.v;
|
|
||||||
for (auto i = list.size(); i > 0;) {
|
|
||||||
auto &dialog = list[--i];
|
|
||||||
if (dialog.type() != mtpc_dialog) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto &dialogData = dialog.c_dialog();
|
applyReceivedDialogs(data.vdialogs.v, data.vmessages.v);
|
||||||
if (const auto peer = peerFromMTP(dialogData.vpeer)) {
|
|
||||||
const auto history = App::history(peer);
|
|
||||||
history->setPinnedDialog(dialogData.is_pinned());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
App::feedMsgs(dialogsData.vmessages, NewMessageLast);
|
|
||||||
unreadCountsReceived(list);
|
|
||||||
_inner->dialogsReceived(list);
|
|
||||||
onListScroll();
|
|
||||||
}
|
|
||||||
|
|
||||||
_pinnedDialogsRequestId = 0;
|
_pinnedDialogsRequestId = 0;
|
||||||
_pinnedDialogsReceived = true;
|
_pinnedDialogsReceived = true;
|
||||||
|
|
||||||
Auth().data().moreChatsLoaded().notify();
|
Auth().data().moreChatsLoaded().notify();
|
||||||
|
if (_dialogsFull && _pinnedDialogsReceived) {
|
||||||
|
Auth().data().allChatsLoaded().set(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogsWidget::applyReceivedDialogs(
|
||||||
|
const QVector<MTPDialog> &dialogs,
|
||||||
|
const QVector<MTPMessage> &messages) {
|
||||||
|
Auth().api().applyDialogsPinned(dialogs);
|
||||||
|
App::feedMsgs(messages, NewMessageLast);
|
||||||
|
_inner->dialogsReceived(dialogs);
|
||||||
|
onListScroll();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DialogsWidget::dialogsFailed(const RPCError &error, mtpRequestId requestId) {
|
bool DialogsWidget::dialogsFailed(const RPCError &error, mtpRequestId requestId) {
|
||||||
|
|
|
@ -131,10 +131,20 @@ protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void animationCallback();
|
void animationCallback();
|
||||||
void dialogsReceived(const MTPmessages_Dialogs &dialogs, mtpRequestId requestId);
|
void dialogsReceived(
|
||||||
void pinnedDialogsReceived(const MTPmessages_PeerDialogs &dialogs, mtpRequestId requestId);
|
const MTPmessages_Dialogs &result,
|
||||||
|
mtpRequestId requestId);
|
||||||
|
void pinnedDialogsReceived(
|
||||||
|
const MTPmessages_PeerDialogs &result,
|
||||||
|
mtpRequestId requestId);
|
||||||
void searchReceived(DialogsSearchRequestType type, const MTPmessages_Messages &result, mtpRequestId requestId);
|
void searchReceived(DialogsSearchRequestType type, const MTPmessages_Messages &result, mtpRequestId requestId);
|
||||||
void peerSearchReceived(const MTPcontacts_Found &result, mtpRequestId requestId);
|
void peerSearchReceived(const MTPcontacts_Found &result, mtpRequestId requestId);
|
||||||
|
void updateDialogsOffset(
|
||||||
|
const QVector<MTPDialog> &dialogs,
|
||||||
|
const QVector<MTPMessage> &messages);
|
||||||
|
void applyReceivedDialogs(
|
||||||
|
const QVector<MTPDialog> &dialogs,
|
||||||
|
const QVector<MTPMessage> &messages);
|
||||||
|
|
||||||
void setSearchInPeer(PeerData *peer, UserData *from = nullptr);
|
void setSearchInPeer(PeerData *peer, UserData *from = nullptr);
|
||||||
void showSearchFrom();
|
void showSearchFrom();
|
||||||
|
@ -146,7 +156,6 @@ private:
|
||||||
void updateControlsGeometry();
|
void updateControlsGeometry();
|
||||||
void updateForwardBar();
|
void updateForwardBar();
|
||||||
|
|
||||||
void unreadCountsReceived(const QVector<MTPDialog> &dialogs);
|
|
||||||
bool dialogsFailed(const RPCError &error, mtpRequestId req);
|
bool dialogsFailed(const RPCError &error, mtpRequestId req);
|
||||||
bool searchFailed(DialogsSearchRequestType type, const RPCError &error, mtpRequestId req);
|
bool searchFailed(DialogsSearchRequestType type, const RPCError &error, mtpRequestId req);
|
||||||
bool peopleFailed(const RPCError &error, mtpRequestId req);
|
bool peopleFailed(const RPCError &error, mtpRequestId req);
|
||||||
|
|
Loading…
Reference in New Issue