bandshell 0.8 → 0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/bandshelld +1 -1
- data/lib/bandshell/application/app.rb +54 -4
- data/lib/bandshell/application/views/main.erb +3 -3
- data/lib/bandshell/application/views/player_status.erb +4 -0
- data/lib/bandshell/hardware_api.rb +6 -1
- metadata +3 -24
- data/lib/bandshell/application/views/authenticate.haml +0 -15
- data/lib/bandshell/application/views/main.haml +0 -7
- data/lib/bandshell/application/views/netsettings.haml +0 -64
- data/lib/bandshell/application/views/password.haml +0 -9
- data/lib/bandshell/application/views/player_status.haml +0 -11
- data/lib/bandshell/application/views/problem.haml +0 -15
- data/lib/bandshell/application/views/setup.haml +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50f3b9aa759cbb5ce8623ab42424d1772e8ec3a9
|
4
|
+
data.tar.gz: 32f5b633dd51276279e09c33010a3013e1a4cfcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5827d9317a00e3a141e19687e35d3fe15762d8723c1c570683f913b5d9d0d2119e5c0fa5fb8b076e8a165a4ae13705f352781da23073557f83a30b31f8da69d5
|
7
|
+
data.tar.gz: 1e3244f4c1b9da340d18811f130d188b3c51c55eedfc8b66d3ae722b78482f3e643656d19f9983e0354e1a1a1a29d796113702bbc89409aad09edcf2ce8aaf64
|
data/bin/bandshelld
CHANGED
@@ -18,6 +18,6 @@ timer_argv = ARGV.dup
|
|
18
18
|
timer_argv << "--" unless timer_argv.include? "--"
|
19
19
|
timer_argv << bandshell_url
|
20
20
|
|
21
|
-
Daemons.run("
|
21
|
+
Daemons.run(File.join(File.dirname(__FILE__), "bandshell-timer.rb"),
|
22
22
|
:log_output=>true, :dir_mode => dir_mode,
|
23
23
|
:ARGV => timer_argv)
|
@@ -391,7 +391,8 @@ class ConcertoConfigServer < Sinatra::Base
|
|
391
391
|
# to execute system maintenance functions such as updating configs
|
392
392
|
# from Concerto, and performing screen on/off control.
|
393
393
|
get '/background-job' do
|
394
|
-
|
394
|
+
force = params.has_key? "force"
|
395
|
+
if update_player_info(force)
|
395
396
|
"Update executed"
|
396
397
|
else
|
397
398
|
"update_player_info failed."
|
@@ -401,7 +402,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
401
402
|
# TODO: Refactor player settings management into a separate class
|
402
403
|
|
403
404
|
@@player_data_updated=Time.new(0)
|
404
|
-
@@screen_on_off=[{
|
405
|
+
@@screen_on_off=[{"action"=>"on"}] # default to always-on
|
405
406
|
|
406
407
|
# Fetches the latest player settings from Concerto if the current
|
407
408
|
# settings are too old or an update is forced (force=true).
|
@@ -429,6 +430,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
429
430
|
end
|
430
431
|
end
|
431
432
|
|
433
|
+
# TODO: more validation before accepting.
|
432
434
|
def parse_screen_on_off(data)
|
433
435
|
begin
|
434
436
|
rules = JSON.parse(data)
|
@@ -446,8 +448,56 @@ class ConcertoConfigServer < Sinatra::Base
|
|
446
448
|
|
447
449
|
# Returns true if the screen should be turned on right now,
|
448
450
|
# according to the latest data recieved from concerto-hardware.
|
451
|
+
# Assumes @@screen_on_off is either nil or a valid ruleset.
|
452
|
+
# TODO: Evaluate effects of timezones
|
449
453
|
def screen_scheduled_on?
|
450
|
-
|
454
|
+
return true if @@screen_on_off.nil?
|
455
|
+
|
456
|
+
results = []
|
457
|
+
t = Time.now
|
458
|
+
@@screen_on_off.each do |rule|
|
459
|
+
rule_active = true
|
460
|
+
rule.each do |key, value|
|
461
|
+
case key
|
462
|
+
when "wkday"
|
463
|
+
rule_active = false unless value.include? t.wday.to_s
|
464
|
+
when "time_after"
|
465
|
+
rule_secs = seconds_since_midnight(Time.parse(value))
|
466
|
+
curr_secs = seconds_since_midnight(t)
|
467
|
+
rule_active = false unless curr_secs > rule_secs
|
468
|
+
when "time_before"
|
469
|
+
rule_secs = seconds_since_midnight(Time.parse(value))
|
470
|
+
curr_secs = seconds_since_midnight(t)
|
471
|
+
rule_active = false unless curr_secs < rule_secs
|
472
|
+
when "date"
|
473
|
+
day = Time.parse(value)
|
474
|
+
rule_active = false unless t.year==day.year and t.yday==day.yday
|
475
|
+
when "action"
|
476
|
+
# Do nothing.
|
477
|
+
else
|
478
|
+
# Do nothing.
|
479
|
+
# Err on the side of being on too long.
|
480
|
+
end # case key
|
481
|
+
end
|
482
|
+
if rule_active and rule.has_key? "action"
|
483
|
+
results << rule["action"]
|
484
|
+
end
|
485
|
+
end # each rule
|
486
|
+
|
487
|
+
if results.include? "force_on"
|
488
|
+
return true
|
489
|
+
elsif results.include? "off"
|
490
|
+
return false
|
491
|
+
elsif results.include? "on"
|
492
|
+
return true
|
493
|
+
else # All rules failed
|
494
|
+
return false
|
495
|
+
end
|
496
|
+
end #screen_scheduled_on?
|
497
|
+
|
498
|
+
# For a given time object, gives a numeric representation of the
|
499
|
+
# time of day on the day it represents.
|
500
|
+
def seconds_since_midnight(time)
|
501
|
+
time.sec + (time.min * 60) + (time.hour * 3600)
|
451
502
|
end
|
452
|
-
|
453
503
|
end
|
@@ -26,17 +26,17 @@
|
|
26
26
|
<div class="default-padding">
|
27
27
|
|
28
28
|
<div class="row-fluid">
|
29
|
-
<div class="
|
29
|
+
<div class="span2">
|
30
30
|
|
31
31
|
</div>
|
32
|
-
<div class="
|
32
|
+
<div class="span8">
|
33
33
|
|
34
34
|
<br />
|
35
35
|
<%= yield %>
|
36
36
|
<br />
|
37
37
|
|
38
38
|
</div>
|
39
|
-
<div class="
|
39
|
+
<div class="span2">
|
40
40
|
|
41
41
|
</div>
|
42
42
|
</div>
|
@@ -118,7 +118,12 @@ module Bandshell
|
|
118
118
|
|
119
119
|
data=JSON.parse(response.body)
|
120
120
|
if data.has_key? 'screen_temp_token'
|
121
|
-
|
121
|
+
# We modify the token by appending an "s".
|
122
|
+
# Concerto allows this and concerto-hardware will use it to
|
123
|
+
# recognize that the user is setting up a managed player in
|
124
|
+
# addition to a simple screen.
|
125
|
+
token = data['screen_temp_token'] + 's'
|
126
|
+
ConfigStore.write_config('auth_temp_token',token)
|
122
127
|
return true
|
123
128
|
end
|
124
129
|
return false
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bandshell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.9'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Concerto Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: haml
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - '>='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: sys-uptime
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,19 +133,12 @@ files:
|
|
147
133
|
- lib/bandshell/application/public/stylesheets/sass/views/users.scss
|
148
134
|
- lib/bandshell/application/public/trollface.png
|
149
135
|
- lib/bandshell/application/views/authenticate.erb
|
150
|
-
- lib/bandshell/application/views/authenticate.haml
|
151
136
|
- lib/bandshell/application/views/main.erb
|
152
|
-
- lib/bandshell/application/views/main.haml
|
153
137
|
- lib/bandshell/application/views/netsettings.erb
|
154
|
-
- lib/bandshell/application/views/netsettings.haml
|
155
138
|
- lib/bandshell/application/views/password.erb
|
156
|
-
- lib/bandshell/application/views/password.haml
|
157
139
|
- lib/bandshell/application/views/player_status.erb
|
158
|
-
- lib/bandshell/application/views/player_status.haml
|
159
140
|
- lib/bandshell/application/views/problem.erb
|
160
|
-
- lib/bandshell/application/views/problem.haml
|
161
141
|
- lib/bandshell/application/views/setup.erb
|
162
|
-
- lib/bandshell/application/views/setup.haml
|
163
142
|
- lib/bandshell/config_store.rb
|
164
143
|
- lib/bandshell/hardware_api.rb
|
165
144
|
- lib/bandshell/live_image.rb
|
@@ -186,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
165
|
version: '0'
|
187
166
|
requirements: []
|
188
167
|
rubyforge_project:
|
189
|
-
rubygems_version: 2.0.
|
168
|
+
rubygems_version: 2.0.14
|
190
169
|
signing_key:
|
191
170
|
specification_version: 4
|
192
171
|
summary: Concerto Client Tools
|
@@ -1,15 +0,0 @@
|
|
1
|
-
%script{:src=>"authenticate.js"}
|
2
|
-
|
3
|
-
%h1 Concerto Player Authentication
|
4
|
-
|
5
|
-
#no-js
|
6
|
-
It looks like Javascript is disabled. The Concerto Display will not work.
|
7
|
-
|
8
|
-
- unless @display_temp_token.nil?
|
9
|
-
#instructions
|
10
|
-
Please enter the following token when setting up the screen in the
|
11
|
-
Concerto Panel:
|
12
|
-
= @display_temp_token
|
13
|
-
|
14
|
-
#status
|
15
|
-
Waiting for first update...
|
@@ -1,64 +0,0 @@
|
|
1
|
-
%script{:src=>"/javascripts/network.js"}
|
2
|
-
%a{:href=>"/setup"}="Back to setup"
|
3
|
-
%h1="Concerto Player Network Configuration"
|
4
|
-
%form{:method=>"post"}
|
5
|
-
%h2="Connection Type"
|
6
|
-
%select#connection_type{:name=>"connection_type"}
|
7
|
-
/ list out our available connection methods as options
|
8
|
-
/ set the html selected flag on the one that is currently
|
9
|
-
/ selected in the config
|
10
|
-
- CONNECTION_METHODS.each do |cm|
|
11
|
-
%option{:value=>cm.basename,
|
12
|
-
:selected=>(cm==connection_method.class)}=cm.description
|
13
|
-
#connection
|
14
|
-
#WiredConnection
|
15
|
-
%h3="Wired Connection Settings"
|
16
|
-
%p
|
17
|
-
%label{:for=>"WiredConnection_interface_name"}="Interface Name"
|
18
|
-
%select#interface_name{:name=>"WiredConnection/interface_name"}
|
19
|
-
%option{:value=>""}="Auto Select"
|
20
|
-
/ list out available interfaces and their MAC addresses
|
21
|
-
/ preselect one if there was one chosen in config
|
22
|
-
- Bandshell::WiredConnection.interfaces.each do |iface|
|
23
|
-
%option{:value=>iface.name, :selected=>value_from(connection_method, :interface_name)==iface.name}="#{iface.name} - #{iface.mac}"
|
24
|
-
#WirelessConnection
|
25
|
-
%h3="Wireless Connection Settings (no encryption)"
|
26
|
-
%p
|
27
|
-
%label{:for=>"WirelessConnection_interface_name"}="Interface Name"
|
28
|
-
%select#interface_name{:name=>"WirelessConnection/interface_name"}
|
29
|
-
%option{:value=>""}="Auto Select"
|
30
|
-
/ same as above but with the wireless interfaces
|
31
|
-
- Bandshell::WirelessConnection.interfaces.each do |iface|
|
32
|
-
%option{:value=>iface.name, :selected=>value_from(connection_method, :interface_name) == iface.name}="#{iface.name} - #{iface.mac}"
|
33
|
-
%p
|
34
|
-
%label{:for=>"WirelessConnection_ssid"}="SSID"
|
35
|
-
%input{:type=>"text", :name=>"WirelessConnection/ssid",
|
36
|
-
:value=>value_from(connection_method, :ssid)}
|
37
|
-
%h2="IP Address"
|
38
|
-
%select#addressing_type{:name=>"addressing_type"}
|
39
|
-
- ADDRESSING_METHODS.each do |am|
|
40
|
-
%option{:value=>am.basename,
|
41
|
-
:selected=>(am==addressing_method.class)}=am.description
|
42
|
-
#address
|
43
|
-
#DHCPAddressing
|
44
|
-
#StaticAddressing
|
45
|
-
%h3="Static Address Settings"
|
46
|
-
%p
|
47
|
-
%label{:for=>"StaticAddressing_address"}="Address"
|
48
|
-
%input{:type=>"text", :name=>"StaticAddressing/address",
|
49
|
-
:value=>value_from(addressing_method, :address)}
|
50
|
-
%p
|
51
|
-
%label{:for=>"StaticAddressing_netmask"}="Netmask"
|
52
|
-
%input{:type=>"text", :name=>"StaticAddressing/netmask",
|
53
|
-
:value=>value_from(addressing_method, :netmask)}
|
54
|
-
%p
|
55
|
-
%label{:for=>"StaticAddressing_gateway"}="Gateway"
|
56
|
-
%input{:type=>"text", :name=>"StaticAddressing/gateway",
|
57
|
-
:value=>value_from(addressing_method, :gateway)}
|
58
|
-
%p
|
59
|
-
%label{:for=>"StaticAddressing_address"}="Nameservers (separate with commas or spaces)"
|
60
|
-
%input{:type=>"text", :name=>"StaticAddressing/nameservers_flat",
|
61
|
-
:value=>value_from(addressing_method, :nameservers_flat)}
|
62
|
-
|
63
|
-
%input{:type=>"submit"}
|
64
|
-
|
@@ -1,9 +0,0 @@
|
|
1
|
-
%form{:method=>'post'}
|
2
|
-
%p
|
3
|
-
%label{:for=>'newpass'} New Password
|
4
|
-
%input{:type=>'password', :name=>'newpass'}
|
5
|
-
%p
|
6
|
-
%label{:for=>'newpass_confirm'} Confirm Password
|
7
|
-
%input{:type=>'password', :name=>'newpass_confirm'}
|
8
|
-
%p
|
9
|
-
%input{:type=>'submit', :value=>'Change Password'}
|
@@ -1,15 +0,0 @@
|
|
1
|
-
%script{:src=>"problem.js"}
|
2
|
-
.error
|
3
|
-
%p
|
4
|
-
%img{:src=>"trollface.png"}
|
5
|
-
|
6
|
-
%h1 Problem?
|
7
|
-
%p
|
8
|
-
Due to technical difficulties, this Concerto screen is currently not
|
9
|
-
operational. Please check again soon.
|
10
|
-
%p
|
11
|
-
==The Concerto installation at #{concerto_url} could not be reached.
|
12
|
-
%p
|
13
|
-
If the URL needs to be changed, go back to
|
14
|
-
%a{:href=>"/setup"}
|
15
|
-
Player Configuration
|
@@ -1,30 +0,0 @@
|
|
1
|
-
%h1 Welcome to Concerto Player
|
2
|
-
%p
|
3
|
-
You're seeing this because your Concerto player has not yet been configured.
|
4
|
-
We need the URL of your Concerto instance before we can get up and running.
|
5
|
-
|
6
|
-
- unless @errors.nil?
|
7
|
-
- @errors.each do |error|
|
8
|
-
%p{:style=>'color:red'}= error
|
9
|
-
|
10
|
-
|
11
|
-
%form{:method=>'post'}
|
12
|
-
%p
|
13
|
-
%label{:for=>'url'} URL
|
14
|
-
%input{:type=>'text', :name=>'url', :value=>@url}
|
15
|
-
%input{:type=>'submit', :value=>'Here it is!'}
|
16
|
-
|
17
|
-
%p
|
18
|
-
The IPv4 address of this screen appears to be:
|
19
|
-
=my_ip
|
20
|
-
%p
|
21
|
-
==This page can be accessed remotely via http://#{my_ip}:#{my_port}/setup
|
22
|
-
%p
|
23
|
-
Username is root, default password is 'default'.
|
24
|
-
%p
|
25
|
-
Also, you may want to
|
26
|
-
%a{:href=>'/netconfig'} change network settings
|
27
|
-
or
|
28
|
-
%a{:href=>'/password'} change the configuration password.
|
29
|
-
|
30
|
-
|