106 lines
3.1 KiB
Swift
106 lines
3.1 KiB
Swift
import SwiftUI
|
|
import SFSafeSymbols
|
|
|
|
struct NotificationSheet: View {
|
|
|
|
@EnvironmentObject
|
|
private var content: Content
|
|
|
|
@EnvironmentObject
|
|
private var notifications: NotificationSender
|
|
|
|
@Environment(\.dismiss)
|
|
private var dismiss
|
|
|
|
@State
|
|
private var englishTitle = ""
|
|
|
|
@State
|
|
private var englishMessage = ""
|
|
|
|
@State
|
|
private var germanTitle = ""
|
|
|
|
@State
|
|
private var germanMessage = ""
|
|
|
|
private var uploadSymbol: SFSymbol {
|
|
if notifications.isTransmittingToRemote {
|
|
return .squareAndArrowUpBadgeClock
|
|
}
|
|
if !notifications.lastPushWasSuccessful {
|
|
return .squareAndArrowUpTrianglebadgeExclamationmark
|
|
}
|
|
return .squareAndArrowUp
|
|
}
|
|
|
|
var header: String {
|
|
let user = content.settings.general.remoteUserForUpload
|
|
let port = content.settings.general.remotePortForUpload
|
|
let url = content.settings.general.remotePathForUpload.withHttpPrefixRemoved
|
|
let path = content.settings.general.remotePathForUpload
|
|
return "\(user)@\(url):\(port)/\(path)"
|
|
}
|
|
|
|
var isIncomplete: Bool {
|
|
englishTitle.isEmpty || germanTitle.isEmpty || englishMessage.isEmpty || germanMessage.isEmpty
|
|
}
|
|
|
|
var body: some View {
|
|
VStack {
|
|
HStack {
|
|
Text("Send a notification to subscribers")
|
|
.font(.headline)
|
|
Spacer()
|
|
Button("Close", action: { dismiss() })
|
|
}
|
|
StringPropertyView(
|
|
title: "English title",
|
|
text: $englishTitle,
|
|
footer: "The title for devices using the english language")
|
|
|
|
StringPropertyView(
|
|
title: "English message",
|
|
text: $englishMessage,
|
|
footer: "The message for devices using the english language")
|
|
|
|
StringPropertyView(
|
|
title: "German title",
|
|
text: $germanTitle,
|
|
footer: "The title for devices using the german language")
|
|
|
|
StringPropertyView(
|
|
title: "German message",
|
|
text: $germanMessage,
|
|
footer: "The message for devices using the german language")
|
|
|
|
Button("Send", action: send)
|
|
.disabled(notifications.isTransmittingToRemote || isIncomplete)
|
|
}
|
|
.padding()
|
|
.frame(minWidth: 300, idealWidth: 400, idealHeight: 500)
|
|
}
|
|
|
|
private func send() {
|
|
guard let accessToken = content.settings.general.pushNotificationAccessToken,
|
|
let url = content.settings.general.urlForPushNotification else {
|
|
return
|
|
}
|
|
|
|
|
|
let english = WebNotification(title: englishTitle, body: englishMessage)
|
|
let german = WebNotification(title: germanTitle, body: germanMessage)
|
|
|
|
let notifications: [String : WebNotification] = [
|
|
"en": english,
|
|
"de": german
|
|
]
|
|
|
|
let request = NotificationRequest.init(
|
|
accessToken: accessToken,
|
|
notifications: notifications)
|
|
|
|
self.notifications.send(url: url, request: request)
|
|
}
|
|
}
|