@@ -18,9 +18,6 @@ enum VOLUME {
1818## Limit the maximum volume to 200%
1919const volume_limit := "2.0"
2020
21- ## Thread to run audio changes on
22- var thread := load ("res://core/systems/threading/thread_pool.tres" )
23-
2421## Current volume
2522var current_volume := await _get_current_volume ()
2623var _muted := false
@@ -29,7 +26,6 @@ var _current_output := ""
2926
3027
3128func _init () -> void :
32- thread .start ()
3329 current_volume = await _get_current_volume ()
3430 _output_devices = await _get_output_devices ()
3531
@@ -80,8 +76,11 @@ func set_volume(value: float, type: VOLUME = VOLUME.ABSOLUTE) -> int:
8076 suffix = "%+"
8177
8278 var percent := value * 100
83- var args := ["set-volume" , "--limit" , volume_limit , "@DEFAULT_AUDIO_SINK@" , str (percent ) + suffix ]
84- var code := await thread .exec (OS .execute .bind ("wpctl" , args )) as int
79+ var args : Array [String ] = ["set-volume" , "--limit" , volume_limit , "@DEFAULT_AUDIO_SINK@" , str (percent ) + suffix ]
80+ var cmd := Command .create ("wpctl" , args )
81+ cmd .timeout = 5.0
82+ cmd .execute ()
83+ var code := await cmd .finished as int
8584
8685 return code
8786
@@ -90,7 +89,10 @@ func set_volume(value: float, type: VOLUME = VOLUME.ABSOLUTE) -> int:
9089func toggle_mute () -> int :
9190 _muted = ! _muted
9291 volume_mute_toggled .emit ()
93- var code := await thread .exec (OS .execute .bind ("wpctl" , ["set-mute" , "@DEFAULT_AUDIO_SINK@" , "toggle" ])) as int
92+ var cmd := Command .create ("wpctl" , ["set-mute" , "@DEFAULT_AUDIO_SINK@" , "toggle" ])
93+ cmd .timeout = 5.0
94+ cmd .execute ()
95+ var code := await cmd .finished as int
9496 return code
9597
9698
@@ -116,7 +118,11 @@ func set_output_device(device: String) -> int:
116118 var i := devices .find (device )
117119 var device_id := ids [i ]
118120
119- return await thread .exec (OS .execute .bind ("wpctl" , ["set-default" , device_id ]))
121+ var cmd := Command .create ("wpctl" , ["set-default" , device_id ])
122+ cmd .timeout = 5.0
123+ cmd .execute ()
124+
125+ return await cmd .finished as int
120126
121127
122128## Returns the currently set output device
@@ -135,16 +141,16 @@ func get_current_volume() -> float:
135141
136142## Fetch the volume for the current output device
137143func _get_current_volume () -> float :
138- var output := []
139- var code := await thread . exec ( OS . execute . bind ( "wpctl" , [ "get-volume" , "@DEFAULT_AUDIO_SINK@" ], output )) as int
140- if code != 0 :
141- return - 1
142- if output . size () == 0 :
144+ var cmd := Command . create ( "wpctl" , [ "get-volume" , "@DEFAULT_AUDIO_SINK@" ])
145+ cmd . timeout = 5.0
146+ cmd . execute ()
147+ var code := await cmd . finished as int
148+ if code != OK :
143149 return - 1
144150
145151 # Parse the output of wpctl
146152 # Example: Volume: 0.52
147- var text := output [ 0 ] as String
153+ var text := cmd . stdout
148154 var parts := text .split (" " )
149155 if parts .size () < 2 :
150156 return - 1
@@ -178,28 +184,26 @@ func _get_output_devices() -> PackedStringArray:
178184
179185# Inspects the given wirepipe object
180186func _wpctl_inspect (id : String ) -> PackedStringArray :
181- var out := PackedStringArray ()
182- var output := []
183- var code := await thread .exec (OS .execute .bind ("wpctl" , ["inspect" , id ], output )) as int
184- if code != 0 :
185- return out
186- if output .size () == 0 :
187- return out
188- var text := output [0 ] as String
189- return text .split ("\n " )
187+ var cmd := Command .create ("wpctl" , ["inspect" , id ])
188+ cmd .timeout = 5.0
189+ cmd .execute ()
190+ var code := await cmd .finished as int
191+ if code != OK :
192+ return PackedStringArray ()
193+ return cmd .stdout .split ("\n " )
190194
191195
192196# Returns an array of discovered Wirepipe object IDs
193197func _get_wpctl_object_ids () -> PackedStringArray :
194198 var ids := PackedStringArray ()
195199
196- var output := []
197- var code := await thread . exec ( OS . execute . bind ( "wpctl" , [ "status" ], output )) as int
198- if code != 0 :
199- return ids
200- if output . size () == 0 :
200+ var cmd := Command . create ( "wpctl" , [ "status" ])
201+ cmd . timeout = 5.0
202+ cmd . execute ()
203+ var code := await cmd . finished as int
204+ if code != OK :
201205 return ids
202- var text := output [ 0 ] as String
206+ var text := cmd . stdout
203207 var parts := text .split (" " )
204208 if parts .size () < 2 :
205209 return ids
0 commit comments