Added ShaderToy API Imports
This commit is contained in:
110
plugin/ShaderToyMetadata.h
Normal file
110
plugin/ShaderToyMetadata.h
Normal file
@@ -0,0 +1,110 @@
|
||||
#ifndef SHADERTOYShaderToyMetadata_H
|
||||
#define SHADERTOYShaderToyMetadata_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QDateTime>
|
||||
#include <QNetworkReply>
|
||||
#include <QNetworkRequest>
|
||||
#include <QStandardPaths>
|
||||
#include <QUuid>
|
||||
#include <QProcess>
|
||||
#include <QTimer>
|
||||
#include <QMutex>
|
||||
#include <qdir.h>
|
||||
#include <qeventloop.h>
|
||||
#include <qjsonarray.h>
|
||||
#include <qjsondocument.h>
|
||||
#include <qjsonobject.h>
|
||||
#include <qjsonparseerror.h>
|
||||
#include <qnetworkaccessmanager.h>
|
||||
#include <qpixmap.h>
|
||||
#include <qqmlintegration.h>
|
||||
|
||||
#include "ShaderToyAPI.h"
|
||||
#include "Komplex_global.h"
|
||||
|
||||
struct KOMPLEX_EXPORT ShaderToyMetadata
|
||||
{
|
||||
QDateTime date;
|
||||
QString description;
|
||||
quint64 flags = 0;
|
||||
bool hasLiked = false;
|
||||
QString id;
|
||||
quint64 likes = 0;
|
||||
QString name;
|
||||
quint64 published = 0;
|
||||
QStringList tags;
|
||||
bool usePreview = false;
|
||||
QString username;
|
||||
QString version;
|
||||
quint64 views = 0;
|
||||
};
|
||||
|
||||
struct KOMPLEX_EXPORT ShaderToyRenderInput
|
||||
{
|
||||
quint8 channel = 0;
|
||||
QString ctype;
|
||||
QString filter;
|
||||
quint64 id = 0;
|
||||
QString internal;
|
||||
bool published = false;
|
||||
QString source;
|
||||
bool srgb = false;
|
||||
bool verticalFlip = false;
|
||||
QString wrap;
|
||||
};
|
||||
|
||||
struct KOMPLEX_EXPORT ShaderToyRenderOutput
|
||||
{
|
||||
const quint8 channel = 0;
|
||||
const quint64 id = 0;
|
||||
};
|
||||
|
||||
struct KOMPLEX_EXPORT ShaderToyRenderPass
|
||||
{
|
||||
QByteArray code;
|
||||
QString description;
|
||||
QList<ShaderToyRenderInput> inputs;
|
||||
QString name;
|
||||
QList<ShaderToyRenderOutput> outputs;
|
||||
QString type;
|
||||
};
|
||||
|
||||
enum KOMPLEX_EXPORT ShaderToyErrorCode
|
||||
{
|
||||
NoError = 0,
|
||||
NetworkError = (0x10 << 24),
|
||||
MediaError = (0x20 << 24),
|
||||
DiskError = (0x30 << 24),
|
||||
CompileError = (0x40 << 24)
|
||||
};
|
||||
|
||||
struct KOMPLEX_EXPORT ShaderToyError
|
||||
{
|
||||
QString message;
|
||||
ShaderToyErrorCode code;
|
||||
};
|
||||
|
||||
struct KOMPLEX_EXPORT ShaderToyEntry
|
||||
{
|
||||
enum Status
|
||||
{
|
||||
Idle,
|
||||
Loading,
|
||||
Compiling,
|
||||
Compiled,
|
||||
Error
|
||||
};
|
||||
|
||||
ShaderToyMetadata metadata;
|
||||
QList<ShaderToyRenderPass> renderPasses;
|
||||
QByteArray data;
|
||||
ShaderToyError error;
|
||||
QStringList videoSelections;
|
||||
Status status = Idle;
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(ShaderToyEntry)
|
||||
Q_DECLARE_METATYPE(ShaderToyError)
|
||||
|
||||
#endif // SHADERTOYShaderToyMetadata_H
|
||||
1171
plugin/ShaderToySearchModel.cpp
Normal file
1171
plugin/ShaderToySearchModel.cpp
Normal file
File diff suppressed because it is too large
Load Diff
272
plugin/ShaderToySearchModel.h
Normal file
272
plugin/ShaderToySearchModel.h
Normal file
@@ -0,0 +1,272 @@
|
||||
#ifndef ShaderToySearchModel_H
|
||||
#define ShaderToySearchModel_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QCache>
|
||||
#include <QStandardPaths>
|
||||
#include <QQuickImageProvider>
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkRequest>
|
||||
#include <QNetworkReply>
|
||||
#include <QAbstractItemModel>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonParseError>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
#include <QJsonValue>
|
||||
#include <QThread>
|
||||
#include <QFile>
|
||||
|
||||
#include "ShaderToyMetadata.h"
|
||||
#include "Komplex_global.h"
|
||||
|
||||
class KOMPLEX_EXPORT ShaderToySearchModel : public QAbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
||||
enum DataRoles
|
||||
{
|
||||
Date = Qt::UserRole + 1,
|
||||
Description,
|
||||
EmbedUrl,
|
||||
Flags,
|
||||
HasLiked,
|
||||
Id,
|
||||
Likes,
|
||||
Name,
|
||||
Published,
|
||||
State,
|
||||
Tags,
|
||||
Thumbnail,
|
||||
UsePreview,
|
||||
Username,
|
||||
Version,
|
||||
Views
|
||||
};
|
||||
Q_ENUM(DataRoles)
|
||||
|
||||
enum Status
|
||||
{
|
||||
Idle,
|
||||
Searching,
|
||||
Compiling,
|
||||
Compiled,
|
||||
Finalizing,
|
||||
Error
|
||||
};
|
||||
Q_ENUM(Status)
|
||||
|
||||
ShaderToySearchModel(QObject *parent = nullptr);
|
||||
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||
|
||||
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
|
||||
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
QModelIndex parent(const QModelIndex &index) const override;
|
||||
|
||||
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
|
||||
|
||||
QString lastSavedFile() const;
|
||||
void setLastSavedFile(const QString &lastSavedFile);
|
||||
|
||||
Status status() const;
|
||||
void setStatus(const Status &status, const QString &message = QString());
|
||||
|
||||
QString query() const;
|
||||
void setQuery(const QString &query);
|
||||
|
||||
quint64 resultsPerPage() const;
|
||||
void setResultsPerPage(quint64 resultsPerPage);
|
||||
|
||||
quint64 totalResults() const;
|
||||
void setTotalResults(quint64 totalResults);
|
||||
|
||||
quint64 currentPage() const;
|
||||
void setCurrentPage(quint64 currentPage);
|
||||
|
||||
quint64 totalPages() const;
|
||||
void setTotalPages(quint64 totalPages);
|
||||
|
||||
Q_INVOKABLE void next();
|
||||
Q_INVOKABLE void previous();
|
||||
Q_INVOKABLE void convert(qsizetype index);
|
||||
Q_INVOKABLE ShaderToyEntry entry(qsizetype index);
|
||||
Q_INVOKABLE void finalize(qsizetype index);
|
||||
Q_INVOKABLE void replaceSource(qsizetype index, QString uuid, QString source);
|
||||
|
||||
QString compilerOutput() const;
|
||||
void setCompilerOutput(const QString &compilerOutput);
|
||||
|
||||
QString compilerErrorOutput() const;
|
||||
void setCompilerErrorOutput(const QString &compilerErrorOutput);
|
||||
|
||||
quint64 totalDownloads() const;
|
||||
void setTotalDownloads(quint64 totalDownloads);
|
||||
|
||||
quint64 completedDownloads() const;
|
||||
void setCompletedDownloads(quint64 completedDownloads);
|
||||
|
||||
QString downloadText() const;
|
||||
void setDownloadText(const QString &downloadText);
|
||||
|
||||
QString statusMessage() const;
|
||||
void setStatusMessage(const QString &statusMessage);
|
||||
|
||||
QStringList videoSelections() const;
|
||||
void setVideoSelections(const QStringList &videoSelections);
|
||||
|
||||
Q_SIGNALS:
|
||||
void shaderInstalled();
|
||||
void lastSavedFileChanged();
|
||||
void statusChanged();
|
||||
void queryChanged();
|
||||
void resultsPerPageChanged();
|
||||
void totalResultsChanged();
|
||||
void currentPageChanged();
|
||||
void totalPagesChanged();
|
||||
void compilerOutputChanged();
|
||||
void compilerErrorOutputChanged();
|
||||
void totalDownloadsChanged();
|
||||
void completedDownloadsChanged();
|
||||
void downloadTextChanged();
|
||||
void statusMessageChanged();
|
||||
void videoSelectionsChanged();
|
||||
|
||||
protected:
|
||||
QHash<int, QByteArray> roleNames() const override;
|
||||
|
||||
private:
|
||||
void downloadMedia(QString fileLocation, QString fileUrl);
|
||||
void compile(quint64 index);
|
||||
void save(quint64 index);
|
||||
void install(quint64 index);
|
||||
void download(quint64 index);
|
||||
void resetModel();
|
||||
void getSearchResults(QString url);
|
||||
|
||||
quint64 getFileSize(QUrl url);
|
||||
QString sizeText(quint64 size);
|
||||
|
||||
QNetworkAccessManager m_networkManager;
|
||||
QString m_query;
|
||||
|
||||
QList<ShaderToyEntry> m_data;
|
||||
QString m_lastSavedFile;
|
||||
qreal m_downloadProgress = 0;
|
||||
Status m_status = Status::Idle;
|
||||
|
||||
quint64 m_resultsPerPage = 12;
|
||||
quint64 m_totalResults = 0;
|
||||
quint64 m_currentPage = 0;
|
||||
quint64 m_totalPages = 0;
|
||||
|
||||
QString m_compilerOutput;
|
||||
QString m_compilerErrorOutput;
|
||||
quint64 m_completedDownloads = 0;
|
||||
quint64 m_totalDownloads = 0;
|
||||
QString m_downloadText;
|
||||
QString m_statusMessage;
|
||||
|
||||
QStringList m_videoSelections;
|
||||
|
||||
QNetworkAccessManager m_manager;
|
||||
|
||||
// multiple possible connections to replaceSource
|
||||
QMutex m_selectionMutex;
|
||||
|
||||
static inline const QHash<int, QByteArray> m_dataRoles =
|
||||
{
|
||||
{
|
||||
static_cast<int>(Date),
|
||||
QByteArray("date")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Description),
|
||||
QByteArray("description")
|
||||
},
|
||||
{
|
||||
static_cast<int>(EmbedUrl),
|
||||
QByteArray("embedUrl")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Flags),
|
||||
QByteArray("flags")
|
||||
},
|
||||
{
|
||||
static_cast<int>(HasLiked),
|
||||
QByteArray("hasLiked")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Id),
|
||||
QByteArray("id")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Likes),
|
||||
QByteArray("likes")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Name),
|
||||
QByteArray("name")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Published),
|
||||
QByteArray("published")
|
||||
},
|
||||
{
|
||||
static_cast<int>(State),
|
||||
QByteArray("state")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Tags),
|
||||
QByteArray("tags")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Thumbnail),
|
||||
QByteArray("thumbnail")
|
||||
},
|
||||
{
|
||||
static_cast<int>(UsePreview),
|
||||
QByteArray("usePreview")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Username),
|
||||
QByteArray("username")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Version),
|
||||
QByteArray("version")
|
||||
},
|
||||
{
|
||||
static_cast<int>(Views),
|
||||
QByteArray("views")
|
||||
}
|
||||
};
|
||||
|
||||
const static inline QStringList m_supportedChannelTypes =
|
||||
{
|
||||
QStringLiteral("buffer"),
|
||||
QStringLiteral("image"),
|
||||
QStringLiteral("video"),
|
||||
QStringLiteral("audio"),
|
||||
QStringLiteral("texture")
|
||||
};
|
||||
|
||||
Q_PROPERTY(QString lastSavedFile READ lastSavedFile WRITE setLastSavedFile NOTIFY lastSavedFileChanged FINAL)
|
||||
Q_PROPERTY(Status status READ status WRITE setStatus NOTIFY statusChanged FINAL)
|
||||
Q_PROPERTY(QString query READ query WRITE setQuery NOTIFY queryChanged FINAL)
|
||||
Q_PROPERTY(quint64 resultsPerPage READ resultsPerPage WRITE setResultsPerPage NOTIFY resultsPerPageChanged FINAL)
|
||||
Q_PROPERTY(quint64 totalResults READ totalResults WRITE setTotalResults NOTIFY totalResultsChanged FINAL)
|
||||
Q_PROPERTY(quint64 currentPage READ currentPage WRITE setCurrentPage NOTIFY currentPageChanged FINAL)
|
||||
Q_PROPERTY(quint64 totalPages READ totalPages WRITE setTotalPages NOTIFY totalPagesChanged FINAL)
|
||||
Q_PROPERTY(QString compilerOutput READ compilerOutput WRITE setCompilerOutput NOTIFY compilerOutputChanged FINAL)
|
||||
Q_PROPERTY(QString compilerErrorOutput READ compilerErrorOutput WRITE setCompilerErrorOutput NOTIFY compilerErrorOutputChanged FINAL)
|
||||
Q_PROPERTY(quint64 totalDownloads READ totalDownloads WRITE setTotalDownloads NOTIFY totalDownloadsChanged FINAL)
|
||||
Q_PROPERTY(quint64 completedDownloads READ completedDownloads WRITE setCompletedDownloads NOTIFY completedDownloadsChanged FINAL)
|
||||
Q_PROPERTY(QString downloadText READ downloadText WRITE setDownloadText NOTIFY downloadTextChanged FINAL)
|
||||
Q_PROPERTY(QString statusMessage READ statusMessage WRITE setStatusMessage NOTIFY statusMessageChanged FINAL)
|
||||
Q_PROPERTY(QStringList videoSelections READ videoSelections WRITE setVideoSelections NOTIFY videoSelectionsChanged FINAL)
|
||||
};
|
||||
Q_DECLARE_METATYPE(ShaderToySearchModel)
|
||||
#endif // ShaderToySearchModel_H
|
||||
Reference in New Issue
Block a user