diff --git a/xbar/brew-services.10m.rb b/xbar/brew-services.10m.rb index a38a505..63ba72b 100755 --- a/xbar/brew-services.10m.rb +++ b/xbar/brew-services.10m.rb @@ -2,7 +2,7 @@ # frozen_string_literal: true # Brew Services -# v2.1.0 +# v2.2.0 # Jim Myhrberg # jimeh # List and manage Homebrew Services @@ -46,6 +46,7 @@ module Xbar def print_item(text, **props) output = [text] unless props.empty? + props = normalize_props(props) output << PARAM_SEP output += props.map { |k, v| "#{k}=\"#{v}\"" } end @@ -54,6 +55,35 @@ module Xbar $stdout.puts end + def plugin_refresh_uri + @plugin_refresh_uri ||= 'xbar://app.xbarapp.com/refreshPlugin' \ + "?path=#{File.basename(__FILE__)}" + end + + def normalize_props(props = {}) + props = props.dup + + if props[:shell].is_a?(Array) + cmd = props[:shell] + props[:shell] = cmd[0] + cmd[1..-1].each_with_index do |c, i| + props["param#{i + 1}".to_sym] = c + end + end + + # Refresh Xbar after shell command has run in terminal + if props[:terminal] && props[:refresh] && props[:shell] + props[:refresh] = false + i = 1 + i += 1 while props.key?("param#{i}".to_sym) + props["param#{i}".to_sym] = ';' + props["param#{i + 1}".to_sym] = 'open' + props["param#{i + 2}".to_sym] = "'#{plugin_refresh_uri}'" + end + + props + end + def sub_printer @sub_printer || self.class.new(nested_level + 1) end @@ -175,8 +205,8 @@ module Brew if stopped_services.size.positive? printer.item( "Start All (#{stopped_services.size} services)", - terminal: false, refresh: true, shell: brew_path, - param1: 'services', param2: 'start', param3: '--all' + terminal: false, refresh: true, + shell: [brew_path, 'services', 'start', '--all'] ) else printer.item("Start All (#{stopped_services.size} services)") @@ -184,8 +214,8 @@ module Brew if started_services.size.positive? printer.item( "Stop All (#{started_services.size} services)", - terminal: false, refresh: true, shell: brew_path, - param1: 'services', param2: 'stop', param3: '--all' + terminal: false, refresh: true, + shell: [brew_path, 'services', 'stop', '--all'] ) else printer.item("Stop All (#{started_services.size} services)") @@ -194,8 +224,8 @@ module Brew printer.item( 'Restart All ' \ "(#{started_services.size + stopped_services.size} services)", - terminal: false, refresh: true, shell: brew_path, - param1: 'services', param2: 'restart', param3: '--all' + terminal: false, refresh: true, + shell: [brew_path, 'services', 'restart', '--all'] ) else printer.item("Restart All (#{services.size} services)") @@ -282,20 +312,20 @@ module Brew if service.started? || service.error? || service.unknown_status? printer.item( 'Stop', - terminal: false, refresh: true, shell: brew_path, - param1: 'services', param2: 'stop', param3: service.name + terminal: false, refresh: true, + shell: [brew_path, 'services', 'stop', service.name] ) printer.item( 'Restart', - terminal: false, refresh: true, shell: brew_path, - param1: 'services', param2: 'restart', param3: service.name + terminal: false, refresh: true, + shell: [brew_path, 'services', 'restart', service.name] ) end if service.stopped? || service.unknown_status? printer.item( 'Start', - terminal: false, refresh: true, shell: brew_path, - param1: 'services', param2: 'start', param3: service.name + terminal: false, refresh: true, + shell: [brew_path, 'services', 'start', service.name] ) end @@ -311,8 +341,7 @@ module Brew printer.item( 'Yes', terminal: true, refresh: true, - shell: brew_path, param1: 'uninstall', - param2: service.name + shell: [brew_path, 'uninstall', service.name] ) end end