TRACKERS = '-a udp://tracker.coppersurfer.tk:6969/announce -a udp://tracker.ccc.de:80/announce -a udp://tracker.publicbt.com:80 -a udp://tracker.istole.it:80 -a http://tracker.openbittorrent.com:80/announce -a http://tracker.ipv6tracker.org:80/announce' 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 #{TRACKERS} -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