prepare for selectable backends

This commit is contained in:
2023-11-02 23:12:17 +01:00
parent fc0ca71b4d
commit 8a26f9e1e4
7 changed files with 258 additions and 57 deletions

70
backend.h Normal file
View File

@ -0,0 +1,70 @@
#pragma once
#include <QObject>
#include <QHash>
#include <QString>
#include <cstdint>
#include <stdexcept>
#include <string>
#include <QUrl>
class AiBackend: public QObject
{
Q_OBJECT
public:
class backend_error: public std::runtime_error
{
public:
backend_error(std::string err): runtime_error(err){}
};
class Request
{
protected:
inline static uint32_t idCounter = 0;
QString text;
uint32_t id;
void* userPtr;
public:
Request() = default;
Request(const QString& text, void* userPtr = nullptr);
const QString& getText() const;
uint32_t getId() const;
bool operator==(const Request& in);
void* getUserPtr() const;
};
class Response: public Request
{
private:
bool finished;
public:
Response() = default;
Response(QString text, uint32_t id, bool finished, void* userPtr = nullptr);
bool isFinished() const;
void setUserPtr(void* ptr);
};
protected:
QHash<uint32_t, Request> m_requests;
void feedResponse(Response response);
bool isValidId(uint32_t id);
virtual void generateImpl(const Request& request) = 0;
public:
virtual bool ready() = 0;
void generate(const Request& request);
virtual void abort(uint64_t id){(void)id;}
virtual void open(const QUrl& url){(void)url;};
Q_SIGNAL void gotResponse(Response response);
virtual ~AiBackend() = default;
};
Q_DECLARE_METATYPE(AiBackend::Response);
Q_DECLARE_METATYPE(AiBackend::Request);