Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
gallery/Gallery/PostDetailViewController.swift

136 lines
4.7 KiB
Swift
Raw Normal View History

2020-02-18 06:57:35 -05:00
import UIKit
import CoreData
import AVFoundation
import AVKit
class PostDetailViewController: UIViewController, UIPopoverPresentationControllerDelegate {
2020-03-16 12:10:53 -04:00
@IBOutlet weak var imageView: UIImageView?
@IBOutlet weak var shareButton: UIBarButtonItem?
2020-02-18 06:57:35 -05:00
var post: NSManagedObject?
var image: UIImage?
var isPopup: Bool = false
let documentsPath : URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].absoluteURL
2020-03-16 13:07:20 -04:00
func updateWindowTitle() {
var windowTitle = "Untagged Post"
var tagList = ""
guard let postObject = post as? Post else {
return
}
for (i, tag) in postObject.tags!.enumerated() {
if !tagList.isEmpty && i != postObject.tags!.count - 1 {
2020-03-16 13:07:20 -04:00
tagList += ", "
}
tagList += (tag as! Tag).name!
}
if !tagList.isEmpty {
windowTitle = tagList
}
self.view.window?.windowScene!.title = windowTitle
navigationItem.title = windowTitle
2020-03-16 13:07:20 -04:00
}
2020-02-18 06:57:35 -05:00
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
2020-03-16 12:10:53 -04:00
if post != nil {
if image == nil {
let imagePath = documentsPath.appendingPathComponent(post!.value(forKey: "name") as! String).path
if((post?.value(forKey: "type") as? String) == "public.mpeg-4") {
self.image = generateThumbnail(path: URL(fileURLWithPath: imagePath))
} else {
self.image = UIImage(contentsOfFile: imagePath)
}
2020-02-18 06:57:35 -05:00
}
2020-03-16 12:10:53 -04:00
imageView?.image = self.image
if(isPopup) {
#if targetEnvironment(macCatalyst)
navigationItem.leftBarButtonItem = UIBarButtonItem(title: nil, style: .done, target: nil, action: nil)
#else
2020-03-16 12:10:53 -04:00
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(closePopup))
#endif
2020-03-16 12:10:53 -04:00
}
2020-02-18 06:57:35 -05:00
}
updateWindowTitle()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
updateWindowTitle()
}
2020-02-18 06:57:35 -05:00
@objc func closePopup() {
UIApplication.shared.requestSceneSessionDestruction((self.view.window?.windowScene!.session)!, options: nil, errorHandler: nil)
}
@IBAction func shareAction(_ sender: Any) {
let imageSearch = ReverseImageSearchService()
imageSearch.viewController = parent
imageSearch.post = self.post as? Post
let activityViewController = UIActivityViewController(activityItems: [self.image!], applicationActivities: [imageSearch])
activityViewController.popoverPresentationController?.barButtonItem = shareButton
self.present(activityViewController, animated: true, completion:nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showTags" {
2020-03-16 12:10:53 -04:00
guard let newViewController = segue.destination as? EditTagsViewController else {
return
}
2020-02-18 06:57:35 -05:00
newViewController.post = self.post as? Post
2020-03-16 13:07:20 -04:00
segue.destination.popoverPresentationController?.delegate = self
2020-02-18 06:57:35 -05:00
} else if segue.identifier == "showInfo" {
guard let newViewController = segue.destination as? PostInfoViewController else {
2020-03-16 12:10:53 -04:00
return
}
2020-02-18 06:57:35 -05:00
newViewController.post = self.post as? Post
newViewController.image = self.image
}
}
@IBAction func playAction(_ sender: Any) {
if((post?.value(forKey: "type") as? String) == "public.mpeg-4") {
let imagePath = documentsPath.appendingPathComponent(post!.value(forKey: "name") as! String).path
let player = AVPlayer(url: URL(fileURLWithPath: imagePath))
let controller = AVPlayerViewController()
controller.player = player
present(controller, animated: true) {
player.play()
}
2020-02-18 06:57:35 -05:00
}
}
2020-03-16 13:07:20 -04:00
func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) {
updateWindowTitle()
}
2020-02-18 06:57:35 -05:00
}
extension PostDetailViewController {
static func loadFromStoryboard() -> PostDetailViewController? {
2020-02-18 06:57:35 -05:00
let storyboard = UIStoryboard(name: "Main", bundle: .main)
return storyboard.instantiateViewController(withIdentifier: "PostViewController") as? PostDetailViewController
2020-02-18 06:57:35 -05:00
}
}