DDNet documentation
Loading...
Searching...
No Matches
community_icons.h
Go to the documentation of this file.
1#ifndef GAME_CLIENT_COMPONENTS_COMMUNITY_ICONS_H
2#define GAME_CLIENT_COMPONENTS_COMMUNITY_ICONS_H
3
4#include <base/hash.h>
5
6#include <engine/graphics.h>
9
11#include <game/client/ui_rect.h>
12
13#include <optional>
14
15class IHttpRequest;
16
27
29{
30public:
31 const CCommunityIcon *Find(const char *pCommunityId);
32 void Render(const CCommunityIcon *pIcon, CUIRect Rect, bool Active);
33 void Load();
34 void Update();
35 void Shutdown();
36
37private:
39 {
40 protected:
45 bool m_Success = false;
47
48 CAbstractCommunityIconJob(CCommunityIcons *pCommunityIcons, const char *pCommunityId, int StorageType);
49
50 public:
51 const char *CommunityId() const { return m_aCommunityId; }
52 bool Success() const { return m_Success; }
53 const SHA256_DIGEST &Sha256() const { return m_Sha256; }
54 virtual ~CAbstractCommunityIconJob() = default;
55 };
56
58 {
61
62 protected:
63 void Run() override;
64
65 public:
66 CCommunityIconLoadJob(CCommunityIcons *pCommunityIcons, const char *pCommunityId, int StorageType);
67 ~CCommunityIconLoadJob() override;
68
71 };
72
74 {
75 std::shared_ptr<IHttpRequest> m_pHttpRequest;
76
77 public:
78 CCommunityIconDownloadJob(CCommunityIcons *pCommunityIcons, const char *pCommunityId, const char *pUrl, const SHA256_DIGEST &Sha256);
79 std::shared_ptr<IHttpRequest> HttpRequest() { return m_pHttpRequest; }
80 };
81
82 std::vector<CCommunityIcon> m_vCommunityIcons;
83 std::deque<std::shared_ptr<CCommunityIconLoadJob>> m_CommunityIconLoadJobs;
84 std::deque<std::shared_ptr<CCommunityIconDownloadJob>> m_CommunityIconDownloadJobs;
85 std::optional<SHA256_DIGEST> m_CommunityIconsInfoSha256;
86 static int FileScan(const char *pName, int IsDir, int DirType, void *pUser);
87 bool LoadFile(const char *pPath, int DirType, CImageInfo &Info, CImageInfo &InfoGrayscale, SHA256_DIGEST &Sha256);
88 void LoadFinish(const char *pCommunityId, CImageInfo &Info, CImageInfo &InfoGrayscale, const SHA256_DIGEST &Sha256);
89};
90
91#endif
Definition community_icons.h:18
SHA256_DIGEST m_Sha256
Definition community_icons.h:23
char m_aCommunityId[CServerInfo::MAX_COMMUNITY_ID_LENGTH]
Definition community_icons.h:22
IGraphics::CTextureHandle m_OrgTexture
Definition community_icons.h:24
IGraphics::CTextureHandle m_GreyTexture
Definition community_icons.h:25
friend class CCommunityIcons
Definition community_icons.h:19
char m_aCommunityId[CServerInfo::MAX_COMMUNITY_ID_LENGTH]
Definition community_icons.h:42
int m_StorageType
Definition community_icons.h:44
bool Success() const
Definition community_icons.h:52
const char * CommunityId() const
Definition community_icons.h:51
bool m_Success
Definition community_icons.h:45
char m_aPath[IO_MAX_PATH_LENGTH]
Definition community_icons.h:43
CCommunityIcons * m_pCommunityIcons
Definition community_icons.h:41
SHA256_DIGEST m_Sha256
Definition community_icons.h:46
CAbstractCommunityIconJob(CCommunityIcons *pCommunityIcons, const char *pCommunityId, int StorageType)
Definition community_icons.cpp:10
const SHA256_DIGEST & Sha256() const
Definition community_icons.h:53
CCommunityIconDownloadJob(CCommunityIcons *pCommunityIcons, const char *pCommunityId, const char *pUrl, const SHA256_DIGEST &Sha256)
Definition community_icons.cpp:18
std::shared_ptr< IHttpRequest > HttpRequest()
Definition community_icons.h:79
std::shared_ptr< IHttpRequest > m_pHttpRequest
Definition community_icons.h:75
CImageInfo & ImageInfoGrayscale()
Definition community_icons.h:70
CCommunityIconLoadJob(CCommunityIcons *pCommunityIcons, const char *pCommunityId, int StorageType)
Definition community_icons.cpp:33
void Run() override
Definition community_icons.cpp:28
CImageInfo & ImageInfo()
Definition community_icons.h:69
~CCommunityIconLoadJob() override
Definition community_icons.cpp:39
CImageInfo m_ImageInfoGrayscale
Definition community_icons.h:60
CImageInfo m_ImageInfo
Definition community_icons.h:59
Definition community_icons.h:29
void Update()
Definition community_icons.cpp:144
void LoadFinish(const char *pCommunityId, CImageInfo &Info, CImageInfo &InfoGrayscale, const SHA256_DIGEST &Sha256)
Definition community_icons.cpp:93
const CCommunityIcon * Find(const char *pCommunityId)
Definition community_icons.cpp:61
std::optional< SHA256_DIGEST > m_CommunityIconsInfoSha256
Definition community_icons.h:85
bool LoadFile(const char *pPath, int DirType, CImageInfo &Info, CImageInfo &InfoGrayscale, SHA256_DIGEST &Sha256)
Definition community_icons.cpp:69
void Load()
Definition community_icons.cpp:132
static int FileScan(const char *pName, int IsDir, int DirType, void *pUser)
Definition community_icons.cpp:45
void Shutdown()
Definition community_icons.cpp:138
std::vector< CCommunityIcon > m_vCommunityIcons
Definition community_icons.h:82
std::deque< std::shared_ptr< CCommunityIconDownloadJob > > m_CommunityIconDownloadJobs
Definition community_icons.h:84
std::deque< std::shared_ptr< CCommunityIconLoadJob > > m_CommunityIconLoadJobs
Definition community_icons.h:83
void Render(const CCommunityIcon *pIcon, CUIRect Rect, bool Active)
Definition community_icons.cpp:118
Definition component.h:15
Definition image.h:12
@ MAX_COMMUNITY_ID_LENGTH
Definition serverbrowser.h:63
Definition ui_rect.h:12
Definition graphics.h:258
Definition http.h:53
IJob()
Definition jobs.cpp:11
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:26
Definition hash.h:12