bandshell 0.8 → 0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
-
|