2019-12-09 12:34:43 +01:00

107 lines
3.3 KiB
C++

#pragma once
#include "serversdk/requestmanager.h"
#include "serversdk/request.h"
#include "serversdk/databasetable.h"
#include "serversdk/logger.h"
#include "data.h"
Q_DECLARE_LOGGING_CATEGORY(colnod)
class LoginResp : public serversdk::DatabaseTable {
Q_OBJECT
TABLE_PROPERTY(QString, username, setUsername, "")
TABLE_PROPERTY(QString, password, setPassword, "")
};
class AuthToken : public serversdk::DatabaseTable {
Q_OBJECT
TABLE_PROPERTY(QString, id, setId, QString())
};
class Timestamp : public serversdk::DatabaseTable {
Q_OBJECT
TABLE_PROPERTY(qint64, timestamp, setTimestamp, 0)
public:
Timestamp() = default;
void setTimestamp(QDateTime time)
{
setTimestamp(time.toMSecsSinceEpoch());
}
QString toDateString()
{
return QDateTime::fromMSecsSinceEpoch(a_timestamp).toString("yyyy-MM-dd hh:mm:ss.zzz");
}
};
class ColnodAPI: public QObject
{
Q_OBJECT
public:
ColnodAPI() = default;
ColnodAPI(serversdk::RequestManager* reqManconst, const bool &dryMode = false, QString userName = "spaceti", QString password = "spaceti1");
bool downloadData(const qint64 &time);
void processData(const std::shared_ptr<Data> &data);
std::shared_ptr<serversdk::Request> requestLogin();
std::shared_ptr<serversdk::Request> getTokensUpdated(const Timestamp &time);
std::shared_ptr<serversdk::Request> getTokensDeleted(const Timestamp &time);
std::shared_ptr<serversdk::Request> getSubjectsUpdated(const Timestamp &time);
std::shared_ptr<serversdk::Request> getSubjectsDeleted(const Timestamp &time);
std::shared_ptr<serversdk::Request> setTokens(const QHash<QString, std::shared_ptr<Token>> &tokens);
std::shared_ptr<serversdk::Request> deleteTokens(const QList<QString> &tokenIds);
// Attributes
QString userName() const;
void setUserName(const QString &userName);
QString password() const;
void setPassword(const QString &password);
bool isValid();
private:
Q_SLOT void areDataReady(const std::shared_ptr<Data>& data);
Q_SLOT void isDataProcessFinished(bool success);
private:
bool saveUpdatedTokens(const std::shared_ptr<Data>& data, const QByteArray &responseData);
bool saveUpdatedSubjects(const std::shared_ptr<Data>& data, const QByteArray &responseData);
bool saveDeletedTokens(const std::shared_ptr<Data>& data, const QByteArray &responseData);
bool saveDeletedSubjects(const std::shared_ptr<Data>& data, const QByteArray &responseData);
bool checkResponse(const QByteArray &responseData);
std::shared_ptr<serversdk::Request> composeRequest(const QString &endpoint, const QByteArray &data);
bool checkRequest(const std::shared_ptr<serversdk::Request> &request);
signals:
void downloadDataFinished(std::shared_ptr<Data> = std::shared_ptr<Data>());
void partOfDataReady(std::shared_ptr<Data> = std::shared_ptr<Data>());
void partOfDataProcessFinished(bool success = true);
void dataProcessFinished(bool success = true);
void error();
private:
serversdk::RequestManager* mReqMan = nullptr;
QString mHost = "https://192.168.1.3:8443";
QString mUserName;
QString mPassword;
Timestamp mLastSync;
bool mDryMode = false;
bool mValid = true;
bool mSuccess = true;
QString authToken;
qint16 amountData = 0;
qint16 amountProccessesFinished = 0;
};