aboutsummaryrefslogblamecommitdiffstats
path: root/ramaskrik-program.rb
blob: cd22839f07799df957cdcc7b40dda2c92d7f2e92 (plain) (tree)
1
2

                   















                                                                       

                                                        
              
                  
             


                            

                  
             
 




                                      

                                                      














































                                                                                


                                     


                                                                                      

                                               
                                                           
                                                    
 
                                                            
                                                                                         

                                              
#!/usr/bin/env ruby

# Ramaskrik Program Schedule plotter.
# Copyright (C) 2018  Harald Eilertsen <haraldei@anduin.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

$LOAD_PATH << File.join(File.dirname( __FILE__ ), "lib")

require 'date'
require 'delegate'
require 'erb'
require 'events'
require 'json'
require 'scrapers/ramaskrik'
require 'nokogiri'
require 'open-uri'
require 'uri'

class EventDecorator < SimpleDelegator
  attr_reader :offset
  attr_reader :height

  def calc_offsets(time_offset)
    @offset = 5 + (start_time - time_offset).to_i / 50
    @height = 5 + duration / 50;
    start_time + duration
  end
end

class SortedEventList
  attr_reader :venues
  attr_reader :events
  attr_reader :start_time
  attr_reader :end_time

  def initialize(events)
    @venues = events.map{ |e| e.venue }.uniq

    @events = events
      .sort{ |a,b| a.start_time - b.start_time }
      .map{ |e| EventDecorator.new(e) }

    @start_time = @events.first.start_time - (@events.first.start_time.min * 60)

    @events.group_by{|e| e.venue}.each do |venue, events|
      time_offset = start_time
      time_end = start_time
      events.each do |event|
        time_end = event.calc_offsets(time_offset)
      end

      @end_time = time_end if @end_time.nil? || @end_time < time_end
    end
  end
end

def import_events_from_json(input)
  JSON
    .parse(input)
    .map{ |obj| Events::Event.new(obj) }
    .group_by{ |e| e.date }
end

def make_sorted_event_lists_by_date(events_by_date)
  new_list = {}
  events_by_date.each do |date, events|
    new_list[date] = SortedEventList.new(events)
  end

  new_list
end

year = Date::today.year

title = "Ramaskrik #{year} - Program"

eventlist = make_sorted_event_lists_by_date(import_events_from_json(IO.read(ARGV[0])))

Dir::mkdir('build') unless Dir::exist?('build')

t_html = ERB.new(IO.read("index.html.erb"), trim_mode: '>')
IO.write("build/index.html", t_html.result(binding))

t_ics = ERB.new(IO.read("program.ics.erb"), trim_mode: '<>')
IO.write("build/program-ramaskrik-#{year}.ics", t_ics.result(binding).gsub(/\n/, "\r\n"))

system('cp', 'styles.css', 'build/styles.css')