Open Fernschreiber from notification
This commit is contained in:
parent
1641813b06
commit
266a72036b
10 changed files with 229 additions and 0 deletions
|
@ -21,6 +21,8 @@ QT += core dbus
|
||||||
SOURCES += src/harbour-fernschreiber.cpp \
|
SOURCES += src/harbour-fernschreiber.cpp \
|
||||||
src/chatlistmodel.cpp \
|
src/chatlistmodel.cpp \
|
||||||
src/chatmodel.cpp \
|
src/chatmodel.cpp \
|
||||||
|
src/dbusadaptor.cpp \
|
||||||
|
src/dbusinterface.cpp \
|
||||||
src/notificationmanager.cpp \
|
src/notificationmanager.cpp \
|
||||||
src/tdlibreceiver.cpp \
|
src/tdlibreceiver.cpp \
|
||||||
src/tdlibwrapper.cpp
|
src/tdlibwrapper.cpp
|
||||||
|
@ -89,6 +91,8 @@ INSTALLS += telegram 86.png 108.png 128.png 172.png 256.png \
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
src/chatlistmodel.h \
|
src/chatlistmodel.h \
|
||||||
src/chatmodel.h \
|
src/chatmodel.h \
|
||||||
|
src/dbusadaptor.h \
|
||||||
|
src/dbusinterface.h \
|
||||||
src/notificationmanager.h \
|
src/notificationmanager.h \
|
||||||
src/tdlibreceiver.h \
|
src/tdlibreceiver.h \
|
||||||
src/tdlibsecrets.h \
|
src/tdlibsecrets.h \
|
||||||
|
|
|
@ -27,4 +27,11 @@ ApplicationWindow
|
||||||
initialPage: Qt.resolvedUrl("pages/OverviewPage.qml")
|
initialPage: Qt.resolvedUrl("pages/OverviewPage.qml")
|
||||||
cover: Qt.resolvedUrl("pages/CoverPage.qml")
|
cover: Qt.resolvedUrl("pages/CoverPage.qml")
|
||||||
allowedOrientations: defaultAllowedOrientations
|
allowedOrientations: defaultAllowedOrientations
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: dBusAdaptor
|
||||||
|
onPleaseOpenMessage: {
|
||||||
|
appWindow.activate();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
33
src/dbusadaptor.cpp
Normal file
33
src/dbusadaptor.cpp
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2020 Sebastian J. Wolf
|
||||||
|
|
||||||
|
This file is part of Fernschreiber.
|
||||||
|
|
||||||
|
Fernschreiber 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, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Fernschreiber 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 Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dbusadaptor.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
DBusAdaptor::DBusAdaptor(QObject *parent): QDBusAbstractAdaptor(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBusAdaptor::openMessage(const QString &chatId, const QString &messageId)
|
||||||
|
{
|
||||||
|
qDebug() << "[DBusAdaptor] Open Message " << chatId << messageId;
|
||||||
|
emit pleaseOpenMessage(chatId, messageId);
|
||||||
|
}
|
42
src/dbusadaptor.h
Normal file
42
src/dbusadaptor.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2020 Sebastian J. Wolf
|
||||||
|
|
||||||
|
This file is part of Fernschreiber.
|
||||||
|
|
||||||
|
Fernschreiber 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, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Fernschreiber 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 Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DBUSADAPTOR_H
|
||||||
|
#define DBUSADAPTOR_H
|
||||||
|
|
||||||
|
#include <QDBusAbstractAdaptor>
|
||||||
|
|
||||||
|
class DBusAdaptor : public QDBusAbstractAdaptor
|
||||||
|
{
|
||||||
|
|
||||||
|
Q_OBJECT
|
||||||
|
Q_CLASSINFO("D-Bus Interface", "de.ygriega.fernschreiber")
|
||||||
|
|
||||||
|
public:
|
||||||
|
DBusAdaptor(QObject *parent);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void pleaseOpenMessage(const QString &chatId, const QString &messageId);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void openMessage(const QString &chatId, const QString &messageId);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DBUSADAPTOR_H
|
48
src/dbusinterface.cpp
Normal file
48
src/dbusinterface.cpp
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2020 Sebastian J. Wolf
|
||||||
|
|
||||||
|
This file is part of Fernschreiber.
|
||||||
|
|
||||||
|
Fernschreiber 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, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Fernschreiber 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 Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dbusinterface.h"
|
||||||
|
|
||||||
|
DBusInterface::DBusInterface(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
qDebug() << "[DBusInterface] Initializing D-BUS connectivity";
|
||||||
|
this->dbusAdaptor = new DBusAdaptor(this);
|
||||||
|
QDBusConnection sessionBusConnection = QDBusConnection::sessionBus();
|
||||||
|
|
||||||
|
if (!sessionBusConnection.isConnected()) {
|
||||||
|
qDebug() << "[DBusInterface] Error connecting to D-BUS";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sessionBusConnection.registerObject(PATH_NAME, this)) {
|
||||||
|
qDebug() << "[DBusInterface] Error registering root object to D-BUS" << sessionBusConnection.lastError().message();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sessionBusConnection.registerService(INTERFACE_NAME)) {
|
||||||
|
qDebug() << "[DBusInterface] Error registering interface to D-BUS" << sessionBusConnection.lastError().message();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
DBusAdaptor *DBusInterface::getDBusAdaptor()
|
||||||
|
{
|
||||||
|
return this->dbusAdaptor;
|
||||||
|
}
|
47
src/dbusinterface.h
Normal file
47
src/dbusinterface.h
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2020 Sebastian J. Wolf
|
||||||
|
|
||||||
|
This file is part of Fernschreiber.
|
||||||
|
|
||||||
|
Fernschreiber 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, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Fernschreiber 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 Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DBUSINTERFACE_H
|
||||||
|
#define DBUSINTERFACE_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QtDBus>
|
||||||
|
|
||||||
|
#include "dbusadaptor.h"
|
||||||
|
|
||||||
|
const QString INTERFACE_NAME = "de.ygriega.fernschreiber";
|
||||||
|
const QString PATH_NAME = "/de/ygriega/fernschreiber";
|
||||||
|
|
||||||
|
class DBusInterface : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit DBusInterface(QObject *parent = nullptr);
|
||||||
|
DBusAdaptor *getDBusAdaptor();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
private:
|
||||||
|
DBusAdaptor *dbusAdaptor;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DBUSINTERFACE_H
|
|
@ -33,6 +33,7 @@
|
||||||
#include "chatlistmodel.h"
|
#include "chatlistmodel.h"
|
||||||
#include "chatmodel.h"
|
#include "chatmodel.h"
|
||||||
#include "notificationmanager.h"
|
#include "notificationmanager.h"
|
||||||
|
#include "dbusadaptor.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -45,6 +46,9 @@ int main(int argc, char *argv[])
|
||||||
context->setContextProperty("tdLibWrapper", tdLibWrapper);
|
context->setContextProperty("tdLibWrapper", tdLibWrapper);
|
||||||
qmlRegisterType<TDLibWrapper>("WerkWolf.Fernschreiber", 1, 0, "TelegramAPI");
|
qmlRegisterType<TDLibWrapper>("WerkWolf.Fernschreiber", 1, 0, "TelegramAPI");
|
||||||
|
|
||||||
|
DBusAdaptor *dBusAdaptor = tdLibWrapper->getDBusAdaptor();
|
||||||
|
context->setContextProperty("dBusAdaptor", dBusAdaptor);
|
||||||
|
|
||||||
ChatListModel chatListModel(tdLibWrapper);
|
ChatListModel chatListModel(tdLibWrapper);
|
||||||
context->setContextProperty("chatListModel", &chatListModel);
|
context->setContextProperty("chatListModel", &chatListModel);
|
||||||
|
|
||||||
|
|
|
@ -180,6 +180,10 @@ QVariantMap NotificationManager::sendNotification(const QString &chatId, const Q
|
||||||
nemoNotification.setSummary(chatInformation.value("title").toString());
|
nemoNotification.setSummary(chatInformation.value("title").toString());
|
||||||
nemoNotification.setCategory("x-nemo.messaging.im");
|
nemoNotification.setCategory("x-nemo.messaging.im");
|
||||||
nemoNotification.setTimestamp(QDateTime::fromMSecsSinceEpoch(messageMap.value("date").toLongLong() * 1000));
|
nemoNotification.setTimestamp(QDateTime::fromMSecsSinceEpoch(messageMap.value("date").toLongLong() * 1000));
|
||||||
|
QVariantList remoteActionArguments;
|
||||||
|
remoteActionArguments.append(chatId);
|
||||||
|
remoteActionArguments.append(messageMap.value("id").toString());
|
||||||
|
nemoNotification.setRemoteAction(Notification::remoteAction("default", "openMessage", "de.ygriega.fernschreiber", "/de/ygriega/fernschreiber", "de.ygriega.fernschreiber", "openMessage", remoteActionArguments));
|
||||||
if (activeNotifications.isEmpty()) {
|
if (activeNotifications.isEmpty()) {
|
||||||
QString notificationBody;
|
QString notificationBody;
|
||||||
if (addAuthor) {
|
if (addAuthor) {
|
||||||
|
|
|
@ -42,6 +42,9 @@ TDLibWrapper::TDLibWrapper(QObject *parent) : QObject(parent)
|
||||||
tdLibDatabaseDirectory.mkpath(tdLibDatabaseDirectoryPath);
|
tdLibDatabaseDirectory.mkpath(tdLibDatabaseDirectoryPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->dbusInterface = new DBusInterface(this);
|
||||||
|
this->initializeOpenWith();
|
||||||
|
|
||||||
connect(this->tdLibReceiver, SIGNAL(versionDetected(QString)), this, SLOT(handleVersionDetected(QString)));
|
connect(this->tdLibReceiver, SIGNAL(versionDetected(QString)), this, SLOT(handleVersionDetected(QString)));
|
||||||
connect(this->tdLibReceiver, SIGNAL(authorizationStateChanged(QString)), this, SLOT(handleAuthorizationStateChanged(QString)));
|
connect(this->tdLibReceiver, SIGNAL(authorizationStateChanged(QString)), this, SLOT(handleAuthorizationStateChanged(QString)));
|
||||||
connect(this->tdLibReceiver, SIGNAL(optionUpdated(QString, QVariant)), this, SLOT(handleOptionUpdated(QString, QVariant)));
|
connect(this->tdLibReceiver, SIGNAL(optionUpdated(QString, QVariant)), this, SLOT(handleOptionUpdated(QString, QVariant)));
|
||||||
|
@ -312,6 +315,11 @@ void TDLibWrapper::controlScreenSaver(const bool &enabled)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DBusAdaptor *TDLibWrapper::getDBusAdaptor()
|
||||||
|
{
|
||||||
|
return this->dbusInterface->getDBusAdaptor();
|
||||||
|
}
|
||||||
|
|
||||||
void TDLibWrapper::handleVersionDetected(const QString &version)
|
void TDLibWrapper::handleVersionDetected(const QString &version)
|
||||||
{
|
{
|
||||||
this->version = version;
|
this->version = version;
|
||||||
|
@ -566,3 +574,29 @@ void TDLibWrapper::setLogVerbosityLevel()
|
||||||
this->sendRequest(requestObject);
|
this->sendRequest(requestObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TDLibWrapper::initializeOpenWith()
|
||||||
|
{
|
||||||
|
qDebug() << "[TDLibWrapper] Initialize open-with";
|
||||||
|
|
||||||
|
QString dbusPathName = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/dbus-1/services";
|
||||||
|
QDir dbusPath(dbusPathName);
|
||||||
|
if (!dbusPath.exists()) {
|
||||||
|
qDebug() << "[TDLibWrapper] Creating D-Bus directory " << dbusPathName;
|
||||||
|
dbusPath.mkpath(dbusPathName);
|
||||||
|
}
|
||||||
|
QString dbusServiceFileName = dbusPathName + "/de.ygriega.fernschreiber.service";
|
||||||
|
QFile dbusServiceFile(dbusServiceFileName);
|
||||||
|
if (!dbusServiceFile.exists()) {
|
||||||
|
qDebug() << "[TDLibWrapper] Creating D-Bus service file at " << dbusServiceFile.fileName();
|
||||||
|
if (dbusServiceFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||||
|
QTextStream fileOut(&dbusServiceFile);
|
||||||
|
fileOut.setCodec("UTF-8");
|
||||||
|
fileOut << QString("[D-BUS Service]").toUtf8() << "\n";
|
||||||
|
fileOut << QString("Name=de.ygriega.fernschreiber").toUtf8() << "\n";
|
||||||
|
fileOut << QString("Exec=/usr/bin/invoker -s --type=silica-qt5 /usr/bin/harbour-fernschreiber").toUtf8() << "\n";
|
||||||
|
fileOut.flush();
|
||||||
|
dbusServiceFile.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <td/telegram/td_json_client.h>
|
#include <td/telegram/td_json_client.h>
|
||||||
#include "tdlibreceiver.h"
|
#include "tdlibreceiver.h"
|
||||||
|
#include "dbusadaptor.h"
|
||||||
|
#include "dbusinterface.h"
|
||||||
|
|
||||||
class TDLibWrapper : public QObject
|
class TDLibWrapper : public QObject
|
||||||
{
|
{
|
||||||
|
@ -71,6 +73,8 @@ public:
|
||||||
Q_INVOKABLE void openFileOnDevice(const QString &filePath);
|
Q_INVOKABLE void openFileOnDevice(const QString &filePath);
|
||||||
Q_INVOKABLE void controlScreenSaver(const bool &enabled);
|
Q_INVOKABLE void controlScreenSaver(const bool &enabled);
|
||||||
|
|
||||||
|
DBusAdaptor *getDBusAdaptor();
|
||||||
|
|
||||||
// Direct TDLib functions
|
// Direct TDLib functions
|
||||||
Q_INVOKABLE void sendRequest(const QVariantMap &requestObject);
|
Q_INVOKABLE void sendRequest(const QVariantMap &requestObject);
|
||||||
Q_INVOKABLE void setAuthenticationPhoneNumber(const QString &phoneNumber);
|
Q_INVOKABLE void setAuthenticationPhoneNumber(const QString &phoneNumber);
|
||||||
|
@ -142,6 +146,7 @@ public slots:
|
||||||
private:
|
private:
|
||||||
void *tdLibClient;
|
void *tdLibClient;
|
||||||
TDLibReceiver *tdLibReceiver;
|
TDLibReceiver *tdLibReceiver;
|
||||||
|
DBusInterface *dbusInterface;
|
||||||
QString version;
|
QString version;
|
||||||
TDLibWrapper::AuthorizationState authorizationState;
|
TDLibWrapper::AuthorizationState authorizationState;
|
||||||
TDLibWrapper::ConnectionState connectionState;
|
TDLibWrapper::ConnectionState connectionState;
|
||||||
|
@ -157,6 +162,7 @@ private:
|
||||||
void setInitialParameters();
|
void setInitialParameters();
|
||||||
void setEncryptionKey();
|
void setEncryptionKey();
|
||||||
void setLogVerbosityLevel();
|
void setLogVerbosityLevel();
|
||||||
|
void initializeOpenWith();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue