mastodon-ios/Mastodon/Scene/Settings/Notification Settings/NotificationSettings.swift

94 lines
2.3 KiB
Swift

// Copyright © 2023 Mastodon gGmbH. All rights reserved.
import Foundation
import MastodonLocalization
import MastodonSDK
import CoreDataStack
struct NotificationSettingsSection: Hashable {
let entries: [NotificationSettingEntry]
}
enum NotificationSettingEntry: Hashable {
case notificationDisabled
case policy
case alert(NotificationAlert)
}
struct NotificationPolicySection: Hashable {
let entries: [NotificationPolicy]
}
enum NotificationPolicy: Hashable, CaseIterable {
case anyone
case followers
case follow
case noone
var title: String {
switch self {
case .anyone:
return L10n.Scene.Settings.Notifications.Policy.anyone
case .followers:
return L10n.Scene.Settings.Notifications.Policy.followers
case .follow:
return L10n.Scene.Settings.Notifications.Policy.follow
case .noone:
return L10n.Scene.Settings.Notifications.Policy.noone
}
}
var subscriptionPolicy: Mastodon.API.Subscriptions.Policy {
switch self {
case .anyone:
return .all
case .followers:
return .follower
case .follow:
return .followed
case .noone:
return .none
}
}
}
enum NotificationAlert: Hashable, CaseIterable {
case mentionsAndReplies
case boosts
case favorites
case newFollowers
var title: String {
switch self {
case .mentionsAndReplies:
return L10n.Scene.Settings.Notifications.Alert.mentionsAndReplies
case .boosts:
return L10n.Scene.Settings.Notifications.Alert.boosts
case .favorites:
return L10n.Scene.Settings.Notifications.Alert.favorites
case .newFollowers:
return L10n.Scene.Settings.Notifications.Alert.newFollowers
}
}
}
extension Subscription {
var notificationPolicy: NotificationPolicy? {
guard let policy else { return nil }
switch policy {
case .all:
return .anyone
case .followed:
return .follow
case .follower:
return .followers
case .none:
return .noone
case ._other(_):
return .noone
}
}
}