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