Chatterino
TwitchAccountManager.hpp
Go to the documentation of this file.
1 #pragma once
2 
7 
8 #include <boost/signals2.hpp>
9 
10 #include <mutex>
11 #include <vector>
12 
13 //
14 // Warning: This class is not supposed to be created directly.
15 // Get yourself an instance from our friends over at
16 // AccountManager.hpp
17 //
18 
19 namespace chatterino {
20 
21 class TwitchAccount;
22 class AccountController;
23 
25 {
27 
28 public:
29  struct UserData {
30  QString username;
31  QString userID;
32  QString clientID;
33  QString oauthToken;
34  };
35 
36  // Returns the current twitchUsers, or the anonymous user if we're not
37  // currently logged in
38  std::shared_ptr<TwitchAccount> getCurrent();
39 
40  std::vector<QString> getUsernames() const;
41 
42  std::shared_ptr<TwitchAccount> findUserByUsername(
43  const QString &username) const;
44  bool userExists(const QString &username) const;
45 
46  void reloadUsers();
47  void load();
48 
49  bool isLoggedIn() const;
50 
51  pajlada::Settings::Setting<QString> currentUsername{"/accounts/current",
52  ""};
53  // pajlada::Signals::NoArgSignal currentUserChanged;
54  boost::signals2::signal<void()> currentUserChanged;
55  pajlada::Signals::NoArgSignal userListUpdated;
56 
58 
59 private:
60  enum class AddUserResponse {
61  UserAlreadyExists,
62  UserValuesUpdated,
63  UserAdded,
64  };
65  AddUserResponse addUser(const UserData &data);
66  bool removeUser(TwitchAccount *account);
67 
68  std::shared_ptr<TwitchAccount> currentUser_;
69 
70  std::shared_ptr<TwitchAccount> anonymousUser_;
71  mutable std::mutex mutex_;
72 
73  friend class AccountController;
74 };
75 
76 } // namespace chatterino
Definition: SignalVector.hpp:21
Definition: TwitchAccount.hpp:56
std::shared_ptr< TwitchAccount > getCurrent()
Definition: TwitchAccountManager.cpp:25
std::vector< QString > getUsernames() const
Definition: TwitchAccountManager.cpp:35
QString oauthToken
Definition: TwitchAccountManager.hpp:33
Definition: Application.cpp:48
Definition: TwitchAccountManager.hpp:24
bool isLoggedIn() const
Definition: TwitchAccountManager.cpp:163
Definition: TwitchAccountManager.hpp:29
QString userID
Definition: TwitchAccountManager.hpp:31
std::shared_ptr< TwitchAccount > findUserByUsername(const QString &username) const
Definition: TwitchAccountManager.cpp:49
bool userExists(const QString &username) const
Definition: TwitchAccountManager.cpp:65
QString username
Definition: TwitchAccountManager.hpp:30
Definition: AccountController.hpp:18
QString clientID
Definition: TwitchAccountManager.hpp:32
void load()
Definition: TwitchAccountManager.cpp:140
boost::signals2::signal< void()> currentUserChanged
Definition: TwitchAccountManager.hpp:54
SignalVector< std::shared_ptr< TwitchAccount > > accounts
Definition: TwitchAccountManager.hpp:57
pajlada::Signals::NoArgSignal userListUpdated
Definition: TwitchAccountManager.hpp:55
pajlada::Settings::Setting< QString > currentUsername
Definition: TwitchAccountManager.hpp:51
void reloadUsers()
Definition: TwitchAccountManager.cpp:70