install(TARGETS bluemonkeyIrcModule LIBRARY DESTINATION ${PLUGIN_INSTALL_PATH})
endif(communi)
+find_package(Qt5Sql)
+
+if(Qt5Sql_FOUND)
+ message(STATUS "enabling database bluemonkey module")
+ add_library(bluemonkeyDbModule MODULE db.cpp)
+ set_target_properties(bluemonkeyDbModule PROPERTIES PREFIX "")
+ target_link_libraries(bluemonkeyDbModule ${link_libraries} ${QT_LIBRARIES} ${Qt5Sql_LIBRARIES})
+ install(TARGETS bluemonkeyDbModule LIBRARY DESTINATION ${PLUGIN_INSTALL_PATH})
+endif()
include_directories(${CMAKE_SOURCE_DIR}/lib ${include_dirs} ${communi_INCLUDE_DIRS} ${QT_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/plugins/common)
auth = new Authenticate(config, this);
qmlRegisterType<QTimer>("", 1, 0, "QTimer");
+ qmlRegisterType<QObject>("", 1, 0, "QObject");
}
return new QTimer(this);
}
+QObject *BluemonkeySink::createQObject()
+{
+ return new QObject(this);
+}
+
void BluemonkeySink::getHistory(QStringList properties, QDateTime begin, QDateTime end, QJSValue cbFunction)
{
double b = (double)begin.toMSecsSinceEpoch() / 1000.0;
virtual void propertyChanged(AbstractPropertyType* value);
virtual const std::string uuid() const;
- QJSEngine* engine;
-
virtual int supportedOperations();
private: //source privates
void log(QString str);
QObject* createTimer();
+ QObject* createQObject();
void getHistory(QStringList properties, QDateTime begin, QDateTime end, QJSValue cbFunction);
void createCustomProperty(QString name, QJSValue defaultValue, int zone);
private:
+ QJSEngine* engine;
QStringList configsToLoad;
Authenticate* auth;
BackSide : 1 << 9
};
+bluemonkey.loadModule("");
bluemonkey.createCustomProperty("VehicleSpeed", 10);
bluemonkey.createCustomProperty("EngineSpeed", 5000);
--- /dev/null
+#include "db.h"
+
+#include <debugout.h>
+
+#include <QObject>
+#include <QSqlError>
+#include <QSqlRecord>
+#include <QtQml>
+
+extern "C" std::map<std::string, QObject*> create(std::map<std::string, std::string> config, QObject* parent)
+{
+ std::map<std::string, QObject*> moduleInstances;
+ moduleInstances["database"] = new BluemonkeyDatabaseModule(parent);
+ return moduleInstances;
+}
+
+bool Database::open(QString connectionName, QString filename)
+{
+ db = QSqlDatabase::addDatabase("QSQLITE", connectionName);
+ db.setDatabaseName(filename);
+ return db.open();
+}
+
+void Database::close()
+{
+ if(db.isOpen())
+ {
+ db.close();
+ }
+}
+
+QObject *Database::exec(QString query)
+{
+ return new Query(db.exec(query), this);
+}
+
+QString Database::lastError()
+{
+ return db.lastError().text();
+}
+
+
+Query::Query(QSqlQuery q, QObject* parent)
+ :QObject(parent)
+{
+ query = q;
+}
+
+Query::Query(QString connectionName)
+{
+ setConnectionName(connectionName);
+}
+
+void Query::setConnectionName(QString connectionName)
+{
+ mConnectionName = connectionName;
+ db = QSqlDatabase::database(connectionName);
+ query = QSqlQuery(db);
+}
+
+bool Query::exec(QString queryStr)
+{
+ query.setNumericalPrecisionPolicy(QSql::HighPrecision);
+ return query.exec(queryStr);
+}
+
+QVariantList Query::results()
+{
+ QVariantList results;
+
+ QSqlRecord r = query.record();
+
+ while(query.next())
+ {
+
+ QVariantMap prop;
+ ///iterate on the properties:
+ for(int i=0; i< r.count(); i++)
+ {
+ QString name = r.fieldName(i);
+
+ QVariant val = query.value(i);
+ prop[name] = val;
+ }
+
+ results << prop;
+ }
+
+ return results;
+}
--- /dev/null
+#include <QObject>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QVariant>
+#include <QVariantList>
+
+class Database;
+class Query;
+
+class Database: public QObject
+{
+ Q_OBJECT
+public:
+ Database(QObject* parent = nullptr):QObject(parent){ }
+ ~Database() { close(); }
+
+ QSqlDatabase database() { return db; }
+
+public Q_SLOTS:
+
+ bool open(QString connectionName, QString filename);
+ void close();
+
+ QObject* exec(QString query);
+
+ QString lastError();
+
+private:
+ QSqlDatabase db;
+};
+
+class Query: public QObject
+{
+ Q_OBJECT
+public:
+ Query(QObject* parent = nullptr):QObject(parent){}
+ Query(QSqlQuery q, QObject* parent = nullptr);
+ Q_INVOKABLE Query(QString connectionName);
+public Q_SLOTS:
+ void setConnectionName(QString connectionName);
+
+ bool exec(QString queryStr);
+
+ QVariantList results();
+
+private:
+ QSqlQuery query;
+ QString mConnectionName;
+ QSqlDatabase db;
+};
+
+
+class BluemonkeyDatabaseModule : public QObject
+{
+ Q_OBJECT
+public:
+ BluemonkeyDatabaseModule(QObject* parent = nullptr): QObject(parent) { }
+
+public Q_SLOTS:
+ QObject* createNewDatabase()
+ {
+ return new Database(this);
+ }
+
+ QObject* createNewQuery()
+ {
+ return new Query(this);
+ }
+};