77using System . IO . Ports ;
88using System . Linq ;
99using System . Net . Http ;
10- using System . Text ;
1110using System . Text . Json ;
1211using System . Text . Json . Serialization ;
1312using System . Threading ;
@@ -61,7 +60,7 @@ public async Task<bool> Initialise()
6160 if ( ! refreshClientResult ) return false ;
6261
6362 var refreshShockersResult = await populateAvailableShockers ( ) ;
64- if ( ! refreshShockersResult ) return false ;
63+ if ( ! refreshShockersResult . IsSuccess ) return false ;
6564
6665 webSocket = new WebSocketClient ( $ "{ broker_endpoint } ?Username={ username } &ApiKey={ apiKey } ", 2000 , 3 ) ;
6766 webSocket . OnWsDisconnected += ( ) => initialised = false ;
@@ -116,7 +115,7 @@ private async Task<bool> authenticateUser()
116115 {
117116 var authResult = await PiShockRequestFactory . AuthenticateUser ( username , apiKey ) ;
118117
119- if ( ! authResult )
118+ if ( ! authResult . IsSuccess )
120119 {
121120 Logger . Error ( authResult . Exception , $ "Error in { nameof ( PiShockProvider ) } ") ;
122121 userId = - 1 ;
@@ -132,7 +131,7 @@ private async Task<bool> populateClientId()
132131 {
133132 var devicesResult = await PiShockRequestFactory . GetUserDevices ( userId , apiKey ) ;
134133
135- if ( ! devicesResult )
134+ if ( ! devicesResult . IsSuccess )
136135 {
137136 Logger . Error ( devicesResult . Exception , $ "Error in { nameof ( PiShockProvider ) } ") ;
138137 clientId = - 1 ;
@@ -144,14 +143,14 @@ private async Task<bool> populateClientId()
144143 return true ;
145144 }
146145
147- private async Task < bool > populateAvailableShockers ( )
146+ private async Task < Result > populateAvailableShockers ( )
148147 {
149148 var shareIDResult = await PiShockRequestFactory . GetShareCodesByOwner ( userId , apiKey ) ;
150149
151- if ( ! shareIDResult )
150+ if ( ! shareIDResult . IsSuccess )
152151 {
153152 Logger . Error ( shareIDResult . Exception , $ "Error in { nameof ( PiShockProvider ) } ") ;
154- return false ;
153+ return shareIDResult . Exception ;
155154 }
156155
157156 var shareIDs = shareIDResult . Value ;
@@ -161,10 +160,10 @@ private async Task<bool> populateAvailableShockers()
161160
162161 var localAvailableShockersResult = await getShockersFromShareIds ( shareIDs . SelectMany ( pair => pair . Value ) ) ;
163162
164- if ( ! localAvailableShockersResult )
163+ if ( ! localAvailableShockersResult . IsSuccess )
165164 {
166165 Logger . Error ( localAvailableShockersResult . Exception , $ "Error in { nameof ( PiShockProvider ) } ") ;
167- return false ;
166+ return localAvailableShockersResult . Exception ;
168167 }
169168
170169 var localAvailableShockers = localAvailableShockersResult . Value ;
@@ -182,7 +181,7 @@ private async Task<Result<PiShockShocker[]>> getShockersFromShareIds(IEnumerable
182181 {
183182 var devicesResult = await PiShockRequestFactory . GetShockersByShareIDs ( userId , apiKey , shareIds ) ;
184183
185- if ( ! devicesResult )
184+ if ( ! devicesResult . IsSuccess )
186185 {
187186 Logger . Error ( devicesResult . Exception , $ "Error in { nameof ( PiShockProvider ) } ") ;
188187 return devicesResult . Exception ;
@@ -347,16 +346,13 @@ public async Task<PiShockResult> ExecuteAsync(IEnumerable<string> shareCodes, Pi
347346 var shareCodeArray = shareCodes . ToArray ( ) ;
348347 var missingShareCodes = shareCodeArray . Where ( code => availableShockers . All ( shocker => shocker . ShareCode != code ) ) . ToArray ( ) ;
349348
350- foreach ( var code in missingShareCodes )
351- {
352- var claimed = await claimShareCode ( code ) ;
353- if ( ! claimed . Success ) return claimed ;
354- }
355-
356349 if ( missingShareCodes . Length != 0 )
357350 {
351+ var claimed = await PiShockRequestFactory . ClaimSharecodes ( username , apiKey , missingShareCodes ) ;
352+ if ( ! claimed . IsSuccess ) return new PiShockResult ( false , claimed . Exception . ToString ( ) ) ;
353+
358354 var refreshResult = await populateAvailableShockers ( ) ;
359- if ( ! refreshResult ) return new PiShockResult ( false , $ "{ nameof ( PiShockProvider ) } cannot execute due to an error when refreshing shockers") ;
355+ if ( ! refreshResult . IsSuccess ) return new PiShockResult ( false , $ "{ nameof ( PiShockProvider ) } cannot execute due to an error when refreshing shockers\n { refreshResult . Exception } ") ;
360356 }
361357
362358 foreach ( var shareCode in shareCodeArray )
@@ -417,58 +413,4 @@ private async Task executeAsync(string channel, IEnumerable<int> shockerIds, PiS
417413
418414 await webSocket ! . SendAsync ( content ) ;
419415 }
420-
421- private async Task < PiShockResult > claimShareCode ( string shareCode )
422- {
423- try
424- {
425- var shocker = await legacyRetrieveShockerInfo ( shareCode ) ;
426- if ( shocker is null ) return new PiShockResult ( false , $ "Shocker for sharecode '{ shareCode } ' does not exist") ;
427-
428- var request = new LegacyPiShockVibrateActionRequest
429- {
430- Duration = "1" ,
431- Intensity = "1" ,
432- AppName = $ "{ AppManager . APP_NAME } -{ username } ",
433- Username = username ,
434- ApiKey = apiKey ,
435- ShareCode = shareCode
436- } ;
437-
438- var response = await httpClient . PostAsync ( "https://ps.pishock.com/pishock/operate" , new StringContent ( JsonSerializer . Serialize ( request , serialiserOptions ) , Encoding . UTF8 , "application/json" ) ) ;
439- response . EnsureSuccessStatusCode ( ) ;
440-
441- var responseString = await response . Content . ReadAsStringAsync ( ) ;
442- return new PiShockResult ( responseString . Contains ( "Succeeded" ) || responseString . Contains ( "Attempted" ) , responseString ) ;
443- }
444- catch ( Exception e )
445- {
446- Logger . Error ( e , $ "{ nameof ( PiShockProvider ) } has experienced an exception when claiming sharecode '{ shareCode } '") ;
447- return new PiShockResult ( false , $ "{ nameof ( PiShockProvider ) } has experienced an exception when claiming sharecode '{ shareCode } '") ;
448- }
449- }
450-
451- private async Task < LegacyPiShockShocker ? > legacyRetrieveShockerInfo ( string shareCode )
452- {
453- try
454- {
455- var request = new LegacyPiShockShockerInfoRequest
456- {
457- Username = username ,
458- ApiKey = apiKey ,
459- ShareCode = shareCode
460- } ;
461-
462- var response = await httpClient . PostAsync ( "https://do.pishock.com/api/GetShockerInfo" , new StringContent ( JsonSerializer . Serialize ( request , serialiserOptions ) , Encoding . UTF8 , "application/json" ) ) ;
463- response . EnsureSuccessStatusCode ( ) ;
464-
465- var responseString = await response . Content . ReadAsStringAsync ( ) ;
466- return JsonSerializer . Deserialize < LegacyPiShockShocker > ( responseString ) ;
467- }
468- catch ( Exception e )
469- {
470- Logger . Error ( e , $ "{ nameof ( PiShockProvider ) } has experienced an exception when retrieving legacy shocker info for sharecode '{ shareCode } '") ;
471- return null ;
472- }
473- }
474416}
0 commit comments