mirror of https://github.com/Nheko-Reborn/nheko
Unread messages count as an Unity compatible badge (#1085)
Co-authored-by: DeepBlueV7.X <nicolas.werner@hotmail.de>pull/1090/head
parent
163ef6ebdc
commit
0e02024084
@ -0,0 +1,81 @@ |
||||
// SPDX-FileCopyrightText: 2022 Nheko Contributors
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include "dock/Dock.h" |
||||
#include <QApplication> |
||||
#include <QObject> |
||||
#if defined(NHEKO_DBUS_SYS) |
||||
#include <qdbusconnectioninterface.h> |
||||
Dock::Dock(QObject *parent) |
||||
: QObject(parent) |
||||
, unityServiceWatcher(new QDBusServiceWatcher(this)) |
||||
{ |
||||
unityServiceWatcher->setConnection(QDBusConnection::sessionBus()); |
||||
unityServiceWatcher->setWatchMode(QDBusServiceWatcher::WatchForUnregistration | |
||||
QDBusServiceWatcher::WatchForRegistration); |
||||
unityServiceWatcher->addWatchedService(QStringLiteral("com.canonical.Unity")); |
||||
connect(unityServiceWatcher, |
||||
&QDBusServiceWatcher::serviceRegistered, |
||||
this, |
||||
[this](const QString &service) { |
||||
Q_UNUSED(service); |
||||
unityServiceAvailable = true; |
||||
}); |
||||
connect(unityServiceWatcher, |
||||
&QDBusServiceWatcher::serviceUnregistered, |
||||
this, |
||||
[this](const QString &service) { |
||||
Q_UNUSED(service); |
||||
unityServiceAvailable = false; |
||||
}); |
||||
QDBusPendingCall listNamesCall = |
||||
QDBusConnection::sessionBus().interface()->asyncCall(QStringLiteral("ListNames")); |
||||
QDBusPendingCallWatcher *callWatcher = new QDBusPendingCallWatcher(listNamesCall, this); |
||||
connect(callWatcher, |
||||
&QDBusPendingCallWatcher::finished, |
||||
this, |
||||
[this](QDBusPendingCallWatcher *watcher) { |
||||
QDBusPendingReply<QStringList> reply = *watcher; |
||||
watcher->deleteLater(); |
||||
|
||||
if (reply.isError()) { |
||||
return; |
||||
} |
||||
|
||||
const QStringList &services = reply.value(); |
||||
|
||||
unityServiceAvailable = services.contains(QLatin1String("com.canonical.Unity")); |
||||
}); |
||||
} |
||||
|
||||
void |
||||
Dock::setUnreadCount(const int count) |
||||
{ |
||||
unitySetNotificationCount(count); |
||||
} |
||||
void |
||||
Dock::unitySetNotificationCount(const int count) |
||||
{ |
||||
if (unityServiceAvailable) { |
||||
const QString launcherId = qApp->desktopFileName() + QLatin1String(".desktop"); |
||||
|
||||
const QVariantMap properties{{QStringLiteral("count-visible"), count > 0}, |
||||
{QStringLiteral("count"), count}}; |
||||
|
||||
QDBusMessage message = |
||||
QDBusMessage::createSignal(QStringLiteral("/im/nheko/Nheko/UnityLauncher"), |
||||
QStringLiteral("com.canonical.Unity.LauncherEntry"), |
||||
QStringLiteral("Update")); |
||||
message.setArguments({launcherId, properties}); |
||||
QDBusConnection::sessionBus().send(message); |
||||
} |
||||
} |
||||
#else |
||||
Dock::Dock(QObject *parent) |
||||
: QObject(parent) |
||||
{} |
||||
void |
||||
Dock::setUnreadCount(const int) |
||||
{} |
||||
#endif |
@ -0,0 +1,27 @@ |
||||
// SPDX-FileCopyrightText: 2022 Nheko Contributors
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once |
||||
#include <QObject> |
||||
#if defined(NHEKO_DBUS_SYS) |
||||
#include <QDBusServiceWatcher> |
||||
#include <QtDBus/QDBusArgument> |
||||
#include <QtDBus/QDBusInterface> |
||||
#endif |
||||
|
||||
class Dock : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
public: |
||||
Dock(QObject *parent = nullptr); |
||||
public slots: |
||||
void setUnreadCount(const int count); |
||||
|
||||
private: |
||||
#if defined(NHEKO_DBUS_SYS) |
||||
void unitySetNotificationCount(const int count); |
||||
QDBusServiceWatcher *unityServiceWatcher = nullptr; |
||||
bool unityServiceAvailable = false; |
||||
#endif |
||||
}; |
Loading…
Reference in new issue