id3lib-ruby 0.4.0-mswin32 → 0.4.1-mswin32
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.
- data/CHANGES +6 -1
- data/README +3 -3
- data/Rakefile +2 -2
- data/TODO +3 -1
- data/ext/mswin32/id3lib_api.so +0 -0
- data/lib/id3lib/info.rb +1 -1
- data/test/test_reading.rb +0 -5
- data/test/test_unicode.rb +75 -0
- data/test/test_writing.rb +10 -34
- metadata +5 -3
data/CHANGES
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
= id3lib-ruby changes
|
2
2
|
|
3
|
+
=== 0.4.1 (r53)
|
4
|
+
|
5
|
+
* Added :description to the allowed fields of :TXXX frames (patch 5484).
|
6
|
+
* Added more tests and a warning in README for writing of UTF-16 frames.
|
7
|
+
|
3
8
|
=== 0.4.0 (r41)
|
4
9
|
|
5
10
|
* Fixed Unicode problems (bug 4768).
|
6
11
|
* Renamed ID3Lib::API methods to be more like the id3lib method names.
|
7
|
-
|
12
|
+
E.g. the GetType() method is now named get_type instead of type.
|
8
13
|
|
9
14
|
=== 0.3.1 (r32)
|
10
15
|
|
data/README
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
= id3lib-ruby
|
3
2
|
|
4
3
|
id3lib-ruby provides a Ruby interface to the id3lib C++ library for easily
|
@@ -9,12 +8,12 @@ The class documentation starts at ID3Lib::Tag.
|
|
9
8
|
|
10
9
|
== Features
|
11
10
|
|
12
|
-
* Read and write ID3v1
|
11
|
+
* Read and write ID3v1 and ID3v2 tags
|
13
12
|
* Simple interface for adding, changing and removing frames
|
14
13
|
* Quick access to common text frames like title and performer
|
15
14
|
* Custom data frames like attached picture (APIC)
|
16
15
|
* Pretty complete coverage of id3lib's features
|
17
|
-
* UTF-16 support
|
16
|
+
* UTF-16 support (warning: id3lib writes broken UTF-16 frames)
|
18
17
|
* Windows binary gem available
|
19
18
|
|
20
19
|
See TODO for planned features.
|
@@ -40,6 +39,7 @@ Manual installation:
|
|
40
39
|
|
41
40
|
ruby setup.rb
|
42
41
|
|
42
|
+
|
43
43
|
== Usage
|
44
44
|
|
45
45
|
require 'rubygems'
|
data/Rakefile
CHANGED
@@ -10,7 +10,7 @@ require 'rake/testtask'
|
|
10
10
|
require 'rake/rdoctask'
|
11
11
|
|
12
12
|
|
13
|
-
PKG_VERSION = '0.4.
|
13
|
+
PKG_VERSION = '0.4.1'
|
14
14
|
|
15
15
|
FILES_COMMON = FileList[
|
16
16
|
'lib/**/*.rb',
|
@@ -109,7 +109,7 @@ task :web => [:web_doc] do
|
|
109
109
|
puts "scp -r web/doc robinstocker@rubyforge.org:/var/www/gforge-projects/id3lib-ruby/"
|
110
110
|
end
|
111
111
|
|
112
|
-
desc "Generate RDOC documentation
|
112
|
+
desc "Generate RDOC documentation for web."
|
113
113
|
Rake::RDocTask.new :web_doc do |rdoc|
|
114
114
|
rdoc.rdoc_dir = 'web/doc'
|
115
115
|
rdoc.title = 'id3lib-ruby'
|
data/TODO
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
= id3lib-ruby to-do list
|
2
2
|
|
3
|
-
* Evaluate
|
3
|
+
* Evaluate an object-oriented way to handle frames, instead of with hashes.
|
4
|
+
* Make the update! method intelligent, because the call of strip each time
|
5
|
+
is very slow and stupid.
|
4
6
|
* Add UTF-8 support if id3lib can handle it.
|
data/ext/mswin32/id3lib_api.so
CHANGED
Binary file
|
data/lib/id3lib/info.rb
CHANGED
@@ -142,7 +142,7 @@ module ID3Lib
|
|
142
142
|
[76, :TSRC, "ISRC (international standard recording code)", [:textenc, :text]],
|
143
143
|
[77, :TSSE, "Software/Hardware and settings used for encoding", [:textenc, :text]],
|
144
144
|
[78, :TSST, "Set subtitle", [:textenc, :text]],
|
145
|
-
[79, :TXXX, "User defined text information", [:textenc, :text]],
|
145
|
+
[79, :TXXX, "User defined text information", [:textenc, :description, :text]],
|
146
146
|
[80, :TYER, "Year", [:textenc, :text]],
|
147
147
|
# Special frames again
|
148
148
|
[81, :UFID, "Unique file identifier", [:owner, :data]],
|
data/test/test_reading.rb
CHANGED
@@ -39,11 +39,6 @@ class TestReading < Test::Unit::TestCase
|
|
39
39
|
assert_equal 'Dummy Comment 2', two[:text]
|
40
40
|
end
|
41
41
|
|
42
|
-
def test_unicode
|
43
|
-
@tag = ID3Lib::Tag.new('test/data/unicode.mp3', ID3Lib::V2)
|
44
|
-
assert_equal "\x4f\x60\x59\x7d", @tag.title
|
45
|
-
end
|
46
|
-
|
47
42
|
def test_has_tag
|
48
43
|
assert @tag.has_tag?(ID3Lib::V1)
|
49
44
|
assert @tag.has_tag?(ID3Lib::V2)
|
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'id3lib'
|
5
|
+
|
6
|
+
|
7
|
+
class TestUnicode < Test::Unit::TestCase
|
8
|
+
|
9
|
+
Sample = 'test/data/sample.mp3'
|
10
|
+
Temp = 'test/data/tmp.sample.mp3'
|
11
|
+
|
12
|
+
def setup
|
13
|
+
FileUtils.cp Sample, Temp
|
14
|
+
@tag = ID3Lib::Tag.new(Temp)
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
FileUtils.rm Temp
|
19
|
+
end
|
20
|
+
|
21
|
+
# Failing because of id3lib.
|
22
|
+
def dont_test_UTF16BE
|
23
|
+
do_unicode_test :text => "\x4f\x60\x59\x7d", :textenc => 2
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_UTF16LE
|
27
|
+
do_unicode_test :text => "\x60\x4f\x7d\x59", :textenc => 1
|
28
|
+
end
|
29
|
+
|
30
|
+
# Failing because of id3lib.
|
31
|
+
def dont_test_UTF16BE_with_BOM
|
32
|
+
do_unicode_test :text => "\xfe\xff\x4f\x60\x59\x7d", :textenc => 1
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_UTF16LE_with_BOM
|
36
|
+
do_unicode_test :text => "\xff\xfe\x60\x4f\x7d\x59", :textenc => 1
|
37
|
+
end
|
38
|
+
|
39
|
+
# Failing because of id3lib.
|
40
|
+
def dont_test_UTF16BE_above_127
|
41
|
+
do_unicode_test :text => "\xfe\xffC\346", :textenc => 1
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_UTF16LE_above_127
|
45
|
+
do_unicode_test :text => "\xe6C", :textenc => 1
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_UTF16LE_above_127_with_BOM
|
49
|
+
do_unicode_test :text => "\xff\xfe\xe6C", :textenc => 1
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_reading
|
53
|
+
@tag = ID3Lib::Tag.new('test/data/unicode.mp3', ID3Lib::V2)
|
54
|
+
assert_equal "\x4f\x60\x59\x7d", @tag.title
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_invalid_data
|
58
|
+
nonstr = 1
|
59
|
+
@tag.reject!{ |f| f[:id] == :TIT2 }
|
60
|
+
@tag << {:id => :TIT2, :text => nonstr, :textenc => 1}
|
61
|
+
assert_raise(TypeError) { @tag.update!(ID3Lib::V2) }
|
62
|
+
end
|
63
|
+
|
64
|
+
def do_unicode_test(opts)
|
65
|
+
frame = {:id => :TIT2}
|
66
|
+
frame.update(opts)
|
67
|
+
@tag.title = nil
|
68
|
+
@tag << frame
|
69
|
+
@tag.update!(ID3Lib::V2)
|
70
|
+
assert_equal frame, @tag.frame(:TIT2)
|
71
|
+
@tag = ID3Lib::Tag.new(Temp, ID3Lib::V2)
|
72
|
+
assert_equal frame, @tag.frame(:TIT2)
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
data/test/test_writing.rb
CHANGED
@@ -32,7 +32,7 @@ class TestWriting < Test::Unit::TestCase
|
|
32
32
|
reload!
|
33
33
|
assert_equal 'New Title', @tag.title
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def test_genre
|
37
37
|
@tag.genre = 'Rock'
|
38
38
|
assert_equal 'Rock', @tag.genre
|
@@ -41,7 +41,7 @@ class TestWriting < Test::Unit::TestCase
|
|
41
41
|
reload!
|
42
42
|
assert_equal 'Rock', @tag.genre
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
def test_id3v1_genre
|
46
46
|
@tag.strip!(ID3Lib::V2)
|
47
47
|
genre_id = '(' + ID3Lib::Info::Genres.index('Rock').to_s + ')'
|
@@ -75,7 +75,7 @@ class TestWriting < Test::Unit::TestCase
|
|
75
75
|
reload!
|
76
76
|
assert_equal '6', @tag.track
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
def test_year
|
80
80
|
@tag.year = '2001'
|
81
81
|
assert_equal '2001', @tag.year
|
@@ -105,7 +105,7 @@ class TestWriting < Test::Unit::TestCase
|
|
105
105
|
reload!
|
106
106
|
assert_equal 'New Comment', @tag.comment
|
107
107
|
end
|
108
|
-
|
108
|
+
|
109
109
|
def test_manual_frame
|
110
110
|
@tag << {:id => :TLAN, :text => 'zho'}
|
111
111
|
assert_equal 'zho', @tag.frame_text(:TLAN)
|
@@ -114,7 +114,7 @@ class TestWriting < Test::Unit::TestCase
|
|
114
114
|
reload!
|
115
115
|
assert_equal 'zho', @tag.frame_text(:TLAN)
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
118
|
def test_apic
|
119
119
|
pic = {
|
120
120
|
:id => :APIC,
|
@@ -130,17 +130,17 @@ class TestWriting < Test::Unit::TestCase
|
|
130
130
|
reload!
|
131
131
|
assert_equal pic, @tag.frame(:APIC)
|
132
132
|
end
|
133
|
-
|
133
|
+
|
134
134
|
def test_remove_frame
|
135
135
|
@tag.remove_frame(:TIT2)
|
136
136
|
assert_nil @tag.frame(:TIT2)
|
137
137
|
end
|
138
|
-
|
138
|
+
|
139
139
|
def test_remove_frame_with_direct_access
|
140
140
|
@tag.title = nil
|
141
141
|
assert_nil @tag.frame(:TIT2)
|
142
142
|
end
|
143
|
-
|
143
|
+
|
144
144
|
def test_wrong_frame
|
145
145
|
l = @tag.length
|
146
146
|
@tag << {:id => :WRONG, :text => "Test"}
|
@@ -149,14 +149,14 @@ class TestWriting < Test::Unit::TestCase
|
|
149
149
|
reload!
|
150
150
|
assert_equal l, @tag.length
|
151
151
|
end
|
152
|
-
|
152
|
+
|
153
153
|
def test_strip
|
154
154
|
@tag.strip!
|
155
155
|
assert @tag.empty?
|
156
156
|
reload!
|
157
157
|
assert @tag.empty?
|
158
158
|
end
|
159
|
-
|
159
|
+
|
160
160
|
def test_tagtype
|
161
161
|
@tag.strip!(ID3Lib::V1)
|
162
162
|
reload!(ID3Lib::V1)
|
@@ -169,30 +169,6 @@ class TestWriting < Test::Unit::TestCase
|
|
169
169
|
reload!
|
170
170
|
assert @tag.empty?
|
171
171
|
end
|
172
|
-
|
173
|
-
def test_unicode
|
174
|
-
nihao = "\x4f\x60\x59\x7d"
|
175
|
-
frame = {
|
176
|
-
:id => :COMM,
|
177
|
-
:text => nihao,
|
178
|
-
:description => nihao,
|
179
|
-
:language => "zho",
|
180
|
-
:textenc => 1
|
181
|
-
}
|
182
|
-
@tag.comment = nil
|
183
|
-
@tag << frame
|
184
|
-
@tag.update!(ID3Lib::V2)
|
185
|
-
assert_equal frame, @tag.frame(:COMM)
|
186
|
-
reload!(ID3Lib::V2)
|
187
|
-
assert_equal frame, @tag.frame(:COMM)
|
188
|
-
end
|
189
|
-
|
190
|
-
def test_unicode_invalid_data
|
191
|
-
nonstr = 1
|
192
|
-
@tag.reject!{ |f| f[:id] == :TIT2 }
|
193
|
-
@tag << {:id => :TIT2, :text => nonstr, :textenc => 1}
|
194
|
-
assert_raise(TypeError) { @tag.update!(ID3Lib::V2) }
|
195
|
-
end
|
196
172
|
|
197
173
|
def test_padding
|
198
174
|
assert_equal 2176, File.size(Temp)
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: id3lib-ruby
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.4.
|
7
|
-
date: 2006-
|
6
|
+
version: 0.4.1
|
7
|
+
date: 2006-08-24 00:00:00 +02:00
|
8
8
|
summary: id3lib-ruby provides a Ruby interface to the id3lib C++ library for easily editing ID3 tags (v1 and v2) like with pyid3lib.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -33,6 +33,7 @@ files:
|
|
33
33
|
- lib/id3lib.rb
|
34
34
|
- lib/id3lib/accessors.rb
|
35
35
|
- lib/id3lib/info.rb
|
36
|
+
- test/test_unicode.rb
|
36
37
|
- test/test_writing.rb
|
37
38
|
- test/test_reading.rb
|
38
39
|
- test/data/sample.mp3
|
@@ -46,6 +47,7 @@ files:
|
|
46
47
|
- CHANGES
|
47
48
|
- TODO
|
48
49
|
test_files:
|
50
|
+
- test/test_unicode.rb
|
49
51
|
- test/test_writing.rb
|
50
52
|
- test/test_reading.rb
|
51
53
|
rdoc_options:
|