94 lines
2.3 KiB
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
|
|
}
|
|
}
|
|
}
|