diff --git a/README.md b/README.md index 013f2855..c37b761b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,37 @@ # mea QtQuick nymea client application + +# building + +Required packages: +It is recommended to install a complete Qt installation. Minimum required Version 5.7. +No extra modules are required for a basic desktop build. + +To build a binary run +$ mkdir builddir +$ cd builddir +$ qmake path/to/source/dir +$ make + +Or open mea.pro in QtCreator and click the "Play" button. + +Optional configuration flags to be passed to qmake: +- CONFIG+=withavahi + Enables avahi support. Requires libavahi-common and libavahi-client to be present on the system +- CONFIG+=withtests + Enables building the testrunner target + +Notes for Android: +As Qt can't bundle a build of openssl for android, you need to place a copy to +/opt/android-ssl/ + +Notes for Windows: +There is an additional make target named "wininstaller" available. You need to +have windeployqt and binarycreator (from Qt Install Framework 3.0) in your +system's Path. + +# running the tests +Required Packages: +- qtdeclarative5-test-plugin +- nymead + diff --git a/mea/basicconfiguration.cpp b/libmea-core/basicconfiguration.cpp similarity index 100% rename from mea/basicconfiguration.cpp rename to libmea-core/basicconfiguration.cpp diff --git a/mea/basicconfiguration.h b/libmea-core/basicconfiguration.h similarity index 100% rename from mea/basicconfiguration.h rename to libmea-core/basicconfiguration.h diff --git a/mea/bluetoothinterface.cpp b/libmea-core/bluetoothinterface.cpp similarity index 100% rename from mea/bluetoothinterface.cpp rename to libmea-core/bluetoothinterface.cpp diff --git a/mea/bluetoothinterface.h b/libmea-core/bluetoothinterface.h similarity index 100% rename from mea/bluetoothinterface.h rename to libmea-core/bluetoothinterface.h diff --git a/mea/deviceclasses.cpp b/libmea-core/deviceclasses.cpp similarity index 100% rename from mea/deviceclasses.cpp rename to libmea-core/deviceclasses.cpp diff --git a/mea/deviceclasses.h b/libmea-core/deviceclasses.h similarity index 100% rename from mea/deviceclasses.h rename to libmea-core/deviceclasses.h diff --git a/mea/deviceclassesproxy.cpp b/libmea-core/deviceclassesproxy.cpp similarity index 100% rename from mea/deviceclassesproxy.cpp rename to libmea-core/deviceclassesproxy.cpp diff --git a/mea/deviceclassesproxy.h b/libmea-core/deviceclassesproxy.h similarity index 100% rename from mea/deviceclassesproxy.h rename to libmea-core/deviceclassesproxy.h diff --git a/mea/devicediscovery.cpp b/libmea-core/devicediscovery.cpp similarity index 100% rename from mea/devicediscovery.cpp rename to libmea-core/devicediscovery.cpp diff --git a/mea/devicediscovery.h b/libmea-core/devicediscovery.h similarity index 100% rename from mea/devicediscovery.h rename to libmea-core/devicediscovery.h diff --git a/mea/devicemanager.cpp b/libmea-core/devicemanager.cpp similarity index 99% rename from mea/devicemanager.cpp rename to libmea-core/devicemanager.cpp index 1d8337fe..8e711e23 100644 --- a/mea/devicemanager.cpp +++ b/libmea-core/devicemanager.cpp @@ -21,6 +21,7 @@ #include "devicemanager.h" #include "engine.h" #include "jsonrpc/jsontypes.h" +#include DeviceManager::DeviceManager(JsonRpcClient* jsonclient, QObject *parent) : JsonHandler(parent), diff --git a/mea/devicemanager.h b/libmea-core/devicemanager.h similarity index 100% rename from mea/devicemanager.h rename to libmea-core/devicemanager.h diff --git a/mea/devices.cpp b/libmea-core/devices.cpp similarity index 100% rename from mea/devices.cpp rename to libmea-core/devices.cpp diff --git a/mea/devices.h b/libmea-core/devices.h similarity index 100% rename from mea/devices.h rename to libmea-core/devices.h diff --git a/mea/devicesproxy.cpp b/libmea-core/devicesproxy.cpp similarity index 100% rename from mea/devicesproxy.cpp rename to libmea-core/devicesproxy.cpp diff --git a/mea/devicesproxy.h b/libmea-core/devicesproxy.h similarity index 100% rename from mea/devicesproxy.h rename to libmea-core/devicesproxy.h diff --git a/mea/discovery/avahi/avahiserviceentry.cpp b/libmea-core/discovery/avahi/avahiserviceentry.cpp similarity index 100% rename from mea/discovery/avahi/avahiserviceentry.cpp rename to libmea-core/discovery/avahi/avahiserviceentry.cpp diff --git a/mea/discovery/avahi/avahiserviceentry.h b/libmea-core/discovery/avahi/avahiserviceentry.h similarity index 100% rename from mea/discovery/avahi/avahiserviceentry.h rename to libmea-core/discovery/avahi/avahiserviceentry.h diff --git a/mea/discovery/avahi/qt-watch.cpp b/libmea-core/discovery/avahi/qt-watch.cpp similarity index 100% rename from mea/discovery/avahi/qt-watch.cpp rename to libmea-core/discovery/avahi/qt-watch.cpp diff --git a/mea/discovery/avahi/qt-watch.h b/libmea-core/discovery/avahi/qt-watch.h similarity index 100% rename from mea/discovery/avahi/qt-watch.h rename to libmea-core/discovery/avahi/qt-watch.h diff --git a/mea/discovery/avahi/qtavahiclient.cpp b/libmea-core/discovery/avahi/qtavahiclient.cpp similarity index 100% rename from mea/discovery/avahi/qtavahiclient.cpp rename to libmea-core/discovery/avahi/qtavahiclient.cpp diff --git a/mea/discovery/avahi/qtavahiclient.h b/libmea-core/discovery/avahi/qtavahiclient.h similarity index 100% rename from mea/discovery/avahi/qtavahiclient.h rename to libmea-core/discovery/avahi/qtavahiclient.h diff --git a/mea/discovery/avahi/qtavahiservice.cpp b/libmea-core/discovery/avahi/qtavahiservice.cpp similarity index 100% rename from mea/discovery/avahi/qtavahiservice.cpp rename to libmea-core/discovery/avahi/qtavahiservice.cpp diff --git a/mea/discovery/avahi/qtavahiservice.h b/libmea-core/discovery/avahi/qtavahiservice.h similarity index 100% rename from mea/discovery/avahi/qtavahiservice.h rename to libmea-core/discovery/avahi/qtavahiservice.h diff --git a/mea/discovery/avahi/qtavahiservice_p.cpp b/libmea-core/discovery/avahi/qtavahiservice_p.cpp similarity index 100% rename from mea/discovery/avahi/qtavahiservice_p.cpp rename to libmea-core/discovery/avahi/qtavahiservice_p.cpp diff --git a/mea/discovery/avahi/qtavahiservice_p.h b/libmea-core/discovery/avahi/qtavahiservice_p.h similarity index 100% rename from mea/discovery/avahi/qtavahiservice_p.h rename to libmea-core/discovery/avahi/qtavahiservice_p.h diff --git a/mea/discovery/avahi/qtavahiservicebrowser.cpp b/libmea-core/discovery/avahi/qtavahiservicebrowser.cpp similarity index 100% rename from mea/discovery/avahi/qtavahiservicebrowser.cpp rename to libmea-core/discovery/avahi/qtavahiservicebrowser.cpp diff --git a/mea/discovery/avahi/qtavahiservicebrowser.h b/libmea-core/discovery/avahi/qtavahiservicebrowser.h similarity index 100% rename from mea/discovery/avahi/qtavahiservicebrowser.h rename to libmea-core/discovery/avahi/qtavahiservicebrowser.h diff --git a/mea/discovery/avahi/qtavahiservicebrowser_p.cpp b/libmea-core/discovery/avahi/qtavahiservicebrowser_p.cpp similarity index 100% rename from mea/discovery/avahi/qtavahiservicebrowser_p.cpp rename to libmea-core/discovery/avahi/qtavahiservicebrowser_p.cpp diff --git a/mea/discovery/avahi/qtavahiservicebrowser_p.h b/libmea-core/discovery/avahi/qtavahiservicebrowser_p.h similarity index 100% rename from mea/discovery/avahi/qtavahiservicebrowser_p.h rename to libmea-core/discovery/avahi/qtavahiservicebrowser_p.h diff --git a/mea/discovery/discoverydevice.cpp b/libmea-core/discovery/discoverydevice.cpp similarity index 100% rename from mea/discovery/discoverydevice.cpp rename to libmea-core/discovery/discoverydevice.cpp diff --git a/mea/discovery/discoverydevice.h b/libmea-core/discovery/discoverydevice.h similarity index 100% rename from mea/discovery/discoverydevice.h rename to libmea-core/discovery/discoverydevice.h diff --git a/mea/discovery/discoverymodel.cpp b/libmea-core/discovery/discoverymodel.cpp similarity index 96% rename from mea/discovery/discoverymodel.cpp rename to libmea-core/discovery/discoverymodel.cpp index da04ac5a..2b892934 100644 --- a/mea/discovery/discoverymodel.cpp +++ b/libmea-core/discovery/discoverymodel.cpp @@ -73,9 +73,9 @@ void DiscoveryModel::addDevice(const DiscoveryDevice &device) emit countChanged(); } -QString DiscoveryModel::get(int index, const QByteArray &role) const +QString DiscoveryModel::get(int index, DeviceRole role) const { - return data(this->index(index), roleNames().key(role)).toString(); + return data(this->index(index), role).toString(); } bool DiscoveryModel::contains(const QString &uuid) const diff --git a/mea/discovery/discoverymodel.h b/libmea-core/discovery/discoverymodel.h similarity index 96% rename from mea/discovery/discoverymodel.h rename to libmea-core/discovery/discoverymodel.h index f8c3ac36..b9a434ae 100644 --- a/mea/discovery/discoverymodel.h +++ b/libmea-core/discovery/discoverymodel.h @@ -39,6 +39,7 @@ public: PortRole, VersionRole }; + Q_ENUM(DeviceRole) explicit DiscoveryModel(QObject *parent = 0); @@ -49,7 +50,7 @@ public: void addDevice(const DiscoveryDevice &device); - Q_INVOKABLE QString get(int index, const QByteArray &role) const; + Q_INVOKABLE QString get(int index, DiscoveryModel::DeviceRole role) const; bool contains(const QString &uuid) const; DiscoveryDevice find(const QHostAddress &address) const; diff --git a/mea/discovery/nymeadiscovery.cpp b/libmea-core/discovery/nymeadiscovery.cpp similarity index 100% rename from mea/discovery/nymeadiscovery.cpp rename to libmea-core/discovery/nymeadiscovery.cpp diff --git a/mea/discovery/nymeadiscovery.h b/libmea-core/discovery/nymeadiscovery.h similarity index 100% rename from mea/discovery/nymeadiscovery.h rename to libmea-core/discovery/nymeadiscovery.h diff --git a/mea/discovery/nymeahost.cpp b/libmea-core/discovery/nymeahost.cpp similarity index 100% rename from mea/discovery/nymeahost.cpp rename to libmea-core/discovery/nymeahost.cpp diff --git a/mea/discovery/nymeahost.h b/libmea-core/discovery/nymeahost.h similarity index 100% rename from mea/discovery/nymeahost.h rename to libmea-core/discovery/nymeahost.h diff --git a/mea/discovery/nymeahosts.cpp b/libmea-core/discovery/nymeahosts.cpp similarity index 100% rename from mea/discovery/nymeahosts.cpp rename to libmea-core/discovery/nymeahosts.cpp diff --git a/mea/discovery/nymeahosts.h b/libmea-core/discovery/nymeahosts.h similarity index 100% rename from mea/discovery/nymeahosts.h rename to libmea-core/discovery/nymeahosts.h diff --git a/mea/discovery/upnpdiscovery.cpp b/libmea-core/discovery/upnpdiscovery.cpp similarity index 100% rename from mea/discovery/upnpdiscovery.cpp rename to libmea-core/discovery/upnpdiscovery.cpp diff --git a/mea/discovery/upnpdiscovery.h b/libmea-core/discovery/upnpdiscovery.h similarity index 100% rename from mea/discovery/upnpdiscovery.h rename to libmea-core/discovery/upnpdiscovery.h diff --git a/mea/discovery/zeroconfdiscovery.cpp b/libmea-core/discovery/zeroconfdiscovery.cpp similarity index 100% rename from mea/discovery/zeroconfdiscovery.cpp rename to libmea-core/discovery/zeroconfdiscovery.cpp diff --git a/mea/discovery/zeroconfdiscovery.h b/libmea-core/discovery/zeroconfdiscovery.h similarity index 100% rename from mea/discovery/zeroconfdiscovery.h rename to libmea-core/discovery/zeroconfdiscovery.h diff --git a/mea/engine.cpp b/libmea-core/engine.cpp similarity index 95% rename from mea/engine.cpp rename to libmea-core/engine.cpp index 191224d1..ae04cad2 100644 --- a/mea/engine.cpp +++ b/libmea-core/engine.cpp @@ -35,14 +35,6 @@ Engine *Engine::instance() return s_instance; } -QObject *Engine::qmlInstance(QQmlEngine *qmlEngine, QJSEngine *jsEngine) -{ - Q_UNUSED(qmlEngine) - Q_UNUSED(jsEngine) - - return Engine::instance(); -} - DeviceManager *Engine::deviceManager() const { return m_deviceManager; diff --git a/mea/engine.h b/libmea-core/engine.h similarity index 96% rename from mea/engine.h rename to libmea-core/engine.h index 9610344b..ecbfdc1d 100644 --- a/mea/engine.h +++ b/libmea-core/engine.h @@ -22,8 +22,6 @@ #define ENGINE_H #include -#include -#include #include "devicemanager.h" #include "nymeainterface.h" @@ -46,7 +44,6 @@ class Engine : public QObject public: static Engine *instance(); - static QObject *qmlInstance(QQmlEngine *qmlEngine, QJSEngine *jsEngine); bool connected() const; QString connectedHost() const; diff --git a/mea/interfacesmodel.cpp b/libmea-core/interfacesmodel.cpp similarity index 100% rename from mea/interfacesmodel.cpp rename to libmea-core/interfacesmodel.cpp diff --git a/mea/interfacesmodel.h b/libmea-core/interfacesmodel.h similarity index 100% rename from mea/interfacesmodel.h rename to libmea-core/interfacesmodel.h diff --git a/mea/jsonrpc/actionhandler.cpp b/libmea-core/jsonrpc/actionhandler.cpp similarity index 100% rename from mea/jsonrpc/actionhandler.cpp rename to libmea-core/jsonrpc/actionhandler.cpp diff --git a/mea/jsonrpc/jsonhandler.cpp b/libmea-core/jsonrpc/jsonhandler.cpp similarity index 100% rename from mea/jsonrpc/jsonhandler.cpp rename to libmea-core/jsonrpc/jsonhandler.cpp diff --git a/mea/jsonrpc/jsonhandler.h b/libmea-core/jsonrpc/jsonhandler.h similarity index 100% rename from mea/jsonrpc/jsonhandler.h rename to libmea-core/jsonrpc/jsonhandler.h diff --git a/mea/jsonrpc/jsonrpcclient.cpp b/libmea-core/jsonrpc/jsonrpcclient.cpp similarity index 100% rename from mea/jsonrpc/jsonrpcclient.cpp rename to libmea-core/jsonrpc/jsonrpcclient.cpp diff --git a/mea/jsonrpc/jsonrpcclient.h b/libmea-core/jsonrpc/jsonrpcclient.h similarity index 100% rename from mea/jsonrpc/jsonrpcclient.h rename to libmea-core/jsonrpc/jsonrpcclient.h diff --git a/mea/jsonrpc/jsontypes.cpp b/libmea-core/jsonrpc/jsontypes.cpp similarity index 100% rename from mea/jsonrpc/jsontypes.cpp rename to libmea-core/jsonrpc/jsontypes.cpp diff --git a/mea/jsonrpc/jsontypes.h b/libmea-core/jsonrpc/jsontypes.h similarity index 100% rename from mea/jsonrpc/jsontypes.h rename to libmea-core/jsonrpc/jsontypes.h diff --git a/libmea-core/libmea-core.h b/libmea-core/libmea-core.h new file mode 100644 index 00000000..52bd4807 --- /dev/null +++ b/libmea-core/libmea-core.h @@ -0,0 +1,134 @@ +#ifndef LIBMEACORE_H +#define LIBMEACORE_H + +#include "engine.h" +#include "vendorsproxy.h" +#include "deviceclassesproxy.h" +#include "devicesproxy.h" +#include "pluginsproxy.h" +#include "devicediscovery.h" +#include "discovery/nymeadiscovery.h" +#include "discovery/discoverymodel.h" +#include "interfacesmodel.h" +#include "rulemanager.h" +#include "models/rulesfiltermodel.h" +#include "types/ruleactions.h" +#include "types/ruleaction.h" +#include "types/ruleactionparams.h" +#include "types/ruleactionparam.h" +#include "types/eventdescriptors.h" +#include "types/eventdescriptor.h" +#include "types/rule.h" +#include "types/interfaces.h" +#include "types/interface.h" +#include "types/statedescriptor.h" +#include "types/stateevaluator.h" +#include "types/stateevaluators.h" +#include "models/logsmodel.h" +#include "models/valuelogsproxymodel.h" +#include "models/eventdescriptorparamsfiltermodel.h" +#include "basicconfiguration.h" +#include "wifisetup/networkmanagercontroler.h" + +static QObject* interfacesModel_provider(QQmlEngine *engine, QJSEngine *scriptEngine) +{ + Q_UNUSED(engine) + Q_UNUSED(scriptEngine) + + return new Interfaces(); +} + +QObject* engine_provider(QQmlEngine *qmlEngine, QJSEngine *jsEngine) +{ + Q_UNUSED(qmlEngine) + Q_UNUSED(jsEngine) + + return Engine::instance(); +} + +void registerQmlTypes() { + + const char uri[] = "Mea"; + + qmlRegisterSingletonType(uri, 1, 0, "Engine", engine_provider); + + qmlRegisterUncreatableType(uri, 1, 0, "DeviceManager", "Can't create this in QML. Get it from the Core."); + qmlRegisterUncreatableType(uri, 1, 0, "JsonRpcClient", "Can't create this in QML. Get it from the Core."); + qmlRegisterUncreatableType(uri, 1, 0, "NymeaConnection", "Can't create this in QML. Get it from the Core."); + + // libnymea-common + qmlRegisterUncreatableType(uri, 1, 0, "Types", "Can't create this in QML. Get it from the Core."); + + qmlRegisterUncreatableType(uri, 1, 0, "ParamType", "Can't create this in QML. Get it from the ParamTypes."); + qmlRegisterUncreatableType(uri, 1, 0, "ParamTypes", "Can't create this in QML. Get it from the DeviceClass."); + qmlRegisterUncreatableType(uri, 1, 0, "EventType", "Can't create this in QML. Get it from the EventTypes."); + qmlRegisterUncreatableType(uri, 1, 0, "EventTypes", "Can't create this in QML. Get it from the DeviceClass."); + qmlRegisterUncreatableType(uri, 1, 0, "StateType", "Can't create this in QML. Get it from the StateTypes."); + qmlRegisterUncreatableType(uri, 1, 0, "StateTypes", "Can't create this in QML. Get it from the DeviceClass."); + qmlRegisterUncreatableType(uri, 1, 0, "ActionType", "Can't create this in QML. Get it from the ActionTypes."); + qmlRegisterUncreatableType(uri, 1, 0, "ActionTypes", "Can't create this in QML. Get it from the DeviceClass."); + + qmlRegisterUncreatableType(uri, 1, 0, "State", "Can't create this in QML. Get it from the States."); + qmlRegisterUncreatableType(uri, 1, 0, "States", "Can't create this in QML. Get it from the Device."); + + qmlRegisterUncreatableType(uri, 1, 0, "Vendor", "Can't create this in QML. Get it from the Vendors."); + qmlRegisterUncreatableType(uri, 1, 0, "Vendors", "Can't create this in QML. Get it from the DeviceManager."); + qmlRegisterType(uri, 1, 0, "VendorsProxy"); + + qmlRegisterUncreatableType(uri, 1, 0, "Device", "Can't create this in QML. Get it from the Devices."); + qmlRegisterUncreatableType(uri, 1, 0, "Devices", "Can't create this in QML. Get it from the DeviceManager."); + qmlRegisterType(uri, 1, 0, "DevicesProxy"); + qmlRegisterType(uri, 1, 0, "InterfacesModel"); + + qmlRegisterUncreatableType(uri, 1, 0, "DeviceClass", "Can't create this in QML. Get it from the DeviceClasses."); + qmlRegisterUncreatableType(uri, 1, 0, "DeviceClasses", "Can't create this in QML. Get it from the DeviceManager."); + qmlRegisterType(uri, 1, 0, "DeviceClassesProxy"); + qmlRegisterType(uri, 1, 0, "DeviceDiscovery"); + + qmlRegisterUncreatableType(uri, 1, 0, "RuleManager", "Get it from the Engine"); + qmlRegisterUncreatableType(uri, 1, 0, "Rules", "Get it from RuleManager"); + qmlRegisterUncreatableType(uri, 1, 0, "Rule", "Get it from Rules"); + qmlRegisterUncreatableType(uri, 1, 0, "RuleActions", "Get them from the rule"); + qmlRegisterUncreatableType(uri, 1, 0, "RuleAction", "Get it from RuleActions"); + qmlRegisterUncreatableType(uri, 1, 0, "RuleActionParams", "Get it from RuleActions"); + qmlRegisterUncreatableType(uri, 1, 0, "RuleActionParam", "Get it from RuleActionParams"); + qmlRegisterType(uri, 1, 0, "RulesFilterModel"); + qmlRegisterUncreatableType(uri, 1, 0, "EventDescriptors", "Get them from rules"); + qmlRegisterUncreatableType(uri, 1, 0, "EventDescriptor", "Get them from rules"); + qmlRegisterUncreatableType(uri, 1, 0, "ParamTypes", "Uncreatable"); + qmlRegisterUncreatableType(uri, 1, 0, "ParamType", "Uncreatable"); + qmlRegisterType(uri, 1, 0, "Param"); + qmlRegisterUncreatableType(uri, 1, 0, "ParamDescriptor", "Uncreatable"); + qmlRegisterUncreatableType(uri, 1, 0, "ParamDescriptors", "Uncreatable"); + qmlRegisterUncreatableType(uri, 1, 0, "StateDescriptor", "Uncreatable"); + qmlRegisterUncreatableType(uri, 1, 0, "StateEvaluator", "Uncreatable"); + qmlRegisterUncreatableType(uri, 1, 0, "StateEvaluators", "Uncreatable"); + + qmlRegisterUncreatableType(uri, 1, 0, "Interface", "Uncreatable"); + qmlRegisterSingletonType(uri, 1, 0, "Interfaces", interfacesModel_provider); + + qmlRegisterUncreatableType(uri, 1, 0, "Plugin", "Can't create this in QML. Get it from the Plugins."); + qmlRegisterUncreatableType(uri, 1, 0, "Plugins", "Can't create this in QML. Get it from the DeviceManager."); + qmlRegisterType(uri, 1, 0, "PluginsProxy"); + + qmlRegisterUncreatableType(uri, 1, 0, "BasicConfiguration", "Uncreatable"); + + qmlRegisterType(uri, 1, 0, "NymeaDiscovery"); + qmlRegisterUncreatableType(uri, 1, 0, "DiscoveryModel", "Get it from NymeaDiscovery"); + + qmlRegisterType(uri, 1, 0, "EventDescriptorParamsFilterModel"); + + qmlRegisterType(uri, 1, 0, "LogsModel"); + qmlRegisterType(uri, 1, 0, "ValueLogsProxyModel"); + qmlRegisterUncreatableType(uri, 1, 0, "LogEntry", "Get them from LogsModel"); + + qmlRegisterType(uri, 1, 0, "NetworkManagerControler"); + qmlRegisterUncreatableType(uri, 1, 0, "BluetoothDiscovery", "Can't create this in QML. Get it from the Engine instance."); + qmlRegisterUncreatableType(uri, 1, 0, "BluetoothDeviceInfo", "Can't create this in QML. Get it from the DeviceInfos."); + qmlRegisterUncreatableType(uri, 1, 0, "BluetoothDeviceInfos", "Can't create this in QML. Get it from the BluetoothDiscovery."); + qmlRegisterUncreatableType(uri, 1, 0, "WirelessSetupManager", "Can't create this in QML. Get it from the NetworkManagerControler."); + qmlRegisterUncreatableType(uri, 1, 0, "WirelessAccesspoints", "Can't create this in QML. Get it from the Loop."); + +} + +#endif // LIBMEACORE_H diff --git a/libmea-core/libmea-core.pro b/libmea-core/libmea-core.pro new file mode 100644 index 00000000..470c4adc --- /dev/null +++ b/libmea-core/libmea-core.pro @@ -0,0 +1,121 @@ +TARGET = mea-core +TEMPLATE = lib +CONFIG += staticlib + +include(../mea.pri) + +QT -= gui +QT += websockets bluetooth + +INCLUDEPATH += $$top_srcdir/libnymea-common + +SOURCES += \ + engine.cpp \ + nymeainterface.cpp \ + devicemanager.cpp \ + websocketinterface.cpp \ + jsonrpc/jsontypes.cpp \ + jsonrpc/jsonrpcclient.cpp \ + jsonrpc/jsonhandler.cpp \ + discovery/nymeahost.cpp \ + discovery/nymeahosts.cpp \ + discovery/upnpdiscovery.cpp \ + devices.cpp \ + devicesproxy.cpp \ + deviceclasses.cpp \ + deviceclassesproxy.cpp \ + devicediscovery.cpp \ + vendorsproxy.cpp \ + pluginsproxy.cpp \ + tcpsocketinterface.cpp \ + nymeaconnection.cpp \ + interfacesmodel.cpp \ + discovery/zeroconfdiscovery.cpp \ + discovery/discoverydevice.cpp \ + discovery/discoverymodel.cpp \ + rulemanager.cpp \ + models/rulesfiltermodel.cpp \ + models/logsmodel.cpp \ + models/valuelogsproxymodel.cpp \ + discovery/nymeadiscovery.cpp \ + logmanager.cpp \ + basicconfiguration.cpp \ + models/eventdescriptorparamsfiltermodel.cpp \ + wifisetup/bluetoothdevice.cpp \ + wifisetup/bluetoothdeviceinfo.cpp \ + wifisetup/bluetoothdeviceinfos.cpp \ + wifisetup/bluetoothdiscovery.cpp \ + wifisetup/wirelessaccesspoint.cpp \ + wifisetup/wirelessaccesspoints.cpp \ + wifisetup/wirelesssetupmanager.cpp \ + wifisetup/networkmanagercontroler.cpp \ + +HEADERS += \ + engine.h \ + nymeainterface.h \ + devicemanager.h \ + websocketinterface.h \ + jsonrpc/jsontypes.h \ + jsonrpc/jsonrpcclient.h \ + jsonrpc/jsonhandler.h \ + discovery/nymeahost.h \ + discovery/nymeahosts.h \ + discovery/upnpdiscovery.h \ + devices.h \ + devicesproxy.h \ + deviceclasses.h \ + deviceclassesproxy.h \ + devicediscovery.h \ + vendorsproxy.h \ + pluginsproxy.h \ + tcpsocketinterface.h \ + nymeaconnection.h \ + interfacesmodel.h \ + discovery/zeroconfdiscovery.h \ + discovery/discoverydevice.h \ + discovery/discoverymodel.h \ + rulemanager.h \ + models/rulesfiltermodel.h \ + models/logsmodel.h \ + models/valuelogsproxymodel.h \ + discovery/nymeadiscovery.h \ + logmanager.h \ + basicconfiguration.h \ + models/eventdescriptorparamsfiltermodel.h \ + wifisetup/bluetoothdevice.h \ + wifisetup/bluetoothdeviceinfo.h \ + wifisetup/bluetoothdeviceinfos.h \ + wifisetup/bluetoothdiscovery.h \ + wifisetup/wirelessaccesspoint.h \ + wifisetup/wirelessaccesspoints.h \ + wifisetup/wirelesssetupmanager.h \ + wifisetup/networkmanagercontroler.h \ + libmea-core.h + +withavahi { +DEFINES += WITH_AVAHI + +LIBS += -lavahi-client -lavahi-common + +HEADERS += discovery/avahi/avahiserviceentry.h \ + discovery/avahi/qt-watch.h \ + discovery/avahi/qtavahiclient.h \ + discovery/avahi/qtavahiservice_p.h \ + discovery/avahi/qtavahiservice.h \ + discovery/avahi/qtavahiservicebrowser_p.h \ + discovery/avahi/qtavahiservicebrowser.h \ + +SOURCES += discovery/avahi/avahiserviceentry.cpp \ + discovery/avahi/qt-watch.cpp \ + discovery/avahi/qtavahiclient.cpp \ + discovery/avahi/qtavahiservice_p.cpp \ + discovery/avahi/qtavahiservice.cpp \ + discovery/avahi/qtavahiservicebrowser_p.cpp \ + discovery/avahi/qtavahiservicebrowser.cpp \ + +} + +unix { + target.path = /usr/lib + INSTALLS += target +} diff --git a/mea/logmanager.cpp b/libmea-core/logmanager.cpp similarity index 100% rename from mea/logmanager.cpp rename to libmea-core/logmanager.cpp diff --git a/mea/logmanager.h b/libmea-core/logmanager.h similarity index 100% rename from mea/logmanager.h rename to libmea-core/logmanager.h diff --git a/mea/models/eventdescriptorparamsfiltermodel.cpp b/libmea-core/models/eventdescriptorparamsfiltermodel.cpp similarity index 100% rename from mea/models/eventdescriptorparamsfiltermodel.cpp rename to libmea-core/models/eventdescriptorparamsfiltermodel.cpp diff --git a/mea/models/eventdescriptorparamsfiltermodel.h b/libmea-core/models/eventdescriptorparamsfiltermodel.h similarity index 100% rename from mea/models/eventdescriptorparamsfiltermodel.h rename to libmea-core/models/eventdescriptorparamsfiltermodel.h diff --git a/mea/models/logsmodel.cpp b/libmea-core/models/logsmodel.cpp similarity index 99% rename from mea/models/logsmodel.cpp rename to libmea-core/models/logsmodel.cpp index 46cfd08c..cf8777bc 100644 --- a/mea/models/logsmodel.cpp +++ b/libmea-core/models/logsmodel.cpp @@ -3,6 +3,8 @@ #include "engine.h" #include "logmanager.h" +#include + LogsModel::LogsModel(QObject *parent) : QAbstractListModel(parent) { connect(Engine::instance()->logManager(), &LogManager::logEntryReceived, this, &LogsModel::newLogEntryReceived); diff --git a/mea/models/logsmodel.h b/libmea-core/models/logsmodel.h similarity index 100% rename from mea/models/logsmodel.h rename to libmea-core/models/logsmodel.h diff --git a/mea/models/rulesfiltermodel.cpp b/libmea-core/models/rulesfiltermodel.cpp similarity index 100% rename from mea/models/rulesfiltermodel.cpp rename to libmea-core/models/rulesfiltermodel.cpp diff --git a/mea/models/rulesfiltermodel.h b/libmea-core/models/rulesfiltermodel.h similarity index 100% rename from mea/models/rulesfiltermodel.h rename to libmea-core/models/rulesfiltermodel.h diff --git a/mea/models/valuelogsproxymodel.cpp b/libmea-core/models/valuelogsproxymodel.cpp similarity index 100% rename from mea/models/valuelogsproxymodel.cpp rename to libmea-core/models/valuelogsproxymodel.cpp diff --git a/mea/models/valuelogsproxymodel.h b/libmea-core/models/valuelogsproxymodel.h similarity index 100% rename from mea/models/valuelogsproxymodel.h rename to libmea-core/models/valuelogsproxymodel.h diff --git a/mea/nymeaconnection.cpp b/libmea-core/nymeaconnection.cpp similarity index 100% rename from mea/nymeaconnection.cpp rename to libmea-core/nymeaconnection.cpp diff --git a/mea/nymeaconnection.h b/libmea-core/nymeaconnection.h similarity index 100% rename from mea/nymeaconnection.h rename to libmea-core/nymeaconnection.h diff --git a/mea/nymeainterface.cpp b/libmea-core/nymeainterface.cpp similarity index 100% rename from mea/nymeainterface.cpp rename to libmea-core/nymeainterface.cpp diff --git a/mea/nymeainterface.h b/libmea-core/nymeainterface.h similarity index 100% rename from mea/nymeainterface.h rename to libmea-core/nymeainterface.h diff --git a/mea/pluginsproxy.cpp b/libmea-core/pluginsproxy.cpp similarity index 100% rename from mea/pluginsproxy.cpp rename to libmea-core/pluginsproxy.cpp diff --git a/mea/pluginsproxy.h b/libmea-core/pluginsproxy.h similarity index 100% rename from mea/pluginsproxy.h rename to libmea-core/pluginsproxy.h diff --git a/mea/rulemanager.cpp b/libmea-core/rulemanager.cpp similarity index 97% rename from mea/rulemanager.cpp rename to libmea-core/rulemanager.cpp index 9fb8ec87..9ae8aee4 100644 --- a/mea/rulemanager.cpp +++ b/libmea-core/rulemanager.cpp @@ -262,9 +262,9 @@ void RuleManager::parseTimeDescriptor(const QVariantMap &timeDescriptor, Rule *r Q_UNUSED(rule) foreach (const QVariant &timeEventItemVariant, timeDescriptor.value("timeEventItems").toList()) { - TimeEventItem *timeEventItem = new TimeEventItem(); - timeEventItem->setDateTime(QDateTime::fromSecsSinceEpoch(timeEventItemVariant.toMap().value("datetime").toULongLong())); - timeEventItem->setTime(QTime::fromString(timeEventItemVariant.toMap().value("time").toString())); +// TimeEventItem *timeEventItem = new TimeEventItem(); +// timeEventItem->setDateTime(QDateTime::fromSecsSinceEpoch(timeEventItemVariant.toMap().value("datetime").toULongLong())); +// timeEventItem->setTime(QTime::fromString(timeEventItemVariant.toMap().value("time").toString())); // timeEventItem->setRepeatingOption(); } } diff --git a/mea/rulemanager.h b/libmea-core/rulemanager.h similarity index 100% rename from mea/rulemanager.h rename to libmea-core/rulemanager.h diff --git a/mea/tcpsocketinterface.cpp b/libmea-core/tcpsocketinterface.cpp similarity index 100% rename from mea/tcpsocketinterface.cpp rename to libmea-core/tcpsocketinterface.cpp diff --git a/mea/tcpsocketinterface.h b/libmea-core/tcpsocketinterface.h similarity index 100% rename from mea/tcpsocketinterface.h rename to libmea-core/tcpsocketinterface.h diff --git a/mea/vendorsproxy.cpp b/libmea-core/vendorsproxy.cpp similarity index 100% rename from mea/vendorsproxy.cpp rename to libmea-core/vendorsproxy.cpp diff --git a/mea/vendorsproxy.h b/libmea-core/vendorsproxy.h similarity index 100% rename from mea/vendorsproxy.h rename to libmea-core/vendorsproxy.h diff --git a/mea/websocketinterface.cpp b/libmea-core/websocketinterface.cpp similarity index 95% rename from mea/websocketinterface.cpp rename to libmea-core/websocketinterface.cpp index 9d7fc15b..063eef38 100644 --- a/mea/websocketinterface.cpp +++ b/libmea-core/websocketinterface.cpp @@ -21,7 +21,7 @@ #include "websocketinterface.h" #include "engine.h" -#include +#include #include #include #include @@ -29,7 +29,7 @@ WebsocketInterface::WebsocketInterface(QObject *parent) : NymeaInterface(parent) { - m_socket = new QWebSocket(QGuiApplication::applicationName(), QWebSocketProtocol::Version13, this); + m_socket = new QWebSocket(QCoreApplication::applicationName(), QWebSocketProtocol::Version13, this); QObject::connect(m_socket, &QWebSocket::connected, this, &WebsocketInterface::connected); QObject::connect(m_socket, &QWebSocket::disconnected, this, &WebsocketInterface::disconnected); diff --git a/mea/websocketinterface.h b/libmea-core/websocketinterface.h similarity index 100% rename from mea/websocketinterface.h rename to libmea-core/websocketinterface.h diff --git a/mea/wifisetup/bluetoothdevice.cpp b/libmea-core/wifisetup/bluetoothdevice.cpp similarity index 100% rename from mea/wifisetup/bluetoothdevice.cpp rename to libmea-core/wifisetup/bluetoothdevice.cpp diff --git a/mea/wifisetup/bluetoothdevice.h b/libmea-core/wifisetup/bluetoothdevice.h similarity index 100% rename from mea/wifisetup/bluetoothdevice.h rename to libmea-core/wifisetup/bluetoothdevice.h diff --git a/mea/wifisetup/bluetoothdeviceinfo.cpp b/libmea-core/wifisetup/bluetoothdeviceinfo.cpp similarity index 100% rename from mea/wifisetup/bluetoothdeviceinfo.cpp rename to libmea-core/wifisetup/bluetoothdeviceinfo.cpp diff --git a/mea/wifisetup/bluetoothdeviceinfo.h b/libmea-core/wifisetup/bluetoothdeviceinfo.h similarity index 100% rename from mea/wifisetup/bluetoothdeviceinfo.h rename to libmea-core/wifisetup/bluetoothdeviceinfo.h diff --git a/mea/wifisetup/bluetoothdeviceinfos.cpp b/libmea-core/wifisetup/bluetoothdeviceinfos.cpp similarity index 100% rename from mea/wifisetup/bluetoothdeviceinfos.cpp rename to libmea-core/wifisetup/bluetoothdeviceinfos.cpp diff --git a/mea/wifisetup/bluetoothdeviceinfos.h b/libmea-core/wifisetup/bluetoothdeviceinfos.h similarity index 100% rename from mea/wifisetup/bluetoothdeviceinfos.h rename to libmea-core/wifisetup/bluetoothdeviceinfos.h diff --git a/mea/wifisetup/bluetoothdiscovery.cpp b/libmea-core/wifisetup/bluetoothdiscovery.cpp similarity index 100% rename from mea/wifisetup/bluetoothdiscovery.cpp rename to libmea-core/wifisetup/bluetoothdiscovery.cpp diff --git a/mea/wifisetup/bluetoothdiscovery.h b/libmea-core/wifisetup/bluetoothdiscovery.h similarity index 100% rename from mea/wifisetup/bluetoothdiscovery.h rename to libmea-core/wifisetup/bluetoothdiscovery.h diff --git a/mea/wifisetup/networkmanagercontroler.cpp b/libmea-core/wifisetup/networkmanagercontroler.cpp similarity index 100% rename from mea/wifisetup/networkmanagercontroler.cpp rename to libmea-core/wifisetup/networkmanagercontroler.cpp diff --git a/mea/wifisetup/networkmanagercontroler.h b/libmea-core/wifisetup/networkmanagercontroler.h similarity index 100% rename from mea/wifisetup/networkmanagercontroler.h rename to libmea-core/wifisetup/networkmanagercontroler.h diff --git a/mea/wifisetup/wirelessaccesspoint.cpp b/libmea-core/wifisetup/wirelessaccesspoint.cpp similarity index 100% rename from mea/wifisetup/wirelessaccesspoint.cpp rename to libmea-core/wifisetup/wirelessaccesspoint.cpp diff --git a/mea/wifisetup/wirelessaccesspoint.h b/libmea-core/wifisetup/wirelessaccesspoint.h similarity index 100% rename from mea/wifisetup/wirelessaccesspoint.h rename to libmea-core/wifisetup/wirelessaccesspoint.h diff --git a/mea/wifisetup/wirelessaccesspoints.cpp b/libmea-core/wifisetup/wirelessaccesspoints.cpp similarity index 100% rename from mea/wifisetup/wirelessaccesspoints.cpp rename to libmea-core/wifisetup/wirelessaccesspoints.cpp diff --git a/mea/wifisetup/wirelessaccesspoints.h b/libmea-core/wifisetup/wirelessaccesspoints.h similarity index 100% rename from mea/wifisetup/wirelessaccesspoints.h rename to libmea-core/wifisetup/wirelessaccesspoints.h diff --git a/mea/wifisetup/wirelesssetupmanager.cpp b/libmea-core/wifisetup/wirelesssetupmanager.cpp similarity index 100% rename from mea/wifisetup/wirelesssetupmanager.cpp rename to libmea-core/wifisetup/wirelesssetupmanager.cpp diff --git a/mea/wifisetup/wirelesssetupmanager.h b/libmea-core/wifisetup/wirelesssetupmanager.h similarity index 100% rename from mea/wifisetup/wirelesssetupmanager.h rename to libmea-core/wifisetup/wirelesssetupmanager.h diff --git a/libnymea-common/libnymea-common.h b/libnymea-common/libnymea-common.h new file mode 100644 index 00000000..1fd15938 --- /dev/null +++ b/libnymea-common/libnymea-common.h @@ -0,0 +1,7 @@ +#include + +#if defined(LIBNYMEA_COMMON) +# define LIBNYMEA_COMMON_EXPORT Q_DECL_EXPORT +#else +# define LIBNYMEA_COMMON_EXPORT Q_DECL_IMPORT +#endif diff --git a/libnymea-common/libnymea-common.pro b/libnymea-common/libnymea-common.pro index 8d2a38c7..a42c1163 100644 --- a/libnymea-common/libnymea-common.pro +++ b/libnymea-common/libnymea-common.pro @@ -2,9 +2,10 @@ include(../mea.pri) TARGET = nymea-common TEMPLATE = lib +CONFIG += staticlib +QT -= gui QT += network -CONFIG += static target.path = /usr/lib/$$system('dpkg-architecture -q DEB_HOST_MULTIARCH') INSTALLS += target diff --git a/mea.pri b/mea.pri index f0080518..c8469b13 100644 --- a/mea.pri +++ b/mea.pri @@ -1,4 +1,5 @@ CONFIG += c++11 +#DEFINES += QT_DEPRECATED_WARNINGS top_srcdir=$$PWD top_builddir=$$shadowed($$PWD) diff --git a/mea.pro b/mea.pro index e5e1b069..360e7b3f 100644 --- a/mea.pro +++ b/mea.pro @@ -1,9 +1,13 @@ TEMPLATE=subdirs -SUBDIRS = libnymea-common mea -libnymea-common.subdir = libnymea-common -mea.subdir = mea +SUBDIRS = libnymea-common libmea-core mea +libmea-core.depends = libnymea-common +mea.depends = libmea-core +withtests: { + SUBDIRS += tests + tests.depends = libmea-core +} # Building a Windows installer: # Install Visual Studio, Qt and NSIS on Windows. Make sure NSIS is in your path. @@ -34,4 +38,4 @@ lrelease-make_first.commands = lrelease $$_FILE_ lrelease-qmake_all.commands = lrelease $$_FILE_ QMAKE_EXTRA_TARGETS += lrelease lrelease-make_first lrelease-qmake_all lrelease-install_subtargets -mea.depends = libnymea-common lrelease +mea.depends += lrelease diff --git a/mea/main.cpp b/mea/main.cpp index 4c68bfce..f457cd8d 100644 --- a/mea/main.cpp +++ b/mea/main.cpp @@ -25,44 +25,10 @@ #include #include -#include "engine.h" -#include "vendorsproxy.h" -#include "deviceclassesproxy.h" -#include "devicesproxy.h" -#include "pluginsproxy.h" -#include "devicediscovery.h" -#include "discovery/nymeadiscovery.h" -#include "discovery/discoverymodel.h" -#include "interfacesmodel.h" -#include "rulemanager.h" -#include "models/rulesfiltermodel.h" -#include "types/ruleactions.h" -#include "types/ruleaction.h" -#include "types/ruleactionparams.h" -#include "types/ruleactionparam.h" -#include "types/eventdescriptors.h" -#include "types/eventdescriptor.h" -#include "types/rule.h" -#include "types/interfaces.h" -#include "types/interface.h" -#include "types/statedescriptor.h" -#include "types/stateevaluator.h" -#include "types/stateevaluators.h" -#include "models/logsmodel.h" -#include "models/valuelogsproxymodel.h" -#include "models/eventdescriptorparamsfiltermodel.h" -#include "basicconfiguration.h" -#include "wifisetup/networkmanagercontroler.h" +#include "libmea-core.h" + #include "stylecontroller.h" -static QObject* interfacesModel_provider(QQmlEngine *engine, QJSEngine *scriptEngine) -{ - Q_UNUSED(engine) - Q_UNUSED(scriptEngine) - - return new Interfaces(); -} - int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); @@ -92,88 +58,9 @@ int main(int argc, char *argv[]) meaTranslator.load(":/translations/mea-" + QLocale::system().name()); application.installTranslator(&meaTranslator); - const char uri[] = "Mea"; - qDebug() << "Running on" << QSysInfo::machineHostName() << QSysInfo::prettyProductName() << QSysInfo::productType() << QSysInfo::productVersion(); - qmlRegisterSingletonType(uri, 1, 0, "Engine", Engine::qmlInstance); - - qmlRegisterUncreatableType(uri, 1, 0, "DeviceManager", "Can't create this in QML. Get it from the Core."); - qmlRegisterUncreatableType(uri, 1, 0, "JsonRpcClient", "Can't create this in QML. Get it from the Core."); - qmlRegisterUncreatableType(uri, 1, 0, "NymeaConnection", "Can't create this in QML. Get it from the Core."); - - // libnymea-common - qmlRegisterUncreatableType(uri, 1, 0, "Types", "Can't create this in QML. Get it from the Core."); - - qmlRegisterUncreatableType(uri, 1, 0, "ParamType", "Can't create this in QML. Get it from the ParamTypes."); - qmlRegisterUncreatableType(uri, 1, 0, "ParamTypes", "Can't create this in QML. Get it from the DeviceClass."); - qmlRegisterUncreatableType(uri, 1, 0, "EventType", "Can't create this in QML. Get it from the EventTypes."); - qmlRegisterUncreatableType(uri, 1, 0, "EventTypes", "Can't create this in QML. Get it from the DeviceClass."); - qmlRegisterUncreatableType(uri, 1, 0, "StateType", "Can't create this in QML. Get it from the StateTypes."); - qmlRegisterUncreatableType(uri, 1, 0, "StateTypes", "Can't create this in QML. Get it from the DeviceClass."); - qmlRegisterUncreatableType(uri, 1, 0, "ActionType", "Can't create this in QML. Get it from the ActionTypes."); - qmlRegisterUncreatableType(uri, 1, 0, "ActionTypes", "Can't create this in QML. Get it from the DeviceClass."); - - qmlRegisterUncreatableType(uri, 1, 0, "State", "Can't create this in QML. Get it from the States."); - qmlRegisterUncreatableType(uri, 1, 0, "States", "Can't create this in QML. Get it from the Device."); - - qmlRegisterUncreatableType(uri, 1, 0, "Vendor", "Can't create this in QML. Get it from the Vendors."); - qmlRegisterUncreatableType(uri, 1, 0, "Vendors", "Can't create this in QML. Get it from the DeviceManager."); - qmlRegisterType(uri, 1, 0, "VendorsProxy"); - - qmlRegisterUncreatableType(uri, 1, 0, "Device", "Can't create this in QML. Get it from the Devices."); - qmlRegisterUncreatableType(uri, 1, 0, "Devices", "Can't create this in QML. Get it from the DeviceManager."); - qmlRegisterType(uri, 1, 0, "DevicesProxy"); - qmlRegisterType(uri, 1, 0, "InterfacesModel"); - - qmlRegisterUncreatableType(uri, 1, 0, "DeviceClass", "Can't create this in QML. Get it from the DeviceClasses."); - qmlRegisterUncreatableType(uri, 1, 0, "DeviceClasses", "Can't create this in QML. Get it from the DeviceManager."); - qmlRegisterType(uri, 1, 0, "DeviceClassesProxy"); - qmlRegisterType(uri, 1, 0, "DeviceDiscovery"); - - qmlRegisterUncreatableType(uri, 1, 0, "RuleManager", "Get it from the Engine"); - qmlRegisterUncreatableType(uri, 1, 0, "Rules", "Get it from RuleManager"); - qmlRegisterUncreatableType(uri, 1, 0, "Rule", "Get it from Rules"); - qmlRegisterUncreatableType(uri, 1, 0, "RuleActions", "Get them from the rule"); - qmlRegisterUncreatableType(uri, 1, 0, "RuleAction", "Get it from RuleActions"); - qmlRegisterUncreatableType(uri, 1, 0, "RuleActionParams", "Get it from RuleActions"); - qmlRegisterUncreatableType(uri, 1, 0, "RuleActionParam", "Get it from RuleActionParams"); - qmlRegisterType(uri, 1, 0, "RulesFilterModel"); - qmlRegisterUncreatableType(uri, 1, 0, "EventDescriptors", "Get them from rules"); - qmlRegisterUncreatableType(uri, 1, 0, "EventDescriptor", "Get them from rules"); - qmlRegisterUncreatableType(uri, 1, 0, "ParamTypes", "Uncreatable"); - qmlRegisterUncreatableType(uri, 1, 0, "ParamType", "Uncreatable"); - qmlRegisterType(uri, 1, 0, "Param"); - qmlRegisterUncreatableType(uri, 1, 0, "ParamDescriptor", "Uncreatable"); - qmlRegisterUncreatableType(uri, 1, 0, "ParamDescriptors", "Uncreatable"); - qmlRegisterUncreatableType(uri, 1, 0, "StateDescriptor", "Uncreatable"); - qmlRegisterUncreatableType(uri, 1, 0, "StateEvaluator", "Uncreatable"); - qmlRegisterUncreatableType(uri, 1, 0, "StateEvaluators", "Uncreatable"); - - qmlRegisterUncreatableType(uri, 1, 0, "Interface", "Uncreatable"); - qmlRegisterSingletonType(uri, 1, 0, "Interfaces", interfacesModel_provider); - - qmlRegisterUncreatableType(uri, 1, 0, "Plugin", "Can't create this in QML. Get it from the Plugins."); - qmlRegisterUncreatableType(uri, 1, 0, "Plugins", "Can't create this in QML. Get it from the DeviceManager."); - qmlRegisterType(uri, 1, 0, "PluginsProxy"); - - qmlRegisterUncreatableType(uri, 1, 0, "BasicConfiguration", "Uncreatable"); - - qmlRegisterType(uri, 1, 0, "NymeaDiscovery"); - qmlRegisterUncreatableType(uri, 1, 0, "DiscoveryModel", "Get it from NymeaDiscovery"); - - qmlRegisterType(uri, 1, 0, "EventDescriptorParamsFilterModel"); - - qmlRegisterType(uri, 1, 0, "LogsModel"); - qmlRegisterType(uri, 1, 0, "ValueLogsProxyModel"); - qmlRegisterUncreatableType(uri, 1, 0, "LogEntry", "Get them from LogsModel"); - - qmlRegisterType(uri, 1, 0, "NetworkManagerControler"); - qmlRegisterUncreatableType(uri, 1, 0, "BluetoothDiscovery", "Can't create this in QML. Get it from the Engine instance."); - qmlRegisterUncreatableType(uri, 1, 0, "BluetoothDeviceInfo", "Can't create this in QML. Get it from the DeviceInfos."); - qmlRegisterUncreatableType(uri, 1, 0, "BluetoothDeviceInfos", "Can't create this in QML. Get it from the BluetoothDiscovery."); - qmlRegisterUncreatableType(uri, 1, 0, "WirelessSetupManager", "Can't create this in QML. Get it from the NetworkManagerControler."); - qmlRegisterUncreatableType(uri, 1, 0, "WirelessAccesspoints", "Can't create this in QML. Get it from the Loop."); + registerQmlTypes(); Engine::instance(); @@ -187,7 +74,7 @@ int main(int argc, char *argv[]) StyleController styleController; engine->rootContext()->setContextProperty("styleController", &styleController); - engine->load(QUrl(QLatin1String("qrc:/ui/main.qml"))); + engine->load(QUrl(QLatin1String("qrc:/ui/Mea.qml"))); return application.exec(); } diff --git a/mea/mea.pro b/mea/mea.pro index e957d181..8ab4c9f6 100644 --- a/mea/mea.pro +++ b/mea/mea.pro @@ -2,117 +2,23 @@ TEMPLATE=app TARGET=mea include(../mea.pri) -QT += qml quick quickcontrols2 websockets svg bluetooth +QT += qml quick quickcontrols2 svg websockets bluetooth -INCLUDEPATH += $$top_srcdir/libnymea-common -LIBS += -L$$top_builddir/libnymea-common/release -L$$top_builddir/libnymea-common/ -lnymea-common +INCLUDEPATH += $$top_srcdir/libnymea-common \ + $$top_srcdir/libmea-core +LIBS += -L$$top_builddir/libmea-core/ -lmea-core \ + -L$$top_builddir/libnymea-common/ -lnymea-common +win32:Debug:LIBS += -L$$top_builddir/libmea-core/debug \ + -L$$top_builddir/libnymea-common/debug +win32:Release:LIBS += -L$$top_builddir/libmea-core/release \ + -L$$top_builddir/libnymea-common/release -HEADERS += engine.h \ - nymeainterface.h \ - devicemanager.h \ - websocketinterface.h \ - jsonrpc/jsontypes.h \ - jsonrpc/jsonrpcclient.h \ - jsonrpc/jsonhandler.h \ - discovery/nymeahost.h \ - discovery/nymeahosts.h \ - discovery/upnpdiscovery.h \ - devices.h \ - devicesproxy.h \ - deviceclasses.h \ - deviceclassesproxy.h \ - devicediscovery.h \ - vendorsproxy.h \ - pluginsproxy.h \ - tcpsocketinterface.h \ - nymeaconnection.h \ - interfacesmodel.h \ - discovery/zeroconfdiscovery.h \ - discovery/discoverydevice.h \ - discovery/discoverymodel.h \ - rulemanager.h \ - models/rulesfiltermodel.h \ - models/logsmodel.h \ - models/valuelogsproxymodel.h \ - discovery/nymeadiscovery.h \ - logmanager.h \ - basicconfiguration.h \ - models/eventdescriptorparamsfiltermodel.h \ - wifisetup/bluetoothdevice.h \ - wifisetup/bluetoothdeviceinfo.h \ - wifisetup/bluetoothdeviceinfos.h \ - wifisetup/bluetoothdiscovery.h \ - wifisetup/wirelessaccesspoint.h \ - wifisetup/wirelessaccesspoints.h \ - wifisetup/wirelesssetupmanager.h \ - wifisetup/networkmanagercontroler.h \ +HEADERS += \ stylecontroller.h - SOURCES += main.cpp \ - engine.cpp \ - nymeainterface.cpp \ - devicemanager.cpp \ - websocketinterface.cpp \ - jsonrpc/jsontypes.cpp \ - jsonrpc/jsonrpcclient.cpp \ - jsonrpc/jsonhandler.cpp \ - discovery/nymeahost.cpp \ - discovery/nymeahosts.cpp \ - discovery/upnpdiscovery.cpp \ - devices.cpp \ - devicesproxy.cpp \ - deviceclasses.cpp \ - deviceclassesproxy.cpp \ - devicediscovery.cpp \ - vendorsproxy.cpp \ - pluginsproxy.cpp \ - tcpsocketinterface.cpp \ - nymeaconnection.cpp \ - interfacesmodel.cpp \ - discovery/zeroconfdiscovery.cpp \ - discovery/discoverydevice.cpp \ - discovery/discoverymodel.cpp \ - rulemanager.cpp \ - models/rulesfiltermodel.cpp \ - models/logsmodel.cpp \ - models/valuelogsproxymodel.cpp \ - discovery/nymeadiscovery.cpp \ - logmanager.cpp \ - basicconfiguration.cpp \ - models/eventdescriptorparamsfiltermodel.cpp \ - wifisetup/bluetoothdevice.cpp \ - wifisetup/bluetoothdeviceinfo.cpp \ - wifisetup/bluetoothdeviceinfos.cpp \ - wifisetup/bluetoothdiscovery.cpp \ - wifisetup/wirelessaccesspoint.cpp \ - wifisetup/wirelessaccesspoints.cpp \ - wifisetup/wirelesssetupmanager.cpp \ - wifisetup/networkmanagercontroler.cpp \ stylecontroller.cpp -withavahi { -DEFINES += WITH_AVAHI - -LIBS += -lavahi-client -lavahi-common - -HEADERS += discovery/avahi/avahiserviceentry.h \ - discovery/avahi/qt-watch.h \ - discovery/avahi/qtavahiclient.h \ - discovery/avahi/qtavahiservice_p.h \ - discovery/avahi/qtavahiservice.h \ - discovery/avahi/qtavahiservicebrowser_p.h \ - discovery/avahi/qtavahiservicebrowser.h \ - -SOURCES += discovery/avahi/avahiserviceentry.cpp \ - discovery/avahi/qt-watch.cpp \ - discovery/avahi/qtavahiclient.cpp \ - discovery/avahi/qtavahiservice_p.cpp \ - discovery/avahi/qtavahiservice.cpp \ - discovery/avahi/qtavahiservicebrowser_p.cpp \ - discovery/avahi/qtavahiservicebrowser.cpp \ - -} RESOURCES += \ resources.qrc diff --git a/mea/resources.qrc b/mea/resources.qrc index a1f26b81..132b7305 100644 --- a/mea/resources.qrc +++ b/mea/resources.qrc @@ -2,7 +2,7 @@ ui/ConnectPage.qml ui/DevicesPage.qml - ui/main.qml + ui/Mea.qml ui/NewDeviceWizard.qml ui/SettingsPage.qml ui/components/GuhHeader.qml diff --git a/mea/ui/ConnectPage.qml b/mea/ui/ConnectPage.qml index c4d54859..1cd727cb 100644 --- a/mea/ui/ConnectPage.qml +++ b/mea/ui/ConnectPage.qml @@ -38,6 +38,7 @@ Page { id: discoveryPage Page { + objectName: "discoveryPage" header: GuhHeader { text: qsTr("Connect %1").arg(app.systemName) backButtonVisible: false @@ -54,9 +55,11 @@ Page { Menu { id: connectionMenu + objectName: "connectionMenu" width: implicitWidth + app.margins IconMenuItem { + objectName: "manualConnectMenuItem" iconSource: "../images/network-vpn.svg" text: qsTr("Manual connect") onTriggered: pageStack.push(manualConnectPage) @@ -112,6 +115,8 @@ Page { delegate: ItemDelegate { width: parent.width height: app.delegateHeight + objectName: "discoveryDelegate" + index + property string hostAddress: model.hostAddress ColumnLayout { anchors.fill: parent anchors.margins: app.margins @@ -174,6 +179,7 @@ Page { id: manualConnectPage Page { + objectName: "manualConnectPage" header: GuhHeader { text: qsTr("Manual connection") onBackPressed: pageStack.pop() @@ -200,6 +206,7 @@ Page { Label { text: qsTr("Address:") } TextField { id: addressTextInput + objectName: "addressTextInput" Layout.fillWidth: true placeholderText: "127.0.0.1" validator: RegExpValidator { regExp: /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/ } @@ -226,6 +233,7 @@ Page { Button { text: qsTr("Connect") + objectName: "connectButton" Layout.fillWidth: true onClicked: { var rpcUrl diff --git a/mea/ui/main.qml b/mea/ui/Mea.qml similarity index 98% rename from mea/ui/main.qml rename to mea/ui/Mea.qml index 2becd7b0..dace6dd8 100644 --- a/mea/ui/main.qml +++ b/mea/ui/Mea.qml @@ -21,8 +21,7 @@ ApplicationWindow { property int iconSize: 30 property int delegateHeight: 60 - Settings { - id: settings + property var settings: Settings { property string lastConnectedHost: "" property int viewMode: ApplicationWindow.Maximized property bool returnToHome: false @@ -103,6 +102,7 @@ ApplicationWindow { StackView { id: pageStack + objectName: "pageStack" anchors.fill: parent initialItem: Page {} } @@ -121,6 +121,7 @@ ApplicationWindow { NymeaDiscovery { id: discovery + objectName: "discovery" } Connections { diff --git a/mea/ui/components/GuhHeader.qml b/mea/ui/components/GuhHeader.qml index 5f4c1ec3..52c4b3d8 100644 --- a/mea/ui/components/GuhHeader.qml +++ b/mea/ui/components/GuhHeader.qml @@ -21,6 +21,7 @@ ToolBar { HeaderButton { id: menuButton + objectName: "headerMenuButton" imageSource: "../images/navigation-menu.svg" visible: false onClicked: root.menuPressed(); @@ -28,6 +29,7 @@ ToolBar { HeaderButton { id: backButton + objectName: "backButton" imageSource: "../images/back.svg" onClicked: root.backPressed(); } diff --git a/tests/integration/tst_connect.qml b/tests/integration/tst_connect.qml new file mode 100644 index 00000000..faaf9e51 --- /dev/null +++ b/tests/integration/tst_connect.qml @@ -0,0 +1,121 @@ +import QtQuick 2.8 +import QtQuick.Controls 2.1 +import QtTest 1.0 +import Mea 1.0 +import "qrc:/ui" + +TestCase { + id: root + name: "MathTests" + + Mea { + id: mea + settings: Item { + property string lastConnectedHost: "" + property int viewMode: ApplicationWindow.Windowed + property bool returnToHome: false + property bool darkTheme: false + property string graphStyle: "bars" + property string style: "light" + } + } + + // TODO: take those from cmdline args + property string serverIP: "10.10.10.40" + + + // TODO: move this to a common import location + // Keeps executing a given parameter-less function until it returns the given + // expected result or the timemout is reached (in which case a test failure + // is generated) + function tryCompareFunction(func, expectedResult, timeout, message) { + var timeSpent = 0 + if (timeout === undefined) + timeout = 5000; + var success = false + var actualResult + while (timeSpent < timeout && !success) { + actualResult = func() + success = qtest_compareInternal(actualResult, expectedResult) + if (success === false) { + wait(50) + timeSpent += 50 + } + } + + var act = qtest_results.stringify(actualResult) + var exp = qtest_results.stringify(expectedResult) + compare(act, exp, message || "function returned unexpected result") + } + + function settleUi() { + var pageStack = findChild(mea, "pageStack") + tryCompare(pageStack, "busy", true) + tryCompare(pageStack, "busy", false) + } + + function initTestCase() { + settleUi(); + } + + function typeString(txt) { + for (var i = 0; i < txt.length; i++) { + keyClick(txt[i]) + } + } + + function test_discovery() { +// var discovery = findChild(mea, "discovery"); + +// tryCompareFunction(function() { +// for (var i = 0; i < discovery.discoveryModel.count; i++) { +// if (discovery.discoveryModel.get(i, DiscoveryModel.HostAddressRole) === serverIP) { +// return true; +// } +// } +// return false; +// }, true, 10000, "Failed to discover host " + serverIP + " in 10 seconds") + +// var discoveryPage = findChild(mea, "discoveryPage"); +// var delegate = null; +// for (var i = 0; i < discovery.discoveryModel.count; i++) { +// var tmp = findChild(discoveryPage, "discoveryDelegate" + i); +// print("have delegate", discoveryPage, tmp, tmp.hostAddress) +// if (tmp.hostAddress === serverIP) { +// delegate = tmp; +// } +// } +// verify(delegate !== null, "Could not find delegate for host " + serverIP) + +// mouseClick(delegate) + +// tryCompare(Engine.connection, "connected", true) + } + + function test_manualConnection() { + var manualConnectItem = findChild(mea, "manualConnectMenuItem"); + var headerMenuButton = findChild(mea, "headerMenuButton") + + var connMenu = findChild(mea, "connectionMenu") + mouseClick(headerMenuButton) + tryCompare(connMenu, "visible", true) + mouseClick(manualConnectItem) + + settleUi(); + + var manualConnectPage = findChild(mea, "manualConnectPage"); + + var addressInput = findChild(manualConnectPage, "addressTextInput") + mouseClick(addressInput) + + typeString(serverIP) + keyClick(Qt.Key_Tab) + typeString("2223") + + var connectButton = findChild(manualConnectPage, "connectButton"); + mouseClick(connectButton) + + tryCompare(Engine.connection, "connected", true) + } +} + diff --git a/tests/integration/tst_connect.qmlc b/tests/integration/tst_connect.qmlc new file mode 100644 index 00000000..742b18f9 Binary files /dev/null and b/tests/integration/tst_connect.qmlc differ diff --git a/tests/testrunner/testrunner.cpp b/tests/testrunner/testrunner.cpp new file mode 100644 index 00000000..2fb19810 --- /dev/null +++ b/tests/testrunner/testrunner.cpp @@ -0,0 +1,16 @@ + +#include +#include +#include +#ifdef QT_OPENGL_LIB +#include +#endif + +#include "libmea-core.h" + +int main(int argc, char **argv) +{ + registerQmlTypes(); + + return quick_test_main(argc, argv, "qmltestrunner", "."); +} diff --git a/tests/testrunner/testrunner.pro b/tests/testrunner/testrunner.pro new file mode 100644 index 00000000..0d07b927 --- /dev/null +++ b/tests/testrunner/testrunner.pro @@ -0,0 +1,23 @@ +TEMPLATE = app +TARGET = meatestrunner + +include(../../mea.pri) + +QT += core gui testlib bluetooth websockets +CONFIG += qmltestcase + +INCLUDEPATH += ../../mea/ \ + ../../libnymea-common/ \ + ../../libmea-core/ + +LIBS += -L$$top_builddir/libmea-core/ -lmea-core \ + -L$$top_builddir/libnymea-common/ -lnymea-common +win32:Debug:LIBS += -L$$top_builddir/libmea-core/debug \ + -L$$top_builddir/libnymea-common/debug +win32:Release:LIBS += -L$$top_builddir/libmea-core/release \ + -L$$top_builddir/libnymea-common/release + +SOURCES += testrunner.cpp + +RESOURCES += \ + $$top_srcdir/mea/resources.qrc diff --git a/tests/tests.pro b/tests/tests.pro new file mode 100644 index 00000000..d5430750 --- /dev/null +++ b/tests/tests.pro @@ -0,0 +1,3 @@ +TEMPLATE = subdirs + +SUBDIRS = testrunner