first commit
This commit is contained in:
+110
@@ -0,0 +1,110 @@
|
||||
// emoteprovider.h
|
||||
#ifndef EMOTEPROVIDER_H
|
||||
#define EMOTEPROVIDER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QList>
|
||||
#include <QString>
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkReply>
|
||||
#include <functional>
|
||||
|
||||
enum LogLevel {
|
||||
LOG_INFO = 0,
|
||||
LOG_WARNING = 1,
|
||||
LOG_ERROR = 2
|
||||
};
|
||||
|
||||
using LogCallback = std::function<void(const QString& module,
|
||||
const QString& method,
|
||||
const QString& message,
|
||||
LogLevel level)>;
|
||||
|
||||
struct BTTVEmote {
|
||||
QString id;
|
||||
QString code;
|
||||
QString url() const {
|
||||
return QString("https://cdn.betterttv.net/emote/%1/1x").arg(id);
|
||||
}
|
||||
};
|
||||
|
||||
struct SevenTVEmote {
|
||||
QString id;
|
||||
QString code;
|
||||
QString url;
|
||||
};
|
||||
|
||||
// Абстрактный базовый класс для провайдеров эмодзи
|
||||
class EmoteProvider : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit EmoteProvider(QObject *parent = nullptr);
|
||||
virtual ~EmoteProvider();
|
||||
|
||||
void setLogCallback(LogCallback callback);
|
||||
virtual void fetchGlobal() = 0;
|
||||
virtual void fetchCustom(const QString &userId) = 0;
|
||||
virtual QString getEmoteUrl(const QString &emoteName) = 0;
|
||||
|
||||
signals:
|
||||
void emotesLoaded();
|
||||
|
||||
protected:
|
||||
void log(const QString &method, const QString &message, LogLevel level);
|
||||
virtual QString getBaseUrl() const = 0;
|
||||
virtual void parseGlobalResponse(const QByteArray &data) = 0;
|
||||
virtual void parseCustomResponse(const QByteArray &data, const QString &userId) = 0;
|
||||
|
||||
QNetworkAccessManager *m_networkManager;
|
||||
LogCallback m_logCallback;
|
||||
};
|
||||
|
||||
// Провайдер для BetterTTV
|
||||
class BTTVProvider : public EmoteProvider {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit BTTVProvider(QObject *parent = nullptr);
|
||||
~BTTVProvider();
|
||||
|
||||
void fetchGlobal() override;
|
||||
void fetchCustom(const QString &userId) override;
|
||||
QString getEmoteUrl(const QString &emoteName) override;
|
||||
|
||||
private slots:
|
||||
void onGlobalReplyFinished(QNetworkReply *reply);
|
||||
void onCustomReplyFinished(QNetworkReply *reply);
|
||||
|
||||
private:
|
||||
QString getBaseUrl() const override { return "https://api.betterttv.net/3/cached/"; }
|
||||
void parseGlobalResponse(const QByteArray &data) override;
|
||||
void parseCustomResponse(const QByteArray &data, const QString &userId) override;
|
||||
|
||||
QList<BTTVEmote> m_emotes;
|
||||
QString m_lastUserId;
|
||||
};
|
||||
|
||||
// Провайдер для 7TV
|
||||
class SevenTVProvider : public EmoteProvider {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit SevenTVProvider(QObject *parent = nullptr);
|
||||
~SevenTVProvider();
|
||||
|
||||
void fetchGlobal() override;
|
||||
void fetchCustom(const QString &userId) override;
|
||||
QString getEmoteUrl(const QString &emoteName) override;
|
||||
|
||||
private slots:
|
||||
void onGlobalReplyFinished(QNetworkReply *reply);
|
||||
void onCustomReplyFinished(QNetworkReply *reply);
|
||||
|
||||
private:
|
||||
QString getBaseUrl() const override { return "https://api.7tv.app/v3/"; }
|
||||
void parseGlobalResponse(const QByteArray &data) override;
|
||||
void parseCustomResponse(const QByteArray &data, const QString &userId) override;
|
||||
|
||||
QList<SevenTVEmote> m_emotes;
|
||||
QString m_lastUserId;
|
||||
};
|
||||
|
||||
#endif // EMOTEPROVIDER_H
|
||||
Reference in New Issue
Block a user