mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-08-04 11:00:46 +00:00
Move manage filters to a Settings section.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user