@@ -26,16 +26,20 @@ namespace PolyToolkitInternal.api_clients.poly_client {
26
26
/// Parses the response of a List Assets request from Poly into a PolyListResult.
27
27
/// </summary>
28
28
public class ParseAssetsBackgroundWork : BackgroundWork {
29
- private string response ;
29
+ private byte [ ] response ;
30
30
private PolyStatus status ;
31
31
private Action < PolyStatus , PolyListAssetsResult > callback ;
32
32
private PolyListAssetsResult polyListAssetsResult ;
33
- public ParseAssetsBackgroundWork ( string response , Action < PolyStatus , PolyListAssetsResult > callback ) {
33
+ public ParseAssetsBackgroundWork ( byte [ ] response , Action < PolyStatus , PolyListAssetsResult > callback ) {
34
34
this . response = response ;
35
35
this . callback = callback ;
36
36
}
37
37
public void BackgroundWork ( ) {
38
- status = PolyClient . ParseReturnedAssets ( response , out polyListAssetsResult ) ;
38
+ JObject result ;
39
+ status = PolyClient . ParseResponse ( response , out result ) ;
40
+ if ( status . ok ) {
41
+ status = PolyClient . ParseReturnedAssets ( Encoding . UTF8 . GetString ( response ) , out polyListAssetsResult ) ;
42
+ }
39
43
}
40
44
public void PostWork ( ) {
41
45
callback ( status , polyListAssetsResult ) ;
@@ -45,16 +49,20 @@ public void PostWork() {
45
49
/// Parses an asset from Poly into a PolyAsset.
46
50
/// </summary>
47
51
public class ParseAssetBackgroundWork : BackgroundWork {
48
- private string response ;
52
+ private byte [ ] response ;
49
53
private Action < PolyStatus , PolyAsset > callback ;
50
54
private PolyStatus status ;
51
55
private PolyAsset polyAsset ;
52
- public ParseAssetBackgroundWork ( string response , Action < PolyStatus , PolyAsset > callback ) {
56
+ public ParseAssetBackgroundWork ( byte [ ] response , Action < PolyStatus , PolyAsset > callback ) {
53
57
this . response = response ;
54
58
this . callback = callback ;
55
59
}
56
60
public void BackgroundWork ( ) {
57
- status = PolyClient . ParseAsset ( JObject . Parse ( response ) , out polyAsset ) ;
61
+ JObject result ;
62
+ status = PolyClient . ParseResponse ( response , out result ) ;
63
+ if ( status . ok ) {
64
+ status = PolyClient . ParseAsset ( result , out polyAsset ) ;
65
+ }
58
66
}
59
67
public void PostWork ( ) {
60
68
callback ( status , polyAsset ) ;
@@ -386,37 +394,12 @@ public void SendRequest(PolyRequest request, Action<PolyStatus, PolyListAssetsRe
386
394
} ) ;
387
395
}
388
396
} else {
389
- string text = Encoding . UTF8 . GetString ( response ) ;
390
- PolyStatus responseStatus = CheckResponseForError ( text ) ;
391
- if ( ! responseStatus . ok ) {
392
- callback ( responseStatus , null ) ;
393
- return ;
394
- }
395
397
PolyMainInternal . Instance . DoBackgroundWork ( new ParseAssetsBackgroundWork (
396
- text , callback ) ) ;
398
+ response , callback ) ) ;
397
399
}
398
400
} , maxCacheAge ) ;
399
401
}
400
402
401
- /// <summary>
402
- /// Verify if the response can be parsed as json and, if so, that it contains no error token.
403
- /// If either conditions are false return a PolyStatusError with relevant information.
404
- /// </summary>
405
- private PolyStatus CheckResponseForError ( string response ) {
406
- JObject results = new JObject ( ) ;
407
- try {
408
- results = JObject . Parse ( response ) ;
409
- } catch ( Exception ex ) {
410
- return PolyStatus . Error ( "Failed to parse Poly API response, encountered exception: {0}" , ex . Message ) ;
411
- }
412
- IJEnumerable < JToken > error = results [ "error" ] . AsJEnumerable ( ) ;
413
- if ( error == null ) {
414
- return PolyStatus . Success ( ) ;
415
- }
416
- return PolyStatus . Error ( "{0}: {1}" , error [ "code" ] != null ? error [ "code" ] . ToString ( ) : "(no error code)" ,
417
- error [ "message" ] != null ? error [ "message" ] . ToString ( ) : "(no error message)" ) ;
418
- }
419
-
420
403
/// <summary>
421
404
/// Fetch a specific asset.
422
405
/// </summary>
@@ -450,13 +433,7 @@ public void GetAsset(string assetId, Action<PolyStatus,PolyAsset> callback, bool
450
433
} ) ;
451
434
}
452
435
} else {
453
- string text = Encoding . UTF8 . GetString ( response ) ;
454
- PolyStatus responseStatus = CheckResponseForError ( text ) ;
455
- if ( ! responseStatus . ok ) {
456
- callback ( responseStatus , null ) ;
457
- return ;
458
- }
459
- PolyMainInternal . Instance . DoBackgroundWork ( new ParseAssetBackgroundWork ( text ,
436
+ PolyMainInternal . Instance . DoBackgroundWork ( new ParseAssetBackgroundWork ( response ,
460
437
callback ) ) ;
461
438
}
462
439
} , DEFAULT_QUERY_CACHE_MAX_AGE_MILLIS ) ;
@@ -475,5 +452,23 @@ public UnityWebRequest GetRequest(string path, string contentType) {
475
452
}
476
453
return request ;
477
454
}
455
+
456
+ public static PolyStatus ParseResponse ( byte [ ] response , out JObject result ) {
457
+ try {
458
+ result = JObject . Parse ( Encoding . UTF8 . GetString ( response ) ) ;
459
+ JToken errorToken = result [ "error" ] ;
460
+ if ( errorToken != null ) {
461
+ IJEnumerable < JToken > error = errorToken . AsJEnumerable ( ) ;
462
+ return PolyStatus . Error ( "{0}: {1}" , error [ "code" ] != null ? error [ "code" ] . ToString ( ) : "(no error code)" ,
463
+ error [ "message" ] != null ? error [ "message" ] . ToString ( ) : "(no error message)" ) ;
464
+ } else {
465
+ return PolyStatus . Success ( ) ;
466
+ }
467
+ } catch ( Exception ex ) {
468
+ result = null ;
469
+ return PolyStatus . Error ( "Failed to parse Poly API response, encountered exception: {0}" , ex . Message ) ;
470
+ }
471
+
472
+ }
478
473
}
479
474
}
0 commit comments