added coin market cap
parent
2ac80c0414
commit
182c2a0004
|
|
@ -0,0 +1,12 @@
|
|||
include(../plugins.pri)
|
||||
|
||||
QT += network
|
||||
|
||||
TARGET = $$qtLibraryTarget(nymea_deviceplugincoinmarketcap)
|
||||
|
||||
SOURCES += \
|
||||
deviceplugincoinmarketcap.cpp \
|
||||
|
||||
HEADERS += \
|
||||
deviceplugincoinmarketcap.h \
|
||||
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
[
|
||||
{
|
||||
"arguments": [
|
||||
"clang++",
|
||||
"-c",
|
||||
"-m64",
|
||||
"-target",
|
||||
"x86_64-linux-gnu",
|
||||
"-std=c++11",
|
||||
"-fcxx-exceptions",
|
||||
"-fexceptions",
|
||||
"-DQT_QML_DEBUG",
|
||||
"-DQT_PLUGIN",
|
||||
"-DQT_GUI_LIB",
|
||||
"-DQT_NETWORK_LIB",
|
||||
"-DQT_CORE_LIB",
|
||||
"-DBOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING=(39, 1, true, \"T = \")",
|
||||
"-fPIC",
|
||||
"-I",
|
||||
"/home/nymea/Developer/nymea-coinmarketcapplugin",
|
||||
"-I",
|
||||
"/usr/include/nymea",
|
||||
"-I",
|
||||
"/usr/include/x86_64-linux-gnu/qt5",
|
||||
"-I",
|
||||
"/usr/include/x86_64-linux-gnu/qt5/QtGui",
|
||||
"-I",
|
||||
"/usr/include/x86_64-linux-gnu/qt5/QtNetwork",
|
||||
"-I",
|
||||
"/usr/include/x86_64-linux-gnu/qt5/QtCore",
|
||||
"-I",
|
||||
"/home/nymea/Developer/build-coinmarketcap-Desktop-Debug",
|
||||
"-I",
|
||||
"/usr/include/libdrm",
|
||||
"-I",
|
||||
"/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++",
|
||||
"-x",
|
||||
"c++",
|
||||
"/home/nymea/Developer/nymea-coinmarketcapplugin/deviceplugincoinmarketcap.cpp"
|
||||
],
|
||||
"directory": "/home/nymea/Developer/build-coinmarketcap-Desktop-Debug",
|
||||
"file": "/home/nymea/Developer/nymea-coinmarketcapplugin/deviceplugincoinmarketcap.cpp"
|
||||
},
|
||||
{
|
||||
"arguments": [
|
||||
"clang",
|
||||
"-c",
|
||||
"-m64",
|
||||
"-target",
|
||||
"x86_64-linux-gnu",
|
||||
"-std=c++11",
|
||||
"-fcxx-exceptions",
|
||||
"-fexceptions",
|
||||
"-DQT_QML_DEBUG",
|
||||
"-DQT_PLUGIN",
|
||||
"-DQT_GUI_LIB",
|
||||
"-DQT_NETWORK_LIB",
|
||||
"-DQT_CORE_LIB",
|
||||
"-DBOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING=(39, 1, true, \"T = \")",
|
||||
"-fPIC",
|
||||
"-I",
|
||||
"/home/nymea/Developer/nymea-coinmarketcapplugin",
|
||||
"-I",
|
||||
"/usr/include/nymea",
|
||||
"-I",
|
||||
"/usr/include/x86_64-linux-gnu/qt5",
|
||||
"-I",
|
||||
"/usr/include/x86_64-linux-gnu/qt5/QtGui",
|
||||
"-I",
|
||||
"/usr/include/x86_64-linux-gnu/qt5/QtNetwork",
|
||||
"-I",
|
||||
"/usr/include/x86_64-linux-gnu/qt5/QtCore",
|
||||
"-I",
|
||||
"/home/nymea/Developer/build-coinmarketcap-Desktop-Debug",
|
||||
"-I",
|
||||
"/usr/include/libdrm",
|
||||
"-I",
|
||||
"/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++",
|
||||
"-x",
|
||||
"c++-header",
|
||||
"/home/nymea/Developer/nymea-coinmarketcapplugin/deviceplugincoinmarketcap.h"
|
||||
],
|
||||
"directory": "/home/nymea/Developer/build-coinmarketcap-Desktop-Debug",
|
||||
"file": "/home/nymea/Developer/nymea-coinmarketcapplugin/deviceplugincoinmarketcap.h"
|
||||
}
|
||||
]
|
||||
|
|
@ -0,0 +1,166 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* *
|
||||
* Copyright (C) 2019 Bernhard Trinnes <bernhard.trinnes@nymea.io *
|
||||
* *
|
||||
* This file is part of nymea. *
|
||||
* *
|
||||
* Guh is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, version 2 of the License. *
|
||||
* *
|
||||
* Guh is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with guh. If not, see <http://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include "deviceplugincoinmarketcap.h"
|
||||
#include "network/networkaccessmanager.h"
|
||||
#include "plugininfo.h"
|
||||
|
||||
#include <QJsonDocument>
|
||||
|
||||
DevicePluginCoinMarketCap::DevicePluginCoinMarketCap()
|
||||
{
|
||||
}
|
||||
|
||||
DeviceManager::DeviceSetupStatus DevicePluginCoinMarketCap::setupDevice(Device *device)
|
||||
{
|
||||
if(!m_pluginTimer) {
|
||||
m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(60);
|
||||
connect(m_pluginTimer, &PluginTimer::timeout, this, &DevicePluginCoinMarketCap::onPluginTimer);
|
||||
}
|
||||
|
||||
if (device->deviceClassId() == currentPricesDeviceClassId) {
|
||||
getPriceCall(device);
|
||||
return DeviceManager::DeviceSetupStatusSuccess;
|
||||
}
|
||||
return DeviceManager::DeviceSetupStatusFailure;
|
||||
}
|
||||
|
||||
void DevicePluginCoinMarketCap::deviceRemoved(Device *device)
|
||||
{
|
||||
while (m_httpRequests.values().contains(device)) {
|
||||
QNetworkReply *reply = m_httpRequests.key(device);
|
||||
m_httpRequests.remove(reply);
|
||||
reply->deleteLater();
|
||||
}
|
||||
|
||||
if (myDevices().empty()) {
|
||||
hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer);
|
||||
}
|
||||
}
|
||||
|
||||
void DevicePluginCoinMarketCap::onPluginTimer()
|
||||
{
|
||||
foreach (Device *device, myDevices()) {
|
||||
if (device->deviceClassId() == currentPricesDeviceClassId) {
|
||||
getPriceCall(device);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DevicePluginCoinMarketCap::onPriceCallFinished()
|
||||
{
|
||||
QNetworkReply *reply = static_cast<QNetworkReply *>(sender());
|
||||
qCDebug(dcCoinMarketCap()) << "GET reply finished";
|
||||
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||
|
||||
if (!m_httpRequests.contains(reply)) {
|
||||
reply->deleteLater();
|
||||
return;
|
||||
}
|
||||
|
||||
Device *device = m_httpRequests.take(reply);
|
||||
|
||||
// Check HTTP status code
|
||||
if (status != 200 || reply->error() != QNetworkReply::NoError) {
|
||||
qCWarning(dcCoinMarketCap()) << "Request error:" << status << reply->errorString();
|
||||
device->setStateValue(currentPricesConnectedStateTypeId, false);
|
||||
}
|
||||
reply->deleteLater();
|
||||
|
||||
// check JSON file
|
||||
QJsonParseError error;
|
||||
QJsonDocument jsonResponse = QJsonDocument::fromJson(reply->readAll(), &error);
|
||||
qDebug(dcCoinMarketCap()) << jsonResponse;
|
||||
if (error.error != QJsonParseError::NoError) {
|
||||
qCWarning(dcCoinMarketCap()) << "Update reply JSON error:" << error.errorString();
|
||||
reply->deleteLater();
|
||||
return;
|
||||
}
|
||||
|
||||
QVariantList list = jsonResponse.toVariant().toList();
|
||||
|
||||
foreach (QVariant element, list) {
|
||||
QVariantMap elementMap = element.toMap();
|
||||
device->setStateValue(currentPricesConnectedStateTypeId, true);
|
||||
double price;
|
||||
|
||||
if (elementMap.value("id").toString() == "bitcoin") {
|
||||
price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble();
|
||||
qDebug(dcCoinMarketCap()) << "Bitcoin Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price;
|
||||
device->setStateValue(currentPricesBtcStateTypeId, price);
|
||||
|
||||
} else if (elementMap.value("id").toString() == "ethereum") {
|
||||
price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble();
|
||||
qDebug(dcCoinMarketCap()) << "Etherium Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price;
|
||||
device->setStateValue(currentPricesEthStateTypeId, price);
|
||||
|
||||
} else if (elementMap.value("id").toString() == "ripple") {
|
||||
price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble();
|
||||
qDebug(dcCoinMarketCap()) << "Ripple Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price;
|
||||
device->setStateValue(currentPricesXrpStateTypeId, price);
|
||||
|
||||
} else if (elementMap.value("id").toString() == "bitcoin-cash") {
|
||||
price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble();
|
||||
qDebug(dcCoinMarketCap()) << "Bitcoin-cash Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price;
|
||||
device->setStateValue(currentPricesBchStateTypeId, price);
|
||||
|
||||
} else if (elementMap.value("id").toString() == "litecoin") {
|
||||
price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble();
|
||||
qDebug(dcCoinMarketCap()) << "Litecoin Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price;
|
||||
device->setStateValue(currentPricesLtcStateTypeId, price);
|
||||
|
||||
} else if (elementMap.value("id").toString() == "nem") {
|
||||
price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble();
|
||||
qDebug(dcCoinMarketCap()) << "Nem Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price;
|
||||
device->setStateValue(currentPricesXemStateTypeId, price);
|
||||
|
||||
} else if (elementMap.value("id").toString() == "ethereum-classic") {
|
||||
price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble();
|
||||
qDebug(dcCoinMarketCap()) << "Ethereum Classic Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price;
|
||||
device->setStateValue(currentPricesEtcStateTypeId, price);
|
||||
|
||||
} else if (elementMap.value("id").toString() == "dash") {
|
||||
price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble();
|
||||
device->setStateValue(currentPricesDashStateTypeId, price);
|
||||
|
||||
} else if (elementMap.value("id").toString() == "iota") {
|
||||
price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble();
|
||||
device->setStateValue(currentPricesMiotaStateTypeId, price);
|
||||
|
||||
} else if (elementMap.value("id").toString() == "neo") {
|
||||
price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble();
|
||||
device->setStateValue(currentPricesAnsStateTypeId, price);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DevicePluginCoinMarketCap::getPriceCall(Device *device)
|
||||
{
|
||||
QUrl url;
|
||||
url.setUrl(QString("https://api.coinmarketcap.com/v1/ticker/?convert=%1&limit=30").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower()));
|
||||
QNetworkRequest request;
|
||||
request.setUrl(url);
|
||||
request.setRawHeader("User-Agent", "nymea 1.0");
|
||||
|
||||
QNetworkReply *reply = hardwareManager()->networkManager()->get(request);
|
||||
connect(reply, &QNetworkReply::finished, this, &DevicePluginCoinMarketCap::onPriceCallFinished);
|
||||
|
||||
m_httpRequests.insert(reply, device);
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* *
|
||||
* Copyright (C) 2019 Bernhard Trinnes <bernhard.trinnes@nymea.io *
|
||||
* *
|
||||
* This file is part of nymea. *
|
||||
* *
|
||||
* Guh is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, version 2 of the License. *
|
||||
* *
|
||||
* Guh is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with guh. If not, see <http://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#ifndef DEVICEPLUGINCOINMARKETCAP_H
|
||||
#define DEVICEPLUGINCOINMARKETCAP_H
|
||||
|
||||
#include "plugin/deviceplugin.h"
|
||||
#include "devicemanager.h"
|
||||
#include "plugintimer.h"
|
||||
|
||||
#include <QNetworkReply>
|
||||
#include <QHostInfo>
|
||||
|
||||
class DevicePluginCoinMarketCap : public DevicePlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "deviceplugincoinmarketcap.json")
|
||||
Q_INTERFACES(DevicePlugin)
|
||||
|
||||
public:
|
||||
explicit DevicePluginCoinMarketCap();
|
||||
|
||||
DeviceManager::DeviceSetupStatus setupDevice(Device *device) override;
|
||||
void deviceRemoved(Device *device) override;
|
||||
|
||||
private:
|
||||
PluginTimer *m_pluginTimer = nullptr;
|
||||
|
||||
QHash<QUrl, Device *> m_priceRequests;
|
||||
QHash<QNetworkReply *, Device *> m_httpRequests;
|
||||
|
||||
void getPriceCall(Device *device);
|
||||
|
||||
private slots:
|
||||
void onPluginTimer();
|
||||
void onPriceCallFinished();
|
||||
};
|
||||
|
||||
#endif // DEVICEPLUGINCOINMARKETCAP_H
|
||||
|
|
@ -0,0 +1,140 @@
|
|||
{
|
||||
"displayName": "Coin market cap",
|
||||
"name": "coinMarketCap",
|
||||
"id": "532757cf-fc6f-4ce5-ae5b-e6f5bdb67fb4",
|
||||
"vendors": [
|
||||
{
|
||||
"displayName": "Coin Market Cap",
|
||||
"name": "coinMarketCap",
|
||||
"id": "28eeecbd-4178-45aa-81a6-fd95851444fd",
|
||||
"deviceClasses": [
|
||||
{
|
||||
"id": "f5b794f7-7e2a-4409-8445-23ead80f2a8f",
|
||||
"name": "currentPrices",
|
||||
"displayName": "Crypto Prices",
|
||||
"createMethods": ["user"],
|
||||
"interfaces": ["connectable"],
|
||||
"paramTypes": [
|
||||
{
|
||||
"id": "92747d75-d18a-4915-bd48-0edd5cc5f19a",
|
||||
"name": "fiat",
|
||||
"displayName": "Fiat Currency",
|
||||
"type": "QString",
|
||||
"allowedValues": [
|
||||
"USD",
|
||||
"AUD",
|
||||
"BRL",
|
||||
"CAD",
|
||||
"CHF",
|
||||
"CNY",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"HKD",
|
||||
"IDR",
|
||||
"INR",
|
||||
"JPY",
|
||||
"KRW",
|
||||
"MXN",
|
||||
"RUB"
|
||||
],
|
||||
"defaultValue": "EUR"
|
||||
}
|
||||
],
|
||||
"stateTypes":[
|
||||
{
|
||||
"id": "19f079f0-1654-44c3-ab10-e7d7f9742e09",
|
||||
"name": "connected",
|
||||
"displayName": "Connected",
|
||||
"type": "bool",
|
||||
"defaultValue": false,
|
||||
"displayNameEvent": "Connection status changed"
|
||||
},
|
||||
{
|
||||
"id": "721c91c8-8eb1-402e-8bfc-8e2d496be032",
|
||||
"name": "btc",
|
||||
"displayName": "Bitcoin",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"displayNameEvent": "bitcoin value changed"
|
||||
},
|
||||
{
|
||||
"id": "5c58bb9f-dcdf-47c9-a0b7-f0ffc968f824",
|
||||
"name": "eth",
|
||||
"displayName": "Ethereum",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"displayNameEvent": "ethereum value changed"
|
||||
},
|
||||
{
|
||||
"id": "d8517cf8-2ebd-4be3-8573-00b595cc2ab5",
|
||||
"name": "xrp",
|
||||
"displayName": "Ripple",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"displayNameEvent": "ripple value changed"
|
||||
},
|
||||
{
|
||||
"id": "cc5b4fe5-aa43-43b3-952f-90c0e3e20740",
|
||||
"name": "bch",
|
||||
"displayName": "Bitcoin Cash",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"displayNameEvent": "bitcoin cash value changed"
|
||||
},
|
||||
{
|
||||
"id": "f591f699-ae68-4f64-a221-254f836a31d3",
|
||||
"name": "ltc",
|
||||
"displayName": "Litecoin",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"displayNameEvent": "Litecoin value changed"
|
||||
},
|
||||
{
|
||||
"id": "adecda44-fade-4dba-8b41-cfb07579dea9",
|
||||
"name": "xem",
|
||||
"displayName": "NEM",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"displayNameEvent": "NEM cash value changed"
|
||||
},
|
||||
{
|
||||
"id": "fc9a61b7-c3df-4f13-ba31-d7743f3d2dc2",
|
||||
"name": "etc",
|
||||
"displayName": "Ethereum Classic",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"displayNameEvent": "etherium classic value changed"
|
||||
},
|
||||
{
|
||||
"id": "0b602f14-1596-4091-a0ab-6c5efa087a3f",
|
||||
"name": "dash",
|
||||
"displayName": "Dash",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"displayNameEvent": "Dash value changed"
|
||||
},
|
||||
{
|
||||
"id": "2c6e341f-5940-40bb-b495-89c3ecaaf9e7",
|
||||
"name": "miota",
|
||||
"displayName": "IOTA",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"displayNameEvent": "IOTA value changed"
|
||||
},
|
||||
{
|
||||
"id": "7583c720-1786-4c32-9552-e731578ff113",
|
||||
"name": "ans",
|
||||
"displayName": "NEO",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"displayNameEvent": "NEO value changed"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
TEMPLATE = lib
|
||||
CONFIG += plugin
|
||||
|
||||
QMAKE_CXXFLAGS += -Werror -std=c++11 -g
|
||||
QMAKE_LFLAGS += -std=c++11
|
||||
|
||||
CONFIG += link_pkgconfig
|
||||
PKGCONFIG += nymea
|
||||
|
||||
HEADERS += $${OUT_PWD}/plugininfo.h \
|
||||
$${OUT_PWD}/extern-plugininfo.h
|
||||
|
||||
# Check if this is a snap build
|
||||
snappy{
|
||||
INCLUDEPATH+=$$(SNAPCRAFT_STAGE)/usr/include/nymea
|
||||
}
|
||||
|
||||
# Make the device plugin json file visible in the Qt Creator
|
||||
OTHER_FILES += $$PWD/deviceplugin"$$TARGET".json
|
||||
|
||||
# NOTE: if the code includes "plugininfo.h", it would fail if we only give it a compiler for $$OUT_PWD/plugininfo.h
|
||||
# Let's add a dummy target with the plugininfo.h file without any path to allow the developer to just include it like that.
|
||||
|
||||
# Create plugininfo file
|
||||
plugininfo.target = $$OUT_PWD/plugininfo.h
|
||||
plugininfo_dummy.target = plugininfo.h
|
||||
plugininfo.depends = FORCE
|
||||
plugininfo.commands = nymea-generateplugininfo --filetype i --jsonfile $$PWD/deviceplugin"$$TARGET".json --output plugininfo.h --builddir $$OUT_PWD
|
||||
plugininfo_dummy.commands = $$plugininfo.commands
|
||||
QMAKE_EXTRA_TARGETS += plugininfo plugininfo_dummy
|
||||
|
||||
# Create extern-plugininfo file
|
||||
extern_plugininfo.target = $$OUT_PWD/extern-plugininfo.h
|
||||
extern_plugininfo_dummy.target = extern-plugininfo.h
|
||||
extern_plugininfo.depends = FORCE
|
||||
extern_plugininfo.commands = nymea-generateplugininfo --filetype e --jsonfile $$PWD/deviceplugin"$$TARGET".json --output extern-plugininfo.h --builddir $$OUT_PWD
|
||||
extern_plugininfo_dummy.commands = $$extern_plugininfo.commands
|
||||
QMAKE_EXTRA_TARGETS += extern_plugininfo extern_plugininfo_dummy
|
||||
|
||||
# Clean up autogenerated plugin info files
|
||||
plugininfo_clean.commands = rm -fv $$OUT_PWD/plugininfo.h $$OUT_PWD/extern-plugininfo.h
|
||||
clean.depends = plugininfo_clean
|
||||
QMAKE_EXTRA_TARGETS += clean plugininfo_clean
|
||||
|
||||
# Install translation files
|
||||
TRANSLATIONS *= $$files($${PWD}/translations/*ts, true)
|
||||
lupdate.depends = FORCE
|
||||
lupdate.depends += plugininfo.h
|
||||
lupdate.commands = lupdate -recursive -no-obsolete $$PWD/"$$TARGET".pro;
|
||||
QMAKE_EXTRA_TARGETS += lupdate
|
||||
|
||||
translations.path = /usr/share/nymea/translations
|
||||
translations.files = $$[QT_SOURCE_TREE]/translations/*.qm
|
||||
TRANSLATIONS += $$files($$[QT_SOURCE_TREE]/translations/*.ts, true)
|
||||
|
||||
# Install plugin
|
||||
target.path = $$[QT_INSTALL_LIBS]/nymea/plugins/
|
||||
INSTALLS += target translations
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1">
|
||||
</TS>
|
||||
|
|
@ -0,0 +1,175 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="de_DE">
|
||||
<context>
|
||||
<name>CoinMarketCap</name>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="63"/>
|
||||
<source>coin market cap</source>
|
||||
<extracomment>The name of the plugin coin market cap (532757cf-fc6f-4ce5-ae5b-e6f5bdb67fb4)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="66"/>
|
||||
<source>Server Url</source>
|
||||
<extracomment>The name of the paramType (45e920d7-804c-4242-8435-ba4d2e6d06f7) of coin market cap</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="69"/>
|
||||
<source>Coin Market Cap</source>
|
||||
<extracomment>The name of the vendor (28eeecbd-4178-45aa-81a6-fd95851444fd)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="72"/>
|
||||
<source>Current Prices</source>
|
||||
<extracomment>The name of the DeviceClass (f5b794f7-7e2a-4409-8445-23ead80f2a8f)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="75"/>
|
||||
<source>Fiat Currency</source>
|
||||
<extracomment>The name of the paramType (92747d75-d18a-4915-bd48-0edd5cc5f19a) of Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="78"/>
|
||||
<source>reachable status changed</source>
|
||||
<extracomment>The name of the autocreated EventType (19f079f0-1654-44c3-ab10-e7d7f9742e09)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="81"/>
|
||||
<source>Server Reachable</source>
|
||||
<extracomment>The name of the ParamType of StateType (19f079f0-1654-44c3-ab10-e7d7f9742e09) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="84"/>
|
||||
<source>bitcoin value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (721c91c8-8eb1-402e-8bfc-8e2d496be032)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="87"/>
|
||||
<source>Bitcoin</source>
|
||||
<extracomment>The name of the ParamType of StateType (721c91c8-8eb1-402e-8bfc-8e2d496be032) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="90"/>
|
||||
<source>ethereum value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (5c58bb9f-dcdf-47c9-a0b7-f0ffc968f824)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="93"/>
|
||||
<source>Ethereum</source>
|
||||
<extracomment>The name of the ParamType of StateType (5c58bb9f-dcdf-47c9-a0b7-f0ffc968f824) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="96"/>
|
||||
<source>ripple value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (d8517cf8-2ebd-4be3-8573-00b595cc2ab5)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="99"/>
|
||||
<source>Ripple</source>
|
||||
<extracomment>The name of the ParamType of StateType (d8517cf8-2ebd-4be3-8573-00b595cc2ab5) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="102"/>
|
||||
<source>bitcoin cash value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (cc5b4fe5-aa43-43b3-952f-90c0e3e20740)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="105"/>
|
||||
<source>Bitcoin Cash</source>
|
||||
<extracomment>The name of the ParamType of StateType (cc5b4fe5-aa43-43b3-952f-90c0e3e20740) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="108"/>
|
||||
<source>Litecoin value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (f591f699-ae68-4f64-a221-254f836a31d3)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="111"/>
|
||||
<source>Litecoin</source>
|
||||
<extracomment>The name of the ParamType of StateType (f591f699-ae68-4f64-a221-254f836a31d3) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="114"/>
|
||||
<source>NEM cash value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (adecda44-fade-4dba-8b41-cfb07579dea9)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="117"/>
|
||||
<source>NEM</source>
|
||||
<extracomment>The name of the ParamType of StateType (adecda44-fade-4dba-8b41-cfb07579dea9) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="120"/>
|
||||
<source>etherium classic value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (fc9a61b7-c3df-4f13-ba31-d7743f3d2dc2)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="123"/>
|
||||
<source>Ethereum Classic</source>
|
||||
<extracomment>The name of the ParamType of StateType (fc9a61b7-c3df-4f13-ba31-d7743f3d2dc2) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="126"/>
|
||||
<source>Dash value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (0b602f14-1596-4091-a0ab-6c5efa087a3f)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="129"/>
|
||||
<source>Dash</source>
|
||||
<extracomment>The name of the ParamType of StateType (0b602f14-1596-4091-a0ab-6c5efa087a3f) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="132"/>
|
||||
<source>IOTA value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (2c6e341f-5940-40bb-b495-89c3ecaaf9e7)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="135"/>
|
||||
<source>IOTA</source>
|
||||
<extracomment>The name of the ParamType of StateType (2c6e341f-5940-40bb-b495-89c3ecaaf9e7) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="138"/>
|
||||
<source>NEO value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (7583c720-1786-4c32-9552-e731578ff113)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="141"/>
|
||||
<source>NEO</source>
|
||||
<extracomment>The name of the ParamType of StateType (7583c720-1786-4c32-9552-e731578ff113) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="144"/>
|
||||
<source>refresh</source>
|
||||
<extracomment>The name of the ActionType 11eb83d4-aa95-4a9c-a314-da7ee2d0786a of deviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
@ -0,0 +1,175 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1">
|
||||
<context>
|
||||
<name>CoinMarketCap</name>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="63"/>
|
||||
<source>coin market cap</source>
|
||||
<extracomment>The name of the plugin coin market cap (532757cf-fc6f-4ce5-ae5b-e6f5bdb67fb4)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="66"/>
|
||||
<source>Server Url</source>
|
||||
<extracomment>The name of the paramType (45e920d7-804c-4242-8435-ba4d2e6d06f7) of coin market cap</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="69"/>
|
||||
<source>Coin Market Cap</source>
|
||||
<extracomment>The name of the vendor (28eeecbd-4178-45aa-81a6-fd95851444fd)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="72"/>
|
||||
<source>Current Prices</source>
|
||||
<extracomment>The name of the DeviceClass (f5b794f7-7e2a-4409-8445-23ead80f2a8f)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="75"/>
|
||||
<source>Fiat Currency</source>
|
||||
<extracomment>The name of the paramType (92747d75-d18a-4915-bd48-0edd5cc5f19a) of Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="78"/>
|
||||
<source>reachable status changed</source>
|
||||
<extracomment>The name of the autocreated EventType (19f079f0-1654-44c3-ab10-e7d7f9742e09)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="81"/>
|
||||
<source>Server Reachable</source>
|
||||
<extracomment>The name of the ParamType of StateType (19f079f0-1654-44c3-ab10-e7d7f9742e09) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="84"/>
|
||||
<source>bitcoin value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (721c91c8-8eb1-402e-8bfc-8e2d496be032)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="87"/>
|
||||
<source>Bitcoin</source>
|
||||
<extracomment>The name of the ParamType of StateType (721c91c8-8eb1-402e-8bfc-8e2d496be032) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="90"/>
|
||||
<source>ethereum value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (5c58bb9f-dcdf-47c9-a0b7-f0ffc968f824)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="93"/>
|
||||
<source>Ethereum</source>
|
||||
<extracomment>The name of the ParamType of StateType (5c58bb9f-dcdf-47c9-a0b7-f0ffc968f824) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="96"/>
|
||||
<source>ripple value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (d8517cf8-2ebd-4be3-8573-00b595cc2ab5)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="99"/>
|
||||
<source>Ripple</source>
|
||||
<extracomment>The name of the ParamType of StateType (d8517cf8-2ebd-4be3-8573-00b595cc2ab5) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="102"/>
|
||||
<source>bitcoin cash value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (cc5b4fe5-aa43-43b3-952f-90c0e3e20740)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="105"/>
|
||||
<source>Bitcoin Cash</source>
|
||||
<extracomment>The name of the ParamType of StateType (cc5b4fe5-aa43-43b3-952f-90c0e3e20740) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="108"/>
|
||||
<source>Litecoin value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (f591f699-ae68-4f64-a221-254f836a31d3)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="111"/>
|
||||
<source>Litecoin</source>
|
||||
<extracomment>The name of the ParamType of StateType (f591f699-ae68-4f64-a221-254f836a31d3) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="114"/>
|
||||
<source>NEM cash value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (adecda44-fade-4dba-8b41-cfb07579dea9)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="117"/>
|
||||
<source>NEM</source>
|
||||
<extracomment>The name of the ParamType of StateType (adecda44-fade-4dba-8b41-cfb07579dea9) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="120"/>
|
||||
<source>etherium classic value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (fc9a61b7-c3df-4f13-ba31-d7743f3d2dc2)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="123"/>
|
||||
<source>Ethereum Classic</source>
|
||||
<extracomment>The name of the ParamType of StateType (fc9a61b7-c3df-4f13-ba31-d7743f3d2dc2) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="126"/>
|
||||
<source>Dash value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (0b602f14-1596-4091-a0ab-6c5efa087a3f)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="129"/>
|
||||
<source>Dash</source>
|
||||
<extracomment>The name of the ParamType of StateType (0b602f14-1596-4091-a0ab-6c5efa087a3f) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="132"/>
|
||||
<source>IOTA value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (2c6e341f-5940-40bb-b495-89c3ecaaf9e7)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="135"/>
|
||||
<source>IOTA</source>
|
||||
<extracomment>The name of the ParamType of StateType (2c6e341f-5940-40bb-b495-89c3ecaaf9e7) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="138"/>
|
||||
<source>NEO value changed</source>
|
||||
<extracomment>The name of the autocreated EventType (7583c720-1786-4c32-9552-e731578ff113)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="141"/>
|
||||
<source>NEO</source>
|
||||
<extracomment>The name of the ParamType of StateType (7583c720-1786-4c32-9552-e731578ff113) of DeviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../build-coinmarketcap-Desktop-Debug/plugininfo.h" line="144"/>
|
||||
<source>refresh</source>
|
||||
<extracomment>The name of the ActionType 11eb83d4-aa95-4a9c-a314-da7ee2d0786a of deviceClass Current Prices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
@ -6,6 +6,7 @@ PLUGIN_DIRS = \
|
|||
awattar \
|
||||
boblight \
|
||||
bose \
|
||||
coinmarketcap \
|
||||
commandlauncher \
|
||||
conrad \
|
||||
datetime \
|
||||
|
|
|
|||
Loading…
Reference in New Issue