NCViewerQuickLook.swift 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. //
  2. // NCViewerQuickLook.swift
  3. // Nextcloud
  4. //
  5. // Created by Marino Faggiana on 03/05/2020.
  6. // Copyright © 2020 Marino Faggiana. All rights reserved.
  7. //
  8. import Foundation
  9. import QuickLook
  10. @objc class NCViewerQuickLook: NSObject, QLPreviewControllerDelegate, QLPreviewControllerDataSource {
  11. let previewController = QLPreviewController()
  12. var previewItems: [PreviewItem] = []
  13. var viewController: UIViewController?
  14. @objc func quickLook(url: URL, viewController: UIViewController) {
  15. self.viewController = viewController
  16. URLSession.shared.dataTask(with: url) { data, response, error in
  17. guard let _ = data, error == nil else {
  18. self.presentAlertController(with: error?.localizedDescription ?? "Failed to look the file")
  19. return
  20. }
  21. //let httpURLResponse = response as? HTTPURLResponse
  22. //let mimeType = httpURLResponse?.mimeType
  23. var previewURL = url
  24. previewURL.hasHiddenExtension = true
  25. let previewItem = PreviewItem()
  26. previewItem.previewItemURL = previewURL
  27. self.previewItems.append(previewItem)
  28. DispatchQueue.main.async {
  29. UIApplication.shared.isNetworkActivityIndicatorVisible = false
  30. self.previewController.delegate = self
  31. self.previewController.dataSource = self
  32. self.previewController.currentPreviewItemIndex = 0
  33. self.viewController?.present(self.previewController, animated: true)
  34. }
  35. }.resume()
  36. UIApplication.shared.isNetworkActivityIndicatorVisible = true
  37. }
  38. func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem { previewItems[index] }
  39. func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
  40. previewItems.count
  41. }
  42. func presentAlertController(with message: String) {
  43. // present your alert controller from the main thread
  44. DispatchQueue.main.async {
  45. UIApplication.shared.isNetworkActivityIndicatorVisible = false
  46. let alert = UIAlertController(title: "Alert", message: message, preferredStyle: .alert)
  47. alert.addAction(.init(title: "OK", style: .default))
  48. self.viewController?.present(alert, animated: true)
  49. }
  50. }
  51. }
  52. extension URL {
  53. var hasHiddenExtension: Bool {
  54. get { (try? resourceValues(forKeys: [.hasHiddenExtensionKey]))?.hasHiddenExtension == true }
  55. set {
  56. var resourceValues = URLResourceValues()
  57. resourceValues.hasHiddenExtension = newValue
  58. try? setResourceValues(resourceValues)
  59. }
  60. }
  61. }
  62. import QuickLook
  63. class PreviewItem: NSObject, QLPreviewItem {
  64. var previewItemURL: URL?
  65. }