about summary refs log tree commit homepage
path: root/lib/dtas/player
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-08-26 05:25:22 +0000
committerEric Wong <normalperson@yhbt.net>2013-08-26 05:25:22 +0000
commit2907cc6dd0b0d2d80d44ae292a157651d6e05ee7 (patch)
treeeba4f5253a37039acc8ec16cb0998ac2fe0a64b7 /lib/dtas/player
parent3d96e3d4a3ad7fbf45b38c81478f04cffb329e25 (diff)
downloaddtas-2907cc6dd0b0d2d80d44ae292a157651d6e05ee7.tar.gz
We should be fully-capable of managing any number of options
to try sources in.
Diffstat (limited to 'lib/dtas/player')
-rw-r--r--lib/dtas/player/client_handler.rb33
1 files changed, 22 insertions, 11 deletions
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")