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

Ensure watcher does not fire too many times

This commit is contained in:
2021-12-19 13:58:25 +01:00
parent 0d75e4c3b2
commit ea9538f116
5 changed files with 36 additions and 10 deletions

View File

@@ -39,9 +39,11 @@ class StatusMenu : NSMenu {
}
func addServicesMenuItems() {
let services = NSMenuItem(title: "mi_manage_services".localized, action: nil, keyEquivalent: "")
let services = NSMenuItem(title: "mi_toolkit".localized, action: nil, keyEquivalent: "")
let servicesMenu = NSMenu()
servicesMenu.addItem(NSMenuItem(title: "mi_help".localized, action: nil, keyEquivalent: ""))
if !App.shared.availablePhpVersions.contains(App.shared.brewPhpVersion) {
servicesMenu.addItem(NSMenuItem(
title: "mi_force_load_latest_unavailable".localized(App.shared.brewPhpVersion),
@@ -53,6 +55,8 @@ class StatusMenu : NSMenu {
action: #selector(MainMenu.forceRestartLatestPhp), keyEquivalent: "f"))
}
servicesMenu.addItem(NSMenuItem(title: "mi_services".localized, action: nil, keyEquivalent: ""))
servicesMenu.addItem(NSMenuItem(title: "mi_restart_dnsmasq".localized, action: #selector(MainMenu.restartDnsMasq), keyEquivalent: "d"))
servicesMenu.addItem(NSMenuItem(title: "mi_restart_php_fpm".localized, action: #selector(MainMenu.restartPhpFpm), keyEquivalent: "p"))
servicesMenu.addItem(NSMenuItem(title: "mi_restart_nginx".localized, action: #selector(MainMenu.restartNginx), keyEquivalent: "n"))
@@ -63,10 +67,16 @@ class StatusMenu : NSMenu {
servicesMenu.addItem(NSMenuItem(title: "mi_restart_all_services".localized, action: #selector(MainMenu.restartAllServices), keyEquivalent: "s"))
servicesMenu.addItem(NSMenuItem(title: "mi_manual_actions".localized, action: nil, keyEquivalent: ""))
servicesMenu.addItem(NSMenuItem(title: "mi_php_refresh".localized, action: #selector(MainMenu.reloadPhpMonitorMenu), keyEquivalent: "r"))
for item in servicesMenu.items {
item.target = MainMenu.shared
}
self.setSubmenu(servicesMenu, for: services)
self.addItem(services)
}
@@ -124,10 +134,6 @@ class StatusMenu : NSMenu {
self.addItem(NSMenuItem.separator())
self.addItem(NSMenuItem(title: "mi_php_refresh".localized, action: #selector(MainMenu.reloadPhpMonitorMenu), keyEquivalent: "r"))
self.addItem(NSMenuItem.separator())
self.addServicesMenuItems()
}
@@ -189,4 +195,4 @@ class ExtensionMenuItem: NSMenuItem {
class EditorMenuItem: NSMenuItem {
var editor: Application? = nil
}
}

View File

@@ -15,9 +15,15 @@ extension App {
self.watcher = PhpConfigWatcher(for: url)
self.watcher.didChange = { url in
// TODO: Make sure this is debounced, because a single process may update the config file many times; this occurs when installing Xdebug, for example
print("Something has changed in: \(url)")
MainMenu.shared.reloadPhpMonitorMenuInBackground()
// Check if the watcher has last updated the menu less than 0.75s ago
let distance = self.watcher.lastUpdate?.distance(to: Date().timeIntervalSince1970)
if distance == nil || distance != nil && distance! > 0.75 {
print("Refreshing menu...")
MainMenu.shared.reloadPhpMonitorMenuInBackground()
self.watcher.lastUpdate = Date().timeIntervalSince1970
}
}
}

View File

@@ -16,6 +16,8 @@ class PhpConfigWatcher {
var didChange: ((URL) -> Void)?
var lastUpdate: TimeInterval? = nil
var watchers: [FSWatcher] = []
init(for url: URL) {

View File

@@ -34,6 +34,10 @@
"mi_memory_limit" = "Memory Limit";
"mi_post_max_size" = "Max POST";
"mi_upload_max_filesize" = "Max Upload";
"mi_manual_actions" = "Manual Actions";
"mi_services" = "Services";
"mi_help" = "First Aid";
"mi_toolkit" = "Toolkit";
"mi_composer" = "Composer";
"mi_valet_config" = "Locate Valet folder (.config/valet)";