From 67b965c73a1bfa67d894df6bbfd429e9a30e679c Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Thu, 13 Mar 2014 11:43:16 +0200 Subject: [PATCH] web client for iOS --- WebClient/web_client.ios.ts | 40 ++++++++++++++++++++++++++----------- declarations.ios.d.ts | 20 +++++++++++++++++++ 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/WebClient/web_client.ios.ts b/WebClient/web_client.ios.ts index e307cdb54..e1e94887f 100644 --- a/WebClient/web_client.ios.ts +++ b/WebClient/web_client.ios.ts @@ -1,5 +1,4 @@ import image_module = require("Image/image"); -// TODO: Not implemented for iOS export module tk { export module web { @@ -11,25 +10,42 @@ export module tk { * Downloads string from url. */ public downloadString(url: string, successCallback: (result: string) => void, errorCallback?: (e: Error) => void) { - try { + Client.getDataFromUrl(url, function (data) { if (successCallback) { - // successCallback(result); + successCallback(Foundation.NSString.initWithDataEncoding(data, 4)); } - } catch (ex) { - - if (errorCallback) { - errorCallback(ex); - } - } + }, errorCallback); } public downloadImage(url: string, successCallback: (image: image_module.tk.ui.Image) => void, errorCallback?: (e: Error) => void) { - try { + Client.getDataFromUrl(url, function (data) { if (successCallback) { - // successCallback(response); + var image = new image_module.tk.ui.Image(); + image.loadFromData(data); + successCallback(image); } - } catch (ex) { + }, errorCallback); + } + private static getDataFromUrl(url: string, successCallback: (result: any) => void, errorCallback?: (e: Error) => void) + { + try { + var sessionConfig = Foundation.NSURLSessionConfiguration.defaultSessionConfiguration(); + var queue = Foundation.NSOperationQueue.mainQueue(); + var session = Foundation.NSURLSession.sessionWithConfigurationDelegateDelegateQueue(sessionConfig, null, queue); + var dataTask = session.dataTaskWithURLCompletionHandler(Foundation.NSURL.URLWithString(url), function (data, response, error) { + if (error) { + if (errorCallback) { + errorCallback(error.description); + } + } else if (successCallback) { + successCallback(data); + } + }); + + dataTask.resume(); + session.finishTasksAndInvalidate(); + } catch (ex) { if (errorCallback) { errorCallback(ex); } diff --git a/declarations.ios.d.ts b/declarations.ios.d.ts index 1a5eb69d4..be1dfe23f 100644 --- a/declarations.ios.d.ts +++ b/declarations.ios.d.ts @@ -58,4 +58,24 @@ declare module Foundation { static defaultManager(): NSFileManager; URLsForDirectoryInDomains(directory: number, mask: number): any; } + + export class NSString { + static initWithDataEncoding(data: any, encoding: any) : any; + } + + export class NSURLSessionConfiguration { + static defaultSessionConfiguration(): any; + } + + export class NSOperationQueue { + static mainQueue(): any; + } + + export class NSURLSession { + static sessionWithConfigurationDelegateDelegateQueue(config: any, param: any, queue : any): any; + } + + export class NSURL { + static URLWithString(url : string): any; + } }