12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- //
- // SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
- // SPDX-License-Identifier: GPL-3.0-or-later
- //
- import Foundation
- import SwiftyGif
- @objcMembers class ReferenceGiphyView: UIView, SwiftyGifDelegate {
- @IBOutlet var contentView: UIView!
- @IBOutlet weak var referenceThumbnailView: UIImageView!
- @IBOutlet weak var referenceName: UILabel!
- @IBOutlet weak var referenceDescription: UITextView!
- @IBOutlet weak var referenceLink: UILabel!
- var url: String?
- override init(frame: CGRect) {
- super.init(frame: frame)
- commonInit()
- }
- required init?(coder aDecoder: NSCoder) {
- super.init(coder: aDecoder)
- commonInit()
- }
- func commonInit() {
- Bundle.main.loadNibNamed("ReferenceDefaultView", owner: self, options: nil)
- contentView.frame = self.bounds
- contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- referenceName.text = ""
- referenceDescription.text = ""
- referenceLink.text = ""
- // Remove padding from textView
- referenceDescription.textContainerInset = .zero
- referenceDescription.textContainer.lineFragmentPadding = .zero
- referenceThumbnailView.layer.cornerRadius = 8.0
- referenceThumbnailView.layer.masksToBounds = true
- let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap))
- contentView.addGestureRecognizer(tap)
- self.addSubview(contentView)
- }
- func handleTap() {
- if let url = url {
- NCUtils.openLinkInBrowser(link: url)
- }
- }
- func update(for reference: [String: AnyObject], and url: String) {
- self.url = url
- referenceName.text = reference["title"] as? String ?? ""
- referenceDescription.text = reference["alt_text"] as? String ?? ""
- referenceLink.text = url
- if referenceDescription.text.isEmpty {
- referenceDescription.isHidden = true
- }
- if let proxiedUrlString = reference["proxied_url"] as? String, let proxiedUrl = URL(string: proxiedUrlString) {
- referenceThumbnailView.delegate = self
- referenceThumbnailView.setGifFromURL(proxiedUrl, showLoader: false)
- } else {
- setPlaceholderThumbnail()
- }
- }
- func setPlaceholderThumbnail() {
- referenceThumbnailView.image = UIImage(systemName: "safari")?.withTintColor(UIColor.secondarySystemFill, renderingMode: .alwaysOriginal)
- }
- func gifURLDidFail(sender: UIImageView, url: URL, error: (any Error)?) {
- // In case we were unable to load or process the gif, fall back to the normal thumbnail
- if let request = NCAPIController.sharedInstance().createReferenceThumbnailRequest(forUrl: url.absoluteString) {
- referenceThumbnailView.setImageWith(request, placeholderImage: nil, success: nil) { _, _, _ in
- self.setPlaceholderThumbnail()
- }
- }
- }
- }
|