Tusker/Tusker/Screens/Utilities/Previewing.swift

73 lines
2.9 KiB
Swift
Raw Normal View History

2018-10-12 01:20:58 +00:00
//
// PreviewViewControllerProvider.swift
// Tusker
//
// Created by Shadowfacts on 10/10/18.
// Copyright © 2018 Shadowfacts. All rights reserved.
//
import UIKit
import SafariServices
import Pachyderm
2018-10-12 01:20:58 +00:00
protocol MenuPreviewProvider {
2018-10-12 01:20:58 +00:00
typealias PreviewProviders = (content: UIContextMenuContentPreviewProvider, actions: () -> [UIAction])
func getPreviewProviders(for location: CGPoint, sourceViewController: UIViewController) -> PreviewProviders?
2018-10-12 01:20:58 +00:00
}
extension MenuPreviewProvider {
fileprivate func present(_ vc: UIViewController) {
UIApplication.shared.keyWindow!.rootViewController!.present(vc, animated: true)
}
func actionsForProfile(accountID: String) -> [UIAction] {
guard let account = MastodonCache.account(for: accountID) else { return [] }
return [
UIAction(__title: "Open in Safari", image: UIImage(systemName: "safari")) { (_) in
self.present(SFSafariViewController(url: account.url))
},
UIAction(__title: "Send Message", image: UIImage(systemName: "envelope")) { (_) in
self.present(UINavigationController(rootViewController: ComposeViewController(mentioningAcct: account.acct)))
},
UIAction(__title: "Share...", image: UIImage(systemName: "square.and.arrow.up")) { (_) in
self.present(UIActivityViewController(activityItems: [account.url], applicationActivities: nil))
2018-10-12 01:20:58 +00:00
}
]
2018-10-12 01:20:58 +00:00
}
func actionsForURL(_ url: URL) -> [UIAction] {
return [
UIAction(__title: "Open in Safari", image: UIImage(systemName: "safari")) { (_) in
self.present(SFSafariViewController(url: url))
},
UIAction(__title: "Share...", image: UIImage(systemName: "square.and.arrow.up")) { (_) in
self.present(UIActivityViewController(activityItems: [url], applicationActivities: nil))
}
]
2018-10-12 01:20:58 +00:00
}
func actionsForHashtag(_ hashtag: Hashtag) -> [UIAction] {
return actionsForURL(hashtag.url)
}
func actionsForStatus(statusID: String) -> [UIAction] {
guard let status = MastodonCache.status(for: statusID) else { return [] }
return [
UIAction(__title: "Reply", image: UIImage(systemName: "arrowshape.turn.up.left")) { (_) in
self.present(UINavigationController(rootViewController: ComposeViewController(inReplyTo: statusID)))
},
UIAction(__title: "Open in Safari", image: UIImage(systemName: "safari")) { (_) in
self.present(SFSafariViewController(url: status.url!))
},
UIAction(__title: "Share...", image: UIImage(systemName: "square.and.arrow.up")) { (_) in
self.present(UIActivityViewController(activityItems: [status.url!], applicationActivities: nil))
}
]
}
2018-10-12 01:20:58 +00:00
}