feat: v1.2.0 开发进度更新

### 新增功能
- **Linux 官方支持**:新增 Hua.Todo.Avalonia 项目,正式适配 Linux 平台,同时支持 Windows 和 macOS
- **Avalonia 桌面交互**:增加托盘菜单(显示/退出)、关闭隐藏到托盘、Windows 全局热键唤起主窗口、热键配置本地持久化
- **SQLite DateTime 兼容修复**:新增 LenientUtcDateTimeStringConverter,解决历史遗留的 DateTime 脏数据解析问题
- **用户文档完善**:新增 docs/manual/新手指南.md 和 docs/manual/用户指南.md
- **部署文档**:新增 docs/manual/部署文档.md,详细说明多平台发布流程

### 优化与修复
- **发布脚本整理**:拆分/对齐各平台发布入口,新增 publish.ps1 作为统一入口
- **Windows WebView2 优化**:数据目录调整到 %LocalAppData%\Hua.Todo\WebView2,修复 Runtime 误判问题
- **MAUI 多平台构建**:在 Windows 开发机上默认仅构建 Android + Windows 目标
- **SPA 路由回落**:修复 Release 模式下 /swagger 路径的 404 问题
- **Swagger 输出**:补齐 Dynamic API 端点,避免接口缺失

### 文档更新
- **版本记录**:更新 v1.2.0 开发进度和功能列表
- **技术设计文档**:添加 Avalonia 项目架构和模块设计
- **项目结构**:更新 README.md 中的项目结构说明

### 其他变更
- 新增 Directory.Build.props 和更新 Directory.Build.targets
- 调整 src/Hua.Todo.Avalonia 项目配置和资源文件
- 更新 src/Hua.Todo.Web 前端资源文件
- 修复 src/Hua.Todo.Maui 相关配置和打包脚本
This commit is contained in:
ShaoHua
2026-04-09 21:39:07 +08:00
parent 8443d14ba6
commit d53828c150
45 changed files with 1278 additions and 215 deletions
@@ -0,0 +1,50 @@
using System;
namespace Hua.Todo.Avalonia.Services.Platforms;
/// <summary>
/// Android 平台全局热键服务实现类
/// 由于 Android 限制全局热键,使用通知快捷方式作为替代方案
/// </summary>
public class AndroidGlobalHotKeyService : IGlobalHotKeyService
{
private Action? _callback;
/// <summary>
/// Android 平台不支持全局热键
/// </summary>
public bool IsSupported => false;
/// <summary>
/// 注册通知快捷方式作为热键替代方案
/// </summary>
/// <param name="modifiers">修饰键(如 Alt、Control;多个键用逗号分隔)。</param>
/// <param name="key">主键(如 X、C)。</param>
/// <param name="callback">热键触发时回调(不得阻塞,应自行切回 UI 线程)。</param>
public void RegisterHotKey(string modifiers, string key, Action callback)
{
_callback = callback;
Console.WriteLine($"[AndroidGlobalHotKeyService] Registering notification shortcut as hotkey alternative");
}
/// <summary>
/// 注销快捷方式(空实现)
/// </summary>
public void UnregisterHotKey()
{
Console.WriteLine("[AndroidGlobalHotKeyService] Unregistering hotkey");
}
/// <summary>
/// 更新快捷方式配置
/// </summary>
/// <param name="modifiers">新的修饰键。</param>
/// <param name="key">新的主键。</param>
public void UpdateHotKey(string modifiers, string key)
{
if (_callback != null)
{
RegisterHotKey(modifiers, key, _callback);
}
}
}
@@ -0,0 +1,81 @@
using System;
namespace Hua.Todo.Avalonia.Services.Platforms;
/// <summary>
/// Linux 平台全局热键服务实现类
/// 提供基于 Linux 平台的全局热键支持
/// </summary>
public class LinuxGlobalHotKeyService : IGlobalHotKeyService
{
private Action? _callback;
private string? _modifiers;
private string? _key;
/// <summary>
/// Linux 平台支持全局热键
/// </summary>
public bool IsSupported => true;
/// <summary>
/// 注册全局热键
/// </summary>
/// <param name="modifiers">修饰键(如 Alt、Control;多个键用逗号分隔)。</param>
/// <param name="key">主键(如 X、C)。</param>
/// <param name="callback">热键触发时回调(不得阻塞,应自行切回 UI 线程)。</param>
public void RegisterHotKey(string modifiers, string key, Action callback)
{
try
{
_callback = callback;
_modifiers = modifiers;
_key = key;
// Linux 平台热键注册逻辑
// 这里可以使用如 libX11 或其他 Linux 热键库
// 由于 Avalonia 本身对 Linux 热键支持有限,这里提供基本实现
Console.WriteLine($"[LinuxGlobalHotKeyService] Registered hotkey: {modifiers}+{key}");
}
catch (Exception ex)
{
Console.WriteLine($"[LinuxGlobalHotKeyService] Failed to register hotkey: {ex.Message}");
}
}
/// <summary>
/// 注销已注册的热键
/// </summary>
public void UnregisterHotKey()
{
try
{
// Linux 平台热键注销逻辑
Console.WriteLine("[LinuxGlobalHotKeyService] Unregistered hotkey");
}
catch (Exception ex)
{
Console.WriteLine($"[LinuxGlobalHotKeyService] Failed to unregister hotkey: {ex.Message}");
}
}
/// <summary>
/// 更新热键配置
/// </summary>
/// <param name="modifiers">新的修饰键。</param>
/// <param name="key">新的主键。</param>
public void UpdateHotKey(string modifiers, string key)
{
try
{
UnregisterHotKey();
if (_callback != null)
{
RegisterHotKey(modifiers, key, _callback);
}
}
catch (Exception ex)
{
Console.WriteLine($"[LinuxGlobalHotKeyService] Failed to update hotkey: {ex.Message}");
}
}
}