# ukui-notification

## 介绍

ukui-notification 包含 UKUI 桌面环境的通知服务、通知开发接口和通知控制插件。

| 二进制包 | 说明 |
|---------|------|
| ukui-notification-server | 通知服务 |
| libukui-notification1 | 通知开发接口运行库 |
| libukui-notification-dev | 通知开发接口开发文件 |
| libukui-notification-doc | 通知开发接口 API 文档 (QCH) |

## 目录

- [通知服务](#通知服务)
- [通知开发接口](#通知开发接口)
- [通知控制插件](#通知控制插件)
- [编译安装](#编译安装)
- [Debian 打包](#debian-打包)

## 通知服务

ukui-notification-server 提供了遵循 freedesktop [通知协议](https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html)的通知服务接口。

### 支持的 Capabilities

| 能力 | 描述 |
|------|------|
| actions | 支持通知操作按钮 |
| body | 支持富文本内容 |
| body-hyperlinks | 支持内容中的超链接 |
| persistence | 支持持久化通知 |
| sound | 支持通知声音提示 |

### 扩展 hints

| Hint 名称 | 描述 |
|-----------|------|
| x-ukui-display | 标识通知弹窗应该显示在哪个 DISPLAY 上 |

### 扩展接口

| 接口名称 | 参数 | 返回值 | 描述 |
|---------|------|--------|------|
| org.ukui.NotificationServer.UpdateUnreadMessagesNumber | String desktop_entry, UInt32 number | void | 更新应用的未读消息数量 |
| org.ukui.NotificationServer.RegisterNotificationControl | String desktop_entry | void | 注册应用的通知控制 |

## 通知开发接口

### 使用 CMake

```cmake
find_package(ukui-notification)
target_link_libraries(yourapp ukui-notification)
```

### 使用 pkg-config

```cmake
find_package(PkgConfig REQUIRED)
pkg_check_modules(NOTIFICATION ukui-notification)
target_include_directories(yourapp ${NOTIFICATION_INCLUDE_DIRS})
target_link_libraries(yourapp ${NOTIFICATION_LIBRARIES})
```

### 公开头文件

| 头文件 | 功能描述 |
|--------|----------|
| notification-client.h | 通知中心客户端注册、消息同步与 action 执行 |
| popup-notification.h | 单条通知的所有信息管理 |
| notification-close-reason.h | 通知关闭原因枚举 |
| notification-global-settings.h | 全局通知设置 |
| applications-settings.h | 应用通知行为设置 |
| single-application-settings.h | 单个应用的通知设置 |
| settings-properties.h | 通知设置属性定义 |
| settings-properties-info.h | 通知设置属性信息 |
| utils.h | 工具函数 |

## 通知控制插件

notification-ukcc-plugin 是 UKUI 控制中心的通知设置插件，方便用户设置应用通知的权限。

## 编译安装

### 依赖

- cmake, extra-cmake-modules, doxygen, pkgconf, qtchooser
- qt6-base-dev, qt6-declarative-dev, qt6-tools-dev
- libukui-quick-dev (>= 4.20.8.0)
- libukui-search-dev (>= 4.0.1.5)
- libgsettings-qt6-dev
- libkysdk-applications-dev
- libukcc-dev
- kwayland-dev

### 编译

```bash
mkdir build && cd build
cmake ..
make -j$(nproc)
```

### 编译选项

| 选项 | 默认值 | 描述 |
|------|--------|------|
| BUILD_TEST | OFF | 编译测试程序 |
| BUILD_QCH | ON | 生成 QCH 格式 API 文档 |

### 安装

```bash
sudo make install
```

## Debian 打包

```bash
dpkg-buildpackage -us -uc -b
```

生成的二进制包：

- `ukui-notification-server` — 通知服务可执行文件
- `libukui-notification1` — 运行库
- `libukui-notification-dev` — 开发文件（头文件、CMake 配置、pkg-config）
- `libukui-notification-doc` — API 文档

## 许可证

本项目使用 GPL-3+ 许可证，详见 [LICENSE](LICENSE) 文件。第三方组件 `3rd-parties/qtsingleapplication` 使用 BSD-3-Clause 许可证。
