From 2907cc6dd0b0d2d80d44ae292a157651d6e05ee7 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 26 Aug 2013 05:25:22 +0000 Subject: player: flesh out multi-source in protocol/sourceedit We should be fully-capable of managing any number of options to try sources in. --- lib/dtas/player/client_handler.rb | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'lib/dtas/player') diff --git a/lib/dtas/player/client_handler.rb b/lib/dtas/player/client_handler.rb index e08d9a3..d580695 100644 --- a/lib/dtas/player/client_handler.rb +++ b/lib/dtas/player/client_handler.rb @@ -419,28 +419,39 @@ module DTAS::Player::ClientHandler # :nodoc: end def source_handler(io, msg) - case msg.shift + map = @source_map + op = msg.shift + if op == "ls" + s = map.keys.sort { |a,b| map[a].tryorder <=> map[b].tryorder } + return io.emit(s.join(' ')) + end + + name = msg.shift + src = map[name] or return io.emit("ERR non-existent source name") + case op when "cat" - io.emit({ - "command" => @srccmd || DTAS::Source::Sox::SOX_DEFAULTS["command"], - "env" => @srcenv, - }.to_yaml) + io.emit(src.to_source_cat.to_yaml) when "ed" - before = [ @srccmd, @srcenv ].inspect + before = src.to_state_hash + sd = src.source_defaults msg.each do |kv| k, v = kv.split(/=/, 2) case k when "command" - @srccmd = v.empty? ? nil : v + src.command = v.empty? ? sd[k] : v when %r{\Aenv\.([^=]+)\z} - @srcenv[$1] = v + src.env[$1] = v when %r{\Aenv#([^=]+)\z} v == nil or return io.emit("ERR unset env has no value") - @srcenv.delete($1) + src.env.delete($1) + when "tryorder" + rv = set_int(io, kv, v, true) { |i| src.tryorder = i || sd[k] } + rv == true or return rv + source_map_reload end end - after = [ @srccmd, @srcenv ].inspect - __current_requeue if before != after + after = src.to_state_hash + __current_requeue if before != after && @current.class == before.class io.emit("OK") else io.emit("ERR unknown source op") -- cgit v1.2.3-24-ge0c7