Merge PR #98: New plugin: Pushbullet

master
Jenkins 2019-04-12 13:42:43 +02:00
commit e84d44f045
16 changed files with 692 additions and 0 deletions

16
debian/control vendored
View File

@ -467,6 +467,21 @@ Description: nymea.io plugin for plantcare
This package will install the nymea.io plugin for plantcare
Package: nymea-plugin-pushbullet
Architecture: any
Depends: ${shlibs:Depends},
${misc:Depends},
nymea-plugins-translations,
Replaces: guh-plugin-pushbullet
Description: nymea.io plugin for Pushbullet
The nymea daemon is a plugin based IoT (Internet of Things) server. The
server works like a translator for devices, things and services and
allows them to interact.
With the powerful rule engine you are able to connect any device available
in the system and create individual scenes and behaviors for your environment.
.
This package will install the nymea.io plugin for sending messages via Pushbullet.
Package: nymea-plugin-tasmota
Architecture: any
@ -750,6 +765,7 @@ Depends: nymea-plugin-awattar,
nymea-plugin-networkdetector,
nymea-plugin-openweathermap,
nymea-plugin-philipshue,
nymea-plugin-pushbullet,
nymea-plugin-wakeonlan,
nymea-plugin-tasmota,
nymea-plugin-wemo,

View File

@ -0,0 +1 @@
usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginpushbullet.so

View File

@ -32,6 +32,7 @@ PLUGIN_DIRS = \
osdomotics \
philipshue \
plantcare \
pushbullet \
remotessh \
senic \
serialportcommander \

View File

@ -0,0 +1,149 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Copyright (C) 2019 Michael Zanetti <michael.zanetti@nymea.io> *
* *
* This file is part of nymea. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; If not, see *
* <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*!
\page pushbullet.html
\title Pushbullet
\brief Plugin to send notifications via Pushbullet.
\ingroup plugins
\ingroup nymea-plugins
This plugin allows to send notifications via Pushbullet.
\chapter Usage
When setting up a device for the pushbullet service, an API token from Pushbullet is required. Please visit
https://www.pushbullet.com and create an account if you haven't done so already. After logging in successfully,
open the "Settings" tab and in "Account Settings", create a new access token. Use that token as the device
parameter when setting up the device.
*/
#include "devicepluginpushbullet.h"
#include "plugininfo.h"
#include "network/networkaccessmanager.h"
#include <QJsonDocument>
DevicePluginPushbullet::DevicePluginPushbullet(QObject* parent): DevicePlugin (parent)
{
}
DevicePluginPushbullet::~DevicePluginPushbullet()
{
}
DeviceManager::DeviceSetupStatus DevicePluginPushbullet::setupDevice(Device *device)
{
qCDebug(dcPushbullet()) << "Setting up Pushbullet device" << device->name() << device->id().toString();
QNetworkRequest request(QUrl("https://api.pushbullet.com/v2/users/me"));
request.setRawHeader("Access-Token", device->paramValue(pushNotificationDeviceTokenParamTypeId).toByteArray().trimmed());
QNetworkReply *reply = hardwareManager()->networkManager()->get(request);
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, device, [this, reply, device]() {
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcPushbullet()) << "Error fetching user profile:" << reply->errorString() << reply->error();
emit deviceSetupFinished(device, DeviceManager::DeviceSetupStatusFailure);
return;
}
QByteArray data = reply->readAll();
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcPushbullet()) << "Error parsing reply from Pushbullet:" << error.errorString();
qCWarning(dcPushbullet()) << qUtf8Printable(data);
emit deviceSetupFinished(device, DeviceManager::DeviceSetupStatusFailure);
return;
}
QVariantMap replyMap = jsonDoc.toVariant().toMap();
if (!replyMap.value("active").toBool()) {
qCWarning(dcPushbullet()) << "Pushbullet account seems to be deactivated.";
emit deviceSetupFinished(device, DeviceManager::DeviceSetupStatusFailure);
return;
}
qCDebug(dcPushbullet()) << "Pushbullet device" << device->name() << device->id().toString() << "setup complete";
emit deviceSetupFinished(device, DeviceManager::DeviceSetupStatusSuccess);
});
return DeviceManager::DeviceSetupStatusAsync;
}
DeviceManager::DeviceError DevicePluginPushbullet::executeAction(Device *device, const Action &action)
{
qCDebug(dcPushbullet()) << "Executing action" << action.actionTypeId() << "for device" << device->name() << device->id().toString();
QNetworkRequest request(QUrl("https://api.pushbullet.com/v2/pushes"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Access-Token", device->paramValue(pushNotificationDeviceTokenParamTypeId).toByteArray().trimmed());
QVariantMap params;
params.insert("type", "note");
params.insert("title", action.param(pushNotificationNotifyActionTitleParamTypeId).value().toString());
params.insert("body", action.param(pushNotificationNotifyActionBodyParamTypeId).value().toString());
QNetworkReply *reply = hardwareManager()->networkManager()->post(request, QJsonDocument::fromVariant(params).toJson(QJsonDocument::Compact));
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, device, [this, reply, device, action]{
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcPushbullet()) << "Push message sending failed for" << device->name() << device->id() << reply->errorString() << reply->error();
emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorHardwareNotAvailable);
return;
}
QByteArray data = reply->readAll();
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcPushbullet()) << "Error reading reply from Pushbullet for" << device->name() << device->id().toString() << error.errorString();
qCWarning(dcPushbullet()) << qUtf8Printable(data);
emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorHardwareFailure);
return;
}
QVariantMap replyMap = jsonDoc.toVariant().toMap();
if (!replyMap.value("active").toBool()) {
qCWarning(dcPushbullet()) << "Error sending message. The account seems to be deactivated" << device->name() << device->id().toString();
emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorHardwareFailure);
return;
}
if (replyMap.value("dismissed", true).toBool()) {
qCWarning(dcPushbullet()) << "Error sending message. The message has been dismissed by the server" << device->name() << device->id().toString();
emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorHardwareFailure);
return;
}
qCDebug(dcPushbullet()) << "Message sent successfully";
emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorNoError);
});
return DeviceManager::DeviceErrorAsync;
}

View File

@ -0,0 +1,44 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Copyright (C) 2019 Michael Zanetti <michael.zanetti@nymea.io> *
* *
* This file is part of nymea. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; If not, see *
* <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef DEVICEPLUGINPUSHBULLET_H
#define DEVICEPLUGINPUSHBULLET_H
#include "plugin/deviceplugin.h"
class DevicePluginPushbullet: public DevicePlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginpushbullet.json")
Q_INTERFACES(DevicePlugin)
public:
explicit DevicePluginPushbullet(QObject *parent = nullptr);
~DevicePluginPushbullet() override;
DeviceManager::DeviceSetupStatus setupDevice(Device *device) override;
DeviceManager::DeviceError executeAction(Device *device, const Action &action) override;
};
#endif

View File

@ -0,0 +1,54 @@
{
"displayName": "Pushbullet",
"name": "Pushbullet",
"id": "46986575-0e62-483d-b5a8-76ac356fcce7",
"vendors": [
{
"displayName": "Pushbullet",
"name": "pushbullet",
"id": "b5e1896e-b7fa-4c19-ac2b-10bd489f8302",
"deviceClasses": [
{
"id": "56029c6d-777b-4889-9e17-29f813d34da4",
"name": "pushNotification",
"displayName": "Push Notification",
"createMethods": ["user"],
"interfaces": ["notifications"],
"paramTypes": [
{
"id": "1f37ce22-50b8-4183-8b74-557fdb2d3076",
"name": "token",
"displayName": "access token",
"type": "QString"
}
],
"actionTypes": [
{
"id": "1378480f-6583-44e2-8fdd-22afe979a9a3",
"name": "notify",
"displayName": "notify",
"paramTypes": [
{
"id": "ceed6e66-0dcb-4405-832d-e9091f882acc",
"name": "title",
"displayName": "title",
"type": "QString",
"inputType": "TextLine",
"defaultValue": ""
},
{
"id": "f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2",
"name": "body",
"displayName": "body",
"type": "QString",
"inputType": "TextArea",
"defaultValue": ""
}
]
}
]
}
]
}
]
}

13
pushbullet/pushbullet.pro Normal file
View File

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

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="cs">
<context>
<name>Pushbullet</name>
<message>
<location filename="../plugininfo.h" line="31"/>
<location filename="../plugininfo.h" line="34"/>
<source>Pushbullet</source>
<extracomment>The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7)
----------
The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="37"/>
<source>Push Notification</source>
<extracomment>The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4)</extracomment>
<translation>Push Notification</translation>
</message>
<message>
<location filename="../plugininfo.h" line="40"/>
<source>access token</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076)</extracomment>
<translation>access token</translation>
</message>
<message>
<location filename="../plugininfo.h" line="43"/>
<source>notify</source>
<extracomment>The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification</extracomment>
<translation>oznámit</translation>
</message>
<message>
<location filename="../plugininfo.h" line="46"/>
<source>title</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc)</extracomment>
<translation>název</translation>
</message>
<message>
<location filename="../plugininfo.h" line="49"/>
<source>body</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2)</extracomment>
<translation>tělo</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="da">
<context>
<name>Pushbullet</name>
<message>
<location filename="../plugininfo.h" line="31"/>
<location filename="../plugininfo.h" line="34"/>
<source>Pushbullet</source>
<extracomment>The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7)
----------
The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="37"/>
<source>Push Notification</source>
<extracomment>The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4)</extracomment>
<translation>Pushmeddelelser</translation>
</message>
<message>
<location filename="../plugininfo.h" line="40"/>
<source>access token</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076)</extracomment>
<translation>adgangskode</translation>
</message>
<message>
<location filename="../plugininfo.h" line="43"/>
<source>notify</source>
<extracomment>The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification</extracomment>
<translation>informér</translation>
</message>
<message>
<location filename="../plugininfo.h" line="46"/>
<source>title</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc)</extracomment>
<translation>titel</translation>
</message>
<message>
<location filename="../plugininfo.h" line="49"/>
<source>body</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2)</extracomment>
<translation>instans</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de_DE">
<context>
<name>Pushbullet</name>
<message>
<location filename="../plugininfo.h" line="31"/>
<location filename="../plugininfo.h" line="34"/>
<source>Pushbullet</source>
<extracomment>The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7)
----------
The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302)</extracomment>
<translation>Pushbullet</translation>
</message>
<message>
<location filename="../plugininfo.h" line="37"/>
<source>Push Notification</source>
<extracomment>The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4)</extracomment>
<translation>Pushbullet Benachrichtigung</translation>
</message>
<message>
<location filename="../plugininfo.h" line="40"/>
<source>access token</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076)</extracomment>
<translation>Zugangs Token</translation>
</message>
<message>
<location filename="../plugininfo.h" line="43"/>
<source>notify</source>
<extracomment>The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification</extracomment>
<translation>Benachrichtigen</translation>
</message>
<message>
<location filename="../plugininfo.h" line="46"/>
<source>title</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc)</extracomment>
<translation>Titel</translation>
</message>
<message>
<location filename="../plugininfo.h" line="49"/>
<source>body</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2)</extracomment>
<translation>Nachrichten Inhalt</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>Pushbullet</name>
<message>
<location filename="../plugininfo.h" line="31"/>
<location filename="../plugininfo.h" line="34"/>
<source>Pushbullet</source>
<extracomment>The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7)
----------
The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="37"/>
<source>Push Notification</source>
<extracomment>The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="40"/>
<source>access token</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="43"/>
<source>notify</source>
<extracomment>The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="46"/>
<source>title</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="49"/>
<source>body</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2)</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="es">
<context>
<name>Pushbullet</name>
<message>
<location filename="../plugininfo.h" line="31"/>
<location filename="../plugininfo.h" line="34"/>
<source>Pushbullet</source>
<extracomment>The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7)
----------
The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="37"/>
<source>Push Notification</source>
<extracomment>The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4)</extracomment>
<translation>Notificación push</translation>
</message>
<message>
<location filename="../plugininfo.h" line="40"/>
<source>access token</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076)</extracomment>
<translation>símbolo de acceso</translation>
</message>
<message>
<location filename="../plugininfo.h" line="43"/>
<source>notify</source>
<extracomment>The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification</extracomment>
<translation>notificar</translation>
</message>
<message>
<location filename="../plugininfo.h" line="46"/>
<source>title</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc)</extracomment>
<translation>título</translation>
</message>
<message>
<location filename="../plugininfo.h" line="49"/>
<source>body</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2)</extracomment>
<translation>cuerpo</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="fr">
<context>
<name>Pushbullet</name>
<message>
<location filename="../plugininfo.h" line="31"/>
<location filename="../plugininfo.h" line="34"/>
<source>Pushbullet</source>
<extracomment>The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7)
----------
The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="37"/>
<source>Push Notification</source>
<extracomment>The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4)</extracomment>
<translation>notification pushbullet</translation>
</message>
<message>
<location filename="../plugininfo.h" line="40"/>
<source>access token</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076)</extracomment>
<translation>jeton pour accés</translation>
</message>
<message>
<location filename="../plugininfo.h" line="43"/>
<source>notify</source>
<extracomment>The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification</extracomment>
<translation>notifier</translation>
</message>
<message>
<location filename="../plugininfo.h" line="46"/>
<source>title</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc)</extracomment>
<translation>titre</translation>
</message>
<message>
<location filename="../plugininfo.h" line="49"/>
<source>body</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2)</extracomment>
<translation>Contenu des informations</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="it">
<context>
<name>Pushbullet</name>
<message>
<location filename="../plugininfo.h" line="31"/>
<location filename="../plugininfo.h" line="34"/>
<source>Pushbullet</source>
<extracomment>The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7)
----------
The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="37"/>
<source>Push Notification</source>
<extracomment>The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4)</extracomment>
<translation>Notifica push</translation>
</message>
<message>
<location filename="../plugininfo.h" line="40"/>
<source>access token</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076)</extracomment>
<translation>token d&apos;accesso</translation>
</message>
<message>
<location filename="../plugininfo.h" line="43"/>
<source>notify</source>
<extracomment>The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification</extracomment>
<translation>notifica</translation>
</message>
<message>
<location filename="../plugininfo.h" line="46"/>
<source>title</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc)</extracomment>
<translation>titolo</translation>
</message>
<message>
<location filename="../plugininfo.h" line="49"/>
<source>body</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2)</extracomment>
<translation>corpo</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="nl">
<context>
<name>Pushbullet</name>
<message>
<location filename="../plugininfo.h" line="31"/>
<location filename="../plugininfo.h" line="34"/>
<source>Pushbullet</source>
<extracomment>The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7)
----------
The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="37"/>
<source>Push Notification</source>
<extracomment>The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4)</extracomment>
<translation>push-melding</translation>
</message>
<message>
<location filename="../plugininfo.h" line="40"/>
<source>access token</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076)</extracomment>
<translation>push-melding</translation>
</message>
<message>
<location filename="../plugininfo.h" line="43"/>
<source>notify</source>
<extracomment>The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification</extracomment>
<translation>melden</translation>
</message>
<message>
<location filename="../plugininfo.h" line="46"/>
<source>title</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc)</extracomment>
<translation>titel</translation>
</message>
<message>
<location filename="../plugininfo.h" line="49"/>
<source>body</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2)</extracomment>
<translation>body</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="pt">
<context>
<name>Pushbullet</name>
<message>
<location filename="../plugininfo.h" line="31"/>
<location filename="../plugininfo.h" line="34"/>
<source>Pushbullet</source>
<extracomment>The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7)
----------
The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../plugininfo.h" line="37"/>
<source>Push Notification</source>
<extracomment>The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4)</extracomment>
<translation>Notificação Push</translation>
</message>
<message>
<location filename="../plugininfo.h" line="40"/>
<source>access token</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076)</extracomment>
<translation>token de acesso</translation>
</message>
<message>
<location filename="../plugininfo.h" line="43"/>
<source>notify</source>
<extracomment>The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification</extracomment>
<translation>notificar</translation>
</message>
<message>
<location filename="../plugininfo.h" line="46"/>
<source>title</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc)</extracomment>
<translation>título</translation>
</message>
<message>
<location filename="../plugininfo.h" line="49"/>
<source>body</source>
<extracomment>The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2)</extracomment>
<translation>corpo</translation>
</message>
</context>
</TS>