1
0
mirror of https://github.com/yattee/yattee.git synced 2024-12-15 23:00:32 +05:30
yattee/Shared/Views/ShareButton.swift

109 lines
3.2 KiB
Swift
Raw Normal View History

2021-10-27 04:29:59 +05:30
import SwiftUI
struct ShareButton: View {
let contentItem: ContentItem
@Binding var presentingShareSheet: Bool
2021-11-13 21:15:47 +05:30
@Binding var shareURL: URL?
2021-10-27 04:29:59 +05:30
@EnvironmentObject<AccountsModel> private var accounts
2021-11-03 01:10:49 +05:30
@EnvironmentObject<PlayerModel> private var player
init(
contentItem: ContentItem,
presentingShareSheet: Binding<Bool>,
2021-11-13 21:15:47 +05:30
shareURL: Binding<URL?>? = nil
2021-11-03 01:10:49 +05:30
) {
self.contentItem = contentItem
_presentingShareSheet = presentingShareSheet
2021-11-13 21:15:47 +05:30
_shareURL = shareURL ?? .constant(nil)
2021-11-03 01:10:49 +05:30
}
2021-10-27 04:29:59 +05:30
var body: some View {
2021-11-03 01:10:49 +05:30
Menu {
instanceActions
2021-11-03 04:32:02 +05:30
Divider()
2021-11-03 01:10:49 +05:30
youtubeActions
} label: {
Label("Share", systemImage: "square.and.arrow.up")
.labelStyle(.iconOnly)
}
.menuStyle(.borderlessButton)
#if os(macOS)
.frame(maxWidth: 35)
#endif
}
private var instanceActions: some View {
2021-10-28 22:44:55 +05:30
Group {
2021-11-03 01:10:49 +05:30
if let url = accounts.api.shareURL(contentItem) {
Button(labelForShareURL(accounts.app.name)) {
shareAction(url)
}
if contentItem.contentType == .video {
Button(labelForShareURL(accounts.app.name, withTime: true)) {
shareAction(
accounts.api.shareURL(
contentItem,
2022-02-17 01:53:11 +05:30
time: player.backend.currentTime
2021-11-03 01:10:49 +05:30
)!
)
}
}
}
}
}
private var youtubeActions: some View {
Group {
if let url = accounts.api.shareURL(contentItem, frontendHost: "www.youtube.com") {
Button(labelForShareURL("YouTube")) {
shareAction(url)
}
if contentItem.contentType == .video {
Button(labelForShareURL("YouTube", withTime: true)) {
shareAction(
accounts.api.shareURL(
contentItem,
frontendHost: "www.youtube.com",
2022-02-17 01:53:11 +05:30
time: player.backend.currentTime
2021-11-03 01:10:49 +05:30
)!
)
}
2021-10-28 22:44:55 +05:30
}
}
2021-10-27 04:29:59 +05:30
}
}
2021-11-03 01:10:49 +05:30
private func shareAction(_ url: URL) {
#if os(macOS)
NSPasteboard.general.clearContents()
NSPasteboard.general.setString(url.absoluteString, forType: .string)
#else
2021-11-13 21:15:47 +05:30
shareURL = url
2021-11-03 01:10:49 +05:30
presentingShareSheet = true
#endif
}
private func labelForShareURL(_ app: String, withTime: Bool = false) -> String {
let time = withTime ? "with time" : ""
#if os(macOS)
return "Copy \(app) link \(time)"
#else
return "Share \(app) link \(time)"
#endif
2021-10-27 04:29:59 +05:30
}
}
struct ShareButton_Previews: PreviewProvider {
static var previews: some View {
2021-11-03 01:10:49 +05:30
ShareButton(
contentItem: ContentItem(video: Video.fixture),
presentingShareSheet: .constant(false)
)
.injectFixtureEnvironmentObjects()
2021-10-27 04:29:59 +05:30
}
}