#!/usr/bin/env ruby require 'erb' MEDIA_DIR = '/srv/media' MEDIA_URL = 'https://media.pdp8.info' WWW_DIR = '/srv/www/pdp8-test' SNIPPETS = File.join(File.dirname(__FILE__), 'html') def nav(cat) html = '' html end def file_html(basename) path = File.join(SNIPPETS, basename + '.html') html = File.read(File.join(SNIPPETS, 'head.html')) html += nav basename html += "
" html += File.read(path) html += '
' html += File.read(File.join(SNIPPETS, 'tail.html')) print_html basename, html end def print_html(basename, html) out = File.join(WWW_DIR, basename + '.html') puts out File.open(out, 'w+') { |f| f.puts html } File.open('tmp.html', 'w+') { |f| f.puts html } if basename == 'music' puts `tidy -iqm -w 0 #{out} 2>&1` end def music_html music = Dir[File.join(MEDIA_DIR, 'music', '*')].sort.reverse html = File.read(File.join(SNIPPETS, 'head.html')) html += nav 'music' music.each do |dir| date = File.basename(dir).split('_')[0] html += "
" title = File.basename(dir).split('_')[1..-1].join(' ') html += "

#{title}

" html += File.read(File.join(dir, 'README')).chomp.gsub("\n\n", '

').gsub("\n", '
') + '

' cover = File.join(MEDIA_URL, dir.sub(MEDIA_DIR, ''), 'cover.jpeg') html += "cover" html += '' copyrights_file = File.join(dir, 'copyrights') copyrights = File.readlines(copyrights_file).collect { |l| l.chomp } if File.exist? copyrights_file Dir[File.join(dir, '*mp3')].each_with_index do |mp3, _i| mp3 = File.join(MEDIA_URL, mp3.sub(MEDIA_DIR, '')) name = File.basename(mp3, '.mp3')[3..-1] # name += " ©#{copyrights[i]}" if copyrights html += '' html += "" html += "" html += '' end html += '
#{name}
' bc = if File.exist?(File.join(dir, 'bandcamp')) File.read(File.join(dir, 'bandcamp')).chomp else "https://pdp8.bandcamp.com/album/#{title.gsub(' ', '-')}" end html += "

Bandcamp: #{bc}" html += '

' html += '
' end html += '

© pdp8 Creative Commons Attribution 4.0 International License' html += File.read(File.join(SNIPPETS, 'tail.html')) print_html 'music', html end def video_html videos = Dir[File.join(MEDIA_DIR, 'videos', '*')].sort.reverse html = File.read(File.join(SNIPPETS, 'head.html')) html += nav 'videos' videos.each_with_index do |dir, _i| date = File.basename(dir).split('_')[0] html += "

" title = File.basename(dir).split('_')[1..-1].join(' ') html += "

#{title}

" txt = File.read(File.join(dir, 'README')) txt = txt.gsub(/(http\S*)/, '\1') lines = txt.split("\n") html += lines.shift + '

' mp4 = File.join(MEDIA_URL, 'videos', File.basename(dir), title.gsub(' ', '_') + '.mp4') webm = File.join(MEDIA_URL, 'videos', File.basename(dir), title.gsub(' ', '_') + '.webm') poster = File.join(MEDIA_URL, 'videos', File.basename(dir), 'poster.png') html += "

" html += lines.join('
') html += '

' html += '
' end html += '

 © pdp8 Creative Commons Attribution 4.0 International License' html += File.read(File.join(SNIPPETS, 'tail.html')) print_html 'videos', html end music_html video_html %w[about code pictures contact].each do |basename| file_html basename end last = (Dir[File.join(MEDIA_DIR, 'music', '*')] + Dir[File.join(MEDIA_DIR, 'videos', '*')]).sort_by { |d| File.basename(d) }.last.split('/')[-2] + '.html' puts `cp "#{File.join(WWW_DIR, last)}" "#{File.join(WWW_DIR, 'index.html')}"` [ 'pdp8.png', '540px-PDP-8_.jpg', 'style.css', 'slideshow.js', 'robots.txt' ].each { |f| puts `rsync -av "#{File.join(SNIPPETS, f)}" "#{WWW_DIR}"` }