Sha256: 52d8d35670646a62fe3a32dba9053a0056ce318dbf959383d7d7dd7b2f4fe326

Contents?: true

Size: 1.19 KB

Versions: 9

Compression:

Stored size: 1.19 KB

Contents

module Kagu

  class Tracks

    include Enumerable

    EXTENSIONS = %w(.aac .flac .mp3 .wav).freeze

    attr_reader :library

    def initialize(library)
      raise ArgumentError.new("#{self.class}#library must be a library, #{library.inspect} given") unless library.is_a?(Library)
      @library = library
    end

    def each(&block)
      return unless block_given?
      Kagu.logger.debug('Kagu') { "Loading iTunes library tracks from #{library.path.inspect}" }
      File.open(library.path, 'r') do |file|
        while !file.eof? && (line = file.readline.strip)
          next unless line.starts_with?('<key>Track ID</key>')
          attributes = {}
          begin
            match = line.match(/<key>(.+)<\/key><(\w+)>(.*)<\/\2>/)
            next unless match
            name = "itunes_#{match[1].downcase.gsub(' ', '_')}"
            value = match[3]
            attributes[name] = value
          end while (line = file.readline.strip) != '</dict>'
          yield(Track.new(attributes)) if attributes['itunes_track_type'] == 'File' && attributes['itunes_podcast'].blank? && EXTENSIONS.include?(File.extname(attributes['itunes_location'].try(:downcase)))
        end
      end
    end

  end

end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
kagu-2.0.1 lib/kagu/tracks.rb
kagu-2.0.0 lib/kagu/tracks.rb
kagu-1.2.3 lib/kagu/tracks.rb
kagu-1.2.2 lib/kagu/tracks.rb
kagu-1.2.1 lib/kagu/tracks.rb
kagu-1.2.0 lib/kagu/tracks.rb
kagu-1.1.2 lib/kagu/tracks.rb
kagu-1.1.1 lib/kagu/tracks.rb
kagu-1.1.0 lib/kagu/tracks.rb