Skip to content

Commit

Permalink
add ability to optionally hardcode subtitles when present
Browse files Browse the repository at this point in the history
  • Loading branch information
wr0ngway committed Jan 10, 2015
1 parent 5f45b69 commit df079f8
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 6 deletions.
26 changes: 26 additions & 0 deletions lib/tivohmo/adapters/plex/category.rb
Expand Up @@ -56,8 +56,14 @@ def children
Array(listing).each do |media|
if media.is_a?(::Plex::Movie)
add_child(Movie.new(media))
subtitles(media).each do |sub|
add_child(Movie.new(media, sub))
end
elsif media.is_a?(::Plex::Episode)
add_child(Episode.new(media))
subtitles(media).each do |sub|
add_child(Episode.new(media, sub))
end
elsif media.is_a?(::Plex::Show)
add_child(Show.new(media))
else
Expand All @@ -70,6 +76,26 @@ def children
super
end

def subtitles(item_delegate)
subs = []

item_delegate.medias.find do |media|
media.parts.find do |part|
part.streams.find do |stream|
if stream.respond_to?(:codec) && stream.codec == 'srt'
if stream.respond_to?(:language) && stream.respond_to?(:language_code)
subs << {language: stream.language, language_code: stream.language_code}
else
logger.warn "Subtitles not in plex naming standard for #{item_delegate.title}"
end
end
end
end
end

subs
end

end

end
Expand Down
10 changes: 7 additions & 3 deletions lib/tivohmo/adapters/plex/episode.rb
Expand Up @@ -8,15 +8,19 @@ class Episode
include TivoHMO::API::Item
include GemLogger::LoggerSupport

attr_reader :delegate
attr_reader :delegate, :subtitle

def initialize(delegate)
def initialize(delegate, subtitle=nil)
# delegate is a Plex::Episode
@delegate = delegate

super(delegate.key)

@subtitle = subtitle

self.title = delegate.title
self.title << " [#{subtitle[:language]} subtitled]" 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)
Expand All @@ -29,7 +33,7 @@ def metadata

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

rating_name = delegate.content_rating.upcase
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}
Expand Down
10 changes: 7 additions & 3 deletions lib/tivohmo/adapters/plex/movie.rb
Expand Up @@ -6,15 +6,19 @@ class Movie
include TivoHMO::API::Item
include GemLogger::LoggerSupport

attr_reader :delegate
attr_reader :delegate, :subtitle

def initialize(delegate)
def initialize(delegate, subtitle=nil)
# delegate is a Plex::Movie
@delegate = delegate

super(delegate.key)

@subtitle = subtitle

self.title = delegate.title
self.title << " [#{subtitle[:language]} subtitled]" 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)
Expand All @@ -27,7 +31,7 @@ def metadata

md.movie_year = Time.parse(delegate.originally_available_at).year rescue nil

rating_name = delegate.content_rating.upcase
rating_name = delegate.content_rating.upcase rescue nil
rating_value = TivoHMO::API::Metadata::MPAA_RATINGS[rating_name]
if rating_value
md.mpaa_rating = {name: rating_name, value: rating_value}
Expand Down
31 changes: 31 additions & 0 deletions lib/tivohmo/adapters/plex/transcoder.rb
Expand Up @@ -12,6 +12,37 @@ def initialize(item)
self.source_filename = CGI.unescape(item.delegate.medias.first.parts.first.file)
end

def transcode(writeable_io, format="video/x-tivo-mpeg")
# TODO: mark as watched in plex
super
end

def transcoder_options(format="video/x-tivo-mpeg")
opts = super

if item.respond_to?(:subtitle) && item.subtitle
logger.debug "Subtitles present for #{item}"
code = item.subtitle[:language_code].downcase
sub_file_glob = source_filename.chomp(File.extname(source_filename)) + ".*.srt"

sub_file = Dir[sub_file_glob].find do |f|
file_code = f.split('.')[-2].downcase
file_code == code || file_code.starts_with?(code) || code.starts_with?(file_code)
end

if sub_file
logger.debug "Using subtitles present at: #{sub_file}"
opts[:custom] ? (opts[:custom] << " ") : (opts[:custom] = "")
opts[:custom] << "-vf subtitles=\"#{sub_file}\""
else
logger.debug "Could not find subtitles for: #{item}"
end
end

opts
end


end

end
Expand Down

0 comments on commit df079f8

Please sign in to comment.