Move manage filters to a Settings section.

This commit is contained in:
John Preston
2020-03-24 12:58:47 +04:00
parent 568325f201
commit e8bf5bb5ce
14 changed files with 238 additions and 191 deletions
@@ -19,6 +19,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "apiwrap.h"
namespace Data {
namespace {
constexpr auto kRefreshSuggestedTimeout = 7200 * crl::time(1000);
} // namespace
ChatFilter::ChatFilter(
FilterId id,
@@ -500,5 +505,50 @@ auto ChatFilters::refreshHistoryRequests() const
return _refreshHistoryRequests.events();
}
void ChatFilters::requestSuggested() {
if (_suggestedRequestId) {
return;
}
if (_suggestedLastReceived > 0
&& crl::now() - _suggestedLastReceived < kRefreshSuggestedTimeout) {
return;
}
const auto api = &_owner->session().api();
_suggestedRequestId = api->request(MTPmessages_GetSuggestedDialogFilters(
)).done([=](const MTPVector<MTPDialogFilterSuggested> &data) {
_suggestedRequestId = 0;
_suggestedLastReceived = crl::now();
_suggested = ranges::view::all(
data.v
) | ranges::view::transform([&](const MTPDialogFilterSuggested &f) {
return f.match([&](const MTPDdialogFilterSuggested &data) {
return SuggestedFilter{
Data::ChatFilter::FromTL(data.vfilter(), _owner),
qs(data.vdescription())
};
});
}) | ranges::to_vector;
_suggestedUpdated.fire({});
}).fail([=](const RPCError &error) {
_suggestedRequestId = 0;
_suggestedLastReceived = crl::now() + kRefreshSuggestedTimeout / 2;
_suggestedUpdated.fire({});
}).send();
}
bool ChatFilters::suggestedLoaded() const {
return (_suggestedLastReceived > 0);
}
const std::vector<SuggestedFilter> &ChatFilters::suggestedFilters() const {
return _suggested;
}
rpl::producer<> ChatFilters::suggestedUpdated() const {
return _suggestedUpdated.events();
}
} // namespace Data
@@ -85,6 +85,11 @@ inline bool operator!=(const ChatFilter &a, const ChatFilter &b) {
return !(a == b);
}
struct SuggestedFilter {
ChatFilter filter;
QString description;
};
class ChatFilters final {
public:
explicit ChatFilters(not_null<Session*> owner);
@@ -112,6 +117,12 @@ public:
[[nodiscard]] bool archiveNeeded() const;
void requestSuggested();
[[nodiscard]] bool suggestedLoaded() const;
[[nodiscard]] auto suggestedFilters() const
-> const std::vector<SuggestedFilter> &;
[[nodiscard]] rpl::producer<> suggestedUpdated() const;
private:
void load(bool force);
bool applyOrder(const QVector<MTPint> &order);
@@ -130,6 +141,11 @@ private:
mtpRequestId _saveOrderAfterId = 0;
bool _loaded = false;
mtpRequestId _suggestedRequestId = 0;
std::vector<SuggestedFilter> _suggested;
rpl::event_stream<> _suggestedUpdated;
crl::time _suggestedLastReceived = 0;
};
} // namespace Data