From ebb593a4325a6149d2f52664ef137a0b6012dd5d Mon Sep 17 00:00:00 2001 From: Azuma Kasumi Date: Mon, 26 Dec 2022 14:41:16 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B7=BB=E4=BB=98=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=82=92=E5=88=A5=E3=82=A2=E3=83=97=E3=83=AA?= =?UTF-8?q?=E3=81=B8=E5=85=B1=E6=9C=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AgileWorks/WebView/View/WebViewController.swift | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 1fced29..6f67a88 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -594,6 +594,15 @@ extension WebViewController: WKNavigationDelegate { } DispatchQueue.main.async {[self] in self.subWebView.loadFileURL(tempPath, allowingReadAccessTo: tempPath) + let activityViewController = UIActivityViewController(activityItems: [tempPath], applicationActivities: nil) + activityViewController.completionWithItemsHandler = { _, _, _, _ in + do { + try FileManager.default.removeItem(at: tempPath) + } catch { + log.e(error) + } + } + self.present(activityViewController, animated: true, completion: nil) } }.resume() } -- GitLab From 79985e5be9a80a093edb29dc9713086dba7d7135 Mon Sep 17 00:00:00 2001 From: Azuma Kasumi Date: Thu, 5 Jan 2023 11:09:08 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=E5=85=B1=E6=9C=89=E5=85=88=E3=81=AB?= =?UTF-8?q?=E5=BF=9C=E3=81=98=E3=81=A6=E5=88=A5=E3=82=A2=E3=83=97=E3=83=AA?= =?UTF-8?q?=E3=82=92=E8=B5=B7=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebView/View/WebViewController.swift | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 6f67a88..0e10f13 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -593,9 +593,32 @@ extension WebViewController: WKNavigationDelegate { return } DispatchQueue.main.async {[self] in - self.subWebView.loadFileURL(tempPath, allowingReadAccessTo: tempPath) let activityViewController = UIActivityViewController(activityItems: [tempPath], applicationActivities: nil) - activityViewController.completionWithItemsHandler = { _, _, _, _ in + activityViewController.completionWithItemsHandler = { (activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, activityError: Error?) in + closeTapped() + + guard completed else { + return + } + var url = URL(string: "") + //ActivityTypeで動作を分ける場合は以下に追加 + switch activityType { + case UIActivity.ActivityType.saveToCameraRoll: + url = URL(string: "photos-redirect://") + default: + break + } + + //「ファイルに保存」だけActivityTypeに存在しないため文字列でチェック + if activityType!.rawValue.contains("com.apple.DocumentManagerUICore.SaveToFiles"){ + url = URL(string: "shareddocuments://") + } + + //該当するアプリを開く + if url != nil { + UIApplication.shared.open(url!) + } + do { try FileManager.default.removeItem(at: tempPath) } catch { -- GitLab From b30f318859e544d9c9b543f556db76281513b391 Mon Sep 17 00:00:00 2001 From: Azuma Kasumi Date: Thu, 12 Jan 2023 16:07:52 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89=20?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=90=8D=E3=81=AE=E6=96=87?= =?UTF-8?q?=E5=AD=97=E5=8C=96=E3=81=91=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebView/View/WebViewController.swift | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 0e10f13..ec376e7 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -499,7 +499,6 @@ extension WebViewController: WKNavigationDelegate { guard let response = navigationResponse.response as? HTTPURLResponse, let contentDisposition = response.allHeaderFields["Content-Disposition"] as? String else { return nil } - print(response.allHeaderFields) if let (fileNameStar: fileNameStar, fileName: fileName) = getAttachmentFileName(contentDisposition: contentDisposition) { if let name = fileNameStar, let decoded = parseFilenameStar(name) { return decoded @@ -579,14 +578,29 @@ extension WebViewController: WKNavigationDelegate { private func download(url: URL, saveAs fileName: String) { var request = downloadRequest(url: url) - let tempPath: URL = FileManager.default.temporaryDirectory.appendingPathComponent(fileName) - Session.shared.dataTask(with: request) { data, _, err in + var file = fileName + var tempPath: URL = FileManager.default.temporaryDirectory.appendingPathComponent(file) + Session.shared.dataTask(with: request) { data, res, err in guard let data = data, err == nil else { log.e(err) return } do { + guard let response = res as? HTTPURLResponse + else { return } + var contentDisposition = response.allHeaderFields["Content-Disposition"] as? String + + if contentDisposition != nil { + if let (fileNameStar: fileNameStar, fileName: fileName) = self.getAttachmentFileName(contentDisposition: contentDisposition!.removingPercentEncoding!) { + if let name = fileNameStar, let decoded = self.parseFilenameStar(name) { + file = decoded + } else if let name = fileName { + file = self.parseFilename(name) + } + tempPath = FileManager.default.temporaryDirectory.appendingPathComponent(file) + } + } try data.write(to: tempPath, options: .atomic) } catch { log.e(error) @@ -595,7 +609,7 @@ extension WebViewController: WKNavigationDelegate { DispatchQueue.main.async {[self] in let activityViewController = UIActivityViewController(activityItems: [tempPath], applicationActivities: nil) activityViewController.completionWithItemsHandler = { (activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, activityError: Error?) in - closeTapped() + self.closeTapped() guard completed else { return @@ -605,15 +619,14 @@ extension WebViewController: WKNavigationDelegate { switch activityType { case UIActivity.ActivityType.saveToCameraRoll: url = URL(string: "photos-redirect://") + case UIActivity.ActivityType(rawValue: "com.apple.CloudDocsUI.AddToiCloudDrive"): + url = URL(string: "shareddocuments://") + case UIActivity.ActivityType(rawValue: "com.apple.DocumentManagerUICore.SaveToFiles"): + url = URL(string: "shareddocuments://") default: break } - //「ファイルに保存」だけActivityTypeに存在しないため文字列でチェック - if activityType!.rawValue.contains("com.apple.DocumentManagerUICore.SaveToFiles"){ - url = URL(string: "shareddocuments://") - } - //該当するアプリを開く if url != nil { UIApplication.shared.open(url!) -- GitLab From c125ce66f3f0281af973f6d177ab04f67eb07e99 Mon Sep 17 00:00:00 2001 From: Azuma Kasumi Date: Fri, 13 Jan 2023 10:09:40 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebView/View/WebViewController.swift | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index ec376e7..5be3f71 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -48,7 +48,7 @@ class WebViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - + //webviewの生成 self.setWebView() @@ -80,12 +80,12 @@ class WebViewController: UIViewController { pinch.delegate = self self.view.addGestureRecognizer(pinch) } - + //書類表示時のピンチイン・アウト処理 @objc func pinchHandler(_ gesture: UIPinchGestureRecognizer) { //拡大・縮小比率 let pinchRatio = 0.2 - + // 拡大 if pinchLevel + pinchRatio <= gesture.scale { pinchLevel += pinchRatio @@ -316,7 +316,7 @@ class WebViewController: UIViewController { if let url = change![NSKeyValueChangeKey.newKey] as? URL { let urlString: String = url.absoluteString self.nowURL = urlString - + if urlString != loadURL { mainWebView.allowsBackForwardNavigationGestures = true } @@ -412,7 +412,7 @@ class WebViewController: UIViewController { if viewReload { //履歴をリセットする mainWebView.allowsBackForwardNavigationGestures = false - + if mainWebView.canGoBack { if mainWebView.backForwardList.backList.first!.url.absoluteString != self.loadURL { setWebView() @@ -463,11 +463,11 @@ extension WebViewController: WKUIDelegate { subWebView.navigationDelegate = self subViewStack.push(subWebView, superView: mainWebView) subWebView.load(navigationAction.request) - + //キャンセルボタンの表示 self.closeButton.title = getDisplayString(key: "Close", comment: "") self.closeButton.isEnabled = true - + return subWebView } return nil @@ -496,8 +496,13 @@ extension WebViewController: WKNavigationDelegate { } private func attachmentFileName(ofResponce navigationResponse: WKNavigationResponse) -> String? { - guard let response = navigationResponse.response as? HTTPURLResponse, - let contentDisposition = response.allHeaderFields["Content-Disposition"] as? String + guard let response = navigationResponse.response as? HTTPURLResponse + else { return nil } + return attachmentFileName(response) + } + + private func attachmentFileName(_ response: HTTPURLResponse) -> String? { + guard let contentDisposition = response.allHeaderFields["Content-Disposition"] as? String else { return nil } if let (fileNameStar: fileNameStar, fileName: fileName) = getAttachmentFileName(contentDisposition: contentDisposition) { if let name = fileNameStar, let decoded = parseFilenameStar(name) { @@ -578,8 +583,7 @@ extension WebViewController: WKNavigationDelegate { private func download(url: URL, saveAs fileName: String) { var request = downloadRequest(url: url) - var file = fileName - var tempPath: URL = FileManager.default.temporaryDirectory.appendingPathComponent(file) + var tempPath: URL = FileManager.default.temporaryDirectory.appendingPathComponent(fileName) Session.shared.dataTask(with: request) { data, res, err in guard let data = data, err == nil else { log.e(err) @@ -587,20 +591,16 @@ extension WebViewController: WKNavigationDelegate { } do { - guard let response = res as? HTTPURLResponse - else { return } - var contentDisposition = response.allHeaderFields["Content-Disposition"] as? String - - if contentDisposition != nil { - if let (fileNameStar: fileNameStar, fileName: fileName) = self.getAttachmentFileName(contentDisposition: contentDisposition!.removingPercentEncoding!) { - if let name = fileNameStar, let decoded = self.parseFilenameStar(name) { - file = decoded - } else if let name = fileName { - file = self.parseFilename(name) - } - tempPath = FileManager.default.temporaryDirectory.appendingPathComponent(file) - } + let response = res as? HTTPURLResponse + var fileName: String? + if response != nil { + fileName = self.attachmentFileName(response!) } + + if fileName != nil { + tempPath = FileManager.default.temporaryDirectory.appendingPathComponent(fileName!.removingPercentEncoding!) + } + try data.write(to: tempPath, options: .atomic) } catch { log.e(error) @@ -610,7 +610,7 @@ extension WebViewController: WKNavigationDelegate { let activityViewController = UIActivityViewController(activityItems: [tempPath], applicationActivities: nil) activityViewController.completionWithItemsHandler = { (activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, activityError: Error?) in self.closeTapped() - + guard completed else { return } -- GitLab