1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-11-07 21:20:07 +01:00

Correctly load presets from config file

This commit is contained in:
2022-05-21 15:24:40 +02:00
7 changed files with 127 additions and 21 deletions

View File

@@ -27,3 +27,25 @@ extension NSMenu {
}
}
// MARK: - NSMenuItem subclasses
class PhpMenuItem: NSMenuItem {
var version: String = ""
}
class XdebugMenuItem: NSMenuItem {
var mode: String = ""
}
class ExtensionMenuItem: NSMenuItem {
var phpExtension: PhpExtension?
}
class EditorMenuItem: NSMenuItem {
var editor: Application?
}
class PresetMenuItem: NSMenuItem {
var preset: CustomPrefs.Preset?
}

View File

@@ -145,6 +145,12 @@ extension MainMenu {
}
}
@objc func togglePreset(sender: PresetMenuItem) {
asyncExecution {
dump(sender.preset)
}
}
@objc func openPhpInfo() {
var url: URL?

View File

@@ -69,6 +69,7 @@ class StatusMenu: NSMenu {
self.addItem(NSMenuItem.separator())
self.addXdebugMenuItem()
self.addPresetsMenuItem()
self.addFirstAidAndServicesMenuItems()
}
@@ -140,6 +141,43 @@ class StatusMenu: NSMenu {
}
}
func addPresetsMenuItem() {
if Preferences.custom.presets.isEmpty {
return
}
let presets = NSMenuItem(title: "Configuration Presets", action: nil, keyEquivalent: "")
let presetsMenu = NSMenu()
presetsMenu.addItem(NSMenuItem.separator())
presetsMenu.addItem(HeaderView.asMenuItem(text: "Apply Configuration Presets"))
for preset in Preferences.custom.presets {
let presetMenuItem = PresetMenuItem(
title: "\(preset.name) (\(preset.extensions.count) extension, \(preset.configuration.count) prefs)",
action: #selector(MainMenu.togglePreset(sender:)),
keyEquivalent: ""
)
presetMenuItem.preset = preset
presetsMenu.addItem(presetMenuItem)
}
presetsMenu.addItem(NSMenuItem.separator())
presetsMenu.addItem(NSMenuItem(
title: "Revert to Previous Configuration...",
action: #selector(MainMenu.restartDnsMasq), keyEquivalent: "")
)
presetsMenu.addItem(NSMenuItem.separator())
presetsMenu.addItem(NSMenuItem(
title: "\(Preferences.custom.presets.count) profiles loaded from configuration file",
action: nil, keyEquivalent: "")
)
for item in presetsMenu.items {
item.target = MainMenu.shared
}
self.setSubmenu(presetsMenu, for: presets)
self.addItem(presets)
}
func addXdebugMenuItem() {
if !Xdebug.enabled {
return
@@ -289,21 +327,3 @@ class StatusMenu: NSMenu {
self.addItem(menuItem)
}
}
// MARK: - NSMenuItem subclasses
class PhpMenuItem: NSMenuItem {
var version: String = ""
}
class XdebugMenuItem: NSMenuItem {
var mode: String = ""
}
class ExtensionMenuItem: NSMenuItem {
var phpExtension: PhpExtension?
}
class EditorMenuItem: NSMenuItem {
var editor: Application?
}

View File

@@ -10,8 +10,16 @@ import Foundation
struct CustomPrefs: Decodable {
let scanApps: [String]
let presets: [Preset]
private enum CodingKeys: String, CodingKey {
case scanApps = "scan_apps"
case presets = "presets"
}
struct Preset: Decodable {
let name: String
let extensions: [String: Bool]
let configuration: [String: String?]
}
}

View File

@@ -52,7 +52,7 @@ class Preferences {
public init() {
Preferences.handleFirstTimeLaunch()
cachedPreferences = Self.cache()
customPreferences = CustomPrefs(scanApps: [])
customPreferences = CustomPrefs(scanApps: [], presets: [])
loadCustomPreferences()
}
@@ -188,7 +188,9 @@ class Preferences {
CustomPrefs.self,
from: try! String(contentsOf: url, encoding: .utf8).data(using: .utf8)!
)
Log.info("The .phpmon.conf.json file was successfully parsed.")
Log.info("There are \(customPreferences.presets.count) custom presets.")
} catch {
Log.warn("The .phpmon.conf.json file seems to be missing or malformed.")
}