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, username = nil, password = nil) ⇒ Opensubtitles
constructor
A new instance of Opensubtitles.
- #logout ⇒ Object
- #search_subtitles(media, &block) ⇒ Object
- #status ⇒ Object
Constructor Details
#initialize(languages, username = nil, password = nil) ⇒ Opensubtitles
Returns a new instance of Opensubtitles.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 6 def initialize(languages, username = nil, password = nil) @languages = languages @username = username @password = password @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
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 62 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 result = download_subtitle(media, subtitle) if result == true block.call :downloaded, subtitle else block.call :download_failed, subtitle, result end end end end |
#has_found_subtitles?(media) ⇒ Boolean
58 59 60 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 58 def has_found_subtitles?(media) (Opensubtitles.subtitles[media] && Opensubtitles.subtitles[media].any?) == true end |
#logout ⇒ Object
24 25 26 27 28 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 24 def logout response = make_call("LogOut", get_token) parse_response! response @token = nil if response[:success] end |
#search_subtitles(media, &block) ⇒ Object
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 55 56 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 30 def search_subtitles(media, &block) = languages.map(&:to_sym).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
88 89 90 |
# File 'lib/apple_tv_converter/subtitles_fetcher/opensubtitles.rb', line 88 def status make_call('ServerInfo') end |