76 lines
2.4 KiB
C++
76 lines
2.4 KiB
C++
|
#include "systemnotification.h"
|
||
|
#include <QApplication>
|
||
|
#include <QUrl>
|
||
|
|
||
|
#ifndef Q_OS_WIN
|
||
|
#include <QDBusConnection>
|
||
|
#include <QDBusMessage>
|
||
|
#include <QDBusInterface>
|
||
|
#else
|
||
|
#include "mainwindow.hpp"
|
||
|
#include "ui_mainwindow.h"
|
||
|
#endif
|
||
|
|
||
|
#if defined(Q_OS_LINUX) || defined(Q_OS_UNIX)
|
||
|
SystemNotification::SystemNotification(QObject *parent) : QObject(parent) {
|
||
|
m_interface = new QDBusInterface(QStringLiteral("org.freedesktop.Notifications"),
|
||
|
QStringLiteral("/org/freedesktop/Notifications"),
|
||
|
QStringLiteral("org.freedesktop.Notifications"),
|
||
|
QDBusConnection::sessionBus(),
|
||
|
this);
|
||
|
}
|
||
|
#else
|
||
|
SystemNotification::SystemNotification(QObject *parent) : QObject(parent) {
|
||
|
m_interface = nullptr;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
void SystemNotification::sendMessage(const QString &text, const QString &savePath) {
|
||
|
sendMessage(text, tr("KShare Info"), QSystemTrayIcon::Information, savePath);
|
||
|
}
|
||
|
|
||
|
void SystemNotification::sendMessage(
|
||
|
const QString &text,
|
||
|
const QString &title,
|
||
|
const QSystemTrayIcon::MessageIcon icon,
|
||
|
const QString &savePath,
|
||
|
const int timeout)
|
||
|
{
|
||
|
|
||
|
#ifndef Q_OS_WIN
|
||
|
QList<QVariant> args;
|
||
|
QVariantMap hintsMap;
|
||
|
if (!savePath.isEmpty()) {
|
||
|
QUrl fullPath = QUrl::fromLocalFile(savePath);
|
||
|
// allows the notification to be dragged and dropped
|
||
|
hintsMap[QStringLiteral("x-kde-urls")] = QStringList({fullPath.toString()});
|
||
|
}
|
||
|
|
||
|
QString iconString = "";
|
||
|
switch (icon) {
|
||
|
case QSystemTrayIcon::Warning:
|
||
|
iconString = "dialog-warning";
|
||
|
break;
|
||
|
case QSystemTrayIcon::Critical:
|
||
|
iconString = "dialog-error";
|
||
|
break;
|
||
|
default:
|
||
|
iconString = "dialog-information";
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
args << (qAppName()) //appname
|
||
|
<< static_cast<unsigned int>(0) //id
|
||
|
<< iconString //icon
|
||
|
<< title //summary
|
||
|
<< text //body
|
||
|
<< QStringList() //actions
|
||
|
<< hintsMap //hints
|
||
|
<< timeout; //timeout
|
||
|
m_interface->callWithArgumentList(QDBus::AutoDetect, QStringLiteral("Notify"), args);
|
||
|
#else
|
||
|
if (!MainWindow::inst()) return;
|
||
|
MainWindow::inst()->tray->showMessage(text, title, icon, timeout);
|
||
|
#endif
|
||
|
}
|