mirror of https://github.com/procxx/kepka.git
Improve filters reordering.
This commit is contained in:
parent
18805a5ef8
commit
b8684af537
|
@ -32,20 +32,4 @@ void SaveNewFilterPinned(
|
|||
|
||||
}
|
||||
|
||||
void SaveNewOrder(
|
||||
not_null<Main::Session*> session,
|
||||
const std::vector<FilterId> &order) {
|
||||
auto &filters = session->data().chatsFilters();
|
||||
auto ids = QVector<MTPint>();
|
||||
ids.reserve(order.size());
|
||||
for (const auto id : order) {
|
||||
ids.push_back(MTP_int(id));
|
||||
}
|
||||
const auto wrapped = MTP_vector<MTPint>(ids);
|
||||
filters.apply(MTP_updateDialogFilterOrder(wrapped));
|
||||
session->api().request(MTPmessages_UpdateDialogFiltersOrder(
|
||||
wrapped
|
||||
)).send();
|
||||
}
|
||||
|
||||
} // namespace Api
|
||||
|
|
|
@ -17,8 +17,4 @@ void SaveNewFilterPinned(
|
|||
not_null<Main::Session*> session,
|
||||
FilterId filterId);
|
||||
|
||||
void SaveNewOrder(
|
||||
not_null<Main::Session*> session,
|
||||
const std::vector<FilterId> &order);
|
||||
|
||||
} // namespace Api
|
||||
|
|
|
@ -501,7 +501,8 @@ void ManageFiltersPrepare::SetupBox(
|
|||
auto addRequests = Requests(), removeRequests = Requests();
|
||||
auto &realFilters = session->data().chatsFilters();
|
||||
const auto &list = realFilters.list();
|
||||
auto order = QVector<MTPint>();
|
||||
auto order = std::vector<FilterId>();
|
||||
order.reserve(rows->size());
|
||||
for (const auto &row : *rows) {
|
||||
const auto id = row.filter.id();
|
||||
const auto removed = row.removed;
|
||||
|
@ -509,7 +510,7 @@ void ManageFiltersPrepare::SetupBox(
|
|||
if (removed && i == end(list)) {
|
||||
continue;
|
||||
} else if (!removed && i != end(list) && *i == row.filter) {
|
||||
order.push_back(MTP_int(id));
|
||||
order.push_back(id);
|
||||
continue;
|
||||
}
|
||||
const auto newId = ids.take(row.button).value_or(id);
|
||||
|
@ -526,7 +527,7 @@ void ManageFiltersPrepare::SetupBox(
|
|||
removeRequests.push_back(request);
|
||||
} else {
|
||||
addRequests.push_back(request);
|
||||
order.push_back(MTP_int(newId));
|
||||
order.push_back(newId);
|
||||
}
|
||||
realFilters.apply(MTP_updateDialogFilter(
|
||||
MTP_flags(removed
|
||||
|
@ -542,12 +543,8 @@ void ManageFiltersPrepare::SetupBox(
|
|||
std::move(request)
|
||||
).afterRequest(previousId).send();
|
||||
}
|
||||
if (!order.isEmpty() && !addRequests.empty()) {
|
||||
realFilters.apply(
|
||||
MTP_updateDialogFilterOrder(MTP_vector(order)));
|
||||
session->api().request(MTPmessages_UpdateDialogFiltersOrder(
|
||||
MTP_vector(order)
|
||||
)).afterRequest(previousId).send();
|
||||
if (!order.empty() && !addRequests.empty()) {
|
||||
realFilters.saveOrder(order, previousId);
|
||||
}
|
||||
box->closeBox();
|
||||
};
|
||||
|
|
|
@ -451,6 +451,28 @@ const ChatFilter &ChatFilters::applyUpdatedPinned(
|
|||
return *i;
|
||||
}
|
||||
|
||||
void ChatFilters::saveOrder(
|
||||
const std::vector<FilterId> &order,
|
||||
mtpRequestId after) {
|
||||
if (after) {
|
||||
_saveOrderAfterId = after;
|
||||
}
|
||||
const auto api = &_owner->session().api();
|
||||
api->request(_saveOrderRequestId).cancel();
|
||||
|
||||
auto ids = QVector<MTPint>();
|
||||
ids.reserve(order.size());
|
||||
for (const auto id : order) {
|
||||
ids.push_back(MTP_int(id));
|
||||
}
|
||||
const auto wrapped = MTP_vector<MTPint>(ids);
|
||||
|
||||
apply(MTP_updateDialogFilterOrder(wrapped));
|
||||
_saveOrderRequestId = api->request(MTPmessages_UpdateDialogFiltersOrder(
|
||||
wrapped
|
||||
)).afterRequest(_saveOrderAfterId).send();
|
||||
}
|
||||
|
||||
bool ChatFilters::archiveNeeded() const {
|
||||
for (const auto &filter : _list) {
|
||||
if (!(filter.flags() & ChatFilter::Flag::NoArchived)) {
|
||||
|
|
|
@ -106,6 +106,9 @@ public:
|
|||
const ChatFilter &applyUpdatedPinned(
|
||||
FilterId id,
|
||||
const std::vector<Dialogs::Key> &dialogs);
|
||||
void saveOrder(
|
||||
const std::vector<FilterId> &order,
|
||||
mtpRequestId after = 0);
|
||||
|
||||
[[nodiscard]] bool archiveNeeded() const;
|
||||
|
||||
|
@ -123,6 +126,8 @@ private:
|
|||
rpl::event_stream<> _listChanged;
|
||||
rpl::event_stream<not_null<History*>> _refreshHistoryRequests;
|
||||
mtpRequestId _loadRequestId = 0;
|
||||
mtpRequestId _saveOrderRequestId = 0;
|
||||
mtpRequestId _saveOrderAfterId = 0;
|
||||
bool _loaded = false;
|
||||
|
||||
};
|
||||
|
|
|
@ -99,7 +99,7 @@ void FiltersMenu::setup() {
|
|||
|
||||
void FiltersMenu::refresh() {
|
||||
const auto filters = &_session->session().data().chatsFilters();
|
||||
if (filters->list().empty()) {
|
||||
if (filters->list().empty() || _ignoreRefresh) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -220,7 +220,10 @@ void FiltersMenu::applyReorder(
|
|||
&Data::ChatFilter::id
|
||||
) | ranges::to_vector;
|
||||
base::reorder(order, oldPosition, newPosition);
|
||||
Api::SaveNewOrder(&_session->session(), order);
|
||||
|
||||
_ignoreRefresh = true;
|
||||
filters->saveOrder(order);
|
||||
_ignoreRefresh = false;
|
||||
}
|
||||
|
||||
} // namespace Window
|
||||
|
|
|
@ -57,6 +57,7 @@ private:
|
|||
base::flat_map<FilterId, base::unique_qptr<Ui::SideBarButton>> _filters;
|
||||
FilterId _activeFilterId = 0;
|
||||
int _reordering = 0;
|
||||
bool _ignoreRefresh = false;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit b051948e6947b97394df9f0f8b24e8bf407e596c
|
||||
Subproject commit eaab3f9a8a5a1bc429449a9a40c0798f2203947b
|
Loading…
Reference in New Issue