From 0af3a67778e6242cdea86d9b74d419f7c9996569 Mon Sep 17 00:00:00 2001 From: zhangkun Date: Thu, 11 Sep 2025 16:41:23 +0800 Subject: [PATCH] feat: migrate from gsettings to dconfig for sound settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Replaced gio.Settings with dconfig (ConfigManager) for reading sound settings 2. Added dconfig manager creation function with proper error handling 3. Updated schema IDs and key names to match dconfig structure 4. Added logging support for better debugging 5. Maintained backward compatibility with default values when dconfig is unavailable feat: 从 gsettings 迁移到 dconfig 用于声音设置 1. 使用 dconfig (ConfigManager) 替代 gio.Settings 读取声音设置 2. 添加了 dconfig 管理器创建函数并包含错误处理 3. 更新了 schema ID 和键名以匹配 dconfig 结构 4. 添加了日志支持以便更好地调试 5. 在 dconfig 不可用时保持向后兼容性并提供默认值 pms: TASK-381277 --- soundutils/soundplayer.go | 82 +++++++++++++++++++++++++++++++++------ 1 file changed, 70 insertions(+), 12 deletions(-) diff --git a/soundutils/soundplayer.go b/soundutils/soundplayer.go index 928a360..097d0dd 100644 --- a/soundutils/soundplayer.go +++ b/soundutils/soundplayer.go @@ -5,9 +5,12 @@ package soundutils import ( + "errors" "sync" - gio "github.com/linuxdeepin/go-gir/gio-2.0" + "github.com/godbus/dbus/v5" + configManager "github.com/linuxdeepin/go-dbus-factory/org.desktopspec.ConfigManager" + "github.com/linuxdeepin/go-lib/log" "github.com/linuxdeepin/go-lib/sound_effect" "github.com/linuxdeepin/go-lib/strv" ) @@ -36,14 +39,19 @@ const ( ) const ( - soundEffectSchema = "com.deepin.dde.sound-effect" - appearanceSchema = "com.deepin.dde.appearance" - keySoundTheme = "sound-theme" + dconfigDaemonAppId = "org.deepin.dde.daemon" + dconfigSoundEffectId = "org.deepin.dde.daemon.soundeffect" + dconfigAppearanceAppId = "org.deepin.dde.appearance" + dconfigAppearanceId = dconfigAppearanceAppId + + keySoundTheme = "Sound_Theme" keyEnabled = "enabled" keyPlayer = "player" defaultSoundTheme = "deepin" ) +var logger = log.NewLogger("soundplayer") + func PlaySystemSound(event, device string) error { return PlayThemeSound(GetSoundTheme(), event, device) } @@ -59,6 +67,31 @@ func initPlayer() { }) } +// TODO: 后续此部分dconfig逻辑封装成库到go-lib中 +func makeDConfigManager(appID string, id string) (configManager.Manager, error) { + bus, err := dbus.SystemBus() + if err != nil { + return nil, errors.New("bus cannot be nil") + } + dsMgr := configManager.NewConfigManager(bus) + + if dsMgr == nil { + return nil, errors.New("dsManager cannot be nil") + } + + dsPath, err := dsMgr.AcquireManager(0, appID, id, "") + if err != nil { + logger.Warning(err) + } + + dconfigMgr, err := configManager.NewManager(bus, dsPath) + if err != nil { + logger.Warning(err) + return nil, err + } + return dconfigMgr, nil +} + func PlayThemeSound(theme, event, device string) error { if theme == "" { theme = defaultSoundTheme @@ -77,26 +110,51 @@ func CanPlayEvent(event string) bool { return false } - settings := gio.NewSettings(soundEffectSchema) - defer settings.Unref() + soundeffectDconfig, err := makeDConfigManager(dconfigDaemonAppId, dconfigSoundEffectId) + if err != nil { + logger.Warning(err) + return false + } + + soundeffectEnabledValue, err := soundeffectDconfig.Value(0, keyEnabled) + + if err != nil { + logger.Warning(err) + return false + } // check main switch - if !settings.GetBoolean(keyEnabled) { + if !soundeffectEnabledValue.Value().(bool) { return false } - keys := strv.Strv(settings.ListKeys()) + keyList, _ := soundeffectDconfig.KeyList().Get(0) + + keys := strv.Strv(keyList) if keys.Contains(event) { // has key - return settings.GetBoolean(event) + soundEnabled, err := soundeffectDconfig.Value(0, event) + if err != nil { + return false + } + return soundEnabled.Value().(bool) } return true } func GetSoundTheme() string { - s := gio.NewSettings(appearanceSchema) - defer s.Unref() - return s.GetString(keySoundTheme) + appeearanceDconfig, err := makeDConfigManager(dconfigAppearanceAppId, dconfigAppearanceId) + if err != nil { + logger.Warning(err) + return defaultSoundTheme + } + + soundeffectEnabledValue, err := appeearanceDconfig.Value(0, keySoundTheme) + if err != nil { + logger.Warning(err) + return defaultSoundTheme + } + return soundeffectEnabledValue.Value().(string) } func GetThemeSoundFile(theme, event string) string {