@@ -2,19 +2,16 @@ use std::rc::Weak;
2
2
use std:: slice;
3
3
use widestring:: U16CString ;
4
4
use windows:: {
5
- core:: { GUID , HRESULT } ,
6
- Win32 :: Foundation :: { BOOL , PWSTR , S_OK } ,
5
+ core:: { implement , Result , GUID } ,
6
+ Win32 :: Foundation :: { BOOL , PWSTR } ,
7
7
Win32 :: Media :: Audio :: {
8
8
AudioSessionDisconnectReason , AudioSessionState , AudioSessionStateActive ,
9
9
AudioSessionStateExpired , AudioSessionStateInactive , DisconnectReasonDeviceRemoval ,
10
10
DisconnectReasonExclusiveModeOverride , DisconnectReasonFormatChanged ,
11
11
DisconnectReasonServerShutdown , DisconnectReasonSessionDisconnected ,
12
- DisconnectReasonSessionLogoff ,
12
+ DisconnectReasonSessionLogoff , IAudioSessionEvents , IAudioSessionEvents_Impl ,
13
13
} ,
14
14
} ;
15
- use windows_macros:: implement;
16
- // Workaround for implement macro
17
- use windows as Windows ;
18
15
19
16
use crate :: SessionState ;
20
17
@@ -128,20 +125,20 @@ pub enum DisconnectReason {
128
125
}
129
126
130
127
/// Wrapper for [IAudioSessionEvents](https://docs.microsoft.com/en-us/windows/win32/api/audiopolicy/nn-audiopolicy-iaudiosessionevents).
131
- #[ implement( Windows :: Win32 :: Media :: Audio :: IAudioSessionEvents ) ]
128
+ #[ implement( IAudioSessionEvents ) ]
132
129
pub ( crate ) struct AudioSessionEvents {
133
130
callbacks : Weak < EventCallbacks > ,
134
131
}
135
132
136
- #[ allow( non_snake_case) ]
137
133
impl AudioSessionEvents {
138
134
/// Create a new AudioSessionEvents instance, returned as a IAudioSessionEvent.
139
- #[ allow( clippy:: new_ret_no_self) ]
140
135
pub fn new ( callbacks : Weak < EventCallbacks > ) -> Self {
141
136
Self { callbacks }
142
137
}
138
+ }
143
139
144
- fn OnStateChanged ( & mut self , newstate : AudioSessionState ) -> HRESULT {
140
+ impl IAudioSessionEvents_Impl for AudioSessionEvents {
141
+ fn OnStateChanged ( & mut self , newstate : AudioSessionState ) -> Result < ( ) > {
145
142
#[ allow( non_upper_case_globals) ]
146
143
let state_name = match newstate {
147
144
AudioSessionStateActive => "Active" ,
@@ -155,17 +152,20 @@ impl AudioSessionEvents {
155
152
AudioSessionStateActive => SessionState :: Active ,
156
153
AudioSessionStateInactive => SessionState :: Inactive ,
157
154
AudioSessionStateExpired => SessionState :: Expired ,
158
- _ => return S_OK ,
155
+ _ => return Ok ( ( ) ) ,
159
156
} ;
160
157
if let Some ( callbacks) = & mut self . callbacks . upgrade ( ) {
161
158
if let Some ( callback) = & callbacks. state {
162
159
callback ( sessionstate) ;
163
160
}
164
161
}
165
- S_OK
162
+ Ok ( ( ) )
166
163
}
167
164
168
- fn OnSessionDisconnected ( & mut self , disconnectreason : AudioSessionDisconnectReason ) -> HRESULT {
165
+ fn OnSessionDisconnected (
166
+ & mut self ,
167
+ disconnectreason : AudioSessionDisconnectReason ,
168
+ ) -> Result < ( ) > {
169
169
trace ! ( "Disconnected" ) ;
170
170
#[ allow( non_upper_case_globals) ]
171
171
let reason = match disconnectreason {
@@ -183,14 +183,14 @@ impl AudioSessionEvents {
183
183
callback ( reason) ;
184
184
}
185
185
}
186
- S_OK
186
+ Ok ( ( ) )
187
187
}
188
188
189
189
fn OnDisplayNameChanged (
190
190
& mut self ,
191
191
newdisplayname : PWSTR ,
192
192
eventcontext : * const GUID ,
193
- ) -> HRESULT {
193
+ ) -> Result < ( ) > {
194
194
let wide_name = unsafe { U16CString :: from_ptr_str ( newdisplayname. 0 ) } ;
195
195
let name = wide_name. to_string_lossy ( ) ;
196
196
trace ! ( "New display name: {}" , name) ;
@@ -200,10 +200,10 @@ impl AudioSessionEvents {
200
200
callback ( name, context) ;
201
201
}
202
202
}
203
- S_OK
203
+ Ok ( ( ) )
204
204
}
205
205
206
- fn OnIconPathChanged ( & mut self , newiconpath : PWSTR , eventcontext : * const GUID ) -> HRESULT {
206
+ fn OnIconPathChanged ( & mut self , newiconpath : PWSTR , eventcontext : * const GUID ) -> Result < ( ) > {
207
207
let wide_path = unsafe { U16CString :: from_ptr_str ( newiconpath. 0 ) } ;
208
208
let path = wide_path. to_string_lossy ( ) ;
209
209
trace ! ( "New icon path: {}" , path) ;
@@ -213,23 +213,23 @@ impl AudioSessionEvents {
213
213
callback ( path, context) ;
214
214
}
215
215
}
216
- S_OK
216
+ Ok ( ( ) )
217
217
}
218
218
219
219
fn OnSimpleVolumeChanged (
220
220
& mut self ,
221
221
newvolume : f32 ,
222
222
newmute : BOOL ,
223
223
eventcontext : * const GUID ,
224
- ) -> HRESULT {
224
+ ) -> Result < ( ) > {
225
225
trace ! ( "New volume: {}, mute: {:?}" , newvolume, newmute) ;
226
226
if let Some ( callbacks) = & mut self . callbacks . upgrade ( ) {
227
227
if let Some ( callback) = & callbacks. simple_volume {
228
228
let context = unsafe { * eventcontext } ;
229
229
callback ( newvolume, bool:: from ( newmute) , context) ;
230
230
}
231
231
}
232
- S_OK
232
+ Ok ( ( ) )
233
233
}
234
234
235
235
fn OnChannelVolumeChanged (
@@ -238,7 +238,7 @@ impl AudioSessionEvents {
238
238
newchannelvolumearray : * const f32 ,
239
239
changedchannel : u32 ,
240
240
eventcontext : * const GUID ,
241
- ) -> HRESULT {
241
+ ) -> Result < ( ) > {
242
242
trace ! ( "New channel volume for channel: {}" , changedchannel) ;
243
243
let volslice =
244
244
unsafe { slice:: from_raw_parts ( newchannelvolumearray, channelcount as usize ) } ;
@@ -249,14 +249,14 @@ impl AudioSessionEvents {
249
249
callback ( changedchannel as usize , newvol, context) ;
250
250
}
251
251
}
252
- S_OK
252
+ Ok ( ( ) )
253
253
}
254
254
255
255
fn OnGroupingParamChanged (
256
256
& mut self ,
257
257
newgroupingparam : * const GUID ,
258
258
eventcontext : * const GUID ,
259
- ) -> HRESULT {
259
+ ) -> Result < ( ) > {
260
260
trace ! ( "Grouping changed" ) ;
261
261
if let Some ( callbacks) = & mut self . callbacks . upgrade ( ) {
262
262
if let Some ( callback) = & callbacks. groupingparam {
@@ -265,6 +265,6 @@ impl AudioSessionEvents {
265
265
callback ( grouping, context) ;
266
266
}
267
267
}
268
- S_OK
268
+ Ok ( ( ) )
269
269
}
270
270
}
0 commit comments