feat: Claude Code 原生 Windows 通知(C# / .NET 10 + Avalonia 12)
为 Claude Code 提供原生 Windows toast 通知:点击跳回原窗口、切回 Windows Terminal 标签、跨虚拟桌面、调用方图标、非阻塞投递;NativeAOT 单文件分发。
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace Notify.Ipc;
|
||||
|
||||
/// <summary>
|
||||
/// Host 侧:监视 spool 目录,新文件出现即消费并回调
|
||||
/// </summary>
|
||||
public sealed class SpoolWatcher
|
||||
{
|
||||
private readonly Action<NotifyMessage> _onMessage;
|
||||
private FileSystemWatcher? _watcher;
|
||||
|
||||
public SpoolWatcher(Action<NotifyMessage> onMessage) => _onMessage = onMessage;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
Directory.CreateDirectory(NotificationSpool.Dir);
|
||||
|
||||
// 先补弹启动前堆积的请求
|
||||
NotificationSpool.DrainExisting(_onMessage);
|
||||
|
||||
_watcher = new FileSystemWatcher(NotificationSpool.Dir, "*.json")
|
||||
{
|
||||
NotifyFilter = NotifyFilters.FileName,
|
||||
EnableRaisingEvents = true,
|
||||
};
|
||||
_watcher.Created += OnCreated;
|
||||
_watcher.Renamed += OnRenamed;
|
||||
}
|
||||
|
||||
private void OnCreated(object sender, FileSystemEventArgs e) => Handle(e.FullPath);
|
||||
|
||||
private void OnRenamed(object sender, RenamedEventArgs e) => Handle(e.FullPath);
|
||||
|
||||
private void Handle(string path)
|
||||
{
|
||||
if (NotificationSpool.ReadAndRemove(path) is { } msg)
|
||||
{
|
||||
_onMessage(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user