@@ -12,83 +12,77 @@ export function request(options: http.HttpRequestOptions): promises.Promise<http
1212
1313 try {
1414
15- var isImage = options . url . match ( / \. ( j p e g | j p g | g i f | p n g ) $ / i) != null ;
16-
1715 var context = require ( "application" ) . android . context ;
1816
19- if ( isImage && options . method && options . method . toLowerCase ( ) == "get" ) {
20- var request = com . koushikdutta . ion . Ion . with ( context , options . url ) ;
21- request . asBitmap ( ) . setCallback ( new com . koushikdutta . async . future . FutureCallback ( {
22- onCompleted : function ( error , data ) {
23- if ( error ) {
24- d . reject ( new Error ( error . toString ( ) ) ) ;
25- } else {
26- d . resolve ( {
27- content : {
28- raw : data ,
29- toString : ( ) => { return null } ,
30- toJSON : ( ) => { return null } ,
31- toImage : ( ) => { return require ( "image-source" ) . fromNativeSource ( data ) ; }
32- } ,
33- statusCode : 0 ,
34- headers : { }
35- } ) ;
36- }
37- }
38- } ) ) ;
39- }
40- else {
41- var request = com . koushikdutta . ion . Ion . getDefault ( context ) . configure ( ) . getAsyncHttpRequestFactory ( )
42- . createAsyncHttpRequest ( java . net . URI . create ( options . url ) , options . method , null ) ;
17+ var request = com . koushikdutta . ion . Ion . getDefault ( context ) . configure ( ) . getAsyncHttpRequestFactory ( )
18+ . createAsyncHttpRequest ( java . net . URI . create ( options . url ) , options . method , null ) ;
4319
44- if ( options . headers ) {
45- for ( var key in options . headers ) {
46- request . addHeader ( key , options . headers [ key ] )
47- }
20+ if ( options . headers ) {
21+ for ( var key in options . headers ) {
22+ request . addHeader ( key , options . headers [ key ] )
4823 }
24+ }
4925
50- if ( typeof options . timeout == "number" ) {
51- request . setTimeout ( options . timeout ) ;
52- }
26+ if ( typeof options . timeout == "number" ) {
27+ request . setTimeout ( options . timeout ) ;
28+ }
5329
54- if ( typeof options . content == "string" ) {
55- request . setBody ( new com . koushikdutta . async . http . body . StringBody ( options . content ) ) ;
56- }
57- else {
58- // TODO: How to transfer everything else?
59- }
30+ if ( typeof options . content == "string" ) {
31+ request . setBody ( new com . koushikdutta . async . http . body . StringBody ( options . content ) ) ;
32+ }
33+ else {
34+ // TODO: How to transfer everything else?
35+ }
36+
37+ var callback = new com . koushikdutta . async . http . callback . HttpConnectCallback ( {
38+ onConnectCompleted : function ( error , response ) {
39+ if ( error ) {
40+ d . reject ( new Error ( error . toString ( ) ) ) ;
41+ } else {
42+ var headers = { } ;
43+ var rawHeaders = response . getHeaders ( ) . headers ;
44+
45+ for ( var i = 0 , l = rawHeaders . length ( ) ; i < l ; i ++ ) {
46+ var key = rawHeaders . getFieldName ( i ) ;
47+ headers [ key ] = rawHeaders . getValue ( i ) ;
48+ }
49+
50+ var outputStream = new java . io . ByteArrayOutputStream ( ) ;
6051
61- var StringCallback = com . koushikdutta . async . http . AsyncHttpClient . StringCallback . extends ( {
62- onCompleted : function ( error , response , result ) {
63- if ( error ) {
64- d . reject ( new Error ( error . toString ( ) ) ) ;
65- } else {
66- var headers = { } ;
67- var rawHeaders = response . getHeaders ( ) . headers ;
52+ var dataCallback = new com . koushikdutta . async . callback . DataCallback ( {
53+ onDataAvailable : function ( emitter , byteBufferList ) {
54+ var bb = byteBufferList . getAll ( ) ;
55+ outputStream . write ( bb . array ( ) , bb . arrayOffset ( ) + bb . position ( ) , bb . remaining ( ) ) ;
56+ }
57+ } ) ;
6858
69- for ( var i = 0 , l = rawHeaders . length ( ) ; i < l ; i ++ ) {
70- var key = rawHeaders . getFieldName ( i ) ;
71- headers [ key ] = rawHeaders . getValue ( i ) ;
59+ response . setDataCallback ( dataCallback ) ;
60+
61+ var endCallback = new com . koushikdutta . async . callback . CompletedCallback ( {
62+ onCompleted : function ( error ) {
63+ d . resolve ( {
64+ content : {
65+ raw : response ,
66+ toString : ( ) => { return outputStream . toString ( ) ; } ,
67+ toJSON : ( ) => { return JSON . parse ( outputStream . toString ( ) ) ; } ,
68+ toImage : ( ) => {
69+ var bytes = outputStream . toByteArray ( ) ;
70+ var bitmap = android . graphics . BitmapFactory . decodeByteArray ( bytes , 0 , bytes . length ) ;
71+ return require ( "image-source" ) . fromNativeSource ( bitmap ) ;
72+ }
73+ } ,
74+ statusCode : rawHeaders . getResponseCode ( ) ,
75+ headers : headers
76+ } ) ;
7277 }
78+ } ) ;
7379
74- d . resolve ( {
75- content : {
76- raw : result ,
77- toString : ( ) => { return result } ,
78- toJSON : ( ) => { return JSON . parse ( result ) } ,
79- toImage : ( ) => {
80- return null ;
81- }
82- } ,
83- statusCode : rawHeaders . getResponseCode ( ) ,
84- headers : headers
85- } ) ;
86- }
80+ response . setEndCallback ( endCallback ) ;
8781 }
88- } ) ;
82+ }
83+ } ) ;
8984
90- com . koushikdutta . async . http . AsyncHttpClient . getDefaultInstance ( ) . execute ( request , new StringCallback ( ) ) ;
91- }
85+ com . koushikdutta . async . http . AsyncHttpClient . getDefaultInstance ( ) . execute ( request , callback ) ;
9286
9387 } catch ( ex ) {
9488 d . reject ( ex ) ;
0 commit comments