colnod-connector/src/colnod/syncmanager.h
2019-11-28 15:55:54 +01:00

68 lines
1.7 KiB
C++

#pragma once
#include "colnodapi.h"
#include "databaseapi.h"
Q_DECLARE_LOGGING_CATEGORY(syncmanager)
class SyncManager : public QObject
{
Q_OBJECT
friend class SyncManagerTest;
public:
explicit SyncManager(bool dryMode);
bool databaseInitialization();
bool startSynchronization();
// New approach
private:
/**
* @brief Preapre data to be pushed to database and colnod from actual downloaded data
* @param data from database
* @param data from colnod
* @return prepared data to be pushed into colnod and db
*
* @todo rename when removed old aproach
*/
std::unique_ptr<PreparedData> prepareDataNew(const std::shared_ptr<Data> &databaseData, const std::shared_ptr<Data> &colnodData);
std::unique_ptr<PreparedData> prepareDataUsindOld(const std::shared_ptr<Data> &databaseData, const std::shared_ptr<Data> &colnodData);
private:
bool downloadData();
bool prepareData();
bool processData();
void updateLastUpdate(qint64 syncBegin);
private:
Q_SLOT void saveColnodData(const std::shared_ptr<Data> &data);
Q_SLOT void saveDatabaseData(const std::shared_ptr<Data> &data);
Q_SLOT void areDataReady();
signals:
void dataReady();
void dataProcessFinished();
void syncFinished();
void error();
private:
std::shared_ptr<ColnodAPI> colnod;
std::shared_ptr<DatabaseAPI> database;
serversdk::RequestManager reqMan;
serversdk::DatabaseManager dbMan;
Timestamp mlastSync;
std::shared_ptr<Data> colnodData;
std::shared_ptr<Data> databaseData;
std::shared_ptr<Data> colnodDataToProcess;
std::shared_ptr<Data> databaseDataToProcess;
int dataAmount = 0;
bool mDryMode;
std::function<void()> onError = nullptr;
};