dtas 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Documentation/dtas-console.txt +6 -0
- data/Documentation/dtas-ctl.txt +6 -0
- data/Documentation/dtas-cueedit.txt +6 -0
- data/Documentation/dtas-enq.txt +6 -0
- data/Documentation/dtas-msinkctl.txt +6 -0
- data/Documentation/dtas-player.txt +21 -14
- data/Documentation/dtas-player_effects.txt +6 -0
- data/Documentation/dtas-player_protocol.txt +14 -0
- data/Documentation/dtas-player_sink_examples.txt +30 -0
- data/Documentation/dtas-sinkedit.txt +6 -0
- data/Documentation/dtas-sourceedit.txt +15 -1
- data/Documentation/dtas-xdelay.txt +19 -6
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +20 -1
- data/HACKING +9 -0
- data/INSTALL +17 -10
- data/README +10 -10
- data/Rakefile +3 -1
- data/bin/dtas-console +7 -2
- data/bin/dtas-ctl +0 -3
- data/bin/dtas-cueedit +5 -6
- data/bin/dtas-enq +0 -1
- data/bin/dtas-msinkctl +0 -1
- data/bin/dtas-player +4 -2
- data/bin/dtas-sinkedit +0 -1
- data/bin/dtas-sourceedit +23 -9
- data/bin/dtas-xdelay +1 -1
- data/dtas-linux.gemspec +3 -1
- data/dtas-mpris.gemspec +0 -1
- data/lib/dtas.rb +0 -1
- data/lib/dtas/buffer.rb +0 -1
- data/lib/dtas/buffer/read_write.rb +0 -1
- data/lib/dtas/buffer/splice.rb +0 -1
- data/lib/dtas/command.rb +0 -1
- data/lib/dtas/compat_onenine.rb +0 -1
- data/lib/dtas/disclaimer.rb +5 -6
- data/lib/dtas/edit_client.rb +0 -1
- data/lib/dtas/format.rb +1 -5
- data/lib/dtas/pipe.rb +0 -1
- data/lib/dtas/player.rb +6 -2
- data/lib/dtas/player/client_handler.rb +33 -3
- data/lib/dtas/process.rb +5 -5
- data/lib/dtas/replaygain.rb +0 -1
- data/lib/dtas/rg_state.rb +3 -2
- data/lib/dtas/serialize.rb +0 -1
- data/lib/dtas/sigevent.rb +0 -1
- data/lib/dtas/sigevent/efd.rb +0 -1
- data/lib/dtas/sigevent/pipe.rb +0 -1
- data/lib/dtas/sink.rb +0 -1
- data/lib/dtas/source.rb +0 -1
- data/lib/dtas/source/av.rb +1 -2
- data/lib/dtas/source/av_ff_common.rb +67 -24
- data/lib/dtas/source/cmd.rb +0 -1
- data/lib/dtas/source/common.rb +0 -1
- data/lib/dtas/source/ff.rb +1 -2
- data/lib/dtas/source/file.rb +0 -1
- data/lib/dtas/source/mp3gain.rb +1 -2
- data/lib/dtas/source/sox.rb +6 -5
- data/lib/dtas/state_file.rb +2 -1
- data/lib/dtas/unix_accepted.rb +0 -1
- data/lib/dtas/unix_client.rb +5 -3
- data/lib/dtas/unix_server.rb +0 -1
- data/lib/dtas/util.rb +0 -1
- data/lib/dtas/writable_iter.rb +0 -1
- data/lib/dtas/xs.rb +14 -0
- data/setup.rb +0 -1
- data/test/covshow.rb +0 -1
- data/test/helper.rb +0 -1
- data/test/player_integration.rb +0 -1
- data/test/test_buffer.rb +0 -1
- data/test/test_format.rb +0 -1
- data/test/test_format_change.rb +0 -1
- data/test/test_player.rb +0 -1
- data/test/test_player_client_handler.rb +12 -1
- data/test/test_player_integration.rb +18 -1
- data/test/test_process.rb +7 -1
- data/test/test_rg_integration.rb +0 -1
- data/test/test_rg_state.rb +0 -1
- data/test/test_sink.rb +0 -1
- data/test/test_sink_pipe_size.rb +0 -1
- data/test/test_sink_tee_integration.rb +0 -1
- data/test/test_source_av.rb +2 -3
- data/test/test_source_sox.rb +0 -1
- data/test/test_unixserver.rb +0 -1
- data/test/test_util.rb +0 -1
- metadata +3 -5
- data/Documentation/troubleshooting.txt +0 -18
- data/pkg.mk +0 -28
data/README
CHANGED
|
@@ -68,15 +68,20 @@ See http://www.git-scm.com/ for more information on git.
|
|
|
68
68
|
|
|
69
69
|
## Contact
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
All feedback (comments, results, feature requests, bug reports, patches,
|
|
72
|
+
pull-requests) via plain-text mail to the mailing list is very much
|
|
73
|
+
appreciated.
|
|
73
74
|
|
|
74
|
-
Please send plain-text
|
|
75
|
-
HTML will not be read. dtas is for GUI-phobes, by GUI-phobes
|
|
76
|
-
|
|
75
|
+
Please send plain-text mail to the list at <dtas-all@nongnu.org>\
|
|
76
|
+
HTML will not be read. dtas is for GUI-phobes, by GUI-phobes.\
|
|
77
|
+
Mailing list archives available at <ftp://lists.gnu.org/dtas-all/>\
|
|
78
|
+
No subscription is necessary to post to the mailing list.
|
|
77
79
|
|
|
78
80
|
## Copyright
|
|
79
81
|
|
|
82
|
+
Copyright 2013, Eric Wong <normalperson@yhbt.net> and all contributors.\
|
|
83
|
+
License: GPLv3 or later <http://www.gnu.org/licenses/gpl-3.0.txt>
|
|
84
|
+
|
|
80
85
|
dtas is copyrighted Free Software by all contributors, see logs
|
|
81
86
|
in revision control for names and email addresses of all of them.
|
|
82
87
|
|
|
@@ -93,11 +98,6 @@ for more details.
|
|
|
93
98
|
You should have received a copy of the GNU General Public License along
|
|
94
99
|
with this program; if not, see https://www.gnu.org/licenses/gpl-3.0.txt
|
|
95
100
|
|
|
96
|
-
dtas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
97
|
-
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
98
|
-
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
99
|
-
for more details.
|
|
100
|
-
|
|
101
101
|
Note: The GPL does not and can not apply to external commands run by
|
|
102
102
|
dtas scripts, so users _may_ run any non-Free Software you want via dtas
|
|
103
103
|
(just like one may do so via bash). However, the dtas project does not
|
data/Rakefile
CHANGED
|
@@ -41,7 +41,8 @@ if ! File.exist?(manifest) || File.stat(manifest).mtime < gitidx.mtime
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
fp.write("\n# COPYRIGHT\n")
|
|
44
|
-
|
|
44
|
+
bdfl = 'Eric Wong <normalperson@yhbt.net>'
|
|
45
|
+
fp.puts "Copyright (C) 2013, #{bdfl} and all contributors"
|
|
45
46
|
fp.puts "License: GPLv3 or later (http://www.gnu.org/licenses/gpl-3.0.txt)"
|
|
46
47
|
end
|
|
47
48
|
end
|
|
@@ -70,6 +71,7 @@ task :rsync_docs do
|
|
|
70
71
|
files = []
|
|
71
72
|
|
|
72
73
|
# git-set-file-times is distributed with rsync,
|
|
74
|
+
# Also available at: http://yhbt.net/git-set-file-times
|
|
73
75
|
# on Debian systems: /usr/share/doc/rsync/scripts/git-set-file-times.gz
|
|
74
76
|
sh("git", "set-file-times", "Documentation")
|
|
75
77
|
|
data/bin/dtas-console
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
# -*- encoding: binary -*-
|
|
3
2
|
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
4
3
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
5
4
|
#
|
|
6
5
|
# Note: no idea what I'm doing, especially w.r.t. curses
|
|
7
6
|
require 'dtas/unix_client'
|
|
8
7
|
require 'dtas/rg_state'
|
|
8
|
+
require 'dtas/sigevent'
|
|
9
9
|
require 'curses'
|
|
10
10
|
require 'yaml'
|
|
11
11
|
|
|
12
|
+
se = DTAS::Sigevent.new
|
|
13
|
+
trap(:WINCH) { se.signal }
|
|
12
14
|
w = DTAS::UNIXClient.new
|
|
13
15
|
w.req_ok('watch')
|
|
14
16
|
c = DTAS::UNIXClient.new
|
|
15
17
|
cur = YAML.load(c.req('current'))
|
|
16
|
-
readable = [ w, $stdin ]
|
|
18
|
+
readable = [ se, w, $stdin ]
|
|
17
19
|
|
|
18
20
|
# current rg mode
|
|
19
21
|
rg_mode = DTAS::RGState::RG_MODE.keys.unshift("off")
|
|
@@ -146,6 +148,9 @@ begin
|
|
|
146
148
|
r = IO.select(readable, nil, nil, current ? interval : nil) or next
|
|
147
149
|
r[0].each do |io|
|
|
148
150
|
case io
|
|
151
|
+
when se
|
|
152
|
+
se.readable_iter {} # noop, just consume the event
|
|
153
|
+
Curses.clear
|
|
149
154
|
when w
|
|
150
155
|
event = w.res_wait
|
|
151
156
|
events << "#{Time.now.strftime(tfmt)} #{event}"
|
data/bin/dtas-ctl
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
# -*- encoding: binary -*-
|
|
3
2
|
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
4
3
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
5
4
|
require 'dtas/unix_client'
|
|
6
5
|
|
|
7
|
-
# Unix paths are encoding agnostic
|
|
8
|
-
ARGV.map! { |arg| arg.b }
|
|
9
6
|
c = DTAS::UNIXClient.new
|
|
10
7
|
puts c.req(ARGV)
|
data/bin/dtas-cueedit
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
# -*- encoding: binary -*-
|
|
3
2
|
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
4
3
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
5
4
|
require 'tempfile'
|
|
6
|
-
require '
|
|
5
|
+
require 'dtas/xs'
|
|
7
6
|
usage = "Usage: #$0 FILENAME"
|
|
8
7
|
editor = ENV["VISUAL"] || ENV["EDITOR"] || "vi"
|
|
9
8
|
ARGV.size > 0 or abort usage
|
|
9
|
+
include DTAS::XS
|
|
10
10
|
|
|
11
11
|
def err_msg(cmd, status)
|
|
12
|
-
|
|
13
|
-
"E: #{err_cmd} failed: #{status.inspect}"
|
|
12
|
+
"E: #{xs(cmd)} failed: #{status.inspect}"
|
|
14
13
|
end
|
|
15
14
|
|
|
16
15
|
def x!(*cmd)
|
|
@@ -52,7 +51,7 @@ ARGV.each do |file|
|
|
|
52
51
|
# avoid an expensive update if the user didn't change anything
|
|
53
52
|
current = File.binread(tmp.path)
|
|
54
53
|
if current == original
|
|
55
|
-
$stderr.puts "tags for #{
|
|
54
|
+
$stderr.puts "tags for #{xs(Array(file))} unchanged" if $DEBUG
|
|
56
55
|
next
|
|
57
56
|
end
|
|
58
57
|
|
|
@@ -68,7 +67,7 @@ ARGV.each do |file|
|
|
|
68
67
|
warn err_msg(cmd, $?)
|
|
69
68
|
warn "E: restoring original from backup"
|
|
70
69
|
x!(*%W(metaflac --import-cuesheet-from=#{backup.path} #{file}))
|
|
71
|
-
warn "E: backup cuesheet restored, #{
|
|
70
|
+
warn "E: backup cuesheet restored, #{xs(Array(file))} unchanged"
|
|
72
71
|
exit(false)
|
|
73
72
|
end
|
|
74
73
|
ensure
|
data/bin/dtas-enq
CHANGED
data/bin/dtas-msinkctl
CHANGED
data/bin/dtas-player
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
# -*- encoding: binary -*-
|
|
3
2
|
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
4
3
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
5
4
|
Thread.abort_on_exception = $stderr.sync = $stdout.sync = true
|
|
@@ -27,7 +26,10 @@ else
|
|
|
27
26
|
player.socket = sock
|
|
28
27
|
end
|
|
29
28
|
|
|
30
|
-
at_exit
|
|
29
|
+
at_exit do
|
|
30
|
+
player.close
|
|
31
|
+
Process.waitall
|
|
32
|
+
end
|
|
31
33
|
player.bind
|
|
32
34
|
trap(:INT) { exit }
|
|
33
35
|
trap(:TERM) { exit }
|
data/bin/dtas-sinkedit
CHANGED
data/bin/dtas-sourceedit
CHANGED
|
@@ -1,27 +1,37 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
# -*- encoding: binary -*-
|
|
3
2
|
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
4
3
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
5
4
|
require 'dtas/edit_client'
|
|
6
5
|
include DTAS::EditClient
|
|
7
6
|
c = client_socket
|
|
8
7
|
sources = c.req('source ls') || "(unknown)"
|
|
9
|
-
usage = "Usage: #{DTAS_PROGNAME} SOURCENAME\n" \
|
|
8
|
+
usage = "Usage: #{DTAS_PROGNAME} [-n|--dry-run][-V|--verbose] SOURCENAME\n" \
|
|
10
9
|
"available SOURCENAME values: #{sources}"
|
|
10
|
+
|
|
11
|
+
# use a real option parser if we have anything more complex
|
|
12
|
+
dry_run = !!(ARGV.delete('-n') || ARGV.delete('--dry-run'))
|
|
13
|
+
verbose = !!(ARGV.delete('-V') || ARGV.delete('--verbose'))
|
|
14
|
+
|
|
11
15
|
ARGV.size <= 1 or abort usage
|
|
12
16
|
name = ARGV[0] || "sox"
|
|
13
17
|
|
|
14
|
-
|
|
18
|
+
st_in = $stdin.stat
|
|
19
|
+
|
|
15
20
|
buf = c.req(%W(source cat #{name}))
|
|
16
21
|
abort(buf) if buf =~ /\AERR/
|
|
17
22
|
orig = YAML.load(buf)
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
tmp
|
|
23
|
-
|
|
24
|
+
if st_in.file? || st_in.pipe?
|
|
25
|
+
tmp = $stdin
|
|
26
|
+
else
|
|
27
|
+
tmp = tmpyaml
|
|
28
|
+
tmp.write(buf << DTAS_DISCLAIMER)
|
|
29
|
+
cmd = "#{editor} #{tmp.path}"
|
|
30
|
+
system(cmd) or abort "#{cmd} failed: #$?"
|
|
31
|
+
tmp.rewind
|
|
32
|
+
end
|
|
24
33
|
|
|
34
|
+
source = YAML.load(tmp.read)
|
|
25
35
|
cmd = %W(source ed #{name})
|
|
26
36
|
update_cmd_env(cmd, orig, source)
|
|
27
37
|
|
|
@@ -30,4 +40,8 @@ update_cmd_env(cmd, orig, source)
|
|
|
30
40
|
cmd << "#{field}=#{source[field]}"
|
|
31
41
|
end
|
|
32
42
|
|
|
33
|
-
|
|
43
|
+
if verbose || dry_run
|
|
44
|
+
warn Shellwords.join(cmd)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
c.req_ok(cmd) unless dry_run
|
data/bin/dtas-xdelay
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
# -*- encoding: binary -*-
|
|
3
2
|
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
4
3
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
5
4
|
USAGE = "Usage: #$0 [-x FREQ] [-l] /dev/fd/LO /dev/fd/HI DELAY [DELAY ...]"
|
|
@@ -74,6 +73,7 @@ when "sox"
|
|
|
74
73
|
args.unshift "sox"
|
|
75
74
|
args.concat(%W(-t#{out_type} -c#{out_channels} -r#{out_rate} -))
|
|
76
75
|
when "play"
|
|
76
|
+
args.unshift "-q"
|
|
77
77
|
args.unshift "play"
|
|
78
78
|
else
|
|
79
79
|
abort "BUG: bad cmd=#{cmd.inspect}"
|
data/dtas-linux.gemspec
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
2
|
+
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
|
+
#
|
|
2
4
|
# this just declares dependencies to make gem installation a little easier
|
|
3
5
|
# for Linux users
|
|
4
6
|
Gem::Specification.new do |s|
|
data/dtas-mpris.gemspec
CHANGED
data/lib/dtas.rb
CHANGED
data/lib/dtas/buffer.rb
CHANGED
data/lib/dtas/buffer/splice.rb
CHANGED
data/lib/dtas/command.rb
CHANGED
data/lib/dtas/compat_onenine.rb
CHANGED
data/lib/dtas/disclaimer.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- encoding: binary -*-
|
|
2
1
|
# :enddoc:
|
|
3
2
|
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
4
3
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
@@ -6,14 +5,14 @@ DTAS_PROGNAME = File.basename($0)
|
|
|
6
5
|
DTAS_DISCLAIMER = <<EOF
|
|
7
6
|
# WARNING!
|
|
8
7
|
#
|
|
9
|
-
# Ignorant or improper use of #{DTAS_PROGNAME}
|
|
10
|
-
# data loss, hearing loss, and damage to audio equipment.
|
|
8
|
+
# Ignorant or improper use of #{DTAS_PROGNAME}
|
|
9
|
+
# may lead to data loss, hearing loss, and damage to audio equipment.
|
|
11
10
|
#
|
|
12
11
|
# Please read and understand the documentation of all commands you
|
|
13
12
|
# attempt to configure.
|
|
14
13
|
#
|
|
15
|
-
#
|
|
14
|
+
# dtas will never prevent you from doing stupid things.
|
|
16
15
|
#
|
|
17
|
-
# There is no warranty, the developers of
|
|
18
|
-
#
|
|
16
|
+
# There is no warranty, the developers of dtas are not responsible
|
|
17
|
+
# for your actions.
|
|
19
18
|
EOF
|
data/lib/dtas/edit_client.rb
CHANGED
data/lib/dtas/format.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- encoding: binary -*-
|
|
2
1
|
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
3
2
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
3
|
# class represents an audio format (type/bits/channels/sample rate/...)
|
|
@@ -9,6 +8,7 @@ require_relative 'serialize'
|
|
|
9
8
|
class DTAS::Format # :nodoc:
|
|
10
9
|
include DTAS::Process
|
|
11
10
|
include DTAS::Serialize
|
|
11
|
+
|
|
12
12
|
NATIVE_ENDIAN = [1].pack("l") == [1].pack("l>") ? "big" : "little"
|
|
13
13
|
|
|
14
14
|
attr_accessor :type # s32, f32, f64 ... any point in others?
|
|
@@ -63,10 +63,6 @@ class DTAS::Format # :nodoc:
|
|
|
63
63
|
%W(-f #{@type}_#{endian2},#@channels,#@rate)
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
-
def inspect
|
|
67
|
-
"<#{self.class}(#{Shellwords.join(to_sox_arg)})>"
|
|
68
|
-
end
|
|
69
|
-
|
|
70
66
|
def to_hsh
|
|
71
67
|
to_hash.delete_if { |k,v| v == FORMAT_DEFAULTS[k] }
|
|
72
68
|
end
|
data/lib/dtas/pipe.rb
CHANGED
data/lib/dtas/player.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# -*- encoding: binary -*-
|
|
2
1
|
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
3
2
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
3
|
require 'yaml'
|
|
5
4
|
require 'shellwords'
|
|
6
5
|
require_relative '../dtas'
|
|
6
|
+
require_relative 'xs'
|
|
7
7
|
require_relative 'source'
|
|
8
8
|
require_relative 'source/sox'
|
|
9
9
|
require_relative 'source/av'
|
|
@@ -18,6 +18,7 @@ require_relative 'state_file'
|
|
|
18
18
|
|
|
19
19
|
class DTAS::Player # :nodoc:
|
|
20
20
|
require_relative 'player/client_handler'
|
|
21
|
+
include DTAS::XS
|
|
21
22
|
include DTAS::Player::ClientHandler
|
|
22
23
|
attr_accessor :state_file
|
|
23
24
|
attr_accessor :socket
|
|
@@ -52,7 +53,7 @@ class DTAS::Player # :nodoc:
|
|
|
52
53
|
end
|
|
53
54
|
|
|
54
55
|
def echo(msg)
|
|
55
|
-
msg =
|
|
56
|
+
msg = xs(Array(msg))
|
|
56
57
|
@watchers.delete_if do |io, _|
|
|
57
58
|
if io.closed?
|
|
58
59
|
true
|
|
@@ -211,6 +212,8 @@ class DTAS::Player # :nodoc:
|
|
|
211
212
|
io.emit("OK")
|
|
212
213
|
when "source"
|
|
213
214
|
source_handler(io, msg)
|
|
215
|
+
when "state"
|
|
216
|
+
state_file_handler(io, msg)
|
|
214
217
|
when "cd"
|
|
215
218
|
chdir_handler(io, msg)
|
|
216
219
|
when "pwd"
|
|
@@ -416,6 +419,7 @@ class DTAS::Player # :nodoc:
|
|
|
416
419
|
end while true
|
|
417
420
|
ensure
|
|
418
421
|
__current_requeue
|
|
422
|
+
stop_sinks
|
|
419
423
|
trap(:CHLD, old_chld)
|
|
420
424
|
sev.close if sev
|
|
421
425
|
# for state file
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
# -*- encoding: binary -*-
|
|
2
1
|
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
3
2
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
|
+
require_relative '../xs'
|
|
4
4
|
module DTAS::Player::ClientHandler # :nodoc:
|
|
5
|
+
include DTAS::XS
|
|
5
6
|
|
|
6
7
|
# returns true on success, wait_ctl arg on error
|
|
7
8
|
def set_bool(io, kv, v)
|
|
@@ -116,7 +117,7 @@ module DTAS::Player::ClientHandler # :nodoc:
|
|
|
116
117
|
name = msg[1]
|
|
117
118
|
case msg[0]
|
|
118
119
|
when "ls"
|
|
119
|
-
io.emit(
|
|
120
|
+
io.emit(xs(@sinks.keys.sort))
|
|
120
121
|
when "rm"
|
|
121
122
|
sink = @sinks.delete(name) or return io.emit("ERR #{name} not found")
|
|
122
123
|
drop_sink(sink)
|
|
@@ -384,7 +385,7 @@ module DTAS::Player::ClientHandler # :nodoc:
|
|
|
384
385
|
def restart_pipeline
|
|
385
386
|
return if @paused
|
|
386
387
|
__current_requeue
|
|
387
|
-
|
|
388
|
+
stop_sinks
|
|
388
389
|
end
|
|
389
390
|
|
|
390
391
|
def format_handler(io, msg)
|
|
@@ -415,6 +416,14 @@ module DTAS::Player::ClientHandler # :nodoc:
|
|
|
415
416
|
end
|
|
416
417
|
|
|
417
418
|
def env_handler(io, msg)
|
|
419
|
+
if msg.empty?
|
|
420
|
+
# this may fail for large envs due to SEQPACKET size restrictions
|
|
421
|
+
# do we care?
|
|
422
|
+
env = ENV.map do |k,v|
|
|
423
|
+
"#{Shellwords.escape(k)}=#{Shellwords.escape(v)}"
|
|
424
|
+
end.join(' ')
|
|
425
|
+
return io.emit(env)
|
|
426
|
+
end
|
|
418
427
|
msg.each do |kv|
|
|
419
428
|
case kv
|
|
420
429
|
when %r{\A([^=]+)=(.*)\z}
|
|
@@ -478,5 +487,26 @@ module DTAS::Player::ClientHandler # :nodoc:
|
|
|
478
487
|
# echo(%W(cd msg[0])) # should we broadcast this?
|
|
479
488
|
io.emit("OK")
|
|
480
489
|
end
|
|
490
|
+
|
|
491
|
+
def state_file_handler(io, msg)
|
|
492
|
+
case msg.shift
|
|
493
|
+
when "dump"
|
|
494
|
+
dest = msg.shift
|
|
495
|
+
if dest
|
|
496
|
+
sf = DTAS::StateFile.new(dest, false)
|
|
497
|
+
elsif @state_file
|
|
498
|
+
sf = @state_file
|
|
499
|
+
dest = sf.path
|
|
500
|
+
else
|
|
501
|
+
return io.emit("ERR no state file configured")
|
|
502
|
+
end
|
|
503
|
+
begin
|
|
504
|
+
sf.dump(self)
|
|
505
|
+
rescue => e
|
|
506
|
+
return io.emit("ERR dumping to #{xs(Array(dest))} #{e.message}")
|
|
507
|
+
end
|
|
508
|
+
end
|
|
509
|
+
io.emit("OK")
|
|
510
|
+
end
|
|
481
511
|
end
|
|
482
512
|
# :startdoc:
|