Add rudimentary support for audio attachments

Closes #7
This commit is contained in:
Shadowfacts 2020-01-26 18:50:14 -05:00
parent 8c7bebcce8
commit d7953470e3
Signed by untrusted user: shadowfacts
GPG Key ID: 94A5AB95422746E5
3 changed files with 41 additions and 16 deletions

View File

@ -52,7 +52,7 @@ class GalleryViewController: UIPageViewController, UIPageViewControllerDataSourc
switch $0.kind {
case .image:
return AttachmentViewController(attachment: $0)
case .video:
case .video, .audio:
let vc = AVPlayerViewController()
vc.player = AVPlayer(url: $0.url)
return vc

View File

@ -19,7 +19,7 @@ class AttachmentView: UIImageView, GIFAnimatable {
weak var delegate: AttachmentViewDelegate?
var playImageView: UIImageView!
var playImageView: UIImageView?
var attachment: Attachment!
var index: Int!
@ -54,25 +54,21 @@ class AttachmentView: UIImageView, GIFAnimatable {
isUserInteractionEnabled = true
addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(imagePressed)))
playImageView = UIImageView(image: UIImage(systemName: "play.circle.fill"))
playImageView.translatesAutoresizingMaskIntoConstraints = false
addSubview(playImageView)
NSLayoutConstraint.activate([
playImageView.widthAnchor.constraint(equalToConstant: 50),
playImageView.heightAnchor.constraint(equalToConstant: 50),
playImageView.centerXAnchor.constraint(equalTo: centerXAnchor),
playImageView.centerYAnchor.constraint(equalTo: centerYAnchor)
])
}
func loadAttachment() {
guard AttachmentsContainerView.supportedAttachmentTypes.contains(attachment.kind) else {
preconditionFailure("invalid attachment type")
}
switch attachment.kind {
case .image:
loadImage()
case .video:
loadVideo()
case .audio:
loadAudio()
default:
fatalError()
preconditionFailure("invalid attachment type")
}
}
@ -89,8 +85,6 @@ class AttachmentView: UIImageView, GIFAnimatable {
}
}
}
playImageView.isHidden = true
}
func loadVideo() {
@ -106,7 +100,36 @@ class AttachmentView: UIImageView, GIFAnimatable {
}
}
playImageView.isHidden = false
let playImageView = UIImageView(image: UIImage(systemName: "play.circle.fill"))
playImageView.translatesAutoresizingMaskIntoConstraints = false
addSubview(playImageView)
NSLayoutConstraint.activate([
playImageView.widthAnchor.constraint(equalToConstant: 50),
playImageView.heightAnchor.constraint(equalToConstant: 50),
playImageView.centerXAnchor.constraint(equalTo: centerXAnchor),
playImageView.centerYAnchor.constraint(equalTo: centerYAnchor),
])
}
func loadAudio() {
let label = UILabel()
label.text = "Audio Only"
let playImageView = UIImageView(image: UIImage(systemName: "play.circle.fill"))
let stack = UIStackView(arrangedSubviews: [
label,
playImageView
])
stack.translatesAutoresizingMaskIntoConstraints = false
stack.axis = .vertical
stack.spacing = 8
stack.alignment = .center
addSubview(stack)
NSLayoutConstraint.activate([
stack.centerXAnchor.constraint(equalTo: centerXAnchor),
stack.centerYAnchor.constraint(equalTo: centerYAnchor),
playImageView.widthAnchor.constraint(equalToConstant: 50),
playImageView.heightAnchor.constraint(equalToConstant: 50),
])
}
override func display(_ layer: CALayer) {

View File

@ -11,6 +11,8 @@ import Pachyderm
class AttachmentsContainerView: UIView {
static let supportedAttachmentTypes = [Attachment.Kind.image, .video, .audio]
weak var delegate: AttachmentViewDelegate?
var statusID: String!
@ -47,7 +49,7 @@ class AttachmentsContainerView: UIView {
func updateUI(status: Status) {
self.statusID = status.id
attachments = status.attachments.filter { $0.kind == .image || $0.kind == .video }
attachments = status.attachments.filter { AttachmentsContainerView.supportedAttachmentTypes.contains($0.kind) }
attachmentViews.allObjects.forEach { $0.removeFromSuperview() }
attachmentViews.removeAllObjects()