ReferenceDefaultView.swift 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. //
  2. // SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
  3. // SPDX-License-Identifier: GPL-3.0-or-later
  4. //
  5. import Foundation
  6. @objcMembers class ReferenceDefaultView: UIView {
  7. @IBOutlet var contentView: UIView!
  8. @IBOutlet weak var referenceThumbnailView: UIImageView!
  9. @IBOutlet weak var referenceName: UILabel!
  10. @IBOutlet weak var referenceDescription: UITextView!
  11. @IBOutlet weak var referenceLink: UILabel!
  12. var url: String?
  13. override init(frame: CGRect) {
  14. super.init(frame: frame)
  15. commonInit()
  16. }
  17. required init?(coder aDecoder: NSCoder) {
  18. super.init(coder: aDecoder)
  19. commonInit()
  20. }
  21. func commonInit() {
  22. Bundle.main.loadNibNamed("ReferenceDefaultView", owner: self, options: nil)
  23. contentView.frame = self.bounds
  24. contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
  25. referenceName.text = ""
  26. referenceDescription.text = ""
  27. referenceLink.text = ""
  28. // Remove padding from textView
  29. referenceDescription.textContainerInset = .zero
  30. referenceDescription.textContainer.lineFragmentPadding = .zero
  31. referenceThumbnailView.layer.cornerRadius = 8.0
  32. referenceThumbnailView.layer.masksToBounds = true
  33. let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap))
  34. contentView.addGestureRecognizer(tap)
  35. self.addSubview(contentView)
  36. }
  37. func handleTap() {
  38. if let url = url {
  39. NCUtils.openLinkInBrowser(link: url)
  40. }
  41. }
  42. func update(for reference: [String: String?]?, and url: String) {
  43. self.url = url
  44. guard let reference = reference else {
  45. referenceName.isHidden = true
  46. referenceDescription.isHidden = true
  47. referenceLink.text = url
  48. setPlaceholderThumbnail()
  49. return
  50. }
  51. referenceName.text = reference["name"] ?? ""
  52. referenceDescription.text = reference["description"] ?? ""
  53. referenceLink.text = reference["link"] ?? ""
  54. if referenceDescription.text.isEmpty {
  55. referenceDescription.isHidden = true
  56. }
  57. if let thumbUrlString = reference["thumb"] as? String,
  58. let request = NCAPIController.sharedInstance().createReferenceThumbnailRequest(forUrl: thumbUrlString) {
  59. referenceThumbnailView.setImageWith(request, placeholderImage: nil, success: nil) { _, _, _ in
  60. self.setPlaceholderThumbnail()
  61. }
  62. } else {
  63. setPlaceholderThumbnail()
  64. }
  65. }
  66. func setPlaceholderThumbnail() {
  67. referenceThumbnailView.image = UIImage(systemName: "safari")?.withTintColor(UIColor.secondarySystemFill, renderingMode: .alwaysOriginal)
  68. }
  69. }