#pragma once #include "controllers/userdata/UserData.hpp" #include "util/QStringHash.hpp" #include "util/RapidjsonHelpers.hpp" #include "util/RapidJsonSerializeQString.hpp" #include "util/serialize/Container.hpp" #include #include #include #include #include #include namespace chatterino { class Paths; class IUserDataController { public: virtual ~IUserDataController() = default; virtual std::optional getUser(const QString &userID) const = 0; virtual void setUserColor(const QString &userID, const QString &colorString) = 0; }; class UserDataController : public IUserDataController { public: explicit UserDataController(const Paths &paths); // Get extra data about a user // If the user does not have any extra data, return none std::optional getUser(const QString &userID) const override; // Update or insert extra data for the user's color override void setUserColor(const QString &userID, const QString &colorString) override; private: void update(std::unordered_map &&newUsers); std::unordered_map getUsers() const; // Stores a real-time list of users & their customizations std::unordered_map users; mutable std::shared_mutex usersMutex; std::shared_ptr sm; pajlada::Settings::Setting> setting; }; } // namespace chatterino