diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-08-26 05:59:07 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-08-26 05:59:07 +0000 |
commit | 57bd6f96e007097219cdd31b034f8ca386927ed6 (patch) | |
tree | ef7bf91aeecae88f5bd3a2514b8c3e755b10f812 | |
parent | 2907cc6dd0b0d2d80d44ae292a157651d6e05ee7 (diff) | |
download | dtas-57bd6f96e007097219cdd31b034f8ca386927ed6.tar.gz |
These two are similar enough that it's possible to share some code between them and also increase user-friendliness at the same time.
-rwxr-xr-x | bin/dtas-sinkedit | 40 | ||||
-rwxr-xr-x | bin/dtas-sourceedit | 37 | ||||
-rw-r--r-- | lib/dtas/disclaimer.rb | 7 | ||||
-rw-r--r-- | lib/dtas/edit_client.rb | 48 |
4 files changed, 75 insertions, 57 deletions
diff --git a/bin/dtas-sinkedit b/bin/dtas-sinkedit index 9d9fa25..bf97020 100755 --- a/bin/dtas-sinkedit +++ b/bin/dtas-sinkedit @@ -2,20 +2,16 @@ # -*- encoding: binary -*- # Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) -require 'dtas/unix_client' -require 'dtas/disclaimer' -require 'tempfile' -require 'yaml' -editor = ENV["VISUAL"] || ENV["EDITOR"] || "vi" -c = DTAS::UNIXClient.new -usage = "#$0 SINKNAME" +require 'dtas/edit_client' +include DTAS::EditClient +c = client_socket +sinks = c.req('sink ls') || "(unknown)" +usage = "Usage: #{DTAS_PROGNAME} SINKNAME\n" \ + "available SINKNAME values: #{sinks}" ARGV.size == 1 or abort usage name = ARGV[0] -tmp = Tempfile.new(%w(dtas-sinkedit .yml)) -tmp.sync = true -tmp.binmode - +tmp = tmpyaml buf = c.req(%W(sink cat #{name})) abort(buf) if buf =~ /\AERR/ orig = YAML.load(buf) @@ -27,32 +23,20 @@ tmp.rewind sink = YAML.load(tmp.read) cmd = %W(sink ed #{name}) -if env = sink["env"] - env.each do |k,v| - cmd << (v.nil? ? "env##{k}" : "env.#{k}=#{v}") - end -end - -# remove deleted env -if orig_env = orig["env"] - env ||= {} - deleted_keys = orig_env.keys - env.keys - deleted_keys.each { |k| cmd << "env##{k}" } -end +update_cmd_env(cmd, orig, sink) +# both of these default to false %w(nonblock active).each do |field| - if sink.key?(field) - cmd << "#{field}=#{sink[field] ? 'true' : 'false'}" - end + cmd << "#{field}=#{sink[field] ? 'true' : 'false'}" end %w(prio pipe_size).each do |field| value = sink[field] and cmd << "#{field}=#{value}" end +# nil OK %w(command).each do |field| - value = sink[field] - cmd << "#{field}=#{value}" + cmd << "#{field}=#{sink[field]}" end c.req_ok(cmd) diff --git a/bin/dtas-sourceedit b/bin/dtas-sourceedit index 7e30e6b..2a61e36 100755 --- a/bin/dtas-sourceedit +++ b/bin/dtas-sourceedit @@ -2,20 +2,16 @@ # -*- encoding: binary -*- # Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) -require 'tempfile' -require 'yaml' -require 'dtas/unix_client' -require 'dtas/disclaimer' -editor = ENV["VISUAL"] || ENV["EDITOR"] || "vi" -c = DTAS::UNIXClient.new -usage = "#$0 <sox|av>" +require 'dtas/edit_client' +include DTAS::EditClient +c = client_socket +sources = c.req('source ls') || "(unknown)" +usage = "Usage: #{DTAS_PROGNAME} SOURCENAME\n" \ + "available SOURCENAME values: #{sources}" ARGV.size <= 1 or abort usage name = ARGV[0] || "sox" -tmp = Tempfile.new(%w(dtas-sourceedit .yml)) -tmp.sync = true -tmp.binmode - +tmp = tmpyaml buf = c.req(%W(source cat #{name})) abort(buf) if buf =~ /\AERR/ orig = YAML.load(buf) @@ -27,22 +23,11 @@ tmp.rewind source = YAML.load(tmp.read) cmd = %W(source ed #{name}) -if env = source["env"] - env.each do |k,v| - cmd << (v.nil? ? "env##{k}" : "env.#{k}=#{v}") - end -end - -# remove deleted env -if orig_env = orig["env"] - env ||= {} - deleted_keys = orig_env.keys - env.keys - deleted_keys.each { |k| cmd << "env##{k}" } -end +update_cmd_env(cmd, orig, source) -%w(command).each do |field| - value = source[field] - cmd << "#{field}=#{value}" +# nil OK +%w(tryorder command).each do |field| + cmd << "#{field}=#{source[field]}" end c.req_ok(cmd) diff --git a/lib/dtas/disclaimer.rb b/lib/dtas/disclaimer.rb index 608956d..5747971 100644 --- a/lib/dtas/disclaimer.rb +++ b/lib/dtas/disclaimer.rb @@ -2,17 +2,18 @@ # :enddoc: # Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) +DTAS_PROGNAME = File.basename($0) DTAS_DISCLAIMER = <<EOF # WARNING! # -# Ignorant or improper use of #$0 may lead to +# Ignorant or improper use of #{DTAS_PROGNAME} may lead to # data loss, hearing loss, and damage to audio equipment. # # Please read and understand the documentation of all commands you # attempt to configure. # -# #$0 will never prevent you from doing stupid things. +# #{DTAS_PROGNAME} will never prevent you from doing stupid things. # -# There is no warranty, the developers of #$0 +# There is no warranty, the developers of #{DTAS_PROGNAME} # are not responsible for your actions. EOF diff --git a/lib/dtas/edit_client.rb b/lib/dtas/edit_client.rb new file mode 100644 index 0000000..3a6a9e9 --- /dev/null +++ b/lib/dtas/edit_client.rb @@ -0,0 +1,48 @@ +# -*- encoding: binary -*- +# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> +# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) +require 'tempfile' +require 'yaml' +require_relative 'unix_client' +require_relative 'disclaimer' + +# common code between dtas-sourceedit and dtas-sinkedit +module DTAS::EditClient # :nodoc: + def editor + %w(VISUAL EDITOR).each do |key| + v = ENV[key] or next + v.empty? and next + return v + end + "vi" + end + + def client_socket + DTAS::UNIXClient.new + rescue + e = "DTAS_PLAYER_SOCK=#{DTAS::UNIXClient.default_path}" + abort "dtas-player not running on #{e}" + end + + def tmpyaml + tmp = Tempfile.new(%W(#{File.basename($0)} .yml)) + tmp.sync = true + tmp.binmode + tmp + end + + def update_cmd_env(cmd, orig, updated) + if env = updated["env"] + env.each do |k,v| + cmd << (v.nil? ? "env##{k}" : "env.#{k}=#{v}") + end + end + + # remove deleted env + if orig_env = orig["env"] + env ||= {} + deleted_keys = orig_env.keys - env.keys + deleted_keys.each { |k| cmd << "env##{k}" } + end + end +end |