tauri-plugin-deeprespond-im 1.0.0-alpha

深应智能 IM 的 Tauri 插件:本地存储、安全存储、窗口间的锁与消息、系统事件、通知、角标、文件
//! Windows:任务栏按钮的叠加图标(Tauri 的 set_overlay_icon,即 ITaskbarList3::SetOverlayIcon)。
//! 叠加图标属于每个窗口:作用于全部界面窗口;没有任务栏按钮的窗口(skip_taskbar)设置了也没有效果,不必区分。
//! 引擎窗口不在任务栏中,全部界面窗口都关闭时 Windows 上没有角标,只能靠托盘图标。

use tauri::image::Image;
use tauri::{AppHandle, Manager, Runtime};

use crate::hub::ENGINE_LABEL;

/// only 给出时只设置这一个窗口(它刚获得焦点,可能是新建的)。
pub(super) fn apply<R: Runtime>(app: &AppHandle<R>, count: Option<u64>, only: Option<&str>) {
    let icon = count.map(|c| Image::new_owned(super::icon::render(c), super::icon::SIZE, super::icon::SIZE));
    for (label, window) in app.webview_windows() {
        if label == ENGINE_LABEL || only.is_some_and(|l| l != label) {
            continue;
        }
        if let Err(err) = window.set_overlay_icon(icon.clone()) {
            log::debug!("窗口 {label} 的叠加图标设置失败:{err}");
        }
    }
}