aboutsummaryrefslogblamecommitdiff
path: root/_plugins/generate-torrent.rb
blob: 580bcf8a726dab0ad86ed5acec7bb8d281c868db (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11





                                    
                             



                                                 
                                                         






                                                             
 
                                           
                                                        
                                                             
                                                                                                                
               
 
                                                 
                                                                                       
                                             
                                                         
                                                                                                                                                  




                                                                   





             
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