Browse Source

new class

Marino Faggiana 6 years ago
parent
commit
d1ffb1fb1d
2 changed files with 84 additions and 58 deletions
  1. 1 57
      iOSClient/Main/CCDetail.m
  2. 83 1
      iOSClient/Viewer/NCViewerDocumentWeb.swift

+ 1 - 57
iOSClient/Main/CCDetail.m

@@ -302,63 +302,7 @@
         safeAreaBottom = [UIApplication sharedApplication].delegate.window.safeAreaInsets.bottom;
     }
     
-    if ([CCUtility fileProviderStorageExists:self.metadataDetail.fileID fileNameView:self.metadataDetail.fileNameView] == NO) {
-        
-        [self.navigationController popViewControllerAnimated:YES];
-        return;
-    }
-    
-    NSString *fileNamePath = [NSTemporaryDirectory() stringByAppendingString:self.metadataDetail.fileNameView];
-    
-    [[NSFileManager defaultManager] removeItemAtPath:fileNamePath error:nil];
-    [[NSFileManager defaultManager] linkItemAtPath:[CCUtility getDirectoryProviderStorageFileID:self.metadataDetail.fileID fileNameView:self.metadataDetail.fileNameView] toPath:fileNamePath error:nil];
-    
-    NSURL *url = [NSURL fileURLWithPath:fileNamePath];
-
-    WKPreferences *wkPreferences = [[WKPreferences alloc] init];
-    wkPreferences.javaScriptEnabled = true;
-    WKWebViewConfiguration *wkConfig = [[WKWebViewConfiguration alloc] init];
-    wkConfig.preferences = wkPreferences;
-    
-    self.webView = [[WKWebView alloc] initWithFrame:(CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - TOOLBAR_HEIGHT - safeAreaBottom)) configuration:wkConfig];
-    self.webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
-
-    [self.webView setBackgroundColor:[NCBrandColor sharedInstance].backgroundView];
-    [self.webView setOpaque:NO];
-    
-    if ( [fileNameExtension isEqualToString:@"CSS"] || [fileNameExtension isEqualToString:@"PY"] || [fileNameExtension isEqualToString:@"XML"] || [fileNameExtension isEqualToString:@"JS"] ) {
-        
-        NSString *dataFile = [[NSString alloc] initWithData:[NSData dataWithContentsOfURL:url] encoding:NSASCIIStringEncoding];
-        
-        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
-            [self.webView  loadHTMLString:[NSString stringWithFormat:@"<div style='font-size:%@;font-family:%@;'><pre>%@",@"40",@"Sans-Serif",dataFile] baseURL:nil];
-        }else{
-            [self.webView  loadHTMLString:[NSString stringWithFormat:@"<div style='font-size:%@;font-family:%@;'><pre>%@",@"20",@"Sans-Serif",dataFile] baseURL:nil];
-        }
-        
-    } else if ([CCUtility isDocumentModifiableExtension:fileNameExtension]) {
-        
-        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
-        NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:nil delegateQueue:nil];
-        
-        NSMutableURLRequest *headRequest = [NSMutableURLRequest requestWithURL:url];
-        [headRequest setHTTPMethod:@"HEAD"];
-        
-        NSURLSessionDataTask *task = [session dataTaskWithRequest:headRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                NSString *encodingName = [[NCUchardet sharedNUCharDet] encodingStringDetectWithData:data];
-                [self.webView loadData:[NSData dataWithContentsOfURL: url] MIMEType:response.MIMEType characterEncodingName:encodingName baseURL:url];
-            });
-        }];
-        
-        [task resume];
-        
-    } else {
-        
-        [self.webView loadRequest:[NSMutableURLRequest requestWithURL:url]];
-    }
-    
-    [self.view addSubview:self.webView];
+    [[NCViewerDocumentWeb sharedInstance] viewDocumentWebAt:self.metadataDetail viewDetail:self width:self.view.bounds.size.width height:self.view.bounds.size.height - TOOLBAR_HEIGHT - safeAreaBottom];
 }
 
 #pragma --------------------------------------------------------------------------------------------

+ 83 - 1
iOSClient/Viewer/NCViewerDocumentWeb.swift

@@ -30,6 +30,88 @@ class NCViewerDocumentWeb: NSObject {
         return instance
     }()
     
-    var viewDetail: CCDetail!
     let appDelegate = UIApplication.shared.delegate as! AppDelegate
+    
+    @objc func viewDocumentWebAt(_ metadata: tableMetadata, viewDetail: CCDetail, width: Int, height: Int) {
+        
+        if !CCUtility.fileProviderStorageExists(metadata.fileID, fileNameView: metadata.fileNameView) {
+            viewDetail.navigationController?.popViewController(animated: true)
+            return
+        }
+        
+        let fileNamePath = NSTemporaryDirectory() + metadata.fileNameView
+        let fileNameExtension = (metadata.fileNameView as NSString).pathExtension.uppercased()
+
+        do {
+            try FileManager.default.removeItem(atPath:fileNamePath)
+        } catch { }
+        
+        do {
+            try FileManager.default.linkItem(atPath: CCUtility.getDirectoryProviderStorageFileID(metadata.fileID, fileNameView: metadata.fileNameView), toPath: fileNamePath)
+        } catch {
+            print("error")
+            return
+        }
+        
+        let url = URL.init(fileURLWithPath: fileNamePath)
+
+        let preferences = WKPreferences()
+        let configuration = WKWebViewConfiguration()
+
+        preferences.javaScriptEnabled = true
+        configuration.preferences = preferences
+        
+        let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: width, height: height), configuration: configuration)
+        webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
+        webView.backgroundColor = NCBrandColor.sharedInstance.backgroundView
+        webView.isOpaque = false
+        
+        if fileNameExtension == "CSS" || fileNameExtension == "PY" || fileNameExtension == "XML" || fileNameExtension == "JS" {
+            
+            do {
+                let dataFile = try String(contentsOf: url, encoding: String.Encoding(rawValue: String.Encoding.ascii.rawValue))
+                
+                if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.phone {
+                    webView.loadHTMLString("<div style='font-size:40;font-family:Sans-Serif;'><pre>" + dataFile, baseURL: nil)
+                } else {
+                    webView.loadHTMLString("<div style='font-size:20;font-family:Sans-Serif;'><pre>" + dataFile, baseURL: nil)
+                }
+                
+            } catch {
+                print("error")
+            }
+            
+        } else if CCUtility.isDocumentModifiableExtension(fileNameExtension) {
+            
+            let session = URLSession(configuration: URLSessionConfiguration.default)
+            var request = URLRequest(url: url)
+            request.httpMethod = "HEAD"
+            
+            let task = session.dataTask(with: request) { (data, response, error) in
+                
+                guard let data = data else {
+                    return
+                }
+                guard let response = response else {
+                    return
+                }
+                
+                DispatchQueue.main.async {
+                    
+                    guard let encodingName = NCUchardet.sharedNUCharDet()?.encodingStringDetect(with: data) else {
+                        return
+                    }
+                    webView.load(data, mimeType: response.mimeType!, characterEncodingName: encodingName, baseURL: url)
+                }
+            }
+            
+            task.resume()
+            
+        } else {
+            
+            webView.load(URLRequest(url: url))
+        }
+        
+        viewDetail.view.addSubview(webView)
+    }
 }