2019-11-28 14:45:43 +01:00

122 lines
3.6 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, set_username, "")
TABLE_PROPERTY(QString, password, set_password, "")
};
class AuthToken : public serversdk::DatabaseTable {
Q_OBJECT
TABLE_PROPERTY(QString, id, set_id, QString())
};
class Timestamp : public serversdk::DatabaseTable {
Q_OBJECT
TABLE_PROPERTY(qint64, timestamp, set_timestamp, 0)
public:
Timestamp() = default;
explicit Timestamp(const Timestamp &time)
{
this->set_timestamp(time.timestamp());
}
explicit Timestamp(qint64 time)
{
set_timestamp(time);
}
explicit Timestamp(QDateTime time)
{
set_timestamp(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, const QString &userName = "spaceti", const QString &password = "spaceti1");
void downloadData(const Timestamp &time);
void processData(const std::shared_ptr<Data> &data);
// New approach
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);
qint64 lastSync() const;
void setlastSync(const qint64 &lastSync);
bool isValid();
private:
Q_SLOT void areDataReady(std::shared_ptr<Data> data);
Q_SLOT void isDataProcessFinished();
private:
void saveUpdatedTokens(std::shared_ptr<Data> data, const QByteArray &responseData);
void saveUpdatedSubjects(std::shared_ptr<Data> data, const QByteArray &responseData);
void saveDeletedTokens(std::shared_ptr<Data> data, const QByteArray &responseData);
void saveDeletedSubjects(std::shared_ptr<Data> data, const QByteArray &responseData);
void newData();
bool checkResponse(const QByteArray &responseData);
QByteArray getTimestampJson(const qint64 &time);
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();
void dataProcessFinished();
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;
std::shared_ptr<Data> mData;
QString authToken;
qint16 amountData = 0;
qint16 amountProccessesFinished = 0;
};