Skip to content

Commit

Permalink
Avoid unnecessary saved dialogs load requests.
Browse files Browse the repository at this point in the history
  • Loading branch information
john-preston committed Jan 1, 2024
1 parent a4f4e45 commit a30d0ec
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
24 changes: 22 additions & 2 deletions Telegram/SourceFiles/data/data_saved_messages.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ SavedMessages::SavedMessages(not_null<Session*> owner)
, _chatsList(
&owner->session(),
FilterId(),
owner->maxPinnedChatsLimitValue(this)) {
owner->maxPinnedChatsLimitValue(this))
, _loadMore([=] { sendLoadMoreRequests(); }) {
}

SavedMessages::~SavedMessages() = default;
Expand Down Expand Up @@ -60,6 +61,16 @@ not_null<SavedSublist*> SavedMessages::sublist(not_null<PeerData*> peer) {
}

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()) {
return;
} else if (!_pinnedLoaded) {
Expand Down Expand Up @@ -102,7 +113,7 @@ void SavedMessages::loadPinned() {
}).send();
}

void SavedMessages::loadMore(not_null<SavedSublist*> sublist) {
void SavedMessages::sendLoadMore(not_null<SavedSublist*> sublist) {
if (_loadMoreRequests.contains(sublist) || sublist->isFullLoaded()) {
return;
}
Expand Down Expand Up @@ -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) {
const auto list = update.vorder();
if (!list) {
Expand Down
8 changes: 8 additions & 0 deletions Telegram/SourceFiles/data/data_saved_messages.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ class SavedMessages final {
void loadPinned();
void apply(const MTPmessages_SavedDialogs &result, bool pinned);

void sendLoadMore();
void sendLoadMore(not_null<SavedSublist*> sublist);
void sendLoadMoreRequests();

const not_null<Session*> _owner;

Dialogs::MainList _chatsList;
Expand All @@ -56,6 +60,10 @@ class SavedMessages final {
MsgId _offsetId = 0;
PeerData *_offsetPeer = nullptr;

SingleQueuedInvokation _loadMore;
base::flat_set<not_null<SavedSublist*>> _loadMoreSublistsScheduled;
bool _loadMoreScheduled = false;

bool _pinnedLoaded = false;
bool _unsupported = false;

Expand Down

0 comments on commit a30d0ec

Please sign in to comment.