module Jekyll class TorrentGenerator < Generator safe true MEDIA_EXTENSION = { 'podcasts' => 'ogg', 'screencasts' => 'webm' } def generate(site) site.collections.each do |name, collection| if ['podcasts', 'screencasts'].include? name then collection.docs.each do |document| date = document.data['date'].strftime('%Y-%m-%d') slug = document.data['slug'] extension = MEDIA_EXTENSION[name] file = "#{date}-#{slug}.#{extension}" media = "resources/#{name}/#{file}" torrent = "#{media}.torrent" unless File.exist? torrent then webseed = "#{site.config['url']}/#{media}" puts "Missing '#{torrent}' file, generating..." puts `mktorrent -f -v -d -c '#{document.content}' -n #{file} -w #{webseed} -o #{torrent} #{media}` end checksum_file = "#{torrent}.checksum" checksum = `sha256sum #{media} #{torrent} | sha256sum | awk '{ print $1 }'` if File.exist? checksum_file then unless checksum == File.read(checksum_file) raise "Checksum mismatch for '#{media}'.\nRe-generate the torrent files and checksums with:\n\nrm '#{torrent}' '#{checksum_file}'" end else puts "Missing checksum for '#{media}', generating..." File.write(checksum_file, checksum) end end end end end end end