🧩 设计

Basic库

它被打包为一个动态库, 供客户端和守护进程使用

它包括 IPC, 日志, 版本管理, 命令行参数解析以及常用函数

工作目录

--work-dir 参数指定工作目录 $WORK_DIR, 默认值为 $XDG_RUNTIME_DIR

日志

日志目录位于 $WORK_DIR/wow/log/

  • 保留:如果程序运行期间日志全部为 INFO, 则日志不会保留 如果运行期间出现 WARNING 或 ERROR, 则会保留整个日志
  • 截断:当日志超过 50MB 时会进行截断, 截断发生时会丢弃截断前的所有日志
  • 限流:日志每秒最多允许输出 50 条

IPC

IPC 使用本地套接字和 JSON 文本实现

本地套接字监听在 $WORK_DIR/wow/wow.sock

请求

  • refresh: { "action": "refresh" }
  • next: { "action": "next" }
  • prev: { "action": "prev" }
  • manual: { "action": "manual" }
  • test:
{
  "action": "test",
  "target": "[wallpaper-name]"
}
  • list:
{
  "action": "list",
  "target": "[list-name]"
}
  • quit: { "action": "quit" }
  • info: { "action": "info" }

响应

{ "result": "[result-info]" }

客户端

实现非常简陋, 甚至有点丑陋

工作内容: 解析命令行, 通过 IPC 与守护进程通信, 实现控制和信息获取

当然也可以使用其他方式实现…

(小声)我的下一个项目会重新利用IPC, 到时候会有一个更漂亮的控制方式, 因此这个项目就只用命令行式客户端了

守护进程

这里会有一个图来生动地说明, 因此当你看到这段文字时, 说明我偷懒了…

配置目录

默认配置目录在 $XDG_CONFIG_HOME, 也就是 $HOME/.config/