Browse Source

add new func in networking: downloadContentsOfUrl

marinofaggiana 5 years ago
parent
commit
ddb6748303

+ 17 - 13
iOSClient/Networking/NCService.swift

@@ -83,14 +83,16 @@ class NCService: NSObject {
                         let backgroundURL = capabilities!.themingBackground!.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)!
                         let fileNamePath = CCUtility.getDirectoryUserData() + "/" + CCUtility.getStringUser(self.appDelegate.activeUser, activeUrl: self.appDelegate.activeUrl) + "-themingBackground.png"
                         
-                        if let imageData = try? Data(contentsOf: URL(string: backgroundURL)!) {
-                            if let image = UIImage(data: imageData) {
-                                try? FileManager.default.removeItem(atPath: fileNamePath)
-                                if let data = image.pngData() {
-                                    try? data.write(to: URL(fileURLWithPath: fileNamePath))
+                        OCNetworking.sharedManager()?.downloadContents(ofUrl: backgroundURL, completion: { (data, message, errorCode) in
+                            if errorCode == 0 {
+                                if let image = UIImage(data: data!) {
+                                    try? FileManager.default.removeItem(atPath: fileNamePath)
+                                    if let data = image.pngData() {
+                                        try? data.write(to: URL(fileURLWithPath: fileNamePath))
+                                    }
                                 }
                             }
-                        }
+                        })
                         
                         DispatchQueue.main.async {
                             self.appDelegate.settingThemingColorBrand()
@@ -250,17 +252,19 @@ class NCService: NSObject {
                 
                 DispatchQueue.global().async {
                     
-                    let address = "\(self.appDelegate.activeUrl!)/index.php/avatar/\(self.appDelegate.activeUser!)/128".addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)!
+                    let avatarUrl = "\(self.appDelegate.activeUrl!)/index.php/avatar/\(self.appDelegate.activeUser!)/128".addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)!
                     let fileNamePath = CCUtility.getDirectoryUserData() + "/" + CCUtility.getStringUser(user, activeUrl: url) + "-" + self.appDelegate.activeUser + ".png"
                     
-                    if let imageData = try? Data(contentsOf: URL(string: address)!) {
-                        if let image = UIImage(data: imageData) {
-                            try? FileManager.default.removeItem(atPath: fileNamePath)
-                            if let data = image.pngData() {
-                                try? data.write(to: URL(fileURLWithPath: fileNamePath))
+                    OCNetworking.sharedManager()?.downloadContents(ofUrl: avatarUrl, completion: { (data, message, errorCode) in
+                        if errorCode == 0 {
+                            if let image = UIImage(data: data!) {
+                                try? FileManager.default.removeItem(atPath: fileNamePath)
+                                if let data = image.pngData() {
+                                    try? data.write(to: URL(fileURLWithPath: fileNamePath))
+                                }
                             }
                         }
-                    }
+                    })
                     
                     DispatchQueue.main.async {
                         NotificationCenter.default.post(name: NSNotification.Name(rawValue: "changeUserProfile"), object: nil)

+ 1 - 0
iOSClient/Networking/OCNetworking.h

@@ -38,6 +38,7 @@
 
 - (void)checkServerUrl:(NSString *)serverUrl user:(NSString *)user userID:(NSString *)userID password:(NSString *)password completion:(void (^)(NSString *message, NSInteger errorCode))completion;
 - (void)serverStatusUrl:(NSString *)serverUrl completion:(void(^)(NSString *serverProductName, NSInteger versionMajor, NSInteger versionMicro, NSInteger versionMinor, NSString *message, NSInteger errorCode))completion;
+- (void)downloadContentsOfUrl:(NSString *)serverUrl completion:(void(^)(NSData *data, NSString *message, NSInteger errorCode))completion;
 
 #pragma mark ===== Download / Upload =====
 

+ 50 - 0
iOSClient/Networking/OCNetworking.m

@@ -250,6 +250,56 @@
     [task resume];
 }
 
+- (void)downloadContentsOfUrl:(NSString *)serverUrl completion:(void(^)(NSData *data, NSString *message, NSInteger errorCode))completion
+{
+    // Remove stored cookies
+    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
+    for (NSHTTPCookie *cookie in [storage cookies])
+    {
+        [storage deleteCookie:cookie];
+    }
+    
+    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:serverUrl] cachePolicy:0 timeoutInterval:20.0];
+    [request addValue:[CCUtility getUserAgent] forHTTPHeaderField:@"User-Agent"];
+    [request addValue:@"true" forHTTPHeaderField:@"OCS-APIRequest"];
+    
+    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
+    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
+    
+    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) {
+        
+        dispatch_sync(dispatch_get_main_queue(), ^{
+            
+            if (error) {
+                
+                NSString *message;
+                NSInteger errorCode;
+                
+                NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
+                errorCode = httpResponse.statusCode;
+                
+                if (errorCode == 0 || (errorCode >= 200 && errorCode < 300))
+                    errorCode = error.code;
+                
+                // Error
+                if (errorCode == 503)
+                    message = NSLocalizedString(@"_server_error_retry_", nil);
+                else
+                    message = [error.userInfo valueForKey:@"NSLocalizedDescription"];
+                
+                completion(nil, message, errorCode);
+                
+            } else {
+            
+                completion(data, nil, 0);
+            }
+        });
+        
+    }];
+    
+    [task resume];
+}
+
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark ===== download / upload =====
 #pragma --------------------------------------------------------------------------------------------

+ 51 - 56
iOSClient/Utility/NCUtility.swift

@@ -190,68 +190,63 @@ class NCUtility: NSObject {
         
         if !FileManager.default.fileExists(atPath: imageNamePath) || rewrite == true {
             
-            guard let imageData = try? Data(contentsOf:iconURL) else {
-                return closure(nil)
-            }
-            
-            if let image = UIImage.init(data: imageData) {
+            OCNetworking.sharedManager()?.downloadContents(ofUrl: iconURL.absoluteString, completion: { (data, message, errorCode) in
                 
-                var newImage: UIImage = image
+                if errorCode == 0 && data != nil {
                 
-                if width != nil {
-                    
-                    let ratio = image.size.height / image.size.width
-                    let newSize = CGSize(width: width!, height: width! * ratio)
-                    
-                    let renderFormat = UIGraphicsImageRendererFormat.default()
-                    renderFormat.opaque = false
-                    let renderer = UIGraphicsImageRenderer(size: CGSize(width: newSize.width, height: newSize.height), format: renderFormat)
-                    newImage = renderer.image {
-                        (context) in
-                        image.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
-                    }
-                }
-                
-                guard let pngImageData = newImage.pngData() else {
-                    return closure(nil)
-                }
-                
-                CCUtility.write(pngImageData, fileNamePath: imageNamePath)
-                
-            } else {
-                
-                let task = URLSession(configuration: .default).dataTask(with: iconURL) { (data, response, error) in
-                    guard error == nil,  response != nil, data != nil else {
-                        return closure(nil)
-                    }
-                    
-                    guard let svgImage: SVGKImage = SVGKImage(data: data) else {
-                        return closure(nil)
-                    }
-                    
-                    if width != nil {
-                        let scale = svgImage.size.height / svgImage.size.width
-                        svgImage.size = CGSize(width: width!, height: width! * scale)
-                    }
-                    
-                    guard let image: UIImage = svgImage.uiImage else {
-                        return closure(nil)
-                    }
-                    guard let pngImageData = image.pngData() else {
-                        return closure(nil)
-                    }
-                    
-                    CCUtility.write(pngImageData, fileNamePath: imageNamePath)
-                    
-                    DispatchQueue.main.async {
+                    if let image = UIImage.init(data: data!) {
+                        
+                        var newImage: UIImage = image
+                        
+                        if width != nil {
+                            
+                            let ratio = image.size.height / image.size.width
+                            let newSize = CGSize(width: width!, height: width! * ratio)
+                            
+                            let renderFormat = UIGraphicsImageRendererFormat.default()
+                            renderFormat.opaque = false
+                            let renderer = UIGraphicsImageRenderer(size: CGSize(width: newSize.width, height: newSize.height), format: renderFormat)
+                            newImage = renderer.image {
+                                (context) in
+                                image.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
+                            }
+                        }
+                        
+                        guard let pngImageData = newImage.pngData() else {
+                            return closure(nil)
+                        }
+                        
+                        CCUtility.write(pngImageData, fileNamePath: imageNamePath)
+                        
+                        return closure(imageNamePath)
+                        
+                    } else {
+                        
+                        guard let svgImage: SVGKImage = SVGKImage(data: data) else {
+                            return closure(nil)
+                        }
+                            
+                        if width != nil {
+                            let scale = svgImage.size.height / svgImage.size.width
+                            svgImage.size = CGSize(width: width!, height: width! * scale)
+                        }
+                            
+                        guard let image: UIImage = svgImage.uiImage else {
+                            return closure(nil)
+                        }
+                        guard let pngImageData = image.pngData() else {
+                            return closure(nil)
+                        }
+                            
+                        CCUtility.write(pngImageData, fileNamePath: imageNamePath)
+                            
                         return closure(imageNamePath)
                     }
+                } else {
+                    return closure(nil)
                 }
-                task.resume()
-            }
+            })
         }
-        
-        return closure(imageNamePath)
     }
     
     @objc func startActivityIndicator(view: UIView, bottom: CGFloat) {