@@ -764,16 +764,19 @@ private ListPaginated<T> ReadResponseHeaders<T>(IList<Parameter> headers, ListPa
764
764
765
765
if ( header . Name . ToLower ( ) . Contains ( Constants . X_NUMBER_OF_PAGES . ToLower ( ) ) )
766
766
{
767
- listPaginated . TotalPages = int . Parse ( value ) ; continue ;
767
+ listPaginated . TotalPages = int . Parse ( value ) ;
768
+ continue ;
768
769
}
769
770
770
771
if ( header . Name . ToLower ( ) . Contains ( Constants . X_NUMBER_OF_ITEMS . ToLower ( ) ) )
771
772
{
772
- listPaginated . TotalItems = int . Parse ( value ) ; continue ;
773
+ listPaginated . TotalItems = int . Parse ( value ) ;
774
+ continue ;
773
775
}
774
776
775
777
if ( header . Name . ToLower ( ) . Contains ( Constants . LINK . ToLower ( ) ) )
776
778
{
779
+
777
780
var links = CustomSplit ( value , ',' ) ;
778
781
779
782
if ( links . Count <= 0 ) continue ;
@@ -788,26 +791,63 @@ private ListPaginated<T> ReadResponseHeaders<T>(IList<Parameter> headers, ListPa
788
791
private List < string > CustomSplit ( string input , char delim )
789
792
{
790
793
var list = new List < string > ( ) ;
791
- while ( input . Contains ( delim ) )
794
+ var pos = new List < int > { 0 } ;
795
+
796
+ for ( var i = 0 ; i < input . Length ; i ++ )
792
797
{
793
- var pos = input . IndexOf ( delim ) ;
794
- var add = input . Substring ( 0 , pos ) . Trim ( ) ;
795
- list . Add ( add ) ;
796
- input = input . Substring ( pos + 1 ) ;
798
+ if ( input [ i ] == delim )
799
+ {
800
+ pos . Add ( i + 1 ) ;
801
+ }
797
802
}
798
803
799
- list . Add ( input ) ;
804
+ pos . Add ( input . Length + 1 ) ;
805
+
806
+ for ( var i = 1 ; i < pos . Count ; i ++ )
807
+ {
808
+ var length = pos [ i ] - pos [ i - 1 ] - 1 ;
809
+ var charArray = new char [ length ] ;
810
+ var count = 0 ;
811
+ for ( var j = pos [ i - 1 ] ; j < pos [ i ] - 1 ; j ++ )
812
+ {
813
+ charArray [ count ++ ] = input [ j ] ;
814
+ }
815
+
816
+ list . Add ( new string ( charArray ) ) ;
817
+ }
800
818
801
819
return list ;
802
820
}
803
821
822
+ private string SubstractFromRel ( string rel , char delim )
823
+ {
824
+ var pos = new List < int > ( ) ;
825
+
826
+ for ( var i = 0 ; i < rel . Length ; i ++ )
827
+ {
828
+ if ( rel [ i ] == delim )
829
+ {
830
+ pos . Add ( i + 1 ) ;
831
+ }
832
+ }
833
+
834
+ var length = pos [ 1 ] - pos [ 0 ] - 1 ;
835
+ var charArr = new char [ length ] ;
836
+ var count = 0 ;
837
+ for ( var i = pos [ 0 ] ; i < pos [ 1 ] - 1 ; i ++ )
838
+ {
839
+ charArr [ count ++ ] = rel [ i ] ;
840
+ }
841
+
842
+ return new string ( charArr ) ;
843
+ }
844
+
804
845
private void SetLinksForList < T > ( ListPaginated < T > listPaginated , List < string > links )
805
846
{
806
847
foreach ( var l in links )
807
848
{
808
- var link = RemoveCharactersFromLink ( l ) ;
809
-
810
- var oneLink = CustomSplit ( link , ';' ) ;
849
+ var oneLink = CustomSplit ( l , ';' ) ;
850
+ oneLink [ 1 ] = SubstractFromRel ( oneLink [ 1 ] , '"' ) ;
811
851
812
852
if ( oneLink [ 0 ] != null && oneLink [ 1 ] != null )
813
853
{
@@ -819,17 +859,6 @@ private void SetLinksForList<T>(ListPaginated<T> listPaginated, List<string> lin
819
859
}
820
860
}
821
861
822
- private string RemoveCharactersFromLink ( string input )
823
- {
824
- var link = input ;
825
- link = link . Replace ( "<\" " , "" ) ;
826
- link = link . Replace ( "\" >" , "" ) ;
827
- link = link . Replace ( " rel=\" " , "" ) ;
828
- link = link . Replace ( "\" " , "" ) ;
829
-
830
- return link ;
831
- }
832
-
833
862
/// <summary>Reads and parses response headers (pagination etc.)</summary>
834
863
/// <param name="conn">Response object.</param>
835
864
private ListPaginated < T > ReadResponseHeadersOld < T > ( IRestResponse restResponse , ListPaginated < T > listPaginated = null )
0 commit comments