/*
* Copyright (C) 2023, KylinSoft Co., Ltd.
*
* This program 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.
*
* This program 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 this program. If not, see .
*
* Authors: iaom
*/
#ifndef UKUI_NOTIFICATION_SERVER_PRIVATE_H
#define UKUI_NOTIFICATION_SERVER_PRIVATE_H
#include
#include
#include
class QDBusServiceWatcher;
namespace NotificationServer {
class Notification {
friend class ServerPrivate;
QString m_appName;
uint m_id = 0;
QString m_appIcon;
QString m_summary;
QString m_body;
QStringList m_actions;
QVariantMap m_hints;
int m_timeout;
};
class ServerPrivate : public QObject, protected QDBusContext
{
Q_OBJECT
//dbus interface
public:
QStringList GetCapabilities() const;
uint Notify(const QString &app_name,
uint replaces_id,
const QString &app_icon,
const QString &summary,
const QString &body,
const QStringList &actions,
const QVariantMap &hints,
int timeout);
void CloseNotification(uint id);
QString GetServerInformation(QString &vendor, QString &version, QString &spec_version) const;
/**
* 注册成为通知中心客户端
*/
void RegisterClient();
/**
* 注销
*/
void UnRegisterClient();
/**
* 通知中心关闭通知
* @param id 通知id
* @param reason 关闭原因
*/
void CloseNotification(uint id, uint);
void InvokeAction(uint id, const QString &action_key);
void UpdateUnreadMessagesNumber(const QString &desktopEntry, uint number);
Q_SIGNALS:
void NotificationClosed(uint id, uint reason);
void ActionInvoked(uint id, const QString &actionKey);
void ActivationToken(uint id, const QString &ActivationToken);
void UnreadMessagesNumberUpdated(const QString &desktopEntry, uint number);
public:
explicit ServerPrivate(QObject *parent = nullptr);
~ServerPrivate() override;
bool init();
static QString notificationServiceName();
static QString notificationServicePath();
static QString notificationServiceInterface();
private:
void sendCache();
QDBusServiceWatcher *m_notificationWatchers = nullptr;
uint m_increasedNotificationId = 1;
QMap m_notificationsCache;
};
} // NotificationServer
#endif //UKUI_NOTIFICATION_SERVER_PRIVATE_H