Avoid unnecessary saved dialogs load requests.
This commit is contained in:
parent
a4f4e4564a
commit
a30d0eccda
2 changed files with 30 additions and 2 deletions
|
@ -28,7 +28,8 @@ SavedMessages::SavedMessages(not_null<Session*> owner)
|
||||||
, _chatsList(
|
, _chatsList(
|
||||||
&owner->session(),
|
&owner->session(),
|
||||||
FilterId(),
|
FilterId(),
|
||||||
owner->maxPinnedChatsLimitValue(this)) {
|
owner->maxPinnedChatsLimitValue(this))
|
||||||
|
, _loadMore([=] { sendLoadMoreRequests(); }) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SavedMessages::~SavedMessages() = default;
|
SavedMessages::~SavedMessages() = default;
|
||||||
|
@ -60,6 +61,16 @@ not_null<SavedSublist*> SavedMessages::sublist(not_null<PeerData*> peer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SavedMessages::loadMore() {
|
void SavedMessages::loadMore() {
|
||||||
|
_loadMoreScheduled = true;
|
||||||
|
_loadMore.call();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SavedMessages::loadMore(not_null<SavedSublist*> sublist) {
|
||||||
|
_loadMoreSublistsScheduled.emplace(sublist);
|
||||||
|
_loadMore.call();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SavedMessages::sendLoadMore() {
|
||||||
if (_loadMoreRequestId || _chatsList.loaded()) {
|
if (_loadMoreRequestId || _chatsList.loaded()) {
|
||||||
return;
|
return;
|
||||||
} else if (!_pinnedLoaded) {
|
} else if (!_pinnedLoaded) {
|
||||||
|
@ -102,7 +113,7 @@ void SavedMessages::loadPinned() {
|
||||||
}).send();
|
}).send();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SavedMessages::loadMore(not_null<SavedSublist*> sublist) {
|
void SavedMessages::sendLoadMore(not_null<SavedSublist*> sublist) {
|
||||||
if (_loadMoreRequests.contains(sublist) || sublist->isFullLoaded()) {
|
if (_loadMoreRequests.contains(sublist) || sublist->isFullLoaded()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -233,6 +244,15 @@ void SavedMessages::apply(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SavedMessages::sendLoadMoreRequests() {
|
||||||
|
if (_loadMoreScheduled) {
|
||||||
|
sendLoadMore();
|
||||||
|
}
|
||||||
|
for (const auto sublist : base::take(_loadMoreSublistsScheduled)) {
|
||||||
|
sendLoadMore(sublist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SavedMessages::apply(const MTPDupdatePinnedSavedDialogs &update) {
|
void SavedMessages::apply(const MTPDupdatePinnedSavedDialogs &update) {
|
||||||
const auto list = update.vorder();
|
const auto list = update.vorder();
|
||||||
if (!list) {
|
if (!list) {
|
||||||
|
|
|
@ -41,6 +41,10 @@ private:
|
||||||
void loadPinned();
|
void loadPinned();
|
||||||
void apply(const MTPmessages_SavedDialogs &result, bool pinned);
|
void apply(const MTPmessages_SavedDialogs &result, bool pinned);
|
||||||
|
|
||||||
|
void sendLoadMore();
|
||||||
|
void sendLoadMore(not_null<SavedSublist*> sublist);
|
||||||
|
void sendLoadMoreRequests();
|
||||||
|
|
||||||
const not_null<Session*> _owner;
|
const not_null<Session*> _owner;
|
||||||
|
|
||||||
Dialogs::MainList _chatsList;
|
Dialogs::MainList _chatsList;
|
||||||
|
@ -56,6 +60,10 @@ private:
|
||||||
MsgId _offsetId = 0;
|
MsgId _offsetId = 0;
|
||||||
PeerData *_offsetPeer = nullptr;
|
PeerData *_offsetPeer = nullptr;
|
||||||
|
|
||||||
|
SingleQueuedInvokation _loadMore;
|
||||||
|
base::flat_set<not_null<SavedSublist*>> _loadMoreSublistsScheduled;
|
||||||
|
bool _loadMoreScheduled = false;
|
||||||
|
|
||||||
bool _pinnedLoaded = false;
|
bool _pinnedLoaded = false;
|
||||||
bool _unsupported = false;
|
bool _unsupported = false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue