// // 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") //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 settingsHighlightLinkKey = "settingsHighlightLinkKey" var settingsHighlightFormFieldKey = "settingsHighlightFormFieldKey" 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) ?? "" self.fileListCount = UserDefaults.standard.integer(forKey: settingsFileListCountKey) self.language = settingsLanguage(rawValue: UserDefaults.standard.integer(forKey: settingsLanguageTypeKey)) ?? .FollowSystem self.keychainType = keyChainPasswordType(rawValue: UserDefaults.standard.integer(forKey: settingsKeychainTypeKey)) ?? .ask //PageDisplay self.layoutType = pageLayoutType(rawValue: UserDefaults.standard.integer(forKey: settingsPageLayoutTypeKey)) ?? .singlePage 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) self.showQuickActionBar = UserDefaults.standard.bool(forKey: settingsShowQuickActionBarKey) self.highlightLink = UserDefaults.standard.bool(forKey: settingsHighlightLinkKey) self.highlightFormField = UserDefaults.standard.bool(forKey: settingsHighlightFormFieldKey) } 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(highlightLink, forKey: settingsHighlightLinkKey) UserDefaults.standard.setValue(highlightFormField, forKey: settingsHighlightFormFieldKey) } //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 highlightLink: Bool = true { didSet { } } var highlightFormField: Bool = true { didSet { } } //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 self.highlightLink = true self.highlightFormField = 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: "") } }