mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Slightly refactored AdminLog::GenerateItems.
This commit is contained in:
parent
551e1f787c
commit
d6a30c4853
2 changed files with 464 additions and 232 deletions
|
@ -788,37 +788,39 @@ void InnerWidget::addEvents(Direction direction, const QVector<MTPChannelAdminLo
|
||||||
: newItemsForDownDirection;
|
: newItemsForDownDirection;
|
||||||
addToItems.reserve(oldItemsCount + events.size() * 2);
|
addToItems.reserve(oldItemsCount + events.size() * 2);
|
||||||
for (const auto &event : events) {
|
for (const auto &event : events) {
|
||||||
event.match([&](const MTPDchannelAdminLogEvent &data) {
|
const auto &data = event.match([](const MTPDchannelAdminLogEvent &d)
|
||||||
const auto id = data.vid().v;
|
-> const MTPDchannelAdminLogEvent & {
|
||||||
if (_eventIds.find(id) != _eventIds.end()) {
|
return d;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto count = 0;
|
|
||||||
const auto addOne = [&](OwnedItem item, TimeId sentDate) {
|
|
||||||
if (sentDate) {
|
|
||||||
_itemDates.emplace(item->data(), sentDate);
|
|
||||||
}
|
|
||||||
_eventIds.emplace(id);
|
|
||||||
_itemsByData.emplace(item->data(), item.get());
|
|
||||||
addToItems.push_back(std::move(item));
|
|
||||||
++count;
|
|
||||||
};
|
|
||||||
GenerateItems(
|
|
||||||
this,
|
|
||||||
_history,
|
|
||||||
data,
|
|
||||||
addOne);
|
|
||||||
if (count > 1) {
|
|
||||||
// Reverse the inner order of the added messages, because we load events
|
|
||||||
// from bottom to top but inside one event they go from top to bottom.
|
|
||||||
auto full = addToItems.size();
|
|
||||||
auto from = full - count;
|
|
||||||
for (auto i = 0, toReverse = count / 2; i != toReverse; ++i) {
|
|
||||||
std::swap(addToItems[from + i], addToItems[full - i - 1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
const auto id = data.vid().v;
|
||||||
|
if (_eventIds.find(id) != _eventIds.end()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto count = 0;
|
||||||
|
const auto addOne = [&](OwnedItem item, TimeId sentDate) {
|
||||||
|
if (sentDate) {
|
||||||
|
_itemDates.emplace(item->data(), sentDate);
|
||||||
|
}
|
||||||
|
_eventIds.emplace(id);
|
||||||
|
_itemsByData.emplace(item->data(), item.get());
|
||||||
|
addToItems.push_back(std::move(item));
|
||||||
|
++count;
|
||||||
|
};
|
||||||
|
GenerateItems(
|
||||||
|
this,
|
||||||
|
_history,
|
||||||
|
data,
|
||||||
|
addOne);
|
||||||
|
if (count > 1) {
|
||||||
|
// Reverse the inner order of the added messages, because we load events
|
||||||
|
// from bottom to top but inside one event they go from top to bottom.
|
||||||
|
auto full = addToItems.size();
|
||||||
|
auto from = full - count;
|
||||||
|
for (auto i = 0, toReverse = count / 2; i != toReverse; ++i) {
|
||||||
|
std::swap(addToItems[from + i], addToItems[full - i - 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
auto newItemsCount = _items.size() + ((direction == Direction::Up) ? 0 : newItemsForDownDirection.size());
|
auto newItemsCount = _items.size() + ((direction == Direction::Up) ? 0 : newItemsForDownDirection.size());
|
||||||
if (newItemsCount != oldItemsCount) {
|
if (newItemsCount != oldItemsCount) {
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue