NCViewerImageCommon.swift 4.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //
  2. // NCViewerImageCommon.swift
  3. // Nextcloud
  4. //
  5. // Created by Marino Faggiana on 04/03/2020.
  6. // Copyright © 2020 Marino Faggiana. All rights reserved.
  7. //
  8. import Foundation
  9. class NCViewerImageCommon: NSObject {
  10. @objc static let shared: NCViewerImageCommon = {
  11. let instance = NCViewerImageCommon()
  12. return instance
  13. }()
  14. func getMetadatasDatasource(metadata: tableMetadata?, favoriteDatasorce: Bool, mediaDatasorce: Bool, offLineDatasource: Bool) -> [tableMetadata]? {
  15. guard let metadata = metadata else { return nil }
  16. if favoriteDatasorce {
  17. return NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND favorite == 1 AND typeFile == %@", metadata.account, k_metadataTypeFile_image), sorted: CCUtility.getOrderSettings(), ascending: CCUtility.getAscendingSettings())
  18. } else if mediaDatasorce {
  19. return NCManageDatabase.sharedInstance.getMedias(account: metadata.account, predicate: NSPredicate(format: "account == %@ AND typeFile == %@", metadata.account, k_metadataTypeFile_image))
  20. } else if offLineDatasource {
  21. var datasourceSorted = ""
  22. var datasourceAscending = true
  23. (_, datasourceSorted, datasourceAscending, _, _) = NCUtility.sharedInstance.getLayoutForView(key: k_layout_view_offline)
  24. if let files = NCManageDatabase.sharedInstance.getTableLocalFiles(predicate: NSPredicate(format: "account == %@ AND offline == true", metadata.account), sorted: datasourceSorted, ascending: datasourceAscending) {
  25. var ocIds = [String]()
  26. for file: tableLocalFile in files {
  27. ocIds.append(file.ocId)
  28. }
  29. return NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND ocId IN %@", metadata.account, ocIds), sorted: datasourceSorted, ascending: datasourceAscending)
  30. }
  31. } else {
  32. return NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND typeFile == %@", metadata.account, metadata.serverUrl, k_metadataTypeFile_image), sorted: CCUtility.getOrderSettings(), ascending: CCUtility.getAscendingSettings())
  33. }
  34. return nil
  35. }
  36. func getThumbnailImage(metadata: tableMetadata) -> UIImage? {
  37. if CCUtility.fileProviderStorageIconExists(metadata.ocId, fileNameView: metadata.fileNameView) {
  38. let imagePath = CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, fileNameView: metadata.fileNameView)!
  39. return UIImage.init(contentsOfFile: imagePath)
  40. }
  41. return nil
  42. }
  43. func getImage(metadata: tableMetadata) -> UIImage? {
  44. var image: UIImage?
  45. if CCUtility.fileProviderStorageSize(metadata.ocId, fileNameView: metadata.fileNameView) > 0 {
  46. let imagePath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!
  47. let ext = CCUtility.getExtension(metadata.fileNameView)
  48. if ext == "GIF" { image = UIImage.animatedImage(withAnimatedGIFURL: URL(fileURLWithPath: imagePath)) }
  49. else { image = UIImage.init(contentsOfFile: imagePath) }
  50. }
  51. return image
  52. }
  53. func imageChangeSizeView(mediaBrowser: MediaBrowserViewController?, size: CGSize, metadata: tableMetadata?) {
  54. guard let mediaBrowser = mediaBrowser else { return }
  55. var image: UIImage?
  56. var contentViewSaved : MediaContentView?
  57. for contentView in mediaBrowser.contentViews {
  58. if contentView.position == 0 && contentView.isLoading == false {
  59. image = contentView.image
  60. contentViewSaved = contentView
  61. if metadata != nil , let thumbnailImage = self.getThumbnailImage(metadata: metadata!) {
  62. contentView.image = thumbnailImage
  63. } else {
  64. contentView.image = nil
  65. }
  66. }
  67. }
  68. DispatchQueue.main.async {
  69. //DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) {
  70. mediaBrowser.changeInViewSize(to: size)
  71. if image != nil {
  72. contentViewSaved?.image = image
  73. }
  74. }
  75. }
  76. }