I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 36a5790b authored by meeh's avatar meeh
Browse files

Mac OS X Launcher: Misc minor updates to Preferences

parent b946bb06
No related branches found
No related tags found
No related merge requests found
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
BF1D6D9921BB7DC10014EB07 /* FirefoxManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1D6D9821BB7DC10014EB07 /* FirefoxManager.swift */; }; BF1D6D9921BB7DC10014EB07 /* FirefoxManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1D6D9821BB7DC10014EB07 /* FirefoxManager.swift */; };
BF1D6D9B21BB86520014EB07 /* ConsoleWebView.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF1D6D9A21BB86520014EB07 /* ConsoleWebView.storyboard */; }; BF1D6D9B21BB86520014EB07 /* ConsoleWebView.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF1D6D9A21BB86520014EB07 /* ConsoleWebView.storyboard */; };
BF1D6D9D21BB87000014EB07 /* EmbeddedConsoleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1D6D9C21BB87000014EB07 /* EmbeddedConsoleView.swift */; }; BF1D6D9D21BB87000014EB07 /* EmbeddedConsoleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1D6D9C21BB87000014EB07 /* EmbeddedConsoleView.swift */; };
BF1D6D9F21BBA1460014EB07 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF1D6D9E21BBA1460014EB07 /* WebKit.framework */; }; BF1D6D9F21BBA1460014EB07 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF1D6D9E21BBA1460014EB07 /* WebKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
BF1D6DA321BBB8120014EB07 /* AdvancedTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1D6DA221BBB8120014EB07 /* AdvancedTableView.swift */; }; BF1D6DA321BBB8120014EB07 /* AdvancedTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1D6DA221BBB8120014EB07 /* AdvancedTableView.swift */; };
BF1D6DA521BBB84E0014EB07 /* PreferencesViewController+TableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1D6DA421BBB84E0014EB07 /* PreferencesViewController+TableView.swift */; }; BF1D6DA521BBB84E0014EB07 /* PreferencesViewController+TableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1D6DA421BBB84E0014EB07 /* PreferencesViewController+TableView.swift */; };
BF1EFA3A215140E60014EB07 /* SBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = BF1EFA39215140E60014EB07 /* SBridge.mm */; }; BF1EFA3A215140E60014EB07 /* SBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = BF1EFA39215140E60014EB07 /* SBridge.mm */; };
......
...@@ -27,20 +27,14 @@ class PreferenceRow { ...@@ -27,20 +27,14 @@ class PreferenceRow {
class Preferences : NSObject { class Preferences : NSObject {
private var prefObject: Dictionary<String,Any> = Dictionary<String,Any>() private var prefObject: Dictionary<String,Any> = Dictionary<String,Any>()
private var prefDict = Dictionary<String,PreferenceRow>() private var prefDict = Dictionary<String,PreferenceRow>()
private var prefDefaultDict: Dictionary<String,Any>? private var prefDefaultDict: Dictionary<String,Any> = Dictionary<String,Any>()
// This makes an read-only property computed from another property var count: Int = 0
// It's usage is mainly in UI Table view, so we want the prefDict size
var count: Int {
get {
return prefDict.count
}
}
// Interface with a string setting in background // Interface with a string setting in background
var showAsIconMode: PreferencesViewController.ShowAsMode { var showAsIconMode: PreferencesViewController.ShowAsMode {
get { get {
var mode = self.prefObject["I2Pref_showAsIconMode"] var mode = self["I2Pref_showAsIconMode"]
if (mode == nil) { if (mode == nil) {
mode = "bothIcon" mode = "bothIcon"
} }
...@@ -66,8 +60,8 @@ class Preferences : NSObject { ...@@ -66,8 +60,8 @@ class Preferences : NSObject {
case .dockIcon: case .dockIcon:
newMode = "dockIcon" newMode = "dockIcon"
} }
self.prefObject["I2Pref_showAsIconMode"] = newMode self["I2Pref_showAsIconMode"] = newMode
UserDefaults.standard.setPersistentDomain(self.prefObject, forName: APPDOMAIN) self.syncPref()
} }
} }
...@@ -78,21 +72,25 @@ class Preferences : NSObject { ...@@ -78,21 +72,25 @@ class Preferences : NSObject {
} }
set(newValue) { set(newValue) {
prefObject[prefName] = newValue prefObject[prefName] = newValue
prefDict[prefName] = PreferenceRow(prefName, newValue) prefDict[prefName] = PreferenceRow(prefName, newValue, prefDefaultDict[prefName])
UserDefaults.standard.setPersistentDomain(self.prefObject, forName: APPDOMAIN) self.syncPref()
} }
} }
func syncPref() {
UserDefaults.standard.setPersistentDomain(self.prefObject, forName: APPDOMAIN)
UserDefaults.standard.synchronize()
}
// Lookup by index // Lookup by index
subscript(index:Int) -> PreferenceRow? { subscript(index:Int) -> PreferenceRow? {
get { get {
return prefDict[Array(prefDict.keys)[index]] return prefDict[Array(prefDict.keys)[index]]
} }
set(newValue) { set(newValue) {
let pKey = Array(prefDict.keys)[index] let pKey = Array(prefDefaultDict.keys)[index]
prefDict[pKey] = newValue! prefDict[pKey] = newValue!
prefObject[pKey] = newValue!.asRawValue() prefObject[pKey] = newValue!.asRawValue()
UserDefaults.standard.setPersistentDomain(self.prefObject, forName: APPDOMAIN)
} }
} }
...@@ -123,10 +121,19 @@ class Preferences : NSObject { ...@@ -123,10 +121,19 @@ class Preferences : NSObject {
defaults["I2Pref_featureToggleExperimental"] = false defaults["I2Pref_featureToggleExperimental"] = false
preferences.prefDefaultDict = defaults preferences.prefDefaultDict = defaults
if (preferences.prefDict.isEmpty) { /*if (preferences.prefDict.isEmpty) {
print("Stored new user defaults") print("Stored new user defaults")
preferences.addDictToPrefTable(defaults) preferences.addDictToPrefTable(defaults)
}*/
for name in Array(preferences.prefDefaultDict.keys) {
let potentialValue = UserDefaults.standard.object(forKey: name)
//preferences.prefDict[name] = PreferenceRow(name, potentialValue, preferences.prefDefaultDict[name])
preferences[name] = potentialValue
} }
preferences.count = preferences.prefDict.keys.count
UserDefaults.standard.register(defaults: defaults)
UserDefaults.standard.setPersistentDomain(preferences.prefObject, forName: APPDOMAIN)
UserDefaults.standard.synchronize()
print("User Preferences loaded - Got \(preferences.count) items.") print("User Preferences loaded - Got \(preferences.count) items.")
...@@ -142,7 +149,7 @@ class Preferences : NSObject { ...@@ -142,7 +149,7 @@ class Preferences : NSObject {
for (pKey, pVal) in dict { for (pKey, pVal) in dict {
if (pKey.starts(with: "I2P")) { if (pKey.starts(with: "I2P")) {
print("Preference -> \(pKey)") print("Preference -> \(pKey)")
prefDict[pKey] = PreferenceRow(pKey, pVal, self.prefDefaultDict![pKey]) self[pKey] = pVal
} else { } else {
print("Skipping preference -> \(pKey)") print("Skipping preference -> \(pKey)")
} }
...@@ -153,10 +160,17 @@ class Preferences : NSObject { ...@@ -153,10 +160,17 @@ class Preferences : NSObject {
private override init() { private override init() {
super.init() super.init()
self.prefObject = UserDefaults.standard.persistentDomain(forName: APPDOMAIN) ?? Dictionary<String,Any>() let fromDisk = UserDefaults.standard.persistentDomain(forName: APPDOMAIN) ?? Dictionary<String,Any>()
for (pKey, pVal) in fromDisk {
if (pKey.starts(with: "I2P")) {
print("Preference -> \(pKey)")
self[pKey] = pVal
} else {
print("Skipping preference -> \(pKey)")
}
}
print("Preferences size from disk is: \(prefObject.count).") print("Preferences size from disk is: \(prefObject.count).")
self.addDictToPrefTable(self.prefObject) self.syncPref()
UserDefaults.standard.setPersistentDomain(self.prefObject, forName: APPDOMAIN)
} }
// TODO: Make menubar icon optional // TODO: Make menubar icon optional
...@@ -171,7 +185,7 @@ class Preferences : NSObject { ...@@ -171,7 +185,7 @@ class Preferences : NSObject {
} }
func redrawPrefTableItems() { func redrawPrefTableItems() {
self.addDictToPrefTable(self.prefObject, true) self.addDictToPrefTable(self.prefObject, false)
} }
...@@ -179,104 +193,104 @@ class Preferences : NSObject { ...@@ -179,104 +193,104 @@ class Preferences : NSObject {
var startRouterOnLauncherStart: Bool { var startRouterOnLauncherStart: Bool {
get { get {
let dfl = self.prefDefaultDict?["I2Pref_startRouterAtStartup"] as! Bool let dfl = self.prefDefaultDict["I2Pref_startRouterAtStartup"] as! Bool
return (self.prefObject["I2Pref_startRouterAtStartup"] as? Bool ?? dfl) return (self["I2Pref_startRouterAtStartup"] as? Bool ?? dfl)
} }
set(newValue) { set(newValue) {
self.prefObject["I2Pref_startRouterAtStartup"] = newValue self["I2Pref_startRouterAtStartup"] = newValue
UserDefaults.standard.synchronize() self.syncPref()
} }
} }
var stopRouterOnLauncherShutdown: Bool { var stopRouterOnLauncherShutdown: Bool {
get { get {
let dfl = self.prefDefaultDict?["I2Pref_stopRouterAtShutdown"] as! Bool let dfl = self.prefDefaultDict["I2Pref_stopRouterAtShutdown"] as! Bool
return (self.prefObject["I2Pref_stopRouterAtShutdown"] as? Bool ?? dfl) return (self["I2Pref_stopRouterAtShutdown"] as? Bool ?? dfl)
} }
set(newValue) { set(newValue) {
self.prefObject["I2Pref_stopRouterAtShutdown"] = newValue self["I2Pref_stopRouterAtShutdown"] = newValue
UserDefaults.standard.synchronize() self.syncPref()
} }
} }
var allowAdvancedPreferenceEdit: Bool { var allowAdvancedPreferenceEdit: Bool {
get { get {
let dfl = self.prefDefaultDict?["I2Pref_allowAdvancedPreferences"] as! Bool let dfl = self.prefDefaultDict["I2Pref_allowAdvancedPreferences"] as! Bool
return (self.prefObject["I2Pref_allowAdvancedPreferences"] as? Bool ?? dfl) return (self["I2Pref_allowAdvancedPreferences"] as? Bool ?? dfl)
} }
set(newValue) { set(newValue) {
self.prefObject["I2Pref_allowAdvancedPreferences"] = newValue self["I2Pref_allowAdvancedPreferences"] = newValue
UserDefaults.standard.synchronize() self.syncPref()
} }
} }
var alsoStartFirefoxOnLaunch: Bool { var alsoStartFirefoxOnLaunch: Bool {
get { get {
let dfl = self.prefDefaultDict?["I2Pref_alsoStartFirefoxOnLaunch"] as! Bool let dfl = self.prefDefaultDict["I2Pref_alsoStartFirefoxOnLaunch"] as! Bool
return (self.prefObject["I2Pref_alsoStartFirefoxOnLaunch"] as? Bool ?? dfl) return (self["I2Pref_alsoStartFirefoxOnLaunch"] as? Bool ?? dfl)
} }
set(newValue) { set(newValue) {
self.prefObject["I2Pref_alsoStartFirefoxOnLaunch"] = newValue self["I2Pref_alsoStartFirefoxOnLaunch"] = newValue
UserDefaults.standard.synchronize() self.syncPref()
} }
} }
var featureToggleExperimental: Bool { var featureToggleExperimental: Bool {
get { get {
let dfl = self.prefDefaultDict?["I2Pref_featureToggleExperimental"] as! Bool let dfl = self.prefDefaultDict["I2Pref_featureToggleExperimental"] as! Bool
return (self.prefObject["I2Pref_featureToggleExperimental"] as? Bool ?? dfl) return (self["I2Pref_featureToggleExperimental"] as? Bool ?? dfl)
} }
set(newValue) { set(newValue) {
self.prefObject["I2Pref_featureToggleExperimental"] = newValue self["I2Pref_featureToggleExperimental"] = newValue
UserDefaults.standard.synchronize() self.syncPref()
} }
} }
var i2pBaseDirectory: String { var i2pBaseDirectory: String {
get { get {
let dfl = self.prefDefaultDict?["I2Pref_i2pBaseDirectory"] as! String let dfl = self.prefDefaultDict["I2Pref_i2pBaseDirectory"] as! String
return (self.prefObject["I2Pref_i2pBaseDirectory"] as? String ?? dfl) return (self["I2Pref_i2pBaseDirectory"] as? String ?? dfl)
} }
set(newValue) { set(newValue) {
// TODO: Check if string is a valid directory path, and that it exists. // TODO: Check if string is a valid directory path, and that it exists.
self.prefObject["I2Pref_i2pBaseDirectory"] = newValue self["I2Pref_i2pBaseDirectory"] = newValue
UserDefaults.standard.synchronize() self.syncPref()
} }
} }
var i2pLogDirectory: String { var i2pLogDirectory: String {
get { get {
let dfl = self.prefDefaultDict?["I2Pref_i2pLogDirectory"] as! String let dfl = self.prefDefaultDict["I2Pref_i2pLogDirectory"] as! String
return (self.prefObject["I2Pref_i2pLogDirectory"] as? String ?? dfl) return (self["I2Pref_i2pLogDirectory"] as? String ?? dfl)
} }
set(newValue) { set(newValue) {
// TODO: Check if string is a valid java command path, check if it executes with -version. // TODO: Check if string is a valid java command path, check if it executes with -version.
self.prefObject["I2Pref_i2pLogDirectory"] = newValue self["I2Pref_i2pLogDirectory"] = newValue
UserDefaults.standard.synchronize() self.syncPref()
} }
} }
var javaCommandPath: String { var javaCommandPath: String {
get { get {
let dfl = self.prefDefaultDict?["I2Pref_javaCommandPath"] as! String let dfl = self.prefDefaultDict["I2Pref_javaCommandPath"] as! String
return (self.prefObject["I2Pref_javaCommandPath"] as? String ?? dfl) return (self["I2Pref_javaCommandPath"] as? String ?? dfl)
} }
set(newValue) { set(newValue) {
// TODO: Check if string is a valid java command path, check if it executes with -version. // TODO: Check if string is a valid java command path, check if it executes with -version.
self.prefObject["I2Pref_javaCommandPath"] = newValue self["I2Pref_javaCommandPath"] = newValue
UserDefaults.standard.synchronize() self.syncPref()
} }
} }
var javaCommandOptions: String { var javaCommandOptions: String {
get { get {
let dfl = self.prefDefaultDict?["I2Pref_javaCommandOptions"] as! String let dfl = self.prefDefaultDict["I2Pref_javaCommandOptions"] as! String
return (self.prefObject["I2Pref_javaCommandOptions"] as? String ?? dfl) return (self["I2Pref_javaCommandOptions"] as? String ?? dfl)
} }
set(newValue) { set(newValue) {
// TODO: Check if string is a valid set of java options // TODO: Check if string is a valid set of java options
self.prefObject["I2Pref_javaCommandOptions"] = newValue self["I2Pref_javaCommandOptions"] = newValue
UserDefaults.standard.synchronize() self.syncPref()
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment