module AppleTvConverter::MovieHasher

Constants

CHUNK_SIZE

Public Class Methods

compute_hash(filename) click to toggle source
# File lib/apple_tv_converter/movie_hasher.rb, line 6
def self.compute_hash(filename)
  filesize = File.size(filename)
  hash = filesize

  # Read 64 kbytes, divide up into 64 bits and add each
  # to hash. Do for beginning and end of file.
  File.open(filename, 'rb') do |f|
    # Q = unsigned long long = 64 bit
    f.read(CHUNK_SIZE).unpack("Q*").each do |n|
      hash = hash + n & 0xffffffffffffffff # to remain as 64 bit number
    end

    f.seek([0, filesize - CHUNK_SIZE].max, IO::SEEK_SET)

    # And again for the end of the file
    f.read(CHUNK_SIZE).unpack("Q*").each do |n|
      hash = hash + n & 0xffffffffffffffff
    end
  end

  sprintf("%016x", hash)
end