Class: AppleTvConverter::SubtitlesFetcher::Opensubtitles
- Inherits:
-
Object
- Object
- AppleTvConverter::SubtitlesFetcher::Opensubtitles
- Defined in:
- lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb
Instance Attribute Summary collapse
-
#languages ⇒ Object
readonly
Returns the value of attribute languages.
-
#token ⇒ Object
readonly
Returns the value of attribute token.
Instance Method Summary collapse
- #download_subtitles(media, &block) ⇒ Object
- #has_found_subtitles?(media) ⇒ Boolean
-
#initialize(languages) ⇒ Opensubtitles
constructor
A new instance of Opensubtitles.
- #logout ⇒ Object
- #search_subtitles(media, &block) ⇒ Object
- #status ⇒ Object
Constructor Details
#initialize(languages) ⇒ Opensubtitles
Returns a new instance of Opensubtitles.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 6 def initialize(languages) @languages = languages @server = XMLRPC::Client.new(SERVER, PATH, PORT) @token = nil if block_given? begin yield self rescue raise ensure logout end end end |
Instance Attribute Details
#languages ⇒ Object (readonly)
Returns the value of attribute languages.
4 5 6 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 4 def languages @languages end |
#token ⇒ Object (readonly)
Returns the value of attribute token.
4 5 6 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 4 def token @token end |
Instance Method Details
#download_subtitles(media, &block) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 60 def download_subtitles(media, &block) return unless has_found_subtitles? media data = Opensubtitles.subtitles[media] media_subtitles = filter_subtitles(data, media) # If we have subtitles matched by moviehash, get only the first and ignore the rest # otherwise, get all media_subtitles = Hash[*media_subtitles.map { |language, subs| [language, [ subs.detect { |s| s['MatchedBy'] } || subs ].flatten ] }.flatten(1) ] block.call :search, media_subtitles if block # We now have one or many subtitles per language code, so start downloading media_subtitles.each do |language_code, subtitles| subtitles.each do |subtitle| block.call :downloading, subtitle download_subtitle(media, subtitle) block.call :downloaded, subtitle end end end |
#has_found_subtitles?(media) ⇒ Boolean
56 57 58 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 56 def has_found_subtitles?(media) (Opensubtitles.subtitles[media] && Opensubtitles.subtitles[media].any?) == true end |
#logout ⇒ Object
22 23 24 25 26 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 22 def logout response = make_call("LogOut", get_token) parse_response! response @token = nil if response[:success] end |
#search_subtitles(media, &block) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 28 def search_subtitles(media, &block) = languages.map(&:to_s).join(',') if languages.any? = [] # Query by movie hash << { :moviehash => media.movie_hash.to_s, :moviebytesize => media.movie_file_size.to_s } # Query by movie name << { :query => media.show } # and IMDB id if present .last[:imdb_id] = media.imdb_id if media.imdb_id # Add common options .each do |query_option| query_option[:sublanguageid] = if query_option[:season] = media.season if media.is_tv_show_episode? query_option[:episode] = media.number if media.is_tv_show_episode? end response = search_for_subtitles(media, ) if response[:success] && response['data'] Opensubtitles.subtitles[media] = response['data'] block.call response['data'] if block end end |
#status ⇒ Object
82 83 84 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 82 def status make_call('ServerInfo') end |