ruby-mp3info 0.6.9 → 0.6.10

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 0.6.10 / 2008-11-27
2
+
3
+ * processing of tags (read and write) can be disabled with :parse_tags => false
4
+
1
5
  === 0.6.9 / 2008-09-16
2
6
 
3
7
  * now correctly remove trailing whitespaces form tag1 values
data/lib/mp3info.rb CHANGED
@@ -18,7 +18,7 @@ end
18
18
 
19
19
  class Mp3Info
20
20
 
21
- VERSION = "0.6.9"
21
+ VERSION = "0.6.10"
22
22
 
23
23
  LAYER = [ nil, 3, 2, 1]
24
24
  BITRATE = {
@@ -189,12 +189,18 @@ class Mp3Info
189
189
  end
190
190
  end
191
191
 
192
- # Instantiate Mp3Info object with name +filename+ and an
193
- # options hash for ID3v2#new underlying object
194
- def initialize(filename, id3v2_options = {})
192
+ # Instantiate Mp3Info object with name +filename+.
193
+ # options hash is used for ID3v2#new.
194
+ # You can specify :parse_tags => false to disable the processing
195
+ # of the tags (read and write).
196
+ def initialize(filename, options = {})
195
197
  warn("#{self.class}::new() does not take block; use #{self.class}::open() instead") if block_given?
196
198
  @filename = filename
197
- @id3v2_options = id3v2_options
199
+ @tag_parsing_enabled = options.delete(:parse_tags)
200
+ if @tag_parsing_enabled == nil
201
+ @tag_parsing_enabled = true
202
+ end
203
+ @id3v2_options = options
198
204
  reload
199
205
  end
200
206
 
@@ -204,46 +210,44 @@ class Mp3Info
204
210
 
205
211
  @header = {}
206
212
 
207
- @tag1 = {}
208
- @tag1.extend(HashKeys)
209
-
210
- @tag2 = ID3v2.new(@id3v2_options)
211
-
212
213
  @file = File.new(filename, "rb")
213
214
  @file.extend(Mp3FileMethods)
215
+ @tag1 = @tag = @tag1_orig = @tag_orig = {}
216
+ @tag1.extend(HashKeys)
217
+ @tag2 = ID3v2.new(@id3v2_options)
214
218
 
215
219
  begin
216
- parse_tags
217
- @tag1_orig = @tag1.dup
218
-
219
- @tag = {}
220
+ if @tag_parsing_enabled
221
+ parse_tags
222
+ @tag1_orig = @tag1.dup
220
223
 
221
- if hastag1?
222
- @tag = @tag1.dup
223
- end
224
+ if hastag1?
225
+ @tag = @tag1.dup
226
+ end
224
227
 
225
- if hastag2?
226
- @tag = {}
227
- # creation of a sort of "universal" tag, regardless of the tag version
228
- tag2_mapping = @tag2.version =~ /^2\.2/ ? TAG_MAPPING_2_2 : TAG_MAPPING_2_3
229
- tag2_mapping.each do |key, tag2_name|
230
- tag_value = (@tag2[tag2_name].is_a?(Array) ? @tag2[tag2_name].first : @tag2[tag2_name])
231
- next unless tag_value
232
- @tag[key] = tag_value.is_a?(Array) ? tag_value.first : tag_value
233
-
234
- if %w{year tracknum}.include?(key)
235
- @tag[key] = tag_value.to_i
236
- end
237
- # this is a special case with id3v2.2, which uses
238
- # old fashionned id3v1 genres
239
- if tag2_name == "TCO" && tag_value =~ /^\((\d+)\)$/
240
- @tag["genre_s"] = GENRES[$1.to_i]
228
+ if hastag2?
229
+ @tag = {}
230
+ # creation of a sort of "universal" tag, regardless of the tag version
231
+ tag2_mapping = @tag2.version =~ /^2\.2/ ? TAG_MAPPING_2_2 : TAG_MAPPING_2_3
232
+ tag2_mapping.each do |key, tag2_name|
233
+ tag_value = (@tag2[tag2_name].is_a?(Array) ? @tag2[tag2_name].first : @tag2[tag2_name])
234
+ next unless tag_value
235
+ @tag[key] = tag_value.is_a?(Array) ? tag_value.first : tag_value
236
+
237
+ if %w{year tracknum}.include?(key)
238
+ @tag[key] = tag_value.to_i
239
+ end
240
+ # this is a special case with id3v2.2, which uses
241
+ # old fashionned id3v1 genres
242
+ if tag2_name == "TCO" && tag_value =~ /^\((\d+)\)$/
243
+ @tag["genre_s"] = GENRES[$1.to_i]
244
+ end
241
245
  end
242
- end
243
- end
246
+ end
244
247
 
245
- @tag.extend(HashKeys)
246
- @tag_orig = @tag.dup
248
+ @tag.extend(HashKeys)
249
+ @tag_orig = @tag.dup
250
+ end
247
251
 
248
252
 
249
253
  ### extracts MPEG info from MPEG header and stores it in the hash @mpeg
@@ -420,6 +424,9 @@ class Mp3Info
420
424
  # Flush pending modifications to tags and close the file
421
425
  def close
422
426
  puts "close" if $DEBUG
427
+ if !@tag_parsing_enabled
428
+ return
429
+ end
423
430
  if @tag != @tag_orig
424
431
  puts "@tag has changed" if $DEBUG
425
432
 
data/lib/mp3info/id3v2.rb CHANGED
@@ -103,6 +103,7 @@ class ID3v2 < DelegateClass(Hash)
103
103
  # for read and write tag2 values.
104
104
  attr_reader :options
105
105
 
106
+ # possible options are described above ('options' attribute)
106
107
  # you can access this object like an hash, with [] and []= methods
107
108
  # special cases are ["disc_number"] and ["disc_total"] mirroring TPOS attribute
108
109
  def initialize(options = {})
@@ -452,6 +452,22 @@ class Mp3InfoTest < Test::Unit::TestCase
452
452
  end
453
453
  end
454
454
 
455
+ def test_parse_tags_disabled
456
+ write_temp_file(DUMMY_TAG2)
457
+ Mp3Info.open(TEMP_FILE, :parse_tags => false) do |mp3|
458
+ assert mp3.tag.empty?
459
+ assert mp3.tag1.empty?
460
+ assert mp3.tag2.empty?
461
+ mp3.tag["artist"] = "some dummy tag"
462
+ mp3.tag2["TIT2"] = "title 2"
463
+ mp3.flush
464
+ # tag should not be written
465
+ assert mp3.tag.empty?
466
+ assert mp3.tag1.empty?
467
+ assert mp3.tag2.empty?
468
+ end
469
+ end
470
+
455
471
  def compute_audio_content_mp3_digest(mp3)
456
472
  pos, size = mp3.audio_content
457
473
  data = File.open(mp3.filename) do |f|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-mp3info
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.9
4
+ version: 0.6.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guillaume Pierronnet
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-16 00:00:00 +02:00
12
+ date: 2008-11-27 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency