Module: TMDBParty::MovieHasher

Defined in:
lib/tmdb_party/extras/movie_hasher.rb

Constant Summary collapse

CHUNK_SIZE =

in bytes

64 * 1024

Class Method Summary collapse

Class Method Details

.compute_hash(file) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/tmdb_party/extras/movie_hasher.rb', line 11

def self.compute_hash(file)
  filesize = file.size
  hash = filesize

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

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

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

  sprintf("%016x", hash)
end