Skip to content

Commit 824f8f3

Browse files
committed
feat: migrate from gsettings to dconfig for sound settings
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
1 parent f7ee629 commit 824f8f3

File tree

1 file changed

+70
-12
lines changed

1 file changed

+70
-12
lines changed

soundutils/soundplayer.go

Lines changed: 70 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
package soundutils
66

77
import (
8+
"errors"
89
"sync"
910

10-
gio "github.com/linuxdeepin/go-gir/gio-2.0"
11+
"github.com/godbus/dbus/v5"
12+
configManager "github.com/linuxdeepin/go-dbus-factory/org.desktopspec.ConfigManager"
13+
"github.com/linuxdeepin/go-lib/log"
1114
"github.com/linuxdeepin/go-lib/sound_effect"
1215
"github.com/linuxdeepin/go-lib/strv"
1316
)
@@ -36,14 +39,19 @@ const (
3639
)
3740

3841
const (
39-
soundEffectSchema = "com.deepin.dde.sound-effect"
40-
appearanceSchema = "com.deepin.dde.appearance"
41-
keySoundTheme = "sound-theme"
42+
dconfigDaemonAppId = "org.deepin.dde.daemon"
43+
dconfigSoundEffectId = "org.deepin.dde.daemon.soundeffect"
44+
dconfigAppearanceAppId = "org.deepin.dde.appearance"
45+
dconfigAppearanceId = dconfigAppearanceAppId
46+
47+
keySoundTheme = "Sound_Theme"
4248
keyEnabled = "enabled"
4349
keyPlayer = "player"
4450
defaultSoundTheme = "deepin"
4551
)
4652

53+
var logger = log.NewLogger("soundplayer")
54+
4755
func PlaySystemSound(event, device string) error {
4856
return PlayThemeSound(GetSoundTheme(), event, device)
4957
}
@@ -59,6 +67,31 @@ func initPlayer() {
5967
})
6068
}
6169

70+
// TODO: 后续此部分dconfig逻辑封装成库到go-lib中
71+
func makeDConfigManager(appID string, id string) (configManager.Manager, error) {
72+
bus, err := dbus.SystemBus()
73+
if err != nil {
74+
return nil, errors.New("bus cannot be nil")
75+
}
76+
dsMgr := configManager.NewConfigManager(bus)
77+
78+
if dsMgr == nil {
79+
return nil, errors.New("dsManager cannot be nil")
80+
}
81+
82+
dsPath, err := dsMgr.AcquireManager(0, appID, id, "")
83+
if err != nil {
84+
logger.Warning(err)
85+
}
86+
87+
dconfigMgr, err := configManager.NewManager(bus, dsPath)
88+
if err != nil {
89+
logger.Warning(err)
90+
return nil, err
91+
}
92+
return dconfigMgr, nil
93+
}
94+
6295
func PlayThemeSound(theme, event, device string) error {
6396
if theme == "" {
6497
theme = defaultSoundTheme
@@ -77,26 +110,51 @@ func CanPlayEvent(event string) bool {
77110
return false
78111
}
79112

80-
settings := gio.NewSettings(soundEffectSchema)
81-
defer settings.Unref()
113+
soundeffectDconfig, err := makeDConfigManager(dconfigDaemonAppId, dconfigSoundEffectId)
114+
if err != nil {
115+
logger.Warning(err)
116+
return false
117+
}
118+
119+
soundeffectEnabledValue, err := soundeffectDconfig.Value(0, keyEnabled)
120+
121+
if err != nil {
122+
logger.Warning(err)
123+
return false
124+
}
82125

83126
// check main switch
84-
if !settings.GetBoolean(keyEnabled) {
127+
if !soundeffectEnabledValue.Value().(bool) {
85128
return false
86129
}
87130

88-
keys := strv.Strv(settings.ListKeys())
131+
keyList, _ := soundeffectDconfig.KeyList().Get(0)
132+
133+
keys := strv.Strv(keyList)
89134
if keys.Contains(event) {
90135
// has key
91-
return settings.GetBoolean(event)
136+
soundEnabled, err := soundeffectDconfig.Value(0, event)
137+
if err != nil {
138+
return false
139+
}
140+
return soundEnabled.Value().(bool)
92141
}
93142
return true
94143
}
95144

96145
func GetSoundTheme() string {
97-
s := gio.NewSettings(appearanceSchema)
98-
defer s.Unref()
99-
return s.GetString(keySoundTheme)
146+
appeearanceDconfig, err := makeDConfigManager(dconfigAppearanceAppId, dconfigAppearanceId)
147+
if err != nil {
148+
logger.Warning(err)
149+
return defaultSoundTheme
150+
}
151+
152+
soundeffectEnabledValue, err := appeearanceDconfig.Value(0, keySoundTheme)
153+
if err != nil {
154+
logger.Warning(err)
155+
return defaultSoundTheme
156+
}
157+
return soundeffectEnabledValue.Value().(string)
100158
}
101159

102160
func GetThemeSoundFile(theme, event string) string {

0 commit comments

Comments
 (0)