2018-05-12 20:34:13 +02:00
|
|
|
#pragma once
|
|
|
|
|
2023-07-23 13:26:12 +02:00
|
|
|
#include "util/QStringHash.hpp"
|
2018-06-27 02:17:05 +02:00
|
|
|
#include "util/RapidjsonHelpers.hpp"
|
|
|
|
|
2018-11-03 13:00:07 +01:00
|
|
|
#include <pajlada/serialize.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 <QString>
|
|
|
|
#include <rapidjson/document.h>
|
2018-05-12 20:34:13 +02:00
|
|
|
|
|
|
|
#include <cassert>
|
|
|
|
|
|
|
|
namespace chatterino {
|
|
|
|
|
2022-12-31 15:41:01 +01:00
|
|
|
struct HelixBlock;
|
|
|
|
|
2018-05-12 20:34:13 +02:00
|
|
|
struct TwitchUser {
|
|
|
|
QString id;
|
|
|
|
mutable QString name;
|
|
|
|
mutable QString displayName;
|
|
|
|
|
|
|
|
void update(const TwitchUser &other) const
|
|
|
|
{
|
|
|
|
assert(this->id == other.id);
|
|
|
|
|
|
|
|
this->name = other.name;
|
|
|
|
this->displayName = other.displayName;
|
|
|
|
}
|
|
|
|
|
2022-12-31 15:41:01 +01:00
|
|
|
void fromHelixBlock(const HelixBlock &ignore);
|
2021-02-14 14:01:13 +01:00
|
|
|
|
2018-05-12 20:34:13 +02:00
|
|
|
bool operator<(const TwitchUser &rhs) const
|
|
|
|
{
|
|
|
|
return this->id < rhs.id;
|
|
|
|
}
|
2023-07-23 13:26:12 +02:00
|
|
|
|
|
|
|
bool operator==(const TwitchUser &rhs) const
|
|
|
|
{
|
|
|
|
return this->id == rhs.id;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool operator!=(const TwitchUser &rhs) const
|
|
|
|
{
|
|
|
|
return !(*this == rhs);
|
|
|
|
}
|
2018-05-12 20:34:13 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace chatterino
|
2018-06-27 02:17:05 +02:00
|
|
|
|
|
|
|
namespace pajlada {
|
|
|
|
|
2018-11-03 13:00:07 +01:00
|
|
|
template <>
|
|
|
|
struct Deserialize<chatterino::TwitchUser> {
|
|
|
|
static chatterino::TwitchUser get(const rapidjson::Value &value,
|
|
|
|
bool *error = nullptr)
|
|
|
|
{
|
|
|
|
using namespace chatterino;
|
|
|
|
|
|
|
|
TwitchUser user;
|
|
|
|
|
|
|
|
if (!value.IsObject())
|
2018-08-15 22:46:20 +02:00
|
|
|
{
|
2018-11-03 13:00:07 +01:00
|
|
|
PAJLADA_REPORT_ERROR(error)
|
|
|
|
return user;
|
|
|
|
}
|
2018-06-27 02:17:05 +02:00
|
|
|
|
2018-11-03 13:00:07 +01:00
|
|
|
if (!rj::getSafe(value, "_id", user.id))
|
|
|
|
{
|
|
|
|
PAJLADA_REPORT_ERROR(error)
|
2018-06-27 02:17:05 +02:00
|
|
|
return user;
|
|
|
|
}
|
|
|
|
|
2018-11-03 13:00:07 +01:00
|
|
|
if (!rj::getSafe(value, "name", user.name))
|
|
|
|
{
|
|
|
|
PAJLADA_REPORT_ERROR(error)
|
|
|
|
return user;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!rj::getSafe(value, "display_name", user.displayName))
|
|
|
|
{
|
|
|
|
PAJLADA_REPORT_ERROR(error)
|
|
|
|
return user;
|
|
|
|
}
|
|
|
|
|
|
|
|
return user;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2018-06-27 02:17:05 +02:00
|
|
|
} // namespace pajlada
|
2023-07-23 13:26:12 +02:00
|
|
|
|
|
|
|
template <>
|
|
|
|
struct std::hash<chatterino::TwitchUser> {
|
|
|
|
inline size_t operator()(const chatterino::TwitchUser &user) const noexcept
|
|
|
|
{
|
|
|
|
return std::hash<QString>{}(user.id);
|
|
|
|
}
|
|
|
|
};
|