2023-01-17 11:36:01 +01:00
|
|
|
import AppAccount
|
2023-01-08 10:22:52 +01:00
|
|
|
import DesignSystem
|
2023-01-17 11:36:01 +01:00
|
|
|
import Env
|
|
|
|
import Models
|
2023-01-08 10:22:52 +01:00
|
|
|
import Network
|
2023-01-17 11:36:01 +01:00
|
|
|
import NukeUI
|
|
|
|
import SwiftUI
|
2023-01-08 10:22:52 +01:00
|
|
|
import UserNotifications
|
|
|
|
|
|
|
|
struct PushNotificationsView: View {
|
|
|
|
@EnvironmentObject private var theme: Theme
|
|
|
|
@EnvironmentObject private var appAccountsManager: AppAccountsManager
|
2023-01-08 14:16:43 +01:00
|
|
|
@EnvironmentObject private var pushNotifications: PushNotificationsService
|
2023-01-17 11:36:01 +01:00
|
|
|
|
2023-01-08 10:22:52 +01:00
|
|
|
@State private var subscriptions: [PushSubscription] = []
|
2023-01-17 11:36:01 +01:00
|
|
|
|
2023-01-08 10:22:52 +01:00
|
|
|
var body: some View {
|
|
|
|
Form {
|
|
|
|
Section {
|
|
|
|
Toggle(isOn: $pushNotifications.isPushEnabled) {
|
2023-01-19 18:14:08 +01:00
|
|
|
Text("settings.push.main-toggle")
|
2023-01-08 10:22:52 +01:00
|
|
|
}
|
2023-01-08 14:16:43 +01:00
|
|
|
} footer: {
|
2023-01-19 18:14:08 +01:00
|
|
|
Text("settings.push.main-toggle.description")
|
2023-01-08 10:57:58 +01:00
|
|
|
}
|
|
|
|
.listRowBackground(theme.primaryBackgroundColor)
|
2023-01-17 11:36:01 +01:00
|
|
|
|
2023-01-08 10:57:58 +01:00
|
|
|
if pushNotifications.isPushEnabled {
|
|
|
|
Section {
|
2023-01-08 14:16:43 +01:00
|
|
|
Toggle(isOn: $pushNotifications.isMentionNotificationEnabled) {
|
2023-01-19 18:14:08 +01:00
|
|
|
Label("settings.push.mentions", systemImage: "at")
|
2023-01-08 14:16:43 +01:00
|
|
|
}
|
2023-01-08 10:22:52 +01:00
|
|
|
Toggle(isOn: $pushNotifications.isFollowNotificationEnabled) {
|
2023-01-19 18:14:08 +01:00
|
|
|
Label("settings.push.follows", systemImage: "person.badge.plus")
|
2023-01-08 10:22:52 +01:00
|
|
|
}
|
|
|
|
Toggle(isOn: $pushNotifications.isFavoriteNotificationEnabled) {
|
2023-01-19 18:14:08 +01:00
|
|
|
Label("settings.push.favorites", systemImage: "star")
|
2023-01-08 10:22:52 +01:00
|
|
|
}
|
|
|
|
Toggle(isOn: $pushNotifications.isReblogNotificationEnabled) {
|
2023-01-19 18:14:08 +01:00
|
|
|
Label("settings.push.boosts", systemImage: "arrow.left.arrow.right.circle")
|
2023-01-08 10:22:52 +01:00
|
|
|
}
|
|
|
|
Toggle(isOn: $pushNotifications.isPollNotificationEnabled) {
|
2023-01-19 18:14:08 +01:00
|
|
|
Label("settings.push.polls", systemImage: "chart.bar")
|
2023-01-08 14:16:43 +01:00
|
|
|
}
|
|
|
|
Toggle(isOn: $pushNotifications.isNewPostsNotificationEnabled) {
|
2023-01-19 18:14:08 +01:00
|
|
|
Label("settings.push.new-posts", systemImage: "bubble.right")
|
2023-01-08 10:22:52 +01:00
|
|
|
}
|
2023-01-08 10:57:58 +01:00
|
|
|
}
|
|
|
|
.listRowBackground(theme.primaryBackgroundColor)
|
|
|
|
.transition(.move(edge: .bottom))
|
2023-01-08 10:22:52 +01:00
|
|
|
}
|
|
|
|
}
|
2023-01-19 18:14:08 +01:00
|
|
|
.navigationTitle("settings.push.navigation-title")
|
2023-01-08 10:22:52 +01:00
|
|
|
.scrollContentBackground(.hidden)
|
|
|
|
.background(theme.secondaryBackgroundColor)
|
|
|
|
.onAppear {
|
|
|
|
Task {
|
|
|
|
await pushNotifications.fetchSubscriptions(accounts: appAccountsManager.pushAccounts)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.onChange(of: pushNotifications.isPushEnabled) { newValue in
|
|
|
|
pushNotifications.isUserPushEnabled = newValue
|
|
|
|
if !newValue {
|
|
|
|
Task {
|
|
|
|
await pushNotifications.deleteSubscriptions(accounts: appAccountsManager.pushAccounts)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
updateSubscriptions()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.onChange(of: pushNotifications.isFollowNotificationEnabled) { _ in
|
|
|
|
updateSubscriptions()
|
|
|
|
}
|
|
|
|
.onChange(of: pushNotifications.isPollNotificationEnabled) { _ in
|
|
|
|
updateSubscriptions()
|
|
|
|
}
|
|
|
|
.onChange(of: pushNotifications.isReblogNotificationEnabled) { _ in
|
|
|
|
updateSubscriptions()
|
|
|
|
}
|
|
|
|
.onChange(of: pushNotifications.isMentionNotificationEnabled) { _ in
|
|
|
|
updateSubscriptions()
|
|
|
|
}
|
|
|
|
.onChange(of: pushNotifications.isFavoriteNotificationEnabled) { _ in
|
|
|
|
updateSubscriptions()
|
|
|
|
}
|
2023-01-08 14:16:43 +01:00
|
|
|
.onChange(of: pushNotifications.isNewPostsNotificationEnabled) { _ in
|
|
|
|
updateSubscriptions()
|
|
|
|
}
|
2023-01-08 10:22:52 +01:00
|
|
|
}
|
2023-01-17 11:36:01 +01:00
|
|
|
|
2023-01-08 10:22:52 +01:00
|
|
|
private func updateSubscriptions() {
|
|
|
|
Task {
|
|
|
|
await pushNotifications.updateSubscriptions(accounts: appAccountsManager.pushAccounts)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|