about summary refs log tree commit homepage
path: root/lib/dtas/player.rb
diff options
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)
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')
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:
   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.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)