class AtomicTV::AtomicParsleyTagger

Attributes

file_path[R]
metadata[R]

Public Class Methods

executable() click to toggle source
# File lib/AtomicTV/atomic_parsley_tagger.rb, line 35
def self.executable
  path = Pathname.new(`which AtomicParsley`.chomp)
  raise AtomicParsleyUnavailable unless path.executable?
  path
end
new(file_path, metadata) click to toggle source
# File lib/AtomicTV/atomic_parsley_tagger.rb, line 41
def initialize(file_path, metadata)
  @file_path = file_path
  raise FileNotFound.new(file_path) unless file_path.exist?
  
  @metadata = metadata
end

Public Instance Methods

cast_metadata() click to toggle source
# File lib/AtomicTV/atomic_parsley_tagger.rb, line 48
def cast_metadata
  format_names = lambda {|name| {'name' => name}}
  {
    'cast' => metadata.actors.map(&format_names),
    'directors' => metadata.directors.map(&format_names),
    'screenwriters' => metadata.writers.map(&format_names)
  }.to_plist
end
run() click to toggle source
# File lib/AtomicTV/atomic_parsley_tagger.rb, line 57
def run
  options = {
    'stik' => metadata.media_type,
    'artist' => metadata.artist,
    'title' => metadata.title,
    'album' => metadata.album,
    'genre' => metadata.genre,
    'description' => metadata.description,
    'longdesc' => metadata.long_description,
    'TVNetwork' => metadata.tv_network,
    'TVShowName' => metadata.tv_show_name,
    'TVEpisode' => metadata.tv_episode,
    'TVSeasonNum' => metadata.tv_season_number,
    'TVEpisodeNum' => metadata.tv_episode_number,
    'tracknum' => metadata.track_number,
    'year' => metadata.air_date
  }
  
  metadata.with_loaded_posters do
    command =  %Q{#{self.class.executable} }
    command << %Q{"#{file_path}" }
    command << %Q{--overWrite }
    command << %Q{--rDNSatom "#{escape_double_quotes(cast_metadata)}" name=iTunMOVI domain=com.apple.iTunes }
    metadata.posters.each do |poster|
      command << %Q{--artwork #{poster.path} }
    end
    command << options.map {|option, value| %Q{--#{option} "#{escape_double_quotes(value)}"}}.join(' ')
    
    `#{command}`
    raise TaggingError.new(command) unless $?.success?
  end
end

Private Instance Methods

escape_double_quotes(str) click to toggle source
# File lib/AtomicTV/atomic_parsley_tagger.rb, line 94
def escape_double_quotes(str)
  str.to_s.gsub('"', '\"')
end