BiliTools通知系统:桌面通知与用户交互体验优化

BiliTools通知系统:桌面通知与用户交互体验优化

【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持视频、音乐、番剧、课程下载……持续更新 【免费下载链接】BiliTools 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools

痛点:下载任务状态难以实时感知

你是否曾经遇到过这样的场景:启动BiliTools进行批量下载后,不得不频繁切换窗口查看任务进度,生怕错过下载完成的关键时刻?或者因为无法及时获知下载失败的通知,导致重要资源未能成功获取?

BiliTools的通知系统正是为了解决这些痛点而生。作为一个跨平台的哔哩哔哩工具箱,它通过智能的桌面通知机制,让用户能够在不中断当前工作的情况下,实时掌握下载任务的每一个关键状态变化。

通知系统的架构设计

BiliTools采用前后端分离的架构设计,通知系统贯穿整个应用的生命周期:

mermaid

核心组件与技术栈

  • 前端(Vue 3 + TypeScript): 负责用户界面交互和Toast提示
  • 后端(Rust + Tauri): 处理核心业务逻辑和系统级通知
  • 通知服务: 使用notify-rust库实现跨平台桌面通知

桌面通知的实现机制

配置层:用户可定制的通知偏好

src/components/SettingsPage/General.vue中,BiliTools提供了通知开关配置:

<section>
    <h3>
        <i :class="[$fa.weight, 'fa-bell']"></i>
        <span>{{ $t('settings.notify.name') }}</span>
    </h3>
    <Switch v-model="settings.notify"/>
    <span class="desc">{{ $t('settings.notify.desc') }}</span>
</section>

对应的Rust配置结构在src-tauri/src/storage/config.rs中定义:

#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Config {
    // ...其他配置项
    pub notify: bool,  // 通知开关
    // ...
}

核心通知逻辑

src-tauri/src/services/queue/runtime.rs中,BiliTools实现了智能的通知触发机制:

#[tauri::command(async)]
#[specta::specta]
pub async fn process_queue(sid: Arc<String>, folder: String) -> TauriResult<()> {
    let scheduler = TASK_MANAGER.plan_scheduler(&sid, &folder).await?;
    scheduler.dispatch().await?;
    
    // 下载完成时发送桌面通知
    #[cfg(target_os = "windows")]
    if config::read().notify {
        notify_rust::Notification::new()
            .app_id("com.btjawa.bilitools")
            .summary("BiliTools")
            .body(&format!("{folder}\nDownload complete~"))
            .show()?;
    }
    Ok(())
}

多语言支持的通知消息

BiliTools支持多语言环境,通知消息会根据用户设置的语言自动切换:

语言代码状态通知内容示例
zh-CN已完成下载完成~
en-USCompletedDownload complete~
ja-JP完了ダウンロード完了~

前端Toast提示系统

除了系统级桌面通知,BiliTools还实现了丰富的前端Toast提示系统:

export function AppLog(message: string, _type?: `${TYPE}`) {
    const type = Object.values(TYPE).includes(_type as TYPE) ? (_type as TYPE) : TYPE.INFO;
    
    // 日志记录
    switch(type) {
        case TYPE.ERROR: log.error(message); break;
        case TYPE.WARNING: log.warn(message); break;
        default: log.info(message); break;
    }
    
    // Toast提示显示
    (useToast())(message, {
        type,
        timeout: type === TYPE.ERROR ? false : 3000  // 错误提示不自动关闭
    });
}

提示类型分类

BiliTools的提示系统支持多种类型的消息反馈:

mermaid

用户体验优化策略

1. 智能通知频率控制

为了避免通知轰炸,BiliTools实现了智能的通知频率控制:

  • 批量任务: 同一批次的多个任务完成时,合并发送单个通知
  • 错误重试: 对于可自动重试的错误,减少不必要的通知干扰
  • 用户偏好: 尊重用户的勿扰模式设置

2. 上下文相关的通知内容

通知内容根据任务类型和状态动态生成:

任务类型成功通知失败通知
视频下载"视频【标题】下载完成""视频下载失败,请检查网络"
弹幕获取"弹幕文件生成成功""弹幕解析出错"
元数据刮削"NFO文件创建完成""刮削信息获取失败"

3. 交互式通知支持

未来的版本规划中包含交互式通知功能:

// 伪代码:交互式通知示例
Notification::new()
    .summary("下载完成")
    .body("视频【XXX】已下载完成")
    .action("open", "打开文件夹")
    .action("play", "立即播放")
    .show()?;

最佳实践与配置建议

推荐的通知配置

// 在src/services/utils.ts中的最佳配置
const notificationConfig = {
    enabled: true,           // 启用通知
    timeout: 3000,           // 3秒自动关闭
    errorPersistent: true,   // 错误提示持久化
    position: 'top-right'    // 显示位置
};

性能优化考虑

BiliTools在实现通知系统时充分考虑了性能因素:

  1. 懒加载: 通知组件按需加载,减少初始资源占用
  2. 内存管理: 使用Arc(原子引用计数)确保线程安全
  3. 资源回收: 及时清理已完成的通知对象

故障排除与常见问题

通知不显示的常见原因

  1. 系统权限问题: 确保应用有显示通知的权限
  2. 配置关闭: 检查设置中的通知开关是否开启
  3. 勿扰模式: 系统级别的勿扰模式可能阻止通知

调试技巧

# 查看通知相关的日志
tail -f ~/.local/share/com.btjawa.bilitools/logs/*.log | grep -i notify

未来发展方向

BiliTools的通知系统将持续演进,计划中的功能包括:

  1. 推送通知: 支持移动端推送,实现跨设备状态同步
  2. 自定义模板: 允许用户自定义通知内容和样式
  3. 智能摘要: 对批量任务生成智能摘要报告
  4. 语音播报: 支持重要通知的语音提示

总结

BiliTools的通知系统通过精心设计的架构和用户友好的交互体验,成功解决了下载工具类应用中的状态感知难题。无论是桌面通知还是前端Toast提示,都体现了开发团队对用户体验的深度思考。

通过合理的配置选项、智能的通知策略和持续的功能迭代,BiliTools确保用户能够在享受强大下载功能的同时,获得恰到好处的状态反馈,真正实现了"设置即忘,完成即知"的理想使用体验。

立即体验BiliTools的智能通知系统,让下载管理变得更加轻松高效!

【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持视频、音乐、番剧、课程下载……持续更新 【免费下载链接】BiliTools 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值