Class: TivoHMO::Adapters::Plex::Episode

Inherits:
Object
  • Object
show all
Includes:
GemLogger::LoggerSupport, TivoHMO::API::Item, Config::Mixin
Defined in:
lib/tivohmo/adapters/plex/episode.rb

Instance Attribute Summary collapse

Attributes included from TivoHMO::API::Item

#file, #subtitle

Attributes included from TivoHMO::API::Node

#app, #children, #content_type, #created_at, #identifier, #modified_at, #parent, #root, #source_format, #title

Instance Method Summary collapse

Methods included from TivoHMO::API::Item

#to_s, #transcoder

Methods included from TivoHMO::API::Node

#add_child, #app?, #find, #root?, #title_path, #to_s, #tree_string

Constructor Details

#initialize(delegate, subtitle = nil) ⇒ Episode

Returns a new instance of Episode.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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

Instance Attribute Details

#delegateObject (readonly)

Returns the value of attribute delegate.



12
13
14
# File 'lib/tivohmo/adapters/plex/episode.rb', line 12

def delegate
  @delegate
end

Instance Method Details

#lookup_series_idObject

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



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# 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

#metadataObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/tivohmo/adapters/plex/episode.rb', line 34

def 
  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::::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