Load all archive after the main list for filters.

This commit is contained in:
John Preston 2020-03-18 18:37:04 +04:00
parent ad8b0387f3
commit dc49f7e6dc
4 changed files with 39 additions and 6 deletions

View File

@ -26,6 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_chat.h"
#include "data/data_user.h"
#include "data/data_cloud_themes.h"
#include "data/data_chat_filters.h"
#include "data/data_histories.h"
#include "dialogs/dialogs_key.h"
#include "core/core_cloud_password.h"
@ -248,6 +249,13 @@ ApiWrap::ApiWrap(not_null<Main::Session*> session)
photoUploadReady(data.fullId, data.file);
}, _session->lifetime());
_session->data().chatsFilters().changed(
) | rpl::filter([=] {
return _session->data().chatsFilters().archiveNeeded();
}) | rpl::start_with_next([=] {
requestMoreDialogsIfNeeded();
}, _session->lifetime());
setupSupportMode();
});
}
@ -856,13 +864,11 @@ void ApiWrap::requestMoreDialogs(Data::Folder *folder) {
count);
});
if (!folder) {
if (!_dialogsLoadState || !_dialogsLoadState->listReceived) {
refreshDialogsLoadBlocked();
}
requestDialogs(folder);
requestContacts();
if (!folder
&& (!_dialogsLoadState || !_dialogsLoadState->listReceived)) {
refreshDialogsLoadBlocked();
}
requestMoreDialogsIfNeeded();
_session->data().chatsListChanged(folder);
}).fail([=](const RPCError &error) {
dialogsLoadState(folder)->requestId = 0;
@ -888,6 +894,21 @@ void ApiWrap::refreshDialogsLoadBlocked() {
&& (_dialogsLoadState->offsetDate <= _dialogsLoadTill);
}
void ApiWrap::requestMoreDialogsIfNeeded() {
if (_dialogsLoadState && !_dialogsLoadState->listReceived) {
if (_dialogsLoadState->requestId) {
return;
}
requestDialogs(nullptr);
} else if (const auto folder = _session->data().folderLoaded(
Data::Folder::kId)) {
if (_session->data().chatsFilters().archiveNeeded()) {
requestMoreDialogs(folder);
}
}
requestContacts();
}
void ApiWrap::updateDialogsOffset(
Data::Folder *folder,
const QVector<MTPDialog> &dialogs,

View File

@ -170,6 +170,7 @@ public:
void requestDialogs(Data::Folder *folder = nullptr);
void requestPinnedDialogs(Data::Folder *folder = nullptr);
void requestMoreBlockedByDateDialogs();
void requestMoreDialogsIfNeeded();
rpl::producer<bool> dialogsLoadMayBlockByDate() const;
rpl::producer<bool> dialogsLoadBlockedByDate() const;

View File

@ -439,6 +439,15 @@ const ChatFilter &ChatFilters::applyUpdatedPinned(
return *i;
}
bool ChatFilters::archiveNeeded() const {
for (const auto &filter : _list) {
if (!(filter.flags() & ChatFilter::Flag::NoArchived)) {
return true;
}
}
return false;
}
const std::vector<ChatFilter> &ChatFilters::list() const {
return _list;
}

View File

@ -103,6 +103,8 @@ public:
FilterId id,
const std::vector<Dialogs::Key> &dialogs);
[[nodiscard]] bool archiveNeeded() const;
private:
void load(bool force);
bool applyOrder(const QVector<MTPint> &order);