syncthingtray/widgets/misc/dbusstatusnotifier.cpp
Martchus 975e86c895 Allow backend libraries to be used from other projects
So far the backend libraries' include paths were relative within this
repository. This means the header files could not be used at their
installed location.

This change replaces them with "<>" includes to fix that problem and adds
a new include directory so building everything at once still works.

With this change it should be easier to actually split some parts into
another repository if this one would become too big.
2021-01-25 19:48:11 +01:00

89 lines
4.2 KiB
C++

#ifdef QT_UTILITIES_SUPPORT_DBUS_NOTIFICATIONS
#include "./dbusstatusnotifier.h"
#include <syncthingmodel/syncthingicons.h>
// use meta-data of syncthingtray application here
#include "resources/../../tray/resources/config.h"
#include <QCoreApplication>
#include <QPixmap>
using namespace Data;
using namespace QtUtilities;
namespace QtGui {
inline QImage makeImage(const QIcon &icon)
{
return icon.pixmap(QSize(128, 128)).toImage();
}
DBusStatusNotifier::DBusStatusNotifier(QObject *parent)
: QObject(parent)
, m_disconnectedNotification(QStringLiteral(APP_NAME), QStringLiteral("network-disconnect"), 5000)
, m_internalErrorNotification(QStringLiteral(APP_NAME) + tr(" - internal error"), NotificationIcon::Critical, 5000)
, m_launcherErrorNotification(QStringLiteral(APP_NAME) + tr(" - launcher error"), NotificationIcon::Critical, 5000)
, m_syncthingNotification(tr("Syncthing notification"), NotificationIcon::Warning, 10000)
, m_syncCompleteNotification(QStringLiteral(APP_NAME), NotificationIcon::Information, 5000)
, m_newDevNotification(QStringLiteral(APP_NAME) + tr(" - new device"), NotificationIcon::Information, 5000)
, m_newDirNotification(QStringLiteral(APP_NAME) + tr(" - new directory"), NotificationIcon::Information, 5000)
{
m_disconnectedNotification.setApplicationName(QStringLiteral(APP_NAME));
m_disconnectedNotification.setMessage(tr("Disconnected from Syncthing"));
m_disconnectedNotification.setActions(QStringList({ QStringLiteral("reconnect"), tr("Try to reconnect") }));
connect(&m_disconnectedNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::connectRequested);
m_internalErrorNotification.setApplicationName(QStringLiteral(APP_NAME));
m_internalErrorNotification.setActions(QStringList({ QStringLiteral("details"), tr("View details") }));
connect(&m_internalErrorNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::errorDetailsRequested);
m_internalErrorNotification.setApplicationName(QStringLiteral(APP_NAME));
m_internalErrorNotification.setActions(QStringList({ QStringLiteral("details"), tr("View details") }));
connect(&m_internalErrorNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::errorDetailsRequested);
m_syncthingNotification.setApplicationName(QStringLiteral(APP_NAME));
m_syncthingNotification.setActions(QStringList({ QStringLiteral("show"), tr("Show"), QStringLiteral("dismiss"), tr("Dismiss") }));
connect(&m_syncthingNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::handleSyncthingNotificationAction);
m_syncCompleteNotification.setApplicationName(QStringLiteral(APP_NAME));
m_newDevNotification.setApplicationName(QStringLiteral(APP_NAME));
m_newDevNotification.setActions(QStringList({ QStringLiteral("webui"), tr("Open web UI") }));
connect(&m_newDevNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::webUiRequested);
m_newDirNotification.setApplicationName(QStringLiteral(APP_NAME));
m_newDirNotification.setActions(m_newDevNotification.actions());
connect(&m_newDirNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::webUiRequested);
const auto &iconManager = IconManager::instance();
connect(&iconManager, &Data::IconManager::statusIconsChanged, this, &DBusStatusNotifier::setIcons);
setIcons(iconManager.statusIcons(), iconManager.trayIcons());
}
void DBusStatusNotifier::setIcons(const StatusIcons &, const StatusIcons &icons)
{
if (!icons.isValid) {
return;
}
m_launcherErrorNotification.setImage(makeImage(icons.error));
m_syncthingNotification.setImage(m_launcherErrorNotification.image());
m_syncthingNotification.setImage(makeImage(icons.notify));
m_syncCompleteNotification.setImage(makeImage(icons.syncComplete));
m_newDevNotification.setImage(makeImage(icons.newItem));
m_newDirNotification.setImage(m_newDevNotification.image());
}
void DBusStatusNotifier::handleSyncthingNotificationAction(const QString &action)
{
if (action == QLatin1String("dismiss")) {
emit dismissNotificationsRequested();
} else if (action == QLatin1String("show")) {
emit showNotificationsRequested();
}
}
} // namespace QtGui
#endif