Sha256: 24a448bbc94dcc2310b3166ac711347fdfc68ecc96ab31c53bfc24198ec75a27

Contents?: true

Size: 1.83 KB

Versions: 10

Compression:

Stored size: 1.83 KB

Contents

module Kagu

  class Tracks

    include Enumerable

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

    def each(&block)
      return unless block_given?
      Kagu.logger.debug('Kagu') { 'Loading library tracks' }
      attributes = {}
      SwiftHelper.execute(%Q{
        import iTunesLibrary

        func printObjectProperty<T: Encodable>(name: String, value: T?) {
          let jsonEncoder = JSONEncoder()
          let jsonData = try! jsonEncoder.encode(value)
          let json = String(data: jsonData, encoding: String.Encoding.utf8)
          print("\\(name)=\\(json!)")
        }

        let library = try! ITLibrary(apiVersion: "1")
        for track in library.allMediaItems.filter({ $0.mediaKind == ITLibMediaItemMediaKind.kindSong }) {
          print("BEGIN_TRACK")
          printObjectProperty(name: "added_at", value: track.addedDate!.timeIntervalSince1970)
          printObjectProperty(name: "album", value: track.album.title)
          printObjectProperty(name: "artist", value: track.artist!.name)
          printObjectProperty(name: "bpm", value: track.beatsPerMinute)
          printObjectProperty(name: "genre", value: track.genre)
          printObjectProperty(name: "id", value: String(track.persistentID.uint64Value, radix: 16).uppercased())
          printObjectProperty(name: "length", value: track.totalTime)
          printObjectProperty(name: "path", value: track.location)
          printObjectProperty(name: "title", value: track.title)
          printObjectProperty(name: "year", value: track.year)
          print("END_TRACK")
        }
      }) do |line|
        if line == 'BEGIN_TRACK'
          attributes = {}
        elsif line == 'END_TRACK'
          yield(Track.new(attributes))
        elsif match = /(^\w+)=(.*)/.match(line)
          attributes[match[1]] = JSON.parse(match[2])
        end
      end
    end

  end

end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
kagu-3.0.9 lib/kagu/tracks.rb
kagu-3.0.8 lib/kagu/tracks.rb
kagu-3.0.7 lib/kagu/tracks.rb
kagu-3.0.6 lib/kagu/tracks.rb
kagu-3.0.5 lib/kagu/tracks.rb
kagu-3.0.4 lib/kagu/tracks.rb
kagu-3.0.3 lib/kagu/tracks.rb
kagu-3.0.2 lib/kagu/tracks.rb
kagu-3.0.1 lib/kagu/tracks.rb
kagu-3.0.0 lib/kagu/tracks.rb