diff --git a/xbar/brew-services.10m.rb b/xbar/brew-services.10m.rb index 2573277..a202096 100755 --- a/xbar/brew-services.10m.rb +++ b/xbar/brew-services.10m.rb @@ -2,7 +2,7 @@ # frozen_string_literal: true # Brew Services -# v3.1.1 +# v3.1.2 # Jim Myhrberg # jimeh # List and manage Homebrew Services @@ -29,6 +29,7 @@ require 'set' module Xbar class CommandError < StandardError; end + class RPCError < StandardError; end module Service private @@ -63,7 +64,9 @@ module Xbar def run(argv = []) 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) end @@ -230,7 +233,7 @@ module Brew printer ||= default_printer return if File.exist?(brew_path) - printer.item("#{prefix}↑:warning:", dropdown: false) + printer.item("#{prefix}↑⚠️:", dropdown: false) printer.sep printer.item('Homebrew not found', color: 'red') printer.item("Executable \"#{brew_path}\" does not exist.") @@ -318,7 +321,7 @@ module Brew end class Services < Common - prefix ':bulb:' + prefix '💡' def run brew_check(printer) @@ -328,31 +331,12 @@ module Brew printer.item("#{prefix}#{visible.started.size}", dropdown: false) printer.sep printer.item('Brew Services') do |printer| - printer.item('Settings') - 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 + print_settings(printer) end printer.item(status_label(visible)) do |printer| printer.sep - printer.item( - ':hourglass: Refresh', - alt: ':hourglass: Refresh (⌘R)', - refresh: true - ) + printer.item('⏳ Refresh', alt: '⏳ Refresh (⌘R)', refresh: true) unless all_services.empty? printer.sep @@ -401,13 +385,8 @@ module Brew end end - def enable_groups - config['VAR_GROUPS'] = true - config.save - end - - def disable_groups - config['VAR_GROUPS'] = false + def use_groups(*args) + config['VAR_GROUPS'] = truthy?(args.first) config.save end @@ -433,6 +412,14 @@ module Brew [true, 'true'].include?(config.fetch('VAR_GROUPS', 'true')) 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) label = [] if services.started.size.positive? @@ -452,6 +439,25 @@ module Brew label.join(', ') 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) return print_service_groups(printer, services) if use_groups? @@ -498,11 +504,11 @@ module Brew icon = if service.started? '🟢' elsif service.stopped? - ':red_circle:' + '🔴' elsif service.error? - ':warning:' + '⚠️' elsif service.unknown_status? - ':question:' + '❓' end printer.item("#{icon} #{service.name}") do |printer| @@ -569,10 +575,6 @@ module Brew end ) end - - def hidden_services - @hidden_services ||= config.as_set('VAR_HIDDEN_SERVICES') - end end end