dtas 0.13.0 → 0.13.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/GIT-VERSION-GEN +1 -1
- data/INSTALL +3 -3
- data/bin/dtas-mlib +1 -1
- data/bin/dtas-tl +46 -13
- data/lib/dtas/mlib.rb +12 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22d6c76202aedaacaf6ed0beb48a801f4d7f5e45
|
4
|
+
data.tar.gz: f7f54c79b652b9539f8b639c42ffb89bf041b161
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c47a803a3f398c8ceaddfe17f50ff5a23028688effca8baa3d3c0ecaf71d842b8905a91a25b4a8fb2908af00f32bf908f4850011a0bb529e8e218ccbdfcf36f8
|
7
|
+
data.tar.gz: 9fe65caf3eb58e7faefda98952d2ba44f97b10c45f5d6cc5d7a86780d105e4c5b22fc0f04fb55ff4d6ceaa03e77361caca6776e3bf8dd6235701883b52df50b8
|
data/GIT-VERSION-GEN
CHANGED
data/INSTALL
CHANGED
@@ -39,10 +39,10 @@ For future upgrades of dtas (upgrades to dtas-linux will be infrequent)
|
|
39
39
|
|
40
40
|
Grab the latest tarball from our HTTP site:
|
41
41
|
|
42
|
-
http://dtas.80x24.org/2016/dtas-0.13.
|
42
|
+
http://dtas.80x24.org/2016/dtas-0.13.1.tar.gz
|
43
43
|
|
44
|
-
$ tar zxvf dtas-0.13.
|
45
|
-
$ cd dtas-0.13.
|
44
|
+
$ tar zxvf dtas-0.13.1.tar.gz
|
45
|
+
$ cd dtas-0.13.1
|
46
46
|
$ sudo ruby setup.rb
|
47
47
|
|
48
48
|
GNU/Linux users may optionally install "io_splice" and
|
data/bin/dtas-mlib
CHANGED
@@ -46,7 +46,7 @@ def mlib(db, migrate = false)
|
|
46
46
|
when 'dump' # mainly for debugging
|
47
47
|
directory = ARGV.shift || '/'
|
48
48
|
mlib(db).dump(directory, {}, lambda do |parent, node, comments|
|
49
|
-
puts "Path: #{parent[:dirname]}
|
49
|
+
puts "Path: #{parent[:dirname]}#{node[:name]}"
|
50
50
|
puts "Length: #{node[:tlen]}"
|
51
51
|
return if comments.empty?
|
52
52
|
puts 'Comments:'
|
data/bin/dtas-tl
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
# Copyright (C) 2013-2016 all contributors <dtas-all@nongnu.org>
|
3
3
|
# License: GPL-3.0+ (https://www.gnu.org/licenses/gpl-3.0.txt)
|
4
4
|
# frozen_string_literal: true
|
5
|
+
# encoding: binary
|
5
6
|
# WARNING: totally unstable API, use dtas-ctl for scripting (but the protocol
|
6
7
|
# itself is also unstable, but better than this one probably).
|
7
8
|
require 'dtas/unix_client'
|
@@ -15,6 +16,11 @@ def get_track_ids(c)
|
|
15
16
|
track_ids
|
16
17
|
end
|
17
18
|
|
19
|
+
def fix_enc!(str, enc)
|
20
|
+
str.force_encoding(enc)
|
21
|
+
str.force_encoding(Encoding::ASCII_8BIT) unless str.valid_encoding?
|
22
|
+
end
|
23
|
+
|
18
24
|
def do_edit(c)
|
19
25
|
require 'dtas/edit_client'
|
20
26
|
require 'yaml'
|
@@ -25,12 +31,14 @@ def do_edit(c)
|
|
25
31
|
tmp_path = tmp.path
|
26
32
|
orig = []
|
27
33
|
orig_idx = {}
|
34
|
+
enc = Encoding.default_external
|
28
35
|
|
29
36
|
get_track_ids(c).each_slice(128) do |track_ids|
|
30
37
|
res = c.req("tl get #{track_ids.join(' ')}")
|
31
38
|
res = Shellwords.split(res.sub!(/\A\d+ /, ''))
|
32
39
|
while line = res.shift
|
33
|
-
line.sub!(/\A(\d+)
|
40
|
+
line.sub!(/\A(\d+)=/n, '') or abort "unexpected line=#{line.inspect}\n"
|
41
|
+
fix_enc!(line, enc)
|
34
42
|
track_id = $1.to_i
|
35
43
|
orig_idx[track_id] = orig.size
|
36
44
|
orig << track_id
|
@@ -58,18 +66,19 @@ def do_edit(c)
|
|
58
66
|
add = []
|
59
67
|
# editor may rename/link a new file into place
|
60
68
|
File.open(tmp_path) do |fp|
|
69
|
+
fp.binmode
|
61
70
|
while line = fp.gets
|
62
71
|
line.chomp!
|
63
|
-
if line.sub!(/ =(\d+)\z
|
72
|
+
if line.sub!(/ =(\d+)\z/n, '') # existing tracks
|
64
73
|
track_id = $1.to_i
|
65
74
|
if edit_idx[track_id] # somebody copy+pasted an existing line
|
66
|
-
add << [
|
75
|
+
add << [ line, edit.last ]
|
67
76
|
else # moved line
|
68
77
|
edit_idx[track_id] = edit.size
|
69
78
|
edit << track_id
|
70
79
|
end
|
71
80
|
else # entirely new line
|
72
|
-
add << [
|
81
|
+
add << [ line, edit.last ]
|
73
82
|
end
|
74
83
|
end
|
75
84
|
end
|
@@ -88,12 +97,31 @@ def do_edit(c)
|
|
88
97
|
end
|
89
98
|
|
90
99
|
prev_added_id = last_after_id = nil
|
100
|
+
non_existent = []
|
91
101
|
add.each do |path, after_id|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
102
|
+
orig = path
|
103
|
+
path = Shellwords.split(path)[0]
|
104
|
+
path = File.expand_path(path)
|
105
|
+
unless File.exist?(path)
|
106
|
+
path = orig.dup
|
107
|
+
fix_enc!(path, enc)
|
108
|
+
path = Shellwords.split(path)[0]
|
109
|
+
path = File.expand_path(path)
|
110
|
+
end
|
111
|
+
|
112
|
+
if File.exist?(path)
|
113
|
+
cmd = %W(tl add #{path})
|
114
|
+
id = after_id == last_after_id ? prev_added_id : after_id
|
115
|
+
cmd << id.to_s if id
|
116
|
+
prev_added_id = c.req(cmd).to_i
|
117
|
+
last_after_id = after_id
|
118
|
+
else
|
119
|
+
non_existent << orig
|
120
|
+
end
|
121
|
+
end
|
122
|
+
if non_existent[0]
|
123
|
+
$stderr.puts "Failed to add #{non_existent.size} paths"
|
124
|
+
non_existent.each { |path| $stderr.puts path }
|
97
125
|
end
|
98
126
|
ensure
|
99
127
|
tmp.close! if tmp
|
@@ -113,10 +141,15 @@ def add_after(c, argv, last_id)
|
|
113
141
|
c = DTAS::UNIXClient.new
|
114
142
|
case cmd = ARGV[0]
|
115
143
|
when "cat"
|
116
|
-
|
117
|
-
|
118
|
-
res.
|
119
|
-
|
144
|
+
enc = Encoding.default_external
|
145
|
+
get_track_ids(c).each_slice(128) do |track_ids|
|
146
|
+
res = c.req("tl get #{track_ids.join(' ')}")
|
147
|
+
res = Shellwords.split(res.sub!(/\A\d+ /, ''))
|
148
|
+
while line = res.shift
|
149
|
+
line.sub!(/\A(\d+)=/n, '') or abort "unexpected line=#{line.inspect}\n"
|
150
|
+
fix_enc!(line, enc)
|
151
|
+
print "#{line}\n"
|
152
|
+
end
|
120
153
|
end
|
121
154
|
when 'aac' # add-after-current
|
122
155
|
ARGV.shift
|
data/lib/dtas/mlib.rb
CHANGED
@@ -430,15 +430,25 @@ def remove_entry(node)
|
|
430
430
|
node_id = node[:id]
|
431
431
|
q = { parent_id: node_id }
|
432
432
|
nodes = @db[:nodes]
|
433
|
+
comments = @db[:comments]
|
434
|
+
|
435
|
+
# remove children, step 1
|
433
436
|
nodes.where(q).each do |nd|
|
434
|
-
|
437
|
+
nd_id = nd[:id]
|
438
|
+
next if nd_id == root_id
|
435
439
|
case nd[:tlen]
|
436
440
|
when DM_DIR, DM_IGN
|
437
441
|
remove_entry(nd)
|
442
|
+
else
|
443
|
+
comments.where(node_id: nd_id).delete
|
438
444
|
end
|
439
445
|
end
|
446
|
+
|
447
|
+
# remove children, step 2
|
440
448
|
nodes.where(q).delete
|
441
|
-
|
449
|
+
|
450
|
+
# finally remove ourselves
|
451
|
+
comments.where(node_id: node_id).delete
|
442
452
|
nodes.where(id: node_id).delete
|
443
453
|
end
|
444
454
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dtas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dtas hackers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |-
|
14
14
|
Free Software command-line tools for audio playback, mastering, and
|