123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- //
- // SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
- // SPDX-License-Identifier: GPL-3.0-or-later
- //
- class ReferenceView: UIView {
- @IBOutlet var contentView: UIView!
- @IBOutlet var referenceView: UIView!
- @IBOutlet weak var activityIndicatorView: UIView!
- var activityIndicator: MDCActivityIndicator = MDCActivityIndicator(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
- override init(frame: CGRect) {
- super.init(frame: frame)
- commonInit()
- }
- required init?(coder aDecoder: NSCoder) {
- super.init(coder: aDecoder)
- commonInit()
- }
- func commonInit() {
- Bundle.main.loadNibNamed("ReferenceView", owner: self, options: nil)
- contentView.frame = self.bounds
- contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- activityIndicator.radius = 12.0
- activityIndicator.cycleColors = [UIColor.lightGray]
- showIndicatorView()
- activityIndicatorView.addSubview(activityIndicator)
- layer.cornerRadius = 8.0
- layer.masksToBounds = true
- layer.borderWidth = 1.0
- layer.borderColor = NCAppBranding.placeholderColor().cgColor
- self.addSubview(contentView)
- }
- func prepareForReuse() {
- referenceView.subviews.forEach({ $0.removeFromSuperview() })
- showIndicatorView()
- }
- func showIndicatorView() {
- activityIndicator.isHidden = false
- activityIndicator.startAnimating()
- }
- func hideIndicatorView() {
- activityIndicator.stopAnimating()
- activityIndicator.isHidden = true
- }
- func showErrorView(for url: String) {
- let defaultView = ReferenceDefaultView(frame: self.frame)
- defaultView.update(for: nil, and: url)
- defaultView.frame = self.bounds
- defaultView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- referenceView.addSubview(defaultView)
- }
- func update(for sharedDeckCard: NCDeckCardParameter) {
- let deckView = ReferenceDeckView(frame: self.frame)
- deckView.update(for: sharedDeckCard)
- deckView.frame = self.bounds
- deckView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- referenceView.addSubview(deckView)
- self.hideIndicatorView()
- }
- func update(for references: [String: [String: AnyObject]]?, and url: String) {
- referenceView.subviews.forEach({ $0.removeFromSuperview() })
- guard let references = references,
- !references.isEmpty else {
- showErrorView(for: url)
- hideIndicatorView()
- return
- }
- let referenceArray = Array(references.values)
- let firstReference = referenceArray[0]
- let richObjectType = firstReference["richObjectType"] as? String
- var foundReferenceView = false
- if richObjectType == "integration_github" || richObjectType == "integration_github_issue_pr",
- let reference = firstReference["richObject"] as? [String: AnyObject] {
- let githubView = ReferenceGithubView(frame: self.frame)
- githubView.update(for: reference, and: url)
- githubView.frame = self.bounds
- githubView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- referenceView.addSubview(githubView)
- foundReferenceView = true
- } else if richObjectType == "integration_github_code_permalink",
- let reference = firstReference["richObject"] as? [String: AnyObject] {
- let githubPermalinkView = ReferenceGithubPermalinkView(frame: self.frame)
- githubPermalinkView.update(for: reference, and: url)
- githubPermalinkView.frame = self.bounds
- githubPermalinkView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- referenceView.addSubview(githubPermalinkView)
- foundReferenceView = true
- } else if richObjectType == "integration_zammad",
- let reference = firstReference["richObject"] as? [String: AnyObject] {
- let zammadView = ReferenceZammadView(frame: self.frame)
- zammadView.update(for: reference, and: url)
- zammadView.frame = self.bounds
- zammadView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- referenceView.addSubview(zammadView)
- foundReferenceView = true
- } else if richObjectType == "deck-card",
- let reference = firstReference["richObject"] as? [String: AnyObject] {
- let deckView = ReferenceDeckView(frame: self.frame)
- deckView.update(for: reference, and: url)
- deckView.frame = self.bounds
- deckView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- referenceView.addSubview(deckView)
- foundReferenceView = true
- } else if richObjectType == "call",
- let reference = firstReference["richObject"] as? [String: AnyObject],
- let openGraph = firstReference["openGraphObject"] as? [String: String?] {
- let talkView = ReferenceTalkView(frame: self.frame)
- talkView.update(for: reference, and: openGraph, and: url)
- talkView.frame = self.bounds
- talkView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- referenceView.addSubview(talkView)
- foundReferenceView = true
- } else if richObjectType == "integration_giphy_gif",
- let reference = firstReference["richObject"] as? [String: AnyObject] {
- let giphyView = ReferenceGiphyView(frame: self.frame)
- giphyView.update(for: reference, and: url)
- giphyView.frame = self.bounds
- giphyView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- referenceView.addSubview(giphyView)
- foundReferenceView = true
- } else if let reference = firstReference["openGraphObject"] as? [String: String?] {
- let defaultView = ReferenceDefaultView(frame: self.frame)
- defaultView.update(for: reference, and: url)
- defaultView.frame = self.bounds
- defaultView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- referenceView.addSubview(defaultView)
- foundReferenceView = true
- }
- if !foundReferenceView {
- showErrorView(for: url)
- }
- hideIndicatorView()
- }
- }
|