Chatterino
UserDataController.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "common/Singleton.hpp"
5 #include "util/QStringHash.hpp"
9 
10 #include <QColor>
11 #include <QString>
12 #include <boost/optional.hpp>
13 #include <pajlada/settings.hpp>
14 
15 #include <shared_mutex>
16 #include <unordered_map>
17 
18 namespace chatterino {
19 
21 {
22 public:
23  virtual ~IUserDataController() = default;
24 
25  virtual boost::optional<UserData> getUser(const QString &userID) const = 0;
26 
27  virtual void setUserColor(const QString &userID,
28  const QString &colorString) = 0;
29 };
30 
32 {
33 public:
35 
36  // Get extra data about a user
37  // If the user does not have any extra data, return none
38  boost::optional<UserData> getUser(const QString &userID) const override;
39 
40  // Update or insert extra data for the user's color override
41  void setUserColor(const QString &userID,
42  const QString &colorString) override;
43 
44 protected:
45  void save() override;
46 
47 private:
48  void update(std::unordered_map<QString, UserData> &&newUsers);
49 
50  std::unordered_map<QString, UserData> getUsers() const;
51 
52  // Stores a real-time list of users & their customizations
53  std::unordered_map<QString, UserData> users;
54  mutable std::shared_mutex usersMutex;
55 
56  std::shared_ptr<pajlada::Settings::SettingManager> sm;
57  pajlada::Settings::Setting<std::unordered_map<QString, UserData>> setting;
58 };
59 
60 } // namespace chatterino
Definition: Singleton.hpp:10
Definition: Application.cpp:48
Definition: UserDataController.hpp:20
Definition: UserDataController.hpp:31
virtual ~IUserDataController()=default
virtual boost::optional< UserData > getUser(const QString &userID) const =0
virtual void setUserColor(const QString &userID, const QString &colorString)=0