added coin market cap

master
nymea 2019-05-14 19:01:50 +02:00 committed by Michael Zanetti
parent 2ac80c0414
commit 182c2a0004
11 changed files with 874 additions and 0 deletions

0
coinmarketcap/README.md Normal file
View File

View File

@ -0,0 +1,12 @@
include(../plugins.pri)
QT += network
TARGET = $$qtLibraryTarget(nymea_deviceplugincoinmarketcap)
SOURCES += \
deviceplugincoinmarketcap.cpp \
HEADERS += \
deviceplugincoinmarketcap.h \

View File

@ -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"
}
]

View File

@ -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);
}

View File

@ -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

View File

@ -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"
}
]
}
]
}
]
}

58
coinmarketcap/plugins.pri Normal file
View File

@ -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

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
</TS>

View File

@ -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>

View File

@ -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>

View File

@ -6,6 +6,7 @@ PLUGIN_DIRS = \
awattar \
boblight \
bose \
coinmarketcap \
commandlauncher \
conrad \
datetime \