2021-04-26 10:57:50 +02:00
|
|
|
//
|
|
|
|
// 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
|
2022-01-27 14:23:39 +01:00
|
|
|
import MastodonAsset
|
|
|
|
import MastodonLocalization
|
2021-04-26 10:57:50 +02:00
|
|
|
|
2021-07-22 07:47:56 +02:00
|
|
|
enum SettingsItem {
|
2022-02-08 11:17:17 +01:00
|
|
|
case appearance(record: ManagedObjectRecord<Setting>)
|
|
|
|
case preference(settingRecord: ManagedObjectRecord<Setting>, preferenceType: PreferenceType)
|
|
|
|
case notification(settingRecord: ManagedObjectRecord<Setting>, switchMode: NotificationSwitchMode)
|
2021-04-26 10:57:50 +02:00
|
|
|
case boringZone(item: Link)
|
|
|
|
case spicyZone(item: Link)
|
|
|
|
}
|
|
|
|
|
|
|
|
extension SettingsItem {
|
|
|
|
|
|
|
|
enum AppearanceMode: String {
|
2022-02-08 11:17:17 +01:00
|
|
|
case system
|
|
|
|
case reallyDark
|
|
|
|
case sortaDark
|
2021-04-26 10:57:50 +02:00
|
|
|
case light
|
|
|
|
}
|
|
|
|
|
2021-07-22 07:47:56 +02:00
|
|
|
enum NotificationSwitchMode: CaseIterable, Hashable {
|
2021-04-26 10:57:50 +02:00
|
|
|
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-04-26 10:57:50 +02:00
|
|
|
|
2021-07-22 07:47:56 +02:00
|
|
|
enum Link: CaseIterable, Hashable {
|
2021-07-13 11:39:38 +02:00
|
|
|
case accountSettings
|
2021-08-03 11:33:24 +02:00
|
|
|
case github
|
2021-04-26 10:57:50 +02:00
|
|
|
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
|
2021-08-03 11:33:24 +02:00
|
|
|
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
|
2021-04-26 10:57:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-08 11:17:17 +01:00
|
|
|
var textColor: UIColor? {
|
2021-04-26 10:57:50 +02:00
|
|
|
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
|
2021-04-26 10:57:50 +02:00
|
|
|
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 {
|
|
|
|
case .appearance(let settingObjectID):
|
|
|
|
hasher.combine(String(describing: SettingsItem.AppearanceMode.self))
|
|
|
|
hasher.combine(settingObjectID)
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|