Twitch SDK (Internal)
chatuserblocklist.h
Go to the documentation of this file.
1 /********************************************************************************************
2 * Twitch Broadcasting SDK
3 *
4 * This software is supplied under the terms of a license agreement with Twitch Interactive, Inc. and
5 * may not be copied or used except in accordance with the terms of that agreement
6 * Copyright (c) 2012-2016 Twitch Interactive, Inc.
7 *********************************************************************************************/
8 
9 #pragma once
10 
16 
17 #include <unordered_set>
18 
19 
20 namespace ttv
21 {
22  class TaskRunner;
23  class User;
24  class UserRepository;
25 
26  namespace chat
27  {
28  class ChatUserBlockList;
29  class UserBlockListListenerProxy;
30  class ChatChangeUserBlockTask;
31  }
32 }
33 
34 
36 {
37 public:
38  using BlockChangeCallback = std::function<void(TTV_ErrorCode ec)>;
39  using FetchBlockedUsersCallback = std::function<void(TTV_ErrorCode ec, const std::vector<UserInfo>& blockedUsers)>;
40 
41  ChatUserBlockList(std::shared_ptr<User> user);
42  virtual ~ChatUserBlockList();
43 
45 
46  TTV_ErrorCode BlockUser(UserId userId, const std::string& reason, bool whisper, const BlockChangeCallback& = nullptr);
47  TTV_ErrorCode BlockUser(const std::string& userName, const std::string& reason, bool whisper, const BlockChangeCallback& = nullptr);
48  TTV_ErrorCode UnblockUser(UserId userId, const BlockChangeCallback& = nullptr);
49  TTV_ErrorCode UnblockUser(const std::string& userName, const BlockChangeCallback& = nullptr);
51 
52  bool IsUserBlocked(UserId userId);
53  void GetBlockedUsers(std::unordered_set<UserId>& result) const;
54 
55  void SetRefreshInterval(uint64_t milliseconds);
56  uint64_t GetRefreshInterval() const { return mRefreshIntervalMilliseconds; }
57 
58  std::shared_ptr<User> GetUser() { return mUser.lock(); }
59 
60  static std::string GetComponentName() { return "ttv::chat::ChatUserBlockList"; }
61 
62  // Component overrides
63  virtual void Update() override;
64  virtual TTV_ErrorCode Shutdown() override;
65 
66  // UserComponent overrides
67  virtual std::string GetLoggerName() const override;
68 
69 private:
70  typedef std::shared_ptr< std::unordered_set<UserId> > SetReference;
71 
72  // Component overrides
73  virtual bool CheckShutdown() override;
74 
75  bool IsRefreshInProgress() const;
76  void FetchPage(uint offset, uint limit);
78  void CancelRequestsForUser(UserId blockUserId);
79  void ScheduleRequest(UserId blockUserId, bool block, const std::string& reason, bool whisper, const BlockChangeCallback& callback);
80  void ProcessNextRequest();
81  void SetLocalValue(SetReference set, UserId blockUserId, bool block);
82 
84  {
85  std::string reason;
88  bool block;
89  bool whisper;
90  };
91 
92  std::weak_ptr<UserRepository> mUserRepository;
93  SetReference mBlockedUsers;
94  SetReference mRefreshUsers;
95  std::vector<UserInfo> mUserInfoList;
96  std::vector<ChangeRequest> mQueuedChanges;
98  std::shared_ptr<ChatChangeUserBlockTask> mRunningChangeTask;
99  std::shared_ptr<ChatGetBlockListTask> mRunningGetListTask;
100  std::shared_ptr<ChatGetBlockListTask::Result> mRefreshResult;
103 };
uint32_t UserId
Definition: coretypes.h:22
std::shared_ptr< ChatChangeUserBlockTask > mRunningChangeTask
Definition: chatuserblocklist.h:98
SetReference mRefreshUsers
The set of users incrementally built during a refresh.
Definition: chatuserblocklist.h:94
std::function< void(TTV_ErrorCode ec, const std::vector< UserInfo > &blockedUsers)> FetchBlockedUsersCallback
Definition: chatuserblocklist.h:39
UserId userId
Definition: chatuserblocklist.h:87
TTV_ErrorCode UnblockUser(UserId userId, const BlockChangeCallback &=nullptr)
TTV_ErrorCode FetchBlockedUsers(const FetchBlockedUsersCallback &callback=nullptr)
bool IsUserBlocked(UserId userId)
virtual TTV_ErrorCode Shutdown() override
Definition: chatuserblocklist.h:83
void ScheduleRequest(UserId blockUserId, bool block, const std::string &reason, bool whisper, const BlockChangeCallback &callback)
std::shared_ptr< ChatGetBlockListTask > mRunningGetListTask
Definition: chatuserblocklist.h:99
void RefreshComplete(TTV_ErrorCode ec)
Definition: chatuserblocklist.h:35
BlockChangeCallback callback
Definition: chatuserblocklist.h:86
void CancelRequestsForUser(UserId blockUserId)
CallbackQueue< FetchBlockedUsersCallback > mBlockedUsersCallbacks
Definition: chatuserblocklist.h:97
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
std::vector< ChangeRequest > mQueuedChanges
The set of server changes that are queued while a refresh is in progress.
Definition: chatuserblocklist.h:96
ChatUserBlockList(std::shared_ptr< User > user)
Definition: timer.h:52
uint64_t mRefreshIntervalMilliseconds
Definition: chatuserblocklist.h:102
std::shared_ptr< std::unordered_set< UserId > > SetReference
Definition: chatuserblocklist.h:70
WaitForExpiry mRefreshTimer
Definition: chatuserblocklist.h:101
virtual void Update() override
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
Definition: component.h:87
virtual bool CheckShutdown() override
void SetRefreshInterval(uint64_t milliseconds)
unsigned int uint
Definition: coretypes.h:18
bool block
Definition: chatuserblocklist.h:88
virtual std::string GetLoggerName() const override
std::shared_ptr< ChatGetBlockListTask::Result > mRefreshResult
Definition: chatuserblocklist.h:100
std::vector< UserInfo > mUserInfoList
List of UserInfos fetched.
Definition: chatuserblocklist.h:95
static std::string GetComponentName()
Definition: chatuserblocklist.h:60
std::weak_ptr< UserRepository > mUserRepository
Definition: chatuserblocklist.h:92
bool whisper
Definition: chatuserblocklist.h:89
std::function< void(TTV_ErrorCode ec)> BlockChangeCallback
Definition: chatuserblocklist.h:38
std::shared_ptr< User > GetUser()
Definition: chatuserblocklist.h:58
void GetBlockedUsers(std::unordered_set< UserId > &result) const
void SetLocalValue(SetReference set, UserId blockUserId, bool block)
uint64_t GetRefreshInterval() const
Definition: chatuserblocklist.h:56
TTV_ErrorCode BlockUser(UserId userId, const std::string &reason, bool whisper, const BlockChangeCallback &=nullptr)
SetReference mBlockedUsers
The current set of users.
Definition: chatuserblocklist.h:93
std::weak_ptr< User > mUser
Definition: component.h:119
std::string reason
Definition: chatuserblocklist.h:85
void FetchPage(uint offset, uint limit)