#pragma once #include "controllers/accounts/Account.hpp" #include "providers/twitch/TwitchUser.hpp" #include #include #include #include #include #include namespace chatterino { enum IgnoreResult { IgnoreResult_Success, IgnoreResult_AlreadyIgnored, IgnoreResult_Failed, }; enum UnignoreResult { UnignoreResult_Success, UnignoreResult_Failed, }; enum FollowResult { FollowResult_Following, FollowResult_NotFollowing, FollowResult_Failed, }; class TwitchAccount : public Account { public: TwitchAccount(const QString &username, const QString &oauthToken_, const QString &oauthClient_, const QString &_userID); virtual QString toString() const override; const QString &getUserName() const; const QString &getOAuthToken() const; const QString &getOAuthClient() const; const QString &getUserId() const; // Attempts to update the users OAuth Client ID // Returns true if the value has changed, otherwise false bool setOAuthClient(const QString &newClientID); // Attempts to update the users OAuth Token // Returns true if the value has changed, otherwise false bool setOAuthToken(const QString &newOAuthToken); bool isAnon() const; void loadIgnores(); void ignore(const QString &targetName, std::function onFinished); void ignoreByID(const QString &targetUserID, const QString &targetName, std::function onFinished); void unignore(const QString &targetName, std::function onFinished); void unignoreByID(const QString &targetUserID, const QString &targetName, std::function onFinished); void checkFollow(const QString targetUserID, std::function onFinished); std::set getIgnores() const; void loadEmotes(std::function cb); QColor color; private: QString oauthClient_; QString oauthToken_; QString userName_; QString userId_; const bool isAnon_; mutable std::mutex ignoresMutex_; std::set ignores_; }; } // namespace chatterino