4 require 'yajl/json_gem'
8 $metafile = "tmp/songtitle"
9 $setfile = "sets/#{$set}/tracklist.csv"
10 $cuefile = "sets/#{$set}/#{$set}.cues"
12 def write_metafile(title)
13 File.open($metafile, "a+") do |fp|
14 fp.flock(File::LOCK_EX)
19 fp.flock(File::LOCK_UN)
23 def write_cuefile(title)
24 line = [ Time.now.to_i, title ].to_csv
25 File.open($cuefile, "a") do |fp|
26 fp.flock(File::LOCK_EX)
29 fp.flock(File::LOCK_UN)
34 csv = CSV.read(File.open($setfile), encoding: 'UTF-8')
35 names = csv.shift.map(&:to_sym)
36 csv = csv.reject {|row| row[0].nil? }
37 $tracklist = csv.map do |row|
38 Hash[*names.zip(row).flatten]
44 $tracklist.sort! {|a,b| a[:index].to_i <=> b[:index].to_i }
53 class App < Sinatra::Base
55 set :protection, :except => :frame_options
58 get '/tracklist.json' do
63 index = params["index"].to_i
64 if ( index < 0 || index > $tracklist.length )
66 return "No such track index."
69 title = ( index < 1 ) ? "-" : $tracklist.detect{|a| a[:index].to_i == index.to_i }[:title]
76 get '/js/handler.js' do
77 content_type 'text/javascript'
81 get '/css/meta.css' do
82 content_type 'text/css'
87 erb :index, :locals => { :mixtitle => $set, :tracklist => tracklist_json }