]> CyberLeo.Net >> Repos - CDN/metadata.git/blob - app.rb
Update set with notes and mods
[CDN/metadata.git] / app.rb
1 require 'sinatra/base'
2 require 'sinatra/json'
3 require 'yajl'
4 require 'yajl/json_gem'
5 require 'csv'
6
7 $set = "cheesy2"
8 $metafile = "tmp/songtitle"
9
10 def load_tracklist()
11   file = "sets/#{$set}.csv"
12   csv = CSV.read(File.open(file))
13   names = csv.shift
14   $tracklist = csv.map do |row|
15     Hash[*names.zip(row).flatten]
16   end
17   $tracklist.unshift({
18     index: 0,
19     title: '-',
20     length: 0,
21     bpm: 0,
22     notes: nil
23   })
24 end
25
26 load_tracklist
27
28 def tracklist_json
29   $tracklist.to_json
30 end
31
32 class App < Sinatra::Base
33   configure do
34     set :protection, :except => :frame_options
35   end
36
37   get '/tracklist.json' do
38     json $tracklist
39   end
40
41   post '/commit' do
42     index = params["index"].to_i
43     if ( index < 0 || index > $tracklist.length )
44       status 404
45       return "No such track index."
46     end
47
48     title = ( index < 1 ) ? "-" : $tracklist[index - 1]["title"]
49
50     File.open($metafile, "a+") do |fp|
51       fp.flock(File::LOCK_EX)
52       fp.seek(0)
53       fp.truncate(0)
54       fp.puts(title)
55       fp.flush()
56       fp.flock(File::LOCK_UN)
57     end
58     "Updated."
59   end
60
61   get '/js/handler.js' do
62     content_type 'text/javascript'
63     erb :handler_js
64   end
65
66   get '/css/meta.css' do
67     content_type 'text/css'
68     erb :meta_css
69   end
70
71   get '/' do
72     erb :index, :locals => { :mixtitle => $set, :tracklist => tracklist_json }
73   end
74 end