2021-05-24 12:13:59 +02:00
|
|
|
#include "common/ChatterSet.hpp"
|
|
|
|
|
|
|
|
#include "debug/Benchmark.hpp"
|
|
|
|
|
Sort and force grouping of includes (#4172)
This change enforces strict include grouping using IncludeCategories
In addition to adding this to the .clang-format file and applying it in the tests/src and src directories, I also did the following small changes:
In ChatterSet.hpp, I changed lrucache to a <>include
In Irc2.hpp, I change common/SignalVector.hpp to a "project-include"
In AttachedWindow.cpp, NativeMessaging.cpp, WindowsHelper.hpp, BaseWindow.cpp, and StreamerMode.cpp, I disabled clang-format for the windows-includes
In WindowDescriptors.hpp, I added the missing vector include. It was previously not needed because the include was handled by another file that was previously included first.
clang-format minimum version has been bumped, so Ubuntu version used in the check-formatting job has been bumped to 22.04 (which is the latest LTS)
2022-11-27 19:32:53 +01:00
|
|
|
#include <tuple>
|
|
|
|
|
2021-05-24 12:13:59 +02:00
|
|
|
namespace chatterino {
|
|
|
|
|
|
|
|
ChatterSet::ChatterSet()
|
|
|
|
: items(chatterLimit)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void ChatterSet::addRecentChatter(const QString &userName)
|
|
|
|
{
|
|
|
|
this->items.put(userName.toLower(), userName);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ChatterSet::updateOnlineChatters(
|
|
|
|
const std::unordered_set<QString> &lowerCaseUsernames)
|
|
|
|
{
|
|
|
|
BenchmarkGuard bench("update online chatters");
|
|
|
|
|
|
|
|
// Create a new lru cache without the users that are not present anymore.
|
|
|
|
cache::lru_cache<QString, QString> tmp(chatterLimit);
|
|
|
|
|
|
|
|
for (auto &&chatter : lowerCaseUsernames)
|
|
|
|
{
|
|
|
|
if (this->items.exists(chatter))
|
|
|
|
tmp.put(chatter, this->items.get(chatter));
|
|
|
|
|
|
|
|
// Less chatters than the limit => try to preserve as many as possible.
|
|
|
|
else if (lowerCaseUsernames.size() < chatterLimit)
|
|
|
|
tmp.put(chatter, chatter);
|
|
|
|
}
|
|
|
|
|
|
|
|
this->items = std::move(tmp);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool ChatterSet::contains(const QString &userName) const
|
|
|
|
{
|
|
|
|
return this->items.exists(userName.toLower());
|
|
|
|
}
|
|
|
|
|
|
|
|
std::vector<QString> ChatterSet::filterByPrefix(const QString &prefix) const
|
|
|
|
{
|
|
|
|
QString lowerPrefix = prefix.toLower();
|
|
|
|
std::vector<QString> result;
|
|
|
|
|
|
|
|
for (auto &&item : this->items)
|
|
|
|
{
|
|
|
|
if (item.first.startsWith(lowerPrefix))
|
|
|
|
result.push_back(item.second);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2023-09-24 14:17:17 +02:00
|
|
|
std::vector<std::pair<QString, QString>> ChatterSet::all() const
|
|
|
|
{
|
|
|
|
return {this->items.begin(), this->items.end()};
|
|
|
|
}
|
|
|
|
|
2021-05-24 12:13:59 +02:00
|
|
|
} // namespace chatterino
|