14 KiB
移除视频壁纸功能 - 编码任务清单
任务概览
本文档将技术设计分解为可执行的编码任务,按依赖关系排序执行。
任务 1: 移除项目依赖
优先级: P0 (最高)
依赖: 无
预估工作量: 5 分钟
描述
从项目文件中移除 LibVLC 相关的 NuGet 包引用。
输入
LanMountainDesktop/LanMountainDesktop.csproj
输出
- 修改后的
LanMountainDesktop.csproj,移除以下包引用:LibVLCSharp.AvaloniaVideoLAN.LibVLC.WindowsVideoLAN.LibVLC.Mac
验收标准
- 项目文件中不再包含 LibVLC 相关包引用
- 执行
dotnet restore成功
执行提示
编辑 LanMountainDesktop.csproj,移除以下 PackageReference 节点:
1. <PackageReference Include="LibVLCSharp.Avalonia" Version="3.9.5" />
2. <PackageReference Include="VideoLAN.LibVLC.Windows" ... />
3. <PackageReference Include="VideoLAN.LibVLC.Mac" ... />
任务 2: 移除主窗口 XAML 视频控件
优先级: P0
依赖: 任务 1
预估工作量: 10 分钟
描述
从 MainWindow.axaml 中移除视频壁纸相关的 XAML 控件和命名空间声明。
输入
LanMountainDesktop/Views/MainWindow.axaml
输出
- 移除 LibVLC 命名空间声明
- 移除
DesktopVideoWallpaperImage控件 - 移除
DesktopVideoWallpaperView控件
验收标准
- XAML 中无
xmlns:vlc命名空间 - XAML 中无
DesktopVideoWallpaperImage元素 - XAML 中无
DesktopVideoWallpaperView元素
执行提示
编辑 MainWindow.axaml:
1. 移除第 9 行: xmlns:vlc="clr-namespace:LibVLCSharp.Avalonia;assembly=LibVLCSharp.Avalonia"
2. 移除第 126-131 行: <Image x:Name="DesktopVideoWallpaperImage" ... />
3. 移除第 133-137 行: <vlc:VideoView x:Name="DesktopVideoWallpaperView" ... />
任务 3: 移除主窗口代码视频字段
优先级: P0
依赖: 任务 1
预估工作量: 15 分钟
描述
从 MainWindow.axaml.cs 中移除视频壁纸相关的字段声明。
输入
LanMountainDesktop/Views/MainWindow.axaml.cs
输出
- 移除
SupportedVideoExtensions静态字段 - 移除所有视频相关实例字段
验收标准
- 无
SupportedVideoExtensions字段 - 无
_videoWallpaperPosterBitmap字段 - 无
_videoWallpaperPosterPath字段 - 无
_wallpaperVideoPath字段 - 无
_libVlc字段 - 无
_videoWallpaperPlayer字段 - 无
_videoWallpaperMedia字段 - 无
_desktopVideoFrameSync及相关视频帧处理字段
执行提示
编辑 MainWindow.axaml.cs:
1. 移除第 68-71 行的 SupportedVideoExtensions 定义
2. 移除第 123-146 行的所有视频相关字段
任务 4: 移除主窗口 OnClosed 清理代码
优先级: P0
依赖: 任务 3
预估工作量: 5 分钟
描述
从 MainWindow.axaml.cs 的 OnClosed 方法中移除视频相关清理代码。
输入
LanMountainDesktop/Views/MainWindow.axaml.cs(OnClosed 方法)
输出
- 简化的 OnClosed 方法,无视频清理逻辑
验收标准
- OnClosed 方法中无
StopVideoWallpaper()调用 - OnClosed 方法中无
_videoWallpaperMedia相关清理 - OnClosed 方法中无
_videoWallpaperPlayer相关清理 - OnClosed 方法中无
_libVlc相关清理
执行提示
编辑 MainWindow.axaml.cs 的 OnClosed 方法,移除以下代码行:
- StopVideoWallpaper();
- _videoWallpaperMedia?.Dispose(); _videoWallpaperMedia = null;
- _videoWallpaperPlayer?.Dispose(); _videoWallpaperPlayer = null;
- _desktopVideoFrameRefreshTimer?.Stop(); _desktopVideoFrameRefreshTimer = null;
- _videoWallpaperPosterBitmap?.Dispose(); _videoWallpaperPosterBitmap = null;
- _videoWallpaperPosterPath = null;
- _libVlc?.Dispose(); _libVlc = null;
任务 5: 移除主窗口 Stub 方法
优先级: P0
依赖: 任务 1
预估工作量: 20 分钟
描述
从 MainWindow.SettingsHardCut.Stubs.cs 中移除视频壁纸相关方法和 using 声明。
输入
LanMountainDesktop/Views/MainWindow.SettingsHardCut.Stubs.cs
输出
- 移除 LibVLC using 声明
- 移除
StartVideoWallpaper方法 - 移除
StopVideoWallpaper方法 - 移除
TryCaptureVideoWallpaperPosterFrame方法 - 移除
ApplyVideoWallpaperPosterVisibility方法
验收标准
- 无
using LibVLCSharp.Shared; - 无
using LibVLCSharp.Avalonia; - 无
StartVideoWallpaper方法定义 - 无
StopVideoWallpaper方法定义 - 无
TryCaptureVideoWallpaperPosterFrame方法定义 - 无
ApplyVideoWallpaperPosterVisibility方法定义
执行提示
编辑 MainWindow.SettingsHardCut.Stubs.cs:
1. 移除第 19-20 行的 using 声明
2. 移除 StartVideoWallpaper 方法(第 337-383 行)
3. 移除 StopVideoWallpaper 方法(第 385-395 行)
4. 移除 ApplyVideoWallpaperPosterVisibility 方法(第 647-664 行)
5. 移除 TryCaptureVideoWallpaperPosterFrame 方法(第 666-751 行)
任务 6: 简化壁纸状态处理逻辑
优先级: P0
依赖: 任务 5
预估工作量: 15 分钟
描述
修改 MainWindow.SettingsHardCut.Stubs.cs 中的壁纸状态处理方法,移除视频类型分支。
输入
LanMountainDesktop/Views/MainWindow.SettingsHardCut.Stubs.cs
输出
- 简化的
SetWallpaperState方法 - 简化的
UpdateWallpaperDisplay方法 - 简化的
ApplyWallpaperBrush方法
验收标准
SetWallpaperState中无视频类型检测分支SetWallpaperState中无_wallpaperVideoPath赋值UpdateWallpaperDisplay中无StopVideoWallpaper()调用ApplyWallpaperBrush中无ApplyVideoWallpaperPosterVisibility调用
执行提示
编辑 MainWindow.SettingsHardCut.Stubs.cs:
1. SetWallpaperState 方法:
- 移除 requestedTypeIsVideo 变量定义
- 移除视频类型检测 if 块(SupportedVideoExtensions.Contains 检查)
2. UpdateWallpaperDisplay 方法:
- 移除视频类型分支,仅保留 ApplyWallpaperBrush() 调用
3. ApplyWallpaperBrush 方法:
- 移除所有 ApplyVideoWallpaperPosterVisibility 调用
任务 7: 移除外观主题服务视频提取器
优先级: P1
依赖: 任务 1
预估工作量: 10 分钟
描述
从 AppearanceThemeService.cs 中移除视频壁纸种子提取器接口和实现类。
输入
LanMountainDesktop/Services/AppearanceThemeService.cs
输出
- 移除
IVideoWallpaperSeedExtractor接口 - 移除
LibVlcVideoWallpaperSeedExtractor类
验收标准
- 无
IVideoWallpaperSeedExtractor接口定义 - 无
LibVlcVideoWallpaperSeedExtractor类定义
执行提示
编辑 AppearanceThemeService.cs:
移除第 92-184 行的接口和类定义:
- IVideoWallpaperSeedExtractor 接口
- LibVlcVideoWallpaperSeedExtractor 类
任务 8: 简化壁纸设置页面 XAML
优先级: P1
依赖: 无
预估工作量: 10 分钟
描述
从 WallpaperSettingsPage.axaml 中移除视频预览区域和相关 UI 元素。
输入
LanMountainDesktop/Views/SettingsPages/WallpaperSettingsPage.axaml
输出
- 移除视频预览 Border 区域
- 移除视频模式提示 TextBlock
- 修改填充方式可见性绑定
验收标准
- 无视频预览 Border(IsVisible="{Binding IsVideo}")
- 无 VideoModeHintText 绑定的 TextBlock
- 填充方式设置绑定改为
IsVisible="{Binding IsImage}"
执行提示
编辑 WallpaperSettingsPage.axaml:
1. 移除第 29-44 行的视频预览 Border
2. 移除第 150-154 行的视频模式提示 TextBlock
3. 修改第 132 行: IsVisible="{Binding IsImageOrVideo}" 改为 IsVisible="{Binding IsImage}"
任务 9: 简化壁纸设置 ViewModel
优先级: P1
依赖: 任务 8
预估工作量: 15 分钟
描述
从 WallpaperSettingsPageViewModel.cs 中移除视频相关属性和方法逻辑。
输入
LanMountainDesktop/ViewModels/WallpaperSettingsPageViewModel.cs
输出
- 移除
_isImageOrVideo、_isVideo、_videoModeHintText属性 - 修改
CreateWallpaperTypes方法 - 修改
UpdateVisibility方法 - 修改
RefreshLocalizedText方法
验收标准
- 无
IsImageOrVideo属性 - 无
IsVideo属性 - 无
VideoModeHintText属性 CreateWallpaperTypes仅返回 Image 和 SolidColor 选项UpdateVisibility中无 IsVideo、IsImageOrVideo 赋值RefreshLocalizedText中无 VideoModeHintText 赋值
执行提示
编辑 WallpaperSettingsPageViewModel.cs:
1. 移除第 76-77 行的 _isImageOrVideo 字段和属性
2. 移除第 85-86 行的 _isVideo 字段和属性
3. 移除第 94-95 行的 _videoModeHintText 字段和属性
4. 修改 CreateWallpaperTypes 方法,移除 Video 选项
5. 修改 UpdateVisibility 方法,移除 IsVideo 和 IsImageOrVideo 赋值
6. 修改 RefreshLocalizedText 方法,移除 VideoModeHintText 赋值
任务 10: 简化壁纸媒体类型枚举
优先级: P1
依赖: 无
预估工作量: 5 分钟
描述
从 SettingsContracts.cs 中移除 WallpaperMediaType 枚举的 Video 值。
输入
LanMountainDesktop/Services/Settings/SettingsContracts.cs
输出
- 简化的
WallpaperMediaType枚举
验收标准
WallpaperMediaType枚举仅包含None和Image
执行提示
编辑 SettingsContracts.cs:
修改第 11-16 行的枚举定义:
public enum WallpaperMediaType
{
None,
Image
}
任务 11: 简化壁纸媒体服务
优先级: P1
依赖: 任务 10
预估工作量: 10 分钟
描述
从 SettingsDomainServices.cs 中移除视频扩展名检测逻辑。
输入
LanMountainDesktop/Services/Settings/SettingsDomainServices.cs
输出
- 移除
VideoExtensions字段 - 简化
DetectMediaType方法
验收标准
- 无
VideoExtensions字段定义 DetectMediaType方法中无视频扩展名检测逻辑
执行提示
编辑 SettingsDomainServices.cs:
1. 移除第 150-153 行的 VideoExtensions 字段定义
2. 修改 DetectMediaType 方法,移除视频检测分支
任务 12: 清理本地化文件
优先级: P2
依赖: 无
预估工作量: 5 分钟
描述
从 zh-CN.json 中移除视频壁纸相关的本地化文本。
输入
LanMountainDesktop/Localization/zh-CN.json
输出
- 移除视频相关本地化键
- 修改壁纸描述文本
验收标准
- 无
settings.wallpaper.type.video键 - 无
settings.wallpaper.video_applied键 - 无
settings.wallpaper.video_mode键 - 无
settings.wallpaper.video_restored键 - 无
settings.wallpaper.video_not_found键 - 无
settings.wallpaper.video_player_unavailable键 - 无
settings.wallpaper.video_play_failed_format键 settings.wallpaper.description文本已更新
执行提示
编辑 zh-CN.json:
1. 移除以下键值对:
- "settings.wallpaper.type.video"
- "settings.wallpaper.video_applied"
- "settings.wallpaper.video_mode"
- "settings.wallpaper.video_restored"
- "settings.wallpaper.video_not_found"
- "settings.wallpaper.video_player_unavailable"
- "settings.wallpaper.video_play_failed_format"
2. 修改描述文本:
"settings.wallpaper.description": "选择图片后可立即设为应用窗口壁纸。"
任务 13: 构建验证
优先级: P0
依赖: 任务 1-12 全部完成
预估工作量: 10 分钟
描述
验证项目在移除视频壁纸功能后能够正常构建。
输入
- 整个项目
输出
- 构建成功确认
验收标准
dotnet build执行成功,无编译错误- 无 LibVLC 相关类型未定义错误
- 无未使用变量警告(或已处理)
执行提示
在项目根目录执行:
dotnet build LanMountainDesktop/LanMountainDesktop.csproj
检查输出:
- 确认无编译错误
- 确认无 LibVLC 相关类型引用错误
任务 14: 功能验证
优先级: P0
依赖: 任务 13
预估工作量: 15 分钟
描述
验证应用在移除视频壁纸功能后核心功能正常工作。
输入
- 构建后的应用
输出
- 功能验证报告
验收标准
- 应用正常启动
- 图片壁纸正常显示
- 纯色壁纸正常显示
- 壁纸设置页面正常打开
- 类型选择器仅显示"图片"和"纯色"选项
- 壁纸导入功能正常工作
执行提示
运行应用:
dotnet run --project LanMountainDesktop/LanMountainDesktop.csproj
手动验证:
1. 应用启动无崩溃
2. 打开设置 -> 壁纸页面
3. 确认类型选择器仅有"图片"和"纯色"
4. 测试选择图片壁纸
5. 测试选择纯色壁纸
任务依赖关系图
任务 1 (移除依赖)
├── 任务 2 (XAML控件)
├── 任务 3 (代码字段)
│ └── 任务 4 (OnClosed清理)
├── 任务 5 (Stub方法)
│ └── 任务 6 (状态处理逻辑)
└── 任务 7 (主题服务)
任务 8 (设置页面XAML)
└── 任务 9 (设置ViewModel)
任务 10 (枚举简化)
└── 任务 11 (媒体服务)
任务 12 (本地化) - 独立
任务 13 (构建验证) - 依赖所有任务
└── 任务 14 (功能验证)
执行顺序建议
按以下顺序执行可确保依赖关系正确:
- 第一批 (可并行): 任务 1, 任务 8, 任务 10, 任务 12
- 第二批 (可并行): 任务 2, 任务 3, 任务 5, 任务 7, 任务 9, 任务 11
- 第三批 (可并行): 任务 4, 任务 6
- 第四批: 任务 13
- 第五批: 任务 14