From f9944cd3d05259c2c0dfa0ec8b4a37f81954078f Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Wed, 19 Oct 2022 16:15:57 -0700 Subject: [PATCH] switch-audio swiftbar plugin --- macos/swift-bar/switch-audio.30s.rb | 51 +++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100755 macos/swift-bar/switch-audio.30s.rb diff --git a/macos/swift-bar/switch-audio.30s.rb b/macos/swift-bar/switch-audio.30s.rb new file mode 100755 index 0000000..1c83d6b --- /dev/null +++ b/macos/swift-bar/switch-audio.30s.rb @@ -0,0 +1,51 @@ +#!/usr/bin/env ruby + +# true +# true +# true +# true +# true + +require "json" + +switch_audio_source = "/opt/homebrew/bin/SwitchAudioSource" + +unless ARGV.empty? + type, id = ARGV + `#{switch_audio_source} -t #{type} -i #{id}` +end + +audio_sources = `#{switch_audio_source} -a -f json` + .lines(chomp: true) + .map {|x| JSON.parse(x) } + .group_by {|x| x.fetch("type") } + +input = JSON.parse(`#{switch_audio_source} -c -f json -t input`) +output = JSON.parse(`#{switch_audio_source} -c -f json -t output`) + +puts ":waveform: | symbolize=true" +puts "---" + +audio_sources.each do |type,sources| + sources.each do |source| + name = source.fetch("name") + id = source.fetch("id") + + sf_type = case type + when "input" then ":mic.fill:" + when "output" then ":speaker.wave.2.fill:" + else fail "Unexpected type: #{type}" + end + + params = { + symbolize: true, + checked: [input, output].include?(source), + bash: __FILE__, + terminal: false, + param0: type, + param1: id, + } + + puts "#{sf_type} #{name} | #{params.map {|k,v| "#{k}=#{v}"}.join(" ")}" + end +end