dtas 0.13.0 → 0.13.1
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/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
|