chore(xbar/brew-services): minor tweaks and improvements

This commit is contained in:
2023-03-21 00:46:22 +00:00
parent 900e69a07f
commit cc3121e472

View File

@@ -2,7 +2,7 @@
# frozen_string_literal: true # frozen_string_literal: true
# <xbar.title>Brew Services</xbar.title> # <xbar.title>Brew Services</xbar.title>
# <xbar.version>v3.1.1</xbar.version> # <xbar.version>v3.1.2</xbar.version>
# <xbar.author>Jim Myhrberg</xbar.author> # <xbar.author>Jim Myhrberg</xbar.author>
# <xbar.author.github>jimeh</xbar.author.github> # <xbar.author.github>jimeh</xbar.author.github>
# <xbar.desc>List and manage Homebrew Services</xbar.desc> # <xbar.desc>List and manage Homebrew Services</xbar.desc>
@@ -29,6 +29,7 @@ require 'set'
module Xbar module Xbar
class CommandError < StandardError; end class CommandError < StandardError; end
class RPCError < StandardError; end
module Service module Service
private private
@@ -63,7 +64,9 @@ module Xbar
def run(argv = []) def run(argv = [])
return service.run if argv.empty? return service.run if argv.empty?
return unless service.respond_to?(argv[0]) unless service.respond_to?(argv[0])
raise RPCError, "Unknown RPC method: #{argv[0]}"
end
service.public_send(*argv) service.public_send(*argv)
end end
@@ -230,7 +233,7 @@ module Brew
printer ||= default_printer printer ||= default_printer
return if File.exist?(brew_path) return if File.exist?(brew_path)
printer.item("#{prefix}:warning:", dropdown: false) printer.item("#{prefix}⚠️:", dropdown: false)
printer.sep printer.sep
printer.item('Homebrew not found', color: 'red') printer.item('Homebrew not found', color: 'red')
printer.item("Executable \"#{brew_path}\" does not exist.") printer.item("Executable \"#{brew_path}\" does not exist.")
@@ -318,7 +321,7 @@ module Brew
end end
class Services < Common class Services < Common
prefix ':bulb:' prefix '💡'
def run def run
brew_check(printer) brew_check(printer)
@@ -328,31 +331,12 @@ module Brew
printer.item("#{prefix}#{visible.started.size}", dropdown: false) printer.item("#{prefix}#{visible.started.size}", dropdown: false)
printer.sep printer.sep
printer.item('Brew Services') do |printer| printer.item('Brew Services') do |printer|
printer.item('Settings') print_settings(printer)
printer.sep
if use_groups?
printer.item(
':white_check_mark: Use groups',
rpc: ['disable_groups'],
refresh: true
)
else
printer.item(
':ballot_box_with_check: Use groups',
rpc: ['enable_groups'],
refresh: true
)
end
end end
printer.item(status_label(visible)) do |printer| printer.item(status_label(visible)) do |printer|
printer.sep printer.sep
printer.item( printer.item('⏳ Refresh', alt: '⏳ Refresh (⌘R)', refresh: true)
':hourglass: Refresh',
alt: ':hourglass: Refresh (⌘R)',
refresh: true
)
unless all_services.empty? unless all_services.empty?
printer.sep printer.sep
@@ -401,13 +385,8 @@ module Brew
end end
end end
def enable_groups def use_groups(*args)
config['VAR_GROUPS'] = true config['VAR_GROUPS'] = truthy?(args.first)
config.save
end
def disable_groups
config['VAR_GROUPS'] = false
config.save config.save
end end
@@ -433,6 +412,14 @@ module Brew
[true, 'true'].include?(config.fetch('VAR_GROUPS', 'true')) [true, 'true'].include?(config.fetch('VAR_GROUPS', 'true'))
end end
def hidden_services
@hidden_services ||= config.as_set('VAR_HIDDEN_SERVICES')
end
def truthy?(value)
%w[true yes 1 on y t].include?(value.to_s.downcase)
end
def status_label(services) def status_label(services)
label = [] label = []
if services.started.size.positive? if services.started.size.positive?
@@ -452,6 +439,25 @@ module Brew
label.join(', ') label.join(', ')
end end
def print_settings(printer)
printer.item('Settings')
printer.sep
print_rpc_toggle(printer, 'Use groups', 'use_groups', use_groups?)
end
def print_rpc_toggle(printer, name, rpc, current_value)
if current_value
icon = '✅'
value = 'false'
else
icon = '☑️'
value = 'true'
end
printer.item("#{icon} #{name}", rpc: [rpc, value], refresh: true)
end
def print_services(printer, services) def print_services(printer, services)
return print_service_groups(printer, services) if use_groups? return print_service_groups(printer, services) if use_groups?
@@ -498,11 +504,11 @@ module Brew
icon = if service.started? icon = if service.started?
'🟢' '🟢'
elsif service.stopped? elsif service.stopped?
':red_circle:' '🔴'
elsif service.error? elsif service.error?
':warning:' '⚠️'
elsif service.unknown_status? elsif service.unknown_status?
':question:' ''
end end
printer.item("#{icon} #{service.name}") do |printer| printer.item("#{icon} #{service.name}") do |printer|
@@ -569,10 +575,6 @@ module Brew
end end
) )
end end
def hidden_services
@hidden_services ||= config.as_set('VAR_HIDDEN_SERVICES')
end
end end
end end