Files
openless/Sources/OpenLessPersistence/UserPreferences.swift
T
baiqing 88a5a97812 feat: 1.0.03 — 侧边栏重构 + 词汇表 chip 布局 + 风格页 + 关掉自动学词
- 侧边栏 4 → 6 项:首页 / 历史记录 / 词汇表 / 风格 / 帮助中心 / 设置
- 词典 → 词汇表,整页改 chip 流式布局:phrase + hitCount,hover ✕ 删除,
  批量输入(每行一个),重置统计 / 清除全部
- DictionaryEntry 加 hitCount + 兼容旧 dictionary.json 解码
- DictationCoordinator 在润色后扫描最终文本递增命中数;
  删除 learnTerms 自动学词路径
- 润色模式 → 风格 (StyleTab):4 张模式卡 + 启用开关;
  关闭时跳过 Ark 直接插入原文 (UserPreferences.polishEnabled)
- 帮助中心:快速上手 4 步、快捷键速查、FAQ、GitHub 外链
- 设置 Tab 合并 Volc ASR + Ark 凭据、录音、授权、隐私、关于 + 检查更新
- 胶囊:NSPanel 220×96, hasShadow=false;macOS 26 分支去掉 SwiftUI 阴影
  → 解决"红绿灯外圈黑边"
- 侧边栏视觉:strokeBorder 0.08 → 0.04、阴影 radius 16 → 6
  → 解决"灰色边栏 + 黑色卡顿"
- 首页底部新增今日概览 + 风格预览
2026-04-28 11:16:40 +08:00

56 lines
2.0 KiB
Swift

import Foundation
import OpenLessCore
public final class UserPreferences: @unchecked Sendable {
public static let shared = UserPreferences()
private let defaults = UserDefaults.standard
private enum Key {
static let polishMode = "openless.polish_mode"
static let polishEnabled = "openless.polish_enabled"
static let hotkeyTrigger = "openless.hotkey_trigger"
static let hotkeyMode = "openless.hotkey_mode"
static let hasCompletedOnboarding = "openless.onboarding_completed"
}
public init() {}
/// 风格全局开关。关闭时识别后直接插入原文,不调润色模型。默认开。
public var polishEnabled: Bool {
get {
if defaults.object(forKey: Key.polishEnabled) == nil { return true }
return defaults.bool(forKey: Key.polishEnabled)
}
set { defaults.set(newValue, forKey: Key.polishEnabled) }
}
public var polishMode: PolishMode {
get {
let raw = defaults.string(forKey: Key.polishMode) ?? PolishMode.light.rawValue
return PolishMode(rawValue: raw) ?? .light
}
set { defaults.set(newValue.rawValue, forKey: Key.polishMode) }
}
public var hotkeyTrigger: HotkeyBinding.Trigger {
get {
let raw = defaults.string(forKey: Key.hotkeyTrigger) ?? HotkeyBinding.Trigger.rightOption.rawValue
return HotkeyBinding.Trigger(rawValue: raw) ?? .rightOption
}
set { defaults.set(newValue.rawValue, forKey: Key.hotkeyTrigger) }
}
public var hotkeyMode: HotkeyMode {
get {
let raw = defaults.string(forKey: Key.hotkeyMode) ?? HotkeyMode.toggle.rawValue
return HotkeyMode(rawValue: raw) ?? .toggle
}
set { defaults.set(newValue.rawValue, forKey: Key.hotkeyMode) }
}
public var hasCompletedOnboarding: Bool {
get { defaults.bool(forKey: Key.hasCompletedOnboarding) }
set { defaults.set(newValue, forKey: Key.hasCompletedOnboarding) }
}
}