From ce8b27f6df2f7276e6473a1072216ce30e85bfc9 Mon Sep 17 00:00:00 2001 From: Alex Mazanov Date: Sat, 22 Apr 2023 09:44:41 -0400 Subject: [PATCH] `refresh` URL Scheme pass parameters as ENV variables to plugin #369 --- SwiftBar/AppDelegate.swift | 3 +++ SwiftBar/Plugin/EphemeralPlugin.swift | 1 + SwiftBar/Plugin/ExecutablePlugin.swift | 1 + SwiftBar/Plugin/Plugin.swift | 6 ++++++ SwiftBar/Plugin/ShortcutPlugin.swift | 1 + SwiftBar/Plugin/StreamablePlugin.swift | 1 + 6 files changed, 13 insertions(+) diff --git a/SwiftBar/AppDelegate.swift b/SwiftBar/AppDelegate.swift index 1976947..c5013af 100644 --- a/SwiftBar/AppDelegate.swift +++ b/SwiftBar/AppDelegate.swift @@ -144,6 +144,9 @@ class AppDelegate: NSObject, NSApplicationDelegate, SPUStandardUserDriverDelegat case "refreshplugin": if let plugin = getPluginFromURL(url: url) { pluginManager.menuBarItems[plugin.id]?.dimOnManualRefresh() + if let params = url.queryParameters { + plugin.refreshEnv = params.filter { $0.key != "name" } + } plugin.refresh(reason: .URLScheme) return } diff --git a/SwiftBar/Plugin/EphemeralPlugin.swift b/SwiftBar/Plugin/EphemeralPlugin.swift index 220f25e..df3ef63 100644 --- a/SwiftBar/Plugin/EphemeralPlugin.swift +++ b/SwiftBar/Plugin/EphemeralPlugin.swift @@ -7,6 +7,7 @@ class EphemeralPlugin: Plugin { let type: PluginType = .Ephemeral let name: String = "Ephemeral" let file: String = "none" + var refreshEnv: [String: String] = [:] var updateInterval: Double = 60 * 60 * 24 * 100 { didSet { diff --git a/SwiftBar/Plugin/ExecutablePlugin.swift b/SwiftBar/Plugin/ExecutablePlugin.swift index b62f0b7..ec2366f 100644 --- a/SwiftBar/Plugin/ExecutablePlugin.swift +++ b/SwiftBar/Plugin/ExecutablePlugin.swift @@ -7,6 +7,7 @@ class ExecutablePlugin: Plugin { let type: PluginType = .Executable let name: String let file: String + var refreshEnv: [String: String] = [:] var updateInterval: Double = 60 * 60 * 24 * 100 // defaults to "never", for NOT timed scripts var metadata: PluginMetadata? diff --git a/SwiftBar/Plugin/Plugin.swift b/SwiftBar/Plugin/Plugin.swift index 32b3958..88f695b 100644 --- a/SwiftBar/Plugin/Plugin.swift +++ b/SwiftBar/Plugin/Plugin.swift @@ -72,6 +72,7 @@ protocol Plugin: AnyObject { var content: String? { get set } var error: Error? { get set } var debugInfo: PluginDebugInfo { get set } + var refreshEnv: [String: String] { get set } func refresh(reason: PluginRefreshReason) func enable() func disable() @@ -151,6 +152,11 @@ extension Plugin { metadata?.environment.forEach { k, v in pluginEnv[k] = v } + + refreshEnv.forEach { k, v in + pluginEnv[k] = v + } + refreshEnv.removeAll() return pluginEnv } } diff --git a/SwiftBar/Plugin/ShortcutPlugin.swift b/SwiftBar/Plugin/ShortcutPlugin.swift index 7c340cf..0d9e316 100644 --- a/SwiftBar/Plugin/ShortcutPlugin.swift +++ b/SwiftBar/Plugin/ShortcutPlugin.swift @@ -32,6 +32,7 @@ class ShortcutPlugin: Plugin, Identifiable, ObservableObject { var shortcut: String var repeatString: String var cronString: String + var refreshEnv: [String: String] = [:] @Published var enabled: Bool = true var operation: RunPluginOperation? diff --git a/SwiftBar/Plugin/StreamablePlugin.swift b/SwiftBar/Plugin/StreamablePlugin.swift index d9ec665..28c6859 100644 --- a/SwiftBar/Plugin/StreamablePlugin.swift +++ b/SwiftBar/Plugin/StreamablePlugin.swift @@ -9,6 +9,7 @@ class StreamablePlugin: Plugin { let type: PluginType = .Streamable let name: String let file: String + var refreshEnv: [String: String] = [:] var metadata: PluginMetadata? var lastUpdated: Date?