Class: EasyTag::TaggerFactory
- Inherits:
-
Object
- Object
- EasyTag::TaggerFactory
- Defined in:
- lib/easytag/taggers/factory.rb
Class Method Summary collapse
- .open(file, &block) ⇒ Object
- .tagger_class(file) ⇒ Object
- .tagger_for_filename(fname) ⇒ Object
- .tagger_for_signature(bytes) ⇒ Object
Class Method Details
.open(file, &block) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/easytag/taggers/factory.rb', line 3 def self.open(file, &block) tagger_klass = tagger_class(file) if block_given? tagger = tagger_klass.new(file) begin block.call(tagger) ensure tagger.close end else tagger_klass.new(file) end end |
.tagger_class(file) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/easytag/taggers/factory.rb', line 18 def self.tagger_class(file) tagger_klass = tagger_for_filename(file) if tagger_klass.nil? data = nil File.open(file, 'rb') { |fp| data = fp.read(16) } tagger_klass = tagger_for_signature(data.bytes) end raise 'Could not determine file type' if tagger_klass.nil? tagger_klass end |
.tagger_for_filename(fname) ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'lib/easytag/taggers/factory.rb', line 30 def self.tagger_for_filename(fname) case fname.split('.')[-1].downcase.to_sym when :mp3; MP3Tagger when :mp4, :m4a; MP4Tagger when :flac; FLACTagger when :ogg; OggTagger else; nil end end |
.tagger_for_signature(bytes) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/easytag/taggers/factory.rb', line 40 def self.tagger_for_signature(bytes) case when bytes[0...11] == [0, 0, 0, 32, 102, 116, 121, 112, 77, 52, 65] # ...ftypM4A MP4Tagger when bytes[0...11] == [0, 0, 0, 24, 102, 116, 121, 112, 109, 112, 52] # ...ftypmp4 MP4Tagger when bytes[0...4] == [102, 76, 97, 67] # fLaC FLACTagger when bytes[0...4] == [79, 103, 103, 83] # OggS OggTagger when bytes[0...3] == [73, 68, 51] # ID3 MP3Tagger when bytes[0...2] == [255, 251] # FF FB MP3Tagger else nil end end |