class TivoHMO::Adapters::Plex::Episode

Attributes

delegate[R]

Public Class Methods

new(delegate, subtitle=nil) click to toggle source
Calls superclass method TivoHMO::API::Item::new
# File lib/tivohmo/adapters/plex/episode.rb, line 17
def initialize(delegate, subtitle=nil)
  # delegate is a Plex::Episode
  @delegate = delegate

  super(delegate.key)

  self.file = CGI.unescape(delegate.medias.first.parts.first.file)
  self.subtitle = subtitle

  self.title = delegate.title
  self.title = "[#{subtitle.language_code} #{subtitle.type} sub] #{self.title}" if subtitle

  self.modified_at = Time.at(delegate.updated_at.to_i)
  self.created_at = Time.parse(delegate.originally_available_at) rescue nil
  self.created_at ||= Time.at(delegate.added_at.to_i)
end

Public Instance Methods

lookup_series_id() click to toggle source

groups tv shows under same name if we can extract a seriesId

# File lib/tivohmo/adapters/plex/episode.rb, line 70
def lookup_series_id
  series_id = "SH%08i" % delegate.season.show.key.scan(/\d+/).first.to_i

  guid = delegate.guid
  if guid =~ /thetvdb:\/\/(\d+)/
    # zap2it ids allow tivo to show a relevant thumbnail image for the
    # series in the My Shows UI.
    tvdb_series_id = $1

    if config_get(:group_with_zap2it)
      begin
        tvdb_series = TVDBHelper.instance.find_by_id(tvdb_series_id)
        series_id = tvdb_series.zap2it_id
        series_id = series_id.sub(/^EP/, 'SH')
        logger.debug "Using zap2it series id: #{series_id}"
      rescue => e
        logger.log_exception e, "Failed to get zap2it series id", level: :warn
      end
    end

    series_id ||= "SH#{tvdb_series_id}"
  end

  series_id
end
metadata() click to toggle source
Calls superclass method TivoHMO::API::Item#metadata
# File lib/tivohmo/adapters/plex/episode.rb, line 34
def metadata
  md = super

  begin

    md.original_air_date = Time.parse(delegate.originally_available_at) rescue nil

    rating_name = delegate.content_rating.upcase rescue nil
    rating_value = TivoHMO::API::Metadata::TV_RATINGS[rating_name]
    if rating_value
      md.tv_rating = {name: rating_name, value: rating_value}
    end

    md.is_episode = true
    md.episode_number = "%i%02i" % [delegate.parent_index, delegate.index]
    md.series_title = delegate.grandparent_title
    md.episode_title = "%i - %s" % [md.episode_number, title]
    md.title = "%s - %s" % [delegate.grandparent_title, title]

    md.series_id = lookup_series_id

    md.actors = delegate.roles.collect(&:tag) rescue nil
    md.series_genres = delegate.genres.collect(&:tag) rescue nil

    %w[writers directors producers].each do |md_name|
      md.send("#{md_name}=", delegate.send(md_name).collect(&:tag)) rescue nil
    end

  rescue => e
    logger.log_exception e, "Failed to read plex metadata for #{self}"
  end

  md
end