Sha256: b30c008161f6355fd1968887650d2ff428b338781f843f88300377bb8c2904af

Contents?: true

Size: 1.37 KB

Versions: 3

Compression:

Stored size: 1.37 KB

Contents

module Kagu

  class Playlists

    include Enumerable

    def build(attributes = {})
      Playlist.new(attributes)
    end

    def create(attributes = {})
      build(attributes).tap(&:save)
    end

    def each(&block)
      return unless block_given?
      Kagu.logger.debug('Kagu') { 'Loading library playlists' }
      tracks = {}.tap do |tracks|
        Tracks.new.each { |track| tracks[track.id] = track }
      end
      playlist_name = nil
      playlist_tracks = []
      SwiftHelper.execute(%Q{
        import iTunesLibrary

        let library = try! ITLibrary(apiVersion: "1")
        for playlist in library.allPlaylists.filter({ !$0.isMaster }) {
          print("BEGIN_PLAYLIST")
          print(playlist.name)
          for track in playlist.items.filter({ $0.mediaKind == ITLibMediaItemMediaKind.kindSong }) {
            print(String(track.persistentID.uint64Value, radix: 16).uppercased())
          }
          print("END_PLAYLIST")
        }
      }).each do |line|
        if line == 'BEGIN_PLAYLIST'
          playlist_name = nil
          playlist_tracks = []
        elsif line == 'END_PLAYLIST'
          yield(Playlist.new(name: playlist_name, tracks: playlist_tracks)) if playlist_name.present?
        elsif playlist_name.nil?
          playlist_name = line
        else
          playlist_tracks << tracks[line]
        end
      end
      nil
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kagu-3.2.0 lib/kagu/playlists.rb
kagu-3.1.0 lib/kagu/playlists.rb
kagu-3.0.10 lib/kagu/playlists.rb