about summary refs log tree commit homepage
path: root/lib/dtas/player.rb
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2014-12-28 00:43:07 +0000
committerEric Wong <e@80x24.org>2014-12-28 01:49:06 +0000
commita462961df2088af99e2e815ad60b8d838c9d062d (patch)
treef60f5b89c44dd2bf33739c4653d815b1bcf254ba /lib/dtas/player.rb
parent949dbe07c02919f8f17d7880bc69c3ee683daca4 (diff)
downloaddtas-a462961df2088af99e2e815ad60b8d838c9d062d.tar.gz
Since splitfx YAML files are intended to be frequently edited and
modified by the user, we'll support automatically restarting the
source when the user saves changes via their favorite $EDITOR

This change is only for Linux users.  However, sleepy_penguin
supports kqueue nowadays so a patch to support such functionality
would be appreciated.
Diffstat (limited to 'lib/dtas/player.rb')
-rw-r--r--lib/dtas/player.rb7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/dtas/player.rb b/lib/dtas/player.rb
index 0ae8cef..ea48926 100644
--- a/lib/dtas/player.rb
+++ b/lib/dtas/player.rb
@@ -385,6 +385,7 @@ class DTAS::Player # :nodoc:
   end
 
   def next_source(source_spec)
+    @current.respond_to?(:watch_end) and @current.watch_end(@srv)
     @current = nil
     if source_spec
       case source_spec
@@ -413,6 +414,12 @@ class DTAS::Player # :nodoc:
       dst = @sink_buf
       pending.dst_assoc(dst)
       pending.spawn(@format, @rg, out: dst.wr, in: "/dev/null")
+
+      # watch and restart on modifications
+      pending.respond_to?(:watch_begin) and
+        @srv.wait_ctl(pending.watch_begin(method(:__current_requeue)),
+                      :wait_readable)
+
       @current = pending
       @srv.wait_ctl(dst, :wait_readable)
       wall(msg)