Sha256: 4a773ceb3f5949de506444c14b267fb7b53e9ec8d0c2fd9bd6aea09d7eccc7f7

Contents?: true

Size: 1.33 KB

Versions: 3

Compression:

Stored size: 1.33 KB

Contents

require 'bencode'
class VideoTorrentInfo
  autoload :TorrentClient, 'torrent_client'
  autoload :FFmpegVideoInfo, 'ffmpeg_video_info'
  DEFAULTS = {
    port1: 8661,
    port2: 8662,
    temp_path: '/tmp',
    supported_extensions: %w{ .avi .mkv .mpg .mpeg .3gp .wmv .mov .flv .mts },
    download_limit: -1,
    timeout: 60
  }
  def initialize(params = {})
    @params = DEFAULTS.merge(params)
    @torrent_client = VideoTorrentInfo::TorrentClient.new
  end
  def load(torrent_path)
    dest = download_video(torrent_path)
    res = FFmpegVideoInfo.get(dest)
    File.unlink(dest)
    res
  end
  def download_video(torrent_path)
    string = File.open(torrent_path){ |file| file.read }
    torrent = string.bdecode
    files = get_video_files(torrent)
    @torrent_client.load(torrent_path, files.keys.first, @params[:download_limit], @params[:temp_path], @params[:port1], @params[:port2], @params[:timeout])
    @params[:temp_path] + '/' + files.values.first
  end
  def get_video_files(torrent)
    info = torrent['info']
    res = {}
    files = []
    if info['files'].nil?
      files = [info['name']]
    else
      files = info['files'].map { |e| ([info['name']] + e['path']).join('/') }
    end
    files.each do |f|
      if @params[:supported_extensions].include?(File.extname(f))
        res[files.index(f)] = f
      end
    end
    res
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
video-torrent-info-0.1.12 lib/video_torrent_info.rb
video-torrent-info-0.1.11 lib/video_torrent_info.rb
video-torrent-info-0.1.10 lib/video_torrent_info.rb