fix(core): M73 r1 —— Windows 壁纸来源改为「当前主题优先」,通配主题包降为末档
复审 p2-1(medium):Win10+ 上 `%APPDATA%\Microsoft\Windows\Themes\` 通常只有 `TranscodedWallpaper`,一个 `.theme` 都没有;当前生效的主题记在 `HKCU\Software\Microsoft\Windows\CurrentVersion\Themes` 的 `CurrentTheme` 值里, 指向 `%LOCALAPPDATA%\Microsoft\Windows\Themes\Custom.theme`。 - 新增第二步 `windows-current-theme`:`reg.exe query ... /v CurrentTheme` → 归一化(含 `%LOCALAPPDATA%` 展开)→ 读该 `.theme` 的 `Wallpaper=`; - `%APPDATA%\...\Themes\*.theme` 通配扫描从「第二步」降为第四步兜底, evidence 如实标注「用户另存的主题包,可能未启用」; - 新顺序:TranscodedWallpaper → CurrentTheme → 注册表 WallPaper → 另存主题包; - `HostRoots` 增加 `local_app_data`(`%LOCALAPPDATA%`,退 `~/AppData/Local`)。 复审 p2-2(low):`transcoded_wallpaper_hit_comes_first` 补一条字面量路径断言, 防止夹具与生产代码用同一构造函数一起拼错。 复审 p2-3(low):`HostIo::run` 现在检查退出码(`!output.status.success()` 也返回 `None`),与四处「非零退出 → 失败」的文案对齐;`io.rs` 补一条夹具用例 (有 stdout 但退出码非零)证明旧行为会被挡掉。 行长:`windows.rs` 371 → 拆出纯解析到 `wallpaper/windows/parse.rs`(100 行), 全部 7 个文件 ≤400 行。真机复跑 `detect()`:第 1 条 transcoded、第 2 条 `windows-current-theme` → `C:\Windows\web\wallpaper\Windows\img0.jpg`(与注册表同源, 去重后只剩一条),`%APPDATA%` 下无主题包的 note 照旧。
This commit is contained in:
1 parent
d3e9a62b21
commit
69d0025d09
5 files changed
+369
-165
No files matched your search
@@ -52,7 +52,14 @@ const IMAGE_HEAD_LEN: usize = 512;
|
||||
pub enum SourceKind {
|
||||
/// Windows:`%APPDATA%\Microsoft\Windows\Themes\TranscodedWallpaper`(系统转码后的当前壁纸)。
|
||||
WindowsTranscoded,
|
||||
/// Windows:`HKCU\Software\Microsoft\Windows\CurrentVersion\Themes` 的 `CurrentTheme`
|
||||
/// 指向的 `.theme`(Win10+ 落在 `%LOCALAPPDATA%\Microsoft\Windows\Themes\Custom.theme`)。
|
||||
///
|
||||
/// 这是**当前生效**的那份主题,比 `%APPDATA%` 下的主题包可靠得多。
|
||||
WindowsCurrentTheme,
|
||||
/// Windows:`%APPDATA%\Microsoft\Windows\Themes\*.theme` 里的 `Wallpaper=` 行。
|
||||
///
|
||||
/// 用户另存的主题包(不一定被启用),只作最后一档兜底。
|
||||
WindowsThemeFile,
|
||||
/// Windows:注册表 `HKCU\Control Panel\Desktop` 的 `WallPaper` 值(`reg.exe` 子进程)。
|
||||
WindowsRegistry,
|
||||
@@ -76,6 +83,7 @@ impl SourceKind {
|
||||
pub const fn as_str(self) -> &'static str {
|
||||
match self {
|
||||
Self::WindowsTranscoded => "windows-transcoded",
|
||||
Self::WindowsCurrentTheme => "windows-current-theme",
|
||||
Self::WindowsThemeFile => "windows-theme-file",
|
||||
Self::WindowsRegistry => "windows-registry",
|
||||
Self::Gnome => "linux-gnome",
|
||||
@@ -91,9 +99,10 @@ impl SourceKind {
|
||||
#[must_use]
|
||||
pub const fn platform(self) -> Platform {
|
||||
match self {
|
||||
Self::WindowsTranscoded | Self::WindowsThemeFile | Self::WindowsRegistry => {
|
||||
Platform::Windows
|
||||
}
|
||||
Self::WindowsTranscoded
|
||||
| Self::WindowsCurrentTheme
|
||||
| Self::WindowsThemeFile
|
||||
| Self::WindowsRegistry => Platform::Windows,
|
||||
Self::MacOsStore | Self::MacOsDesktopDefaults => Platform::MacOs,
|
||||
Self::Gnome | Self::Kde | Self::WlrootsCompositor | Self::Xfce => Platform::Linux,
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user