@@ -354,6 +354,31 @@ public static AccessToken LoadAccessToken()
354
354
return tokenString == null ? null : JsonConvert . DeserializeObject < AccessToken > ( SettingsService . Instance . AccessTokenString ) ;
355
355
}
356
356
357
+
358
+ /// <summary>
359
+ /// Creates and initializes API client
360
+ /// </summary>
361
+ private static void CreateClient ( )
362
+ {
363
+ //Unregister old handlers
364
+ if ( _client != null )
365
+ {
366
+ _client . CheckChallengeReceived -= _client_CheckChallengeReceived ;
367
+ }
368
+
369
+ _client = new Client ( _clientSettings , null , DeviceInfos . Current ) ;
370
+
371
+ //Register EventHandlers
372
+ _client . CheckChallengeReceived += _client_CheckChallengeReceived ;
373
+
374
+ var apiFailureStrategy = new ApiFailureStrategy ( _client ) ;
375
+ _client . ApiFailure = apiFailureStrategy ;
376
+ // Register to AccessTokenChanged
377
+ apiFailureStrategy . OnAccessTokenUpdated += ( s , e ) => SaveAccessToken ( ) ;
378
+
379
+ }
380
+
381
+
357
382
/// <summary>
358
383
/// Sets things up if we didn't come from the login page
359
384
/// </summary>
@@ -374,12 +399,8 @@ public static async Task InitializeClient()
374
399
GooglePassword = SettingsService . Instance . LastLoginService == AuthType . Google ? credentials . Password : null ,
375
400
} ;
376
401
377
- _client = new Client ( _clientSettings , null , DeviceInfos . Current ) { AccessToken = LoadAccessToken ( ) } ;
378
- var apiFailureStrategy = new ApiFailureStrategy ( _client ) ;
379
- _client . ApiFailure = apiFailureStrategy ;
380
- // Register to AccessTokenChanged
381
- apiFailureStrategy . OnAccessTokenUpdated += ( s , e ) => SaveAccessToken ( ) ;
382
- apiFailureStrategy . OnFailureToggleUpdateTimer += ToggleUpdateTimer ;
402
+ CreateClient ( ) ;
403
+
383
404
try
384
405
{
385
406
await _client . Login . DoLogin ( ) ;
@@ -413,11 +434,9 @@ public static async Task<bool> DoPtcLogin(string username, string password)
413
434
PtcPassword = password ,
414
435
AuthType = AuthType . Ptc
415
436
} ;
416
- _client = new Client ( _clientSettings , null , DeviceInfos . Current ) ;
417
- var apiFailureStrategy = new ApiFailureStrategy ( _client ) ;
418
- _client . ApiFailure = apiFailureStrategy ;
419
- // Register to AccessTokenChanged
420
- apiFailureStrategy . OnAccessTokenUpdated += ( s , e ) => SaveAccessToken ( ) ;
437
+
438
+ CreateClient ( ) ;
439
+
421
440
// Get PTC token
422
441
await _client . Login . DoLogin ( ) ;
423
442
// Update current token even if it's null and clear the token for the other identity provide
@@ -431,6 +450,7 @@ public static async Task<bool> DoPtcLogin(string username, string password)
431
450
return true ;
432
451
}
433
452
453
+
434
454
/// <summary>
435
455
/// Starts a Google session for the given user
436
456
/// </summary>
@@ -446,11 +466,8 @@ public static async Task<bool> DoGoogleLogin(string email, string password)
446
466
AuthType = AuthType . Google
447
467
} ;
448
468
449
- _client = new Client ( _clientSettings , null , DeviceInfos . Current ) ;
450
- var apiFailureStrategy = new ApiFailureStrategy ( _client ) ;
451
- _client . ApiFailure = apiFailureStrategy ;
452
- // Register to AccessTokenChanged
453
- apiFailureStrategy . OnAccessTokenUpdated += ( s , e ) => SaveAccessToken ( ) ;
469
+ CreateClient ( ) ;
470
+
454
471
// Get Google token
455
472
await _client . Login . DoLogin ( ) ;
456
473
// Update current token even if it's null and clear the token for the other identity provide
@@ -551,7 +568,30 @@ public static async Task InitializeDataUpdate()
551
568
Busy . SetBusy ( false ) ;
552
569
}
553
570
554
- private static async void LocationHelperPropertyChanged ( object sender , PropertyChangedEventArgs e )
571
+ private static async void _client_CheckChallengeReceived ( object sender , CheckChallengeResponse e )
572
+ {
573
+
574
+ if ( e . ShowChallenge && ! String . IsNullOrWhiteSpace ( e . ChallengeUrl ) && e . ChallengeUrl . Length > 5 )
575
+ {
576
+ // Captcha is shown in checkChallengeResponse.ChallengeUrl
577
+ Logger . Write ( $ "ChallengeURL: { e . ChallengeUrl } ") ;
578
+ // breakpoint here to manually resolve Captcha in a browser
579
+ // after that set token to str variable from browser (see screenshot)
580
+ Logger . Write ( "Pause" ) ;
581
+
582
+ //GOTO THE REQUIRED PAGE
583
+ if ( BootStrapper . Current . NavigationService . CurrentPageType != typeof ( ChallengePage ) )
584
+ {
585
+ await DispatcherHelper . RunInDispatcherAndAwait ( ( ) =>
586
+ {
587
+ // We are not in UI thread probably, so run this via dispatcher
588
+ BootStrapper . Current . NavigationService . Navigate ( typeof ( ChallengePage ) , e . ChallengeUrl ) ;
589
+ } ) ;
590
+ }
591
+ }
592
+
593
+ }
594
+ private static async void LocationHelperPropertyChanged ( object sender , PropertyChangedEventArgs e )
555
595
{
556
596
if ( e . PropertyName == nameof ( LocationServiceHelper . Instance . Geoposition ) )
557
597
{
@@ -628,25 +668,8 @@ private static async Task UpdateMapObjects()
628
668
LuredPokemons . UpdateByIndexWith ( newLuredPokemon , x => x ) ;
629
669
Logger . Write ( "Finished updating map objects" ) ;
630
670
631
- // check if Captcha pending
632
- var checkChallengeResponse = await CheckChallenge ( ) ;
633
- //var token = "";
634
- if ( checkChallengeResponse . ShowChallenge )
635
- {
636
- // Captcha is shown in checkChallengeResponse.ChallengeUrl
637
- Logger . Write ( $ "ChallengeURL: { checkChallengeResponse . ChallengeUrl } ") ;
638
- // breakpoint here to manually resolve Captcha in a browser
639
- // after that set token to str variable from browser (see screenshot)
640
- Logger . Write ( $ "Pause") ;
641
-
642
- //GOTO THE REQUIRED PAGE
643
- BootStrapper . Current . NavigationService . Navigate ( typeof ( ChallengePage ) , checkChallengeResponse . ChallengeUrl ) ;
644
-
645
- //await VerifyChallenge(token);
646
- }
647
-
648
671
// Update Hatched Eggs
649
- var hatchedEggResponse = mapObjects . Item2 ;
672
+ var hatchedEggResponse = mapObjects . Item3 ;
650
673
if ( hatchedEggResponse . Success )
651
674
{
652
675
//OnEggHatched?.Invoke(null, hatchedEggResponse);
@@ -693,22 +716,12 @@ private static async
693
716
Task
694
717
<
695
718
Tuple
696
- < GetMapObjectsResponse , GetHatchedEggsResponse , GetInventoryResponse , CheckAwardedBadgesResponse ,
719
+ < GetMapObjectsResponse , CheckChallengeResponse , GetHatchedEggsResponse , GetInventoryResponse , CheckAwardedBadgesResponse ,
697
720
DownloadSettingsResponse > > GetMapObjects ( Geoposition geoposition )
698
721
{
699
722
_lastGeopositionMapObjectsRequest = geoposition ;
700
723
return await _client . Map . GetMapObjects ( ) ;
701
724
}
702
-
703
- private static async Task < CheckChallengeResponse > CheckChallenge ( )
704
- {
705
- return await _client . Misc . CheckChallenge ( ) ;
706
- }
707
-
708
- private static async Task < VerifyChallengeResponse > VerifyChallenge ( string token )
709
- {
710
- return await _client . Misc . VerifyChallenge ( token ) ;
711
- }
712
725
713
726
#endregion
714
727
@@ -1118,6 +1131,23 @@ public static EggIncubator GetIncubatorFromEgg(PokemonData egg)
1118
1131
return IncubatorsInventory . FirstOrDefault ( item => item . Id == null ? false : item . Id . Equals ( egg . EggIncubatorId ) ) ;
1119
1132
}
1120
1133
1134
+ #endregion
1135
+
1136
+
1137
+ #region Misc
1138
+
1139
+
1140
+ /// <summary>
1141
+ /// Verifies challenge
1142
+ /// </summary>
1143
+ /// <param name="token"></param>
1144
+ /// <returns></returns>
1145
+ public static async Task < VerifyChallengeResponse > VerifyChallenge ( string token )
1146
+ {
1147
+ return await _client . Misc . VerifyChallenge ( token ) ;
1148
+ }
1149
+
1150
+
1121
1151
#endregion
1122
1152
1123
1153
#endregion
0 commit comments