55package soundutils
66
77import (
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
3841const (
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+
4755func 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+
6295func 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
96145func 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
102160func GetThemeSoundFile (theme , event string ) string {
0 commit comments