-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtwitchqt.hpp
More file actions
131 lines (104 loc) · 4.39 KB
/
twitchqt.hpp
File metadata and controls
131 lines (104 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
SPDX-FileCopyrightText: 2018 Kamil Jakubus
SPDX-License-Identifier: MIT
*/
#ifndef TWITCHAPI_HPP
#define TWITCHAPI_HPP
#include "twitchqt_export.h"
#include <QNetworkAccessManager>
#include <QNetworkDiskCache>
#include <QStandardPaths>
#include "badgereply.hpp"
#include "channelreply.hpp"
#include "emotereply.hpp"
#include "gamereply.hpp"
#include "streamreply.hpp"
#include "userreply.hpp"
#include "videoreply.hpp"
namespace Twitch
{
class TWITCHQT_EXPORT Api : public QObject
{
Q_OBJECT
public:
using Cursor = QString;
using ObjectCount = int;
Api(QObject * = nullptr);
Api(QNetworkAccessManager *, QObject * = nullptr);
Api(const QString &, QObject * = nullptr);
Api(const QString &, QNetworkAccessManager *, QObject * = nullptr);
virtual ~Api();
// Client ID
const QString &clientID() const;
void setClientID(const QString &);
// Main endpoints
QString api() const;
QString emotesApi() const;
QString ffzApi() const;
QString bttvApi() const;
// Games
virtual GamesReply *getTopGames(ObjectCount = 30, const Cursor & = Cursor());
virtual GameReply *getGameById(const QString &);
virtual GamesReply *getGameByIds(const QStringList &);
virtual GameReply *getGameByName(const QString &);
virtual GamesReply *getGameByNames(const QStringList &);
virtual BoxArtReply *getBoxArtByUrl(const QString &, int, int);
// Streams
virtual StreamReply *getStreamByUserId(const QString &);
virtual StreamReply *getStreamByName(const QString &);
virtual StreamsReply *getStreamsByNames(const QStringList &, ObjectCount = 30, const Cursor & = Cursor());
virtual StreamsReply *getStreamsByUserIds(const QStringList &, ObjectCount = 30, const Cursor & = Cursor());
virtual StreamsReply *getStreamsByGameId(const QString &, ObjectCount = 30, const Cursor & = Cursor());
virtual StreamsReply *getStreamsByGameIds(const QStringList &, ObjectCount = 30, const Cursor & = Cursor());
virtual StreamsReply *getStreamsByLanguage(const QString &, ObjectCount = 30, const Cursor & = Cursor());
virtual StreamsReply *getStreamsByLanguages(const QStringList &, ObjectCount = 30, const Cursor & = Cursor());
// Videos
virtual VideoReply *getVideoById(const QString &);
virtual VideosReply *getVideosByUserId(const QString &, ObjectCount = 30, const Cursor & = Cursor());
// Channels Follows
virtual ChannelsReply *getFollowedChannel(const QString &, const QString & = QString(), ObjectCount = 30, const Cursor & = Cursor());
// Users Follows
virtual UserFollowsReply *getUserFollowsFromId(const QString &ID);
virtual UserFollowsReply *getUserFollowsToId(const QString &ID);
// Users
virtual UserReply *getUserById(const QString &ID);
virtual UserReply *getUserByName(const QString &);
virtual UsersReply *getUserByIds(const QStringList &, const Cursor & = Cursor());
virtual UsersReply *getUserByNames(const QStringList &, const Cursor & = Cursor());
// // Emotes // These curently fallback to v5 api
virtual EmotesReply *getGlobalEmotes();
virtual EmotesReply *getChannelEmotes(const QString &id);
virtual EmotesReply *getEmoteSets(const QStringList &ids);
// Badges
virtual GlobalBadgesReply *getGlobalBadges();
virtual ChannelBadgesReply *getChannelBadges(const QString &);
// Utility
// Image getter by Url
// virtual ImageReply*
// getImage(const QString&);
// Rate limiting
int rateLimit() const;
int remainingRequests() const;
const QDateTime &resetDate() const;
const QString &bearerToken() const;
void setBearerToken(const QString &bearerToken);
protected:
QNetworkAccessManager *m_http;
QString m_clientID;
QString m_bearerToken;
void resetRateLimit();
int m_rateLimit;
int m_rateRemaining;
QDateTime m_rateResetDate;
using IncludeID = bool;
enum class CacheFlag { UseNetworkDoNotCache, PreferCache };
QNetworkRequest buildRequest(QUrl, IncludeID = true, const CacheFlag = CacheFlag::UseNetworkDoNotCache);
// Repeated parameters format for requests
// For example in Helix it's ampersand (&) and in v5 it's comma (,)
QString repeatDelimeter(const QString & = QString(), const QChar & = QLatin1Char('&')) const;
template<class T>
T *createReply(const QNetworkRequest &, bool = true);
void updateLimits(QNetworkReply *);
};
}
#endif // TWITCHAPI_HPP