From 164bd077b8496fc709555703d146f71fcb2ad8b1 Mon Sep 17 00:00:00 2001 From: Zhe Fang Date: Tue, 30 Dec 2025 14:30:10 -0500 Subject: [PATCH] fix: app crash when audio device was not found --- .../Package.appxmanifest | 2 +- .../Hooks/SystemVolumeHook.cs | 18 +++++++++++++----- .../Models/FileCacheEntity.cs | 10 +++------- .../Models/PlayHistoryItem.cs | 1 + 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest b/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest index a5d005e..e2120c0 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest @@ -12,7 +12,7 @@ + Version="1.2.222.0" /> diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Hooks/SystemVolumeHook.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Hooks/SystemVolumeHook.cs index b4914ff..22df5ed 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Hooks/SystemVolumeHook.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Hooks/SystemVolumeHook.cs @@ -17,12 +17,20 @@ namespace BetterLyrics.WinUI3.Hooks static SystemVolumeHook() { - _deviceEnumerator = new MMDeviceEnumerator(); - _defaultDevice = _deviceEnumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia); - - if (_defaultDevice != null) + try { - _defaultDevice.AudioEndpointVolume.OnVolumeNotification += AudioEndpointVolume_OnVolumeNotification; + _deviceEnumerator = new MMDeviceEnumerator(); + // 找不到设备会抛出异常,在这里截获它 + _defaultDevice = _deviceEnumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia); + + if (_defaultDevice != null) + { + _defaultDevice.AudioEndpointVolume.OnVolumeNotification += AudioEndpointVolume_OnVolumeNotification; + } + } + catch (Exception ex) + { + _defaultDevice = null; } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/FileCacheEntity.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/FileCacheEntity.cs index ab17f36..8eb93ca 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/FileCacheEntity.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/FileCacheEntity.cs @@ -3,27 +3,24 @@ using System; namespace BetterLyrics.WinUI3.Models { + [Preserve(AllMembers = true)] [Table("FileCache")] public class FileCacheEntity { [PrimaryKey, AutoIncrement] public int Id { get; set; } - // 【新增】关键字段! // 关联到 MediaFolder.Id。 - // 作用: - // 1. 区分不同配置(即使两个配置连的是同一个 SMB,但在 APP 里视为不同源)。 - // 2. 删除配置时,可以由 MediaFolderId 快速级联删除所有缓存。 + // 区分不同配置(即使两个配置连的是同一个 SMB,但在 APP 里视为不同源)。 + // 删除配置时,可以由 MediaFolderId 快速级联删除所有缓存。 [Indexed] public string MediaFolderId { get; set; } - // 【修改】从 ParentPath 改为 ParentUri // 存储父文件夹的标准 URI (smb://host/share/parent) // 根目录文件的 ParentUri 可以为空,或者等于 MediaFolder 的 Base Uri [Indexed] public string? ParentUri { get; set; } - // 【核心】标准化的完整 URI (smb://host/share/folder/file.ext) // 确保它是 URL 编码过且格式统一的 [Indexed(Unique = true)] public string Uri { get; set; } @@ -38,7 +35,6 @@ namespace BetterLyrics.WinUI3.Models // 记录修改时间,同步时对比使用 public DateTime? LastModified { get; set; } - // ------ 元数据部分 (保持不变) ------ public string Title { get; set; } = ""; public string Artists { get; set; } = ""; public string Album { get; set; } = ""; diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/PlayHistoryItem.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/PlayHistoryItem.cs index 9d643fa..21dc4df 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/PlayHistoryItem.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/PlayHistoryItem.cs @@ -5,6 +5,7 @@ using System.Text; namespace BetterLyrics.WinUI3.Models { + [Preserve(AllMembers = true)] [Table("PlayHistory")] public class PlayHistoryItem {