mastodon-ios/Mastodon/Diffable/Settings/SettingsItem.swift

129 lines
4.5 KiB
Swift
Raw Normal View History

//
// SettingsItem.swift
// Mastodon
//
// Created by MainasuK Cirno on 2021-4-25.
//
import UIKit
import CoreData
2022-02-08 11:17:17 +01:00
import CoreDataStack
import MastodonAsset
import MastodonLocalization
2021-07-22 07:47:56 +02:00
enum SettingsItem {
2022-02-08 11:17:17 +01:00
case appearance(record: ManagedObjectRecord<Setting>)
2022-02-14 12:57:15 +01:00
case appearancePreference(record: ManagedObjectRecord<Setting>, appearanceType: AppearanceType)
2022-02-08 11:17:17 +01:00
case preference(settingRecord: ManagedObjectRecord<Setting>, preferenceType: PreferenceType)
case notification(settingRecord: ManagedObjectRecord<Setting>, switchMode: NotificationSwitchMode)
case boringZone(item: Link)
case spicyZone(item: Link)
}
extension SettingsItem {
enum AppearanceMode: String {
2022-02-08 11:17:17 +01:00
case system
2022-02-14 12:57:15 +01:00
case dark
case light
}
2022-02-14 12:57:15 +01:00
enum AppearanceType: Hashable {
case preferredTrueDarkMode
var title: String {
return L10n.Scene.Settings.Section.Preference.trueBlackDarkMode
}
}
2021-07-22 07:47:56 +02:00
enum NotificationSwitchMode: CaseIterable, Hashable {
case favorite
case follow
case reblog
case mention
var title: String {
switch self {
case .favorite: return L10n.Scene.Settings.Section.Notifications.favorites
case .follow: return L10n.Scene.Settings.Section.Notifications.follows
case .reblog: return L10n.Scene.Settings.Section.Notifications.boosts
case .mention: return L10n.Scene.Settings.Section.Notifications.mentions
}
}
}
2021-07-22 07:47:56 +02:00
enum PreferenceType: CaseIterable {
case disableAvatarAnimation
2021-07-23 13:33:05 +02:00
case disableEmojiAnimation
2021-07-22 07:47:56 +02:00
case useDefaultBrowser
var title: String {
switch self {
2021-07-23 13:33:05 +02:00
case .disableAvatarAnimation: return L10n.Scene.Settings.Section.Preference.disableAvatarAnimation
case .disableEmojiAnimation: return L10n.Scene.Settings.Section.Preference.disableEmojiAnimation
2021-07-22 07:47:56 +02:00
case .useDefaultBrowser: return L10n.Scene.Settings.Section.Preference.usingDefaultBrowser
}
}
}
2021-07-22 07:47:56 +02:00
enum Link: CaseIterable, Hashable {
case accountSettings
case github
case termsOfService
case privacyPolicy
case clearMediaCache
case signOut
var title: String {
switch self {
2021-07-15 15:04:31 +02:00
case .accountSettings: return L10n.Scene.Settings.Section.BoringZone.accountSettings
case .github: return "GitHub"
2021-07-15 15:04:31 +02:00
case .termsOfService: return L10n.Scene.Settings.Section.BoringZone.terms
case .privacyPolicy: return L10n.Scene.Settings.Section.BoringZone.privacy
case .clearMediaCache: return L10n.Scene.Settings.Section.SpicyZone.clear
case .signOut: return L10n.Scene.Settings.Section.SpicyZone.signout
}
}
2022-02-08 11:17:17 +01:00
var textColor: UIColor? {
switch self {
2022-02-08 11:17:17 +01:00
case .accountSettings: return nil // tintColor
case .github: return nil
case .termsOfService: return nil
case .privacyPolicy: return nil
case .clearMediaCache: return .systemRed
case .signOut: return .systemRed
}
}
}
}
2021-07-22 07:47:56 +02:00
extension SettingsItem: Hashable {
func hash(into hasher: inout Hasher) {
switch self {
2022-02-14 12:57:15 +01:00
case .appearance(let record):
2021-07-22 07:47:56 +02:00
hasher.combine(String(describing: SettingsItem.AppearanceMode.self))
2022-02-14 12:57:15 +01:00
hasher.combine(record)
case .appearancePreference(let record, let appearanceType):
hasher.combine(String(describing: SettingsItem.AppearanceType.self))
hasher.combine(record)
hasher.combine(appearanceType)
2021-07-22 07:47:56 +02:00
case .notification(let settingObjectID, let switchMode):
hasher.combine(String(describing: SettingsItem.notification.self))
hasher.combine(settingObjectID)
hasher.combine(switchMode)
case .preference(let settingObjectID, let preferenceType):
hasher.combine(String(describing: SettingsItem.preference.self))
hasher.combine(settingObjectID)
hasher.combine(preferenceType)
case .boringZone(let link):
hasher.combine(String(describing: SettingsItem.boringZone.self))
hasher.combine(link)
case .spicyZone(let link):
hasher.combine(String(describing: SettingsItem.spicyZone.self))
hasher.combine(link)
}
}
}