123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- //
- // SettingsManager.swift
- // PDF Reader Pro
- //
- // Created by Niehaoyu on 2024/9/26.
- //
- import Cocoa
- @objc public enum appearanceMode: Int {
- case lightMode
- case darkMode
- case autoMode
- }
- @objc public enum keyChainPasswordType : Int {
- case ask = 0
- case always
- case never
- }
- @objc public enum pageLayoutType : Int {
- case singlePage = 0
- case singlePageContinue
- case twoPage
- case twoPageContinue
- case bookMode
- case bookModeContinue
- }
- @objc public enum leftSidePanelType : Int {
- case defaultOpen = 0
- case sameAsLastOpen
- case hideLeftSide
- case prioritizeOutline
- }
- @objc public enum defaultOpenType: Int {
- case thumbnail = 0
- case outline
- case bookmark
- case annotation
- }
- @objc public enum zoomInfoType : Int {
- case adaptationWidth = 0
- case adapPage
- case actualSize
- case percent_10
- case percent_25
- case percent_50
- case percent_75
- case percent_100
- case percent_150
- case percent_200
- case percent_400
- case percent_800
- }
- @objc public enum panelOpenInteractionType : Int {
- case automatic = 0
- case hidePropertyPanel
- }
- @objc public enum settingsLanguage: Int {
- case FollowSystem = 0
- case English
- case Chinese_TW
- case Dutch
- case French
- case German
- case Italian
- case Japanese
- case Polish
- case Russian
- case Spanish
- case Chinese_CN
- case Protuguese
- case Arabic
-
- }
- //外观修改时调用
- let APPAppearanceChangedNotificationName = NSNotification.Name("APPAppearanceChangedNotificationName")
- //语言修改时调用
- let APPLanguageChangedNotificationName = NSNotification.Name("APPLanguageChangedNotificationName")
- //高亮Form表单域修改时调用
- let kPDFViewHighlightFormFiledUpdateNotiName = NSNotification.Name("kPDFViewHighlightFormFiledUpdateNotiName")
- //高亮Link链接修改时调用
- let kPDFViewHighlightLinkUpdateNotiName = NSNotification.Name("kPDFViewHighlightLinkUpdateNotiName")
- //General
- let settingsAppearanceKey = "settingsAppearanceKey"
- let settingsAuthorKey = "settingsAuthorKey"
- let settingsDefaultPDFViewerKey = "settingsDefaultPDFViewerKey"
- var settingsReopenFileKey = "settingsReopenFileKey"
- var settingsAutoSaveFileKey = "settingsAutoSaveFileKey"
- var settingsAutoSaveMinutesKey = "settingsAutoSaveMinutesKey"
- var settingsFileListCountKey = "settingsFileListCountKey"
- var settingsLanguageTypeKey = "settingsLanguageTypeKey"
- var settingsKeychainTypeKey = "settingsKeychainTypeKey"
- //PageDisplay
- var settingsPageLayoutTypeKey = "settingsPageLayoutTypeKey"
- var settingsZoomTypeKey = "settingsZoomTypeKey"
- var settingsLeftSidePanelKey = "settingsLeftSidePanelKey"
- var settingsDefaultOpenTypeKey = "settingsDefaultOpenTypeKey"
- var settingsPanelOpenTypeKey = "settingsPanelOpenTypeKey"
- var settingsShowQuickActionBarKey = "settingsShowQuickActionBarKey"
- var autoScrollTimeIntervalKey = "autoScrollTimeIntervalKey"
- var autoScrollJumpSpaceKey = "autoScrollJumpSpaceKey"
- class SettingsManager: NSObject {
-
- static let sharedInstance = SettingsManager.init()
-
- override init() {
- super.init()
-
- self.config()
- }
-
- func config() {
-
- self.loadData()
-
- // if appearance == .autoMode {
- //
- // } else if appearance == .lightMode {
- // NSApplication.shared.appearance = NSAppearance(named: .aqua)
- // } else if appearance == .darkMode {
- // NSApplication.shared.appearance = NSAppearance(named: .darkAqua)
- // }
-
- }
-
- private func loadData() {
- //General
- self.appearance = appearanceMode(rawValue: UserDefaults.standard.integer(forKey: settingsAppearanceKey)) ?? .autoMode
- self.author = UserDefaults.standard.string(forKey: settingsAuthorKey) ?? NSFullUserName()
- self.defaultPDFViewer = UserDefaults.standard.bool(forKey: settingsDefaultPDFViewerKey)
- self.reopenFileWhenAppStart = UserDefaults.standard.bool(forKey: settingsReopenFileKey)
- self.autoSaveFile = UserDefaults.standard.bool(forKey: settingsAutoSaveFileKey)
- self.autoSaveMinutes = UserDefaults.standard.string(forKey: settingsAutoSaveMinutesKey) ?? ""
- if let value = UserDefaults.standard.value(forKey: settingsFileListCountKey), let data = value as? Int {
- self.fileListCount = data
- } else {
- self.fileListCount = 10
- }
- self.language = settingsLanguage(rawValue: UserDefaults.standard.integer(forKey: settingsLanguageTypeKey)) ?? .FollowSystem
- self.keychainType = keyChainPasswordType(rawValue: UserDefaults.standard.integer(forKey: settingsKeychainTypeKey)) ?? .ask
-
- //PageDisplay
- if let value = UserDefaults.standard.value(forKey: settingsPageLayoutTypeKey), let data = value as? Int {
- self.layoutType = pageLayoutType(rawValue: data) ?? .singlePageContinue
- } else {
- self.layoutType = .singlePageContinue
- }
-
- self.zoomType = zoomInfoType(rawValue: UserDefaults.standard.integer(forKey: settingsZoomTypeKey)) ?? .adaptationWidth
- self.leftPanelType = leftSidePanelType(rawValue: UserDefaults.standard.integer(forKey: settingsLeftSidePanelKey)) ?? .defaultOpen
- self.defaultOpen = defaultOpenType(rawValue: UserDefaults.standard.integer(forKey: settingsDefaultOpenTypeKey)) ?? .thumbnail
- self.autoExpandPropertyPanel = UserDefaults.standard.bool(forKey: settingsPanelOpenTypeKey)
- if let _ = UserDefaults.standard.value(forKey: settingsShowQuickActionBarKey) {
- self.showQuickActionBar = UserDefaults.standard.bool(forKey: settingsShowQuickActionBarKey)
- } else {
- self.showQuickActionBar = true
- }
-
- let autoScrollTimeInterval = UserDefaults.standard.float(forKey: autoScrollTimeIntervalKey)
- if autoScrollTimeInterval > 5 {
- self.autoScrollTimeInterval = autoScrollTimeInterval.cgFloat
- } else {
- self.autoScrollTimeInterval = 5
- }
-
- let autoScrollJumpSpace = UserDefaults.standard.float(forKey: autoScrollJumpSpaceKey)
- if autoScrollJumpSpace > 10 {
- self.autoScrollJumpSpace = autoScrollJumpSpace.cgFloat
- } else {
- self.autoScrollJumpSpace = 20
- }
- }
-
- func saveData() {
- //General
- UserDefaults.standard.setValue(appearance.rawValue, forKey: settingsAppearanceKey)
- UserDefaults.standard.setValue(author, forKey: settingsAuthorKey)
- UserDefaults.standard.setValue(defaultPDFViewer, forKey: settingsDefaultPDFViewerKey)
- UserDefaults.standard.setValue(reopenFileWhenAppStart, forKey: settingsReopenFileKey)
- UserDefaults.standard.setValue(autoSaveFile, forKey: settingsAutoSaveFileKey)
- UserDefaults.standard.setValue(autoSaveMinutes, forKey: settingsAutoSaveMinutesKey)
- UserDefaults.standard.setValue(fileListCount, forKey: settingsFileListCountKey)
- UserDefaults.standard.setValue(language.rawValue, forKey: settingsLanguageTypeKey)
- UserDefaults.standard.setValue(keychainType.rawValue, forKey: settingsKeychainTypeKey)
-
- //PageDisplay
- UserDefaults.standard.setValue(layoutType.rawValue, forKey: settingsPageLayoutTypeKey)
- UserDefaults.standard.setValue(zoomType.rawValue, forKey: settingsZoomTypeKey)
- UserDefaults.standard.setValue(leftPanelType.rawValue, forKey: settingsLeftSidePanelKey)
- UserDefaults.standard.setValue(autoExpandPropertyPanel, forKey: settingsPanelOpenTypeKey)
- UserDefaults.standard.setValue(defaultOpen.rawValue, forKey: settingsDefaultOpenTypeKey)
- UserDefaults.standard.setValue(showQuickActionBar, forKey: settingsShowQuickActionBarKey)
- UserDefaults.standard.setValue(autoScrollTimeInterval, forKey: autoScrollTimeIntervalKey)
- UserDefaults.standard.setValue(autoScrollJumpSpace, forKey: autoScrollJumpSpaceKey)
-
- }
-
- //MARK: - Setter
- var appearance: appearanceMode = .autoMode {
- didSet {
-
- }
- }
-
- var author: String = "" {
- didSet {
- UserDefaults.standard.setValue(author, forKey: settingsAuthorKey)
- }
- }
-
- var defaultPDFViewer: Bool = true {
- didSet {
- let result = KMTools.setDefaultPDFReader(defaultPDFViewer)
-
- if (result) {
- UserDefaults.standard.setValue(defaultPDFViewer, forKey: settingsDefaultPDFViewerKey)
- }
- }
- }
-
- var reopenFileWhenAppStart: Bool = false {
- didSet {
- UserDefaults.standard.setValue(reopenFileWhenAppStart, forKey: settingsReopenFileKey)
- }
- }
-
- var autoSaveFile: Bool = false {
- didSet {
- UserDefaults.standard.setValue(autoSaveFile, forKey: settingsAutoSaveFileKey)
- }
- }
-
- var autoSaveMinutes: String = "" {
- didSet {
- UserDefaults.standard.setValue(autoSaveMinutes, forKey: settingsAutoSaveMinutesKey)
- }
- }
-
- var fileListCount: Int = 10 {
- didSet {
- UserDefaults.standard.setValue(fileListCount, forKey: settingsFileListCountKey)
- }
- }
-
- var language: settingsLanguage = .FollowSystem {
- didSet {
- UserDefaults.standard.setValue(language.rawValue, forKey: settingsLanguageTypeKey)
- }
- }
-
- var keychainType: keyChainPasswordType = .ask {
- didSet {
-
- }
- }
-
- var layoutType: pageLayoutType = .singlePage {
- didSet {
-
- }
- }
-
- var zoomType: zoomInfoType = .adaptationWidth {
- didSet {
-
- }
- }
-
- var leftPanelType: leftSidePanelType = .defaultOpen {
- didSet {
-
- }
- }
-
- var defaultOpen: defaultOpenType = .thumbnail {
- didSet {
-
- }
- }
-
- var autoExpandPropertyPanel: Bool = true {
- didSet {
-
- }
- }
-
- var showQuickActionBar: Bool = true {
- didSet {
-
- }
- }
-
- var autoScrollTimeInterval: CGFloat = 5
- var autoScrollJumpSpace: CGFloat = 20
-
- //MARK: - Reset
- func resetDefaultData() {
- self.resetGeneralData()
-
- self.resetPageDisplayData()
-
- self.saveData()
- }
-
- func resetGeneralData() {
- self.appearance = .autoMode
- self.author = NSFullUserName()
- self.defaultPDFViewer = true
- self.reopenFileWhenAppStart = false
- self.autoSaveFile = false
- self.autoSaveMinutes = "15"
- self.fileListCount = 10
- self.keychainType = .ask
-
- }
-
- func resetPageDisplayData() {
- self.layoutType = .singlePage
- self.zoomType = .adaptationWidth
- self.leftPanelType = .defaultOpen
- self.defaultOpen = .thumbnail
- self.autoExpandPropertyPanel = true
- self.showQuickActionBar = true
-
- }
-
- func closeFileIsPrompt() -> Bool {
- return true
- }
- }
- //MARK: - Method
- public func KMLocalizedString(_ key: String, comment: String? = nil) -> String {
-
- var bundlePath: String? = nil
-
- if SettingsManager.sharedInstance.language != .FollowSystem {
- if SettingsManager.sharedInstance.language == .English {
- bundlePath = Bundle.main.path(forResource: "en", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .Chinese_TW {
- bundlePath = Bundle.main.path(forResource: "zh-Hans", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .Dutch {
- bundlePath = Bundle.main.path(forResource: "nl", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .French {
- bundlePath = Bundle.main.path(forResource: "fr", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .German {
- bundlePath = Bundle.main.path(forResource: "de", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .Italian {
- bundlePath = Bundle.main.path(forResource: "it", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .Japanese {
- bundlePath = Bundle.main.path(forResource: "ja", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .Polish {
- bundlePath = Bundle.main.path(forResource: "pl", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .Russian {
- bundlePath = Bundle.main.path(forResource: "ru", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .Spanish {
- bundlePath = Bundle.main.path(forResource: "es", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .Chinese_CN {
- bundlePath = Bundle.main.path(forResource: "zh-Hans", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .Protuguese {
- bundlePath = Bundle.main.path(forResource: "pt", ofType: "lproj")
- } else if SettingsManager.sharedInstance.language == .Arabic {
- bundlePath = Bundle.main.path(forResource: "ar", ofType: "lproj")
- }
- }
-
- if let bPath = bundlePath, let bundle = Bundle.init(path: bPath) {
- return NSLocalizedString(key, tableName: "Localizable", bundle: bundle, comment: comment ?? "")
- } else {
- return NSLocalizedString(key, comment: "")
- }
- }
|