Signed-off-by: Daniel D’Aquino <daniel@daquino.me> Reviewed-by: William Casarin <jb55@jb55.com>
91 lines
4.4 KiB
Swift
91 lines
4.4 KiB
Swift
//
|
|
// NotificationSettings.swift
|
|
// damus
|
|
//
|
|
// Created by William Casarin on 2023-04-05.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct NotificationSettingsView: View {
|
|
let damus_state: DamusState
|
|
@ObservedObject var settings: UserSettingsStore
|
|
|
|
@Environment(\.dismiss) var dismiss
|
|
|
|
func indicator_binding(_ val: NewEventsBits) -> Binding<Bool> {
|
|
return Binding.init(get: {
|
|
(settings.notification_indicators & val.rawValue) > 0
|
|
}, set: { v in
|
|
if v {
|
|
settings.notification_indicators |= val.rawValue
|
|
} else {
|
|
settings.notification_indicators &= ~val.rawValue
|
|
}
|
|
})
|
|
}
|
|
|
|
var body: some View {
|
|
Form {
|
|
if settings.enable_experimental_push_notifications {
|
|
Picker(NSLocalizedString("Notifications mode", comment: "Prompt selection of the notification mode (Feature to switch between local notifications (generated from user's own phone) or push notifications (generated by Damus server)."),
|
|
selection: Binding(
|
|
get: { settings.notifications_mode },
|
|
set: { newValue in
|
|
settings.notifications_mode = newValue
|
|
if newValue == .push {
|
|
Task { try await damus_state.push_notification_client.send_token() }
|
|
}
|
|
}
|
|
)
|
|
) {
|
|
ForEach(UserSettingsStore.NotificationsMode.allCases, id: \.self) { notification_mode in
|
|
Text(notification_mode.text_description())
|
|
.tag(notification_mode.rawValue)
|
|
}
|
|
}
|
|
}
|
|
|
|
Section(header: Text("Local Notifications", comment: "Section header for damus local notifications user configuration")) {
|
|
Toggle(NSLocalizedString("Zaps", comment: "Setting to enable Zap Local Notification"), isOn: $settings.zap_notification)
|
|
.toggleStyle(.switch)
|
|
Toggle(NSLocalizedString("Mentions", comment: "Setting to enable Mention Local Notification"), isOn: $settings.mention_notification)
|
|
.toggleStyle(.switch)
|
|
Toggle(NSLocalizedString("Reposts", comment: "Setting to enable Repost Local Notification"), isOn: $settings.repost_notification)
|
|
.toggleStyle(.switch)
|
|
Toggle(NSLocalizedString("Likes", comment: "Setting to enable Like Local Notification"), isOn: $settings.like_notification)
|
|
.toggleStyle(.switch)
|
|
Toggle(NSLocalizedString("DMs", comment: "Setting to enable DM Local Notification"), isOn: $settings.dm_notification)
|
|
.toggleStyle(.switch)
|
|
}
|
|
|
|
Section(header: Text("Notification Preference", comment: "Section header for Notification Preferences")) {
|
|
Toggle(NSLocalizedString("Show only from users you follow", comment: "Setting to Show notifications only associated to users your follow"), isOn: $settings.notification_only_from_following)
|
|
.toggleStyle(.switch)
|
|
}
|
|
|
|
Section(header: Text("Notification Dots", comment: "Section header for notification indicator dot settings")) {
|
|
Toggle(NSLocalizedString("Zaps", comment: "Setting to enable Zap Local Notification"), isOn: indicator_binding(.zaps))
|
|
.toggleStyle(.switch)
|
|
Toggle(NSLocalizedString("Mentions", comment: "Setting to enable Mention Local Notification"), isOn: indicator_binding(.mentions))
|
|
.toggleStyle(.switch)
|
|
Toggle(NSLocalizedString("Reposts", comment: "Setting to enable Repost Local Notification"), isOn: indicator_binding(.reposts))
|
|
.toggleStyle(.switch)
|
|
Toggle(NSLocalizedString("Likes", comment: "Setting to enable Like Local Notification"), isOn: indicator_binding(.likes))
|
|
.toggleStyle(.switch)
|
|
}
|
|
}
|
|
.navigationTitle("Notifications")
|
|
.onReceive(handle_notify(.switched_timeline)) { _ in
|
|
dismiss()
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
struct NotificationSettings_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
NotificationSettingsView(damus_state: test_damus_state, settings: UserSettingsStore())
|
|
}
|
|
}
|