Sha256: 0c1efdc67ac4a08e6478962102ec90e68e4850a70938587b45b058875af20df3

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

require 'pathname'

module FeedTorrents
  module Feed
    class Download
      include LogFunctions

      def initialize(title, link, timeout, directory)
        @title, @link, @timeout, @directory = title, link, timeout, directory
      end

      def process
        info "Downloading torrent for '#{@title}' (#{torrent_link})"
        http = EM::HttpRequest.new(torrent_link, inactivity_timeout: @timeout).get
        fh = File.new(file,'wb')

        http.stream { |chunk| fh.write chunk }

        http.errback do
          error "failure retrieving torrent for '#{@title}' (#{torrent_link})"
          error "error: #{http.error}"
        end

        http.callback do
          info "Downloading torrent for #{@title} completed"
          fh.close
          FeedTorrents.store.persist(@link)
        end
      end

      private

      def torrent_link
        @torrent_link ||= determine_link
      end

      def determine_link
        if is_magnet?
          MagnetURI.new(@link).reflektor_link
        else
          @link
        end
      end

      def is_magnet?
        @link =~ /^magnet:\?/
      end

      def file
        Pathname.new(@directory).join("#{@title}.torrent").expand_path
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
feed_torrents-0.1.3 lib/feed_torrents/feed/download.rb
feed_torrents-0.1.2 lib/feed_torrents/feed/download.rb