class Torrenter::TorrentReader::PieceConstructor

Attributes

index[R]

Public Class Methods

new(files, folder, sha_hashes, piece_length) click to toggle source
# File lib/torrenter/torrent_reader/piece_constructor.rb, line 6
def initialize(files, folder, sha_hashes, piece_length)
  @files        = files
  @folder       = folder
  @sha_hashes   = sha_hashes
  @piece_length = piece_length
  @index        = PieceIndex.new(piece_length)
end

Public Instance Methods

final_piece?() click to toggle source
# File lib/torrenter/torrent_reader/piece_constructor.rb, line 18
def final_piece?
  index_length == @index.size + 1
end
index_length() click to toggle source
# File lib/torrenter/torrent_reader/piece_constructor.rb, line 14
def index_length
  @sha_hashes.size / 20
end
make_index() click to toggle source
# File lib/torrenter/torrent_reader/piece_constructor.rb, line 22
def make_index
  @piece = Piece.new(@piece_length)
  @files.each do |file|
    path = "#{@folder}/#{file['path'].join('/')}"
    offset = 0
    if @piece.tally != 0
      if @piece.left > file['length']
        @piece.add(0...file['length'], path)
      else
        offset = @piece.left
        @piece.add(0...@piece.left, path)
      end

      @index << @piece if @piece.full?
    else
      offset = 0
    end

    while offset < ((file['length']) - @piece_length)
      @piece = Piece.new(@piece_length)
      @piece.add(offset...(offset += @piece_length), path)
      @index << @piece if @piece.full?
    end

    if @piece.full? && offset > 0
      @piece = Piece.new(@piece_length)
      @piece.add(offset...file['length'], path)
    end

    if final_piece?
      @index << @piece
    end
  end
  set_hash
end
piece_hash(n) click to toggle source
# File lib/torrenter/torrent_reader/piece_constructor.rb, line 67
def piece_hash(n)
  @sha_hashes[(n * 20)...(n * 20) + 20]
end
set_hash() click to toggle source
# File lib/torrenter/torrent_reader/piece_constructor.rb, line 58
def set_hash
  0.upto(@index.size - 1) do |i|
    @index[i].hash = piece_hash(i)
    @index[i].index = i
  end

  return @index
end