savant-scenes 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/src/SceneManager.rb +177 -108
- data/bin/src/glade/SceneManager.glade +158 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce04019a545c83f545f5f5e3085dc83e70fab1b2
|
4
|
+
data.tar.gz: 25d7a7cd3073350cb970895546ba0005e79e5aa0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 547ef94aa42f319346118b389eaeaceb16cec1275f5cb15790c12201aff149730ebab57bcfde3a5c711cf3a22f312441d0fa1b1aadee00df0f8a0202b81b4407
|
7
|
+
data.tar.gz: dfefe42335f84bdad9ff1c0bce889e3f84b120b8bb08f3a057a25c36cbf7a0583cf7780719867a6d3542f67417fb41b08a4b0e2f6d8c826660363bef287d0340
|
data/bin/src/SceneManager.rb
CHANGED
@@ -6,6 +6,7 @@ require 'socket'
|
|
6
6
|
require 'timeout'
|
7
7
|
require 'ipaddress'
|
8
8
|
require 'sqlite3'
|
9
|
+
require 'date'
|
9
10
|
|
10
11
|
|
11
12
|
class SceneManager
|
@@ -16,11 +17,16 @@ class SceneManager
|
|
16
17
|
def initialize
|
17
18
|
#Initialize the Scenes List view
|
18
19
|
@listviewSavantScenes = VR::ListView.new(:modify => TrueClass, :scene => String, :user => String, :id => String, :image => String, :isGlobal => String, :isActive => String, :isScheduled => String, :hasCustomImage => String, :userSceneOrder => String, :tags => String)
|
20
|
+
|
19
21
|
@listviewSavantScenes.col_sortable(true)
|
22
|
+
|
20
23
|
@listviewSavantScenes.col_sort_column_id(:scene => @listviewSavantScenes.id(:scene), :user => @listviewSavantScenes.id(:user))
|
24
|
+
|
21
25
|
@listviewSavantScenes.col_title(:modify => "", :scene => "Scene Name", :tags => "Zones Affected", :isGlobal => "Global", :isActive => "Active", :isScheduled => "Scheduled", :hasCustomImage => "Custom Image", :userSceneOrder => "User Order")
|
26
|
+
|
22
27
|
@listviewSavantScenes.col_xalign(:isGlobal => 0.5, :isActive => 0.5, :isScheduled => 0.5, :hasCustomImage => 0.5, :userSceneOrder => 0.5)
|
23
28
|
@listviewSavantScenes.col_width(:tags => 100, :image => 100)
|
29
|
+
|
24
30
|
@listviewSavantScenes.ren_editable(:scene => true, :user => true, :id => true, :isGlobal => String)
|
25
31
|
|
26
32
|
row = @listviewSavantScenes.add_row
|
@@ -62,6 +68,21 @@ class SceneManager
|
|
62
68
|
#
|
63
69
|
# @listviewSavantScenes.renderer(:isActive).edited_callback = Proc.new { |model_sym, row, view |
|
64
70
|
# alert "Scene is scheduled changed to : " + row[:isScheduled].to_s
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
@listviewAdvanced = VR::ListView.new(:time => VR::Col::CalendarCol, :event => String, :user => String, :deviceName => String, :deviceModel => String, :deviceApp => String, :deviceOS => String, :deviceUID => String, :zone => String, :component => String, :logicalComponent => String, :variantID => String, :serviceID => String, :type => String, :argument => String)
|
75
|
+
|
76
|
+
@listviewAdvanced.col_sortable(true)
|
77
|
+
|
78
|
+
@listviewAdvanced.col_sort_column_id(:time => @listviewAdvanced.id(:time), :event => @listviewAdvanced.id(:event), :user => @listviewAdvanced.id(:user), :deviceName => @listviewAdvanced.id(:deviceName), :deviceUID => @listviewAdvanced.id(:deviceUID), :zone => @listviewAdvanced.id(:zone), :component => @listviewAdvanced.id(:component), :logicalComponent => @listviewAdvanced.id(:logicalComponent), :variantID => @listviewAdvanced.id(:variantID), :serviceID => @listviewAdvanced.id(:serviceID), :type => @listviewAdvanced.id(:type), :argument => @listviewAdvanced.id(:argument))
|
79
|
+
|
80
|
+
@listviewAdvanced.col_title(:time => "Time", :event => "Event", :user => "User", :deviceName => "Device Name", :deviceModel => "Device Model", :deviceApp => "Device App", :deviceOS => "Device OS", :deviceUID => "Device UID", :zone => "Zone", :component => "Component", :logicalComponent => "Logical", :variantID => "Variant", :serviceID => "Service", :type => "Command", :argument => "Argument")
|
81
|
+
|
82
|
+
row = @listviewAdvanced.add_row
|
83
|
+
row[:event] = ""
|
84
|
+
@listviewAdvanced.visible = true
|
85
|
+
|
65
86
|
# }
|
66
87
|
end
|
67
88
|
|
@@ -70,6 +91,9 @@ class SceneManager
|
|
70
91
|
@savantURL = "192.168.77.40"
|
71
92
|
@login = 'RPM'
|
72
93
|
@password = 'RPM'
|
94
|
+
|
95
|
+
@builder["buttonAdvanced"].hide
|
96
|
+
@builder["buttonActivateScene"].hide
|
73
97
|
|
74
98
|
@ftv = VR::FileTreeView.new(Dir.home, File.join(File.dirname(__FILE__), "/../img"), glob = "*", validate_block = nil)
|
75
99
|
@builder["scrolledwindow_BackupRestore"].add(@ftv)
|
@@ -99,7 +123,7 @@ class SceneManager
|
|
99
123
|
begin
|
100
124
|
@builder["labelHostInfo"].label = ""
|
101
125
|
Net::SSH.start(ip, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
|
102
|
-
#Check host type and update sclibridge location
|
126
|
+
#Check host type and update sclibridge location
|
103
127
|
ssh.open_channel do |ch, success|
|
104
128
|
ch.exec("uname")
|
105
129
|
ch.on_data do |ch, data|
|
@@ -107,74 +131,68 @@ class SceneManager
|
|
107
131
|
@scliBridge = "~/Applications/RacePointMedia/sclibridge "
|
108
132
|
@dis = "/Users/RPM/Library/Application Support/RacePointMedia/statusfiles/dis/dashboard.sqlite"
|
109
133
|
else
|
110
|
-
@scliBridge = "/usr/local/bin/sclibridge "
|
134
|
+
@scliBridge = "source ~/.zshrc && /usr/local/bin/sclibridge "
|
111
135
|
@dis = "GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/dis/dashboard.sqlite"
|
112
|
-
alert "smart host"
|
113
136
|
end
|
114
137
|
end
|
138
|
+
ch.on_extended_data do |ch, type, data|
|
139
|
+
alert "Error: #{data.inspect}"
|
140
|
+
end
|
115
141
|
end
|
116
142
|
ssh.loop
|
117
|
-
#parse the
|
143
|
+
#parse the scscredentials.plist from the pro host to get host name and then version
|
118
144
|
if @scliBridge == "~/Applications/RacePointMedia/sclibridge "
|
119
145
|
ssh.open_channel do |ch, success|
|
120
146
|
|
121
|
-
ch.exec("plutil -p 'library/application support/racepointmedia/
|
147
|
+
ch.exec("plutil -p 'library/application support/racepointmedia/statusfiles/scscredentials.plist'")
|
122
148
|
ch.on_data do |ch, data|
|
123
|
-
if data.to_s.include? '
|
124
|
-
x = data.split("
|
125
|
-
x = x[1].split("
|
126
|
-
@savantHostName = x[0]
|
127
|
-
@str = @scliBridge + "readstate \"
|
149
|
+
if data.to_s.include? 'savantcs.com'
|
150
|
+
x = data.split(%q{"name" => "})
|
151
|
+
x = x[1].split(%q{"})
|
152
|
+
@savantHostName = x[0]
|
153
|
+
@str = @scliBridge + "readstate \'" + @savantHostName + ".SoftwareVersion\'"
|
154
|
+
@savantHostVersion = ssh.exec!(@str)
|
128
155
|
end
|
129
156
|
end
|
157
|
+
ch.on_extended_data do |ch, type, data|
|
158
|
+
alert "Error: #{data.inspect}"
|
159
|
+
end
|
130
160
|
end
|
131
161
|
ssh.loop
|
132
|
-
#parse the
|
133
|
-
elsif @scliBridge == "/usr/local/bin/sclibridge "
|
162
|
+
#parse the scscredentials.plist from the smart host to get host name and then version
|
163
|
+
elsif @scliBridge == "source ~/.zshrc && /usr/local/bin/sclibridge "
|
134
164
|
ssh.open_channel do |ch, success|
|
135
|
-
ch.exec("strings 'GNUstep/Library/ApplicationSupport/RacePointMedia/
|
165
|
+
ch.exec("strings 'GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/scsCredentials.plist'")
|
136
166
|
ch.on_data do |ch, data|
|
137
|
-
if data.to_s.include? '
|
138
|
-
x = data.split("
|
139
|
-
|
140
|
-
x = x[
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
@
|
145
|
-
elsif data.to_s.include? 'module'
|
146
|
-
x = data.split('module')
|
147
|
-
x = x[1].split("\n")
|
148
|
-
@savantHostName = x[0][1..-1]
|
149
|
-
@str = @scliBridge + "readstate \"" + @savantHostName + ".SoftwareVersion\""
|
150
|
-
alert @str
|
167
|
+
if data.to_s.include? 'savantcs.com'
|
168
|
+
x = data.split("name</key>")
|
169
|
+
x = x[1].split(%q{</string>})
|
170
|
+
x = x[0].split(%q{<string>})
|
171
|
+
@savantHostName = x[1]
|
172
|
+
|
173
|
+
@str = @scliBridge + "readstate \'" + @savantHostName + ".SoftwareVersion\'"
|
174
|
+
@savantHostVersion = ssh.exec!(@str)
|
151
175
|
end
|
152
176
|
end
|
177
|
+
|
178
|
+
ch.on_extended_data do |ch, type, data|
|
179
|
+
alert "Error: #{data.inspect}"
|
180
|
+
end
|
153
181
|
end
|
154
182
|
ssh.loop
|
155
|
-
end
|
156
|
-
#Use host name to query SoftwareVersion state from host
|
157
|
-
ssh.open_channel do |ch, success|
|
158
|
-
ch.exec(@str)
|
159
|
-
ch.on_data do |ch, data|
|
160
|
-
@savantHostVersion = data
|
161
|
-
end
|
162
|
-
end
|
163
|
-
ssh.loop
|
164
|
-
end
|
165
|
-
alert @savantHostName
|
166
|
-
alert @savantHostVersion
|
167
|
-
@builder["labelHostInfo"].text = @savantHostName + " Version : " + @savantHostVersion
|
168
183
|
|
169
|
-
|
170
|
-
if @savantHostVersion.to_r > 8.2 && !@savantHostVersion.empty?
|
171
|
-
return true
|
172
|
-
else
|
173
|
-
return false
|
184
|
+
end
|
174
185
|
end
|
175
|
-
|
186
|
+
unless @savantHostVersion.empty? || @savantHostName.empty?
|
187
|
+
@builder["labelHostInfo"].text = @savantHostName + " Version : " + @savantHostVersion
|
188
|
+
#return true if version is 8.3 or later
|
189
|
+
if @savantHostVersion.to_r > 8.2
|
190
|
+
return true
|
191
|
+
else
|
192
|
+
return false
|
193
|
+
end
|
194
|
+
end
|
176
195
|
rescue Net::SSH::ConnectionTimeout, SocketError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Errno::EHOSTDOWN
|
177
|
-
|
178
196
|
end
|
179
197
|
end
|
180
198
|
|
@@ -190,6 +208,11 @@ class SceneManager
|
|
190
208
|
@builder["window1"].show_all
|
191
209
|
unless savantVersion?(@savantURL)
|
192
210
|
@builder["buttonActivateScene"].hide
|
211
|
+
end
|
212
|
+
if @savantHostVersion.to_r > 8.0
|
213
|
+
@builder["buttonAdvanced"].show
|
214
|
+
else
|
215
|
+
@builder["buttonAdvanced"].hide
|
193
216
|
end
|
194
217
|
end
|
195
218
|
|
@@ -197,10 +220,8 @@ class SceneManager
|
|
197
220
|
def buttonScanHost__clicked(*argv)
|
198
221
|
@savantURL = @builder["savantURL"].text
|
199
222
|
if is_port_open?(@savantURL,"11263") || is_port_open?(@savantURL,"48664") || is_port_open?(@savantURL,"1124")
|
200
|
-
unless savantVersion?(@savantURL)
|
201
|
-
@builder["buttonActivateScene"].hide
|
202
|
-
end
|
203
223
|
begin
|
224
|
+
savantVersion?(@savantURL)
|
204
225
|
@listviewSavantScenes.model.clear
|
205
226
|
Net::SSH.start(@savantURL, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
|
206
227
|
# test to see if remote files exist and transfer them if they do
|
@@ -369,64 +390,6 @@ class SceneManager
|
|
369
390
|
end
|
370
391
|
end
|
371
392
|
|
372
|
-
# Duplicate the selected scenes
|
373
|
-
# def buttonDuplicateScene__clicked(*argv)
|
374
|
-
# get_glade_variables()
|
375
|
-
#
|
376
|
-
# duplicateIDs = []
|
377
|
-
# duplicateScenes = []
|
378
|
-
# duplicateUserss = []
|
379
|
-
# duplicateImages = []
|
380
|
-
# duplicateTags = []
|
381
|
-
# duplicateGlobals = []
|
382
|
-
# duplicateActives = []
|
383
|
-
# duplicateScheduled = []
|
384
|
-
# duplicateCustomImages = []
|
385
|
-
# duplicateSceneOrders = []
|
386
|
-
#
|
387
|
-
# count = 0
|
388
|
-
# @listviewSavantScenes.each_row do |row|
|
389
|
-
# if row[:modify]
|
390
|
-
# count += 1
|
391
|
-
# duplicateIDs << row[:id]
|
392
|
-
# duplicateScenes << row[:scene]
|
393
|
-
# duplicateUsers << row[:user]
|
394
|
-
# duplicateImages << row[:image]
|
395
|
-
# duplicateTags << row[:tags]
|
396
|
-
# duplicateGlobals << row[:isGlobal]
|
397
|
-
# duplicateActives << row[:isActive]
|
398
|
-
# duplicateScheduled << row[:isScheduled]
|
399
|
-
# duplicateCustomImages << row[:HasCustomImage]
|
400
|
-
# duplicateSceneOrders << row[:userSceneOrder]
|
401
|
-
# end
|
402
|
-
# end
|
403
|
-
# make sure a scene was selected, else alert the user
|
404
|
-
# if count > 0
|
405
|
-
# confirm the edits should be made
|
406
|
-
# strAlert = "Do you want to delete the following scenes from the Savant host?\n\n" + deleteScenes.join("\n")
|
407
|
-
# if alert(strAlert, :headline => "Delete Scenes?", :button_yes => "Delete", :button_cancel => "Cancel", :parent => self)
|
408
|
-
# edit the database with the updated info
|
409
|
-
# deleteIDs.each do |id|
|
410
|
-
# stm = @db.prepare( "delete from sceneusermap where sceneIdentifier=?" )
|
411
|
-
# stm.bind_param 1, id
|
412
|
-
# stm.execute
|
413
|
-
# stm.close
|
414
|
-
# stm = @db.prepare( "delete from scenes where identifier=?" )
|
415
|
-
# stm.bind_param 1, id
|
416
|
-
# stm.execute
|
417
|
-
# stm.close
|
418
|
-
# stm = @db.prepare( "delete from scenedefinitions where sceneIdentifier=?" )
|
419
|
-
# stm.bind_param 1, id
|
420
|
-
# stm.execute
|
421
|
-
# stm.close
|
422
|
-
# end
|
423
|
-
# updateDatabase()
|
424
|
-
# buttonScanHost__clicked()
|
425
|
-
# end
|
426
|
-
# else
|
427
|
-
# alert("Please select at least 1 row to modify.", :parent => self)
|
428
|
-
# end
|
429
|
-
# end
|
430
393
|
|
431
394
|
# #
|
432
395
|
# BACKUP AND RESTORE #
|
@@ -504,4 +467,110 @@ class SceneManager
|
|
504
467
|
@builder["window1"].destroy
|
505
468
|
end
|
506
469
|
|
470
|
+
|
471
|
+
|
472
|
+
def buttonAdvanced__clicked(*argv)
|
473
|
+
@savantURL = @builder["savantURL"].text
|
474
|
+
unless @scliBridge == "~/Applications/RacePointMedia/sclibridge "
|
475
|
+
@builder["buttonAnalytics"].hide
|
476
|
+
end
|
477
|
+
@builder["windowAdvanced"].show
|
478
|
+
end
|
479
|
+
|
480
|
+
def buttonAdvancedCancel__clicked(*argv)
|
481
|
+
@builder["windowAdvanced"].hide
|
482
|
+
@listviewAdvanced.model.clear
|
483
|
+
end
|
484
|
+
|
485
|
+
#Rebuild listviewAdvanced window
|
486
|
+
def repaintAdvanced
|
487
|
+
@builder["listviewAdvanced"].hide
|
488
|
+
@builder["listviewAdvanced"].show_all
|
489
|
+
unless @scliBridge == "~/Applications/RacePointMedia/sclibridge "
|
490
|
+
@builder["buttonAnalytics"].hide
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
494
|
+
#Scan the specified IP for Analytics
|
495
|
+
def buttonAnalytics__clicked(*argv)
|
496
|
+
@builder["labelAdvanced"].label = "<big><b>Analytics</b></big>"
|
497
|
+
@builder["windowLoading"].show
|
498
|
+
begin
|
499
|
+
@listviewAdvanced.model.clear
|
500
|
+
Net::SSH.start(@savantURL, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
|
501
|
+
# test to see if remote files exist and transfer them if they do
|
502
|
+
if @scliBridge == "~/Applications/RacePointMedia/sclibridge "
|
503
|
+
@dis = "/Users/RPM/Library/Application Support/RacePointMedia/statusfiles/eventHistory.sqlite"
|
504
|
+
else
|
505
|
+
@dis = "GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/eventHistory.sqlite"
|
506
|
+
end
|
507
|
+
fileExists = ssh.exec!("[ -f #{@dis} ] && echo 'true' || echo 'false'")
|
508
|
+
unless fileExists == 'false'
|
509
|
+
ssh.scp.download!(@dis, '/tmp/')
|
510
|
+
#read from sqlite database and add to listview
|
511
|
+
@db = SQLite3::Database.open('/tmp/eventHistory.sqlite')
|
512
|
+
@db.execute( "select * from Analytics" ) do |rowData|
|
513
|
+
row = @listviewAdvanced.add_row
|
514
|
+
row[:time] = Time.at(rowData[12])
|
515
|
+
row[:event] = rowData[1]
|
516
|
+
row[:user] = rowData[3]
|
517
|
+
row[:deviceName] = rowData[10]
|
518
|
+
row[:deviceModel] = rowData[9]
|
519
|
+
row[:deviceApp] = rowData[6]
|
520
|
+
row[:deviceOS] = rowData[4]
|
521
|
+
row[:deviceUID] = rowData[5]
|
522
|
+
end
|
523
|
+
@listviewAdvanced.col_visible(true)
|
524
|
+
@listviewAdvanced.col_visible(:zone => false, :component => false, :logicalComponent => false, :variantID => false, :serviceID => false, :type => false, :argument => false)
|
525
|
+
|
526
|
+
repaintAdvanced
|
527
|
+
end
|
528
|
+
end
|
529
|
+
rescue Net::SSH::ConnectionTimeout, SocketError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Errno::EHOSTDOWN
|
530
|
+
alert("Host not reached.", :parent => self)
|
531
|
+
end
|
532
|
+
@builder["windowLoading"].hide
|
533
|
+
end
|
534
|
+
|
535
|
+
#Scan the specified IP for Events
|
536
|
+
def buttonEvents__clicked(*argv)
|
537
|
+
@builder["labelAdvanced"].label = "<big><b>Events</b></big>"
|
538
|
+
@builder["windowLoading"].show
|
539
|
+
begin
|
540
|
+
@listviewAdvanced.model.clear
|
541
|
+
Net::SSH.start(@savantURL, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
|
542
|
+
# test to see if remote files exist and transfer them if they do
|
543
|
+
if @scliBridge == "~/Applications/RacePointMedia/sclibridge "
|
544
|
+
@dis = "/Users/RPM/Library/Application Support/RacePointMedia/statusfiles/eventHistory.sqlite"
|
545
|
+
else
|
546
|
+
@dis = "GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/eventHistory.sqlite"
|
547
|
+
end
|
548
|
+
fileExists = ssh.exec!("[ -f #{@dis} ] && echo 'true' || echo 'false'")
|
549
|
+
unless fileExists == 'false'
|
550
|
+
ssh.scp.download!(@dis, '/tmp/')
|
551
|
+
#read from sqlite database and add to listview
|
552
|
+
@db = SQLite3::Database.open('/tmp/eventHistory.sqlite')
|
553
|
+
@db.execute( "select * from Events" ) do |rowData|
|
554
|
+
row = @listviewAdvanced.add_row
|
555
|
+
row[:time] = Time.at(rowData[0].to_i)
|
556
|
+
row[:user] = rowData[1]
|
557
|
+
row[:zone] = rowData[5]
|
558
|
+
row[:component] = rowData[6]
|
559
|
+
row[:logicalComponent] = rowData[7]
|
560
|
+
row[:variantID] = rowData[8]
|
561
|
+
row[:serviceID] = rowData[9]
|
562
|
+
row[:type] = rowData[2]
|
563
|
+
row[:argument] = rowData[3]
|
564
|
+
end
|
565
|
+
@listviewAdvanced.col_visible(true)
|
566
|
+
@listviewAdvanced.col_visible(:event => false, :deviceName => false, :deviceModel => false, :deviceApp => false, :deviceOS => false, :deviceUID => false)
|
567
|
+
|
568
|
+
repaintAdvanced
|
569
|
+
end
|
570
|
+
end
|
571
|
+
rescue Net::SSH::ConnectionTimeout, SocketError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Errno::EHOSTDOWN
|
572
|
+
alert("Host not reached.", :parent => self)
|
573
|
+
end
|
574
|
+
@builder["windowLoading"].hide
|
575
|
+
end
|
507
576
|
end
|
@@ -172,7 +172,7 @@
|
|
172
172
|
<property name="name">30</property>
|
173
173
|
<property name="visible">True</property>
|
174
174
|
<property name="can_focus">False</property>
|
175
|
-
<property name="margin_left">
|
175
|
+
<property name="margin_left">180</property>
|
176
176
|
<property name="margin_top">12</property>
|
177
177
|
<property name="margin_bottom">12</property>
|
178
178
|
<property name="column_spacing">3</property>
|
@@ -246,6 +246,18 @@
|
|
246
246
|
<property name="top_attach">0</property>
|
247
247
|
</packing>
|
248
248
|
</child>
|
249
|
+
<child>
|
250
|
+
<object class="GtkButton" id="buttonAdvanced">
|
251
|
+
<property name="label" translatable="yes">Advanced</property>
|
252
|
+
<property name="visible">True</property>
|
253
|
+
<property name="can_focus">True</property>
|
254
|
+
<property name="receives_default">True</property>
|
255
|
+
</object>
|
256
|
+
<packing>
|
257
|
+
<property name="left_attach">4</property>
|
258
|
+
<property name="top_attach">0</property>
|
259
|
+
</packing>
|
260
|
+
</child>
|
249
261
|
</object>
|
250
262
|
<packing>
|
251
263
|
<property name="left_attach">0</property>
|
@@ -282,7 +294,9 @@
|
|
282
294
|
<property name="label" translatable="yes"> Savant scene manager copies the dashboard.sqlite file from the host to a temporary folder and lists all scenes from all users on that host.
|
283
295
|
You can backup and restore this database, as well as delete scenes or edit certain properties: Scene Name, user email, and if the scene is Global.
|
284
296
|
|
285
|
-
If the host is running
|
297
|
+
If the host is running 8.x, you can see Event History.
|
298
|
+
If the host is a Pro Host, you can see Analytics Data.
|
299
|
+
If the host is running at least 8.3, you can Activate Scenes.</property>
|
286
300
|
<property name="justify">center</property>
|
287
301
|
<property name="wrap">True</property>
|
288
302
|
<property name="wrap_mode">word-char</property>
|
@@ -297,6 +311,148 @@ If the host is running at least 8.3, you can also activate scenes.</property>
|
|
297
311
|
</object>
|
298
312
|
</child>
|
299
313
|
</object>
|
314
|
+
<object class="GtkWindow" id="windowAdvanced">
|
315
|
+
<property name="can_focus">False</property>
|
316
|
+
<property name="modal">True</property>
|
317
|
+
<property name="window_position">center-on-parent</property>
|
318
|
+
<property name="gravity">center</property>
|
319
|
+
<property name="transient_for">window1</property>
|
320
|
+
<child>
|
321
|
+
<object class="GtkGrid">
|
322
|
+
<property name="visible">True</property>
|
323
|
+
<property name="can_focus">False</property>
|
324
|
+
<child>
|
325
|
+
<object class="GtkLabel" id="labelAdvanced">
|
326
|
+
<property name="visible">True</property>
|
327
|
+
<property name="can_focus">False</property>
|
328
|
+
<property name="margin_top">12</property>
|
329
|
+
<property name="margin_bottom">12</property>
|
330
|
+
<property name="label" translatable="yes"><big><b>Advanced</b></big></property>
|
331
|
+
<property name="use_markup">True</property>
|
332
|
+
</object>
|
333
|
+
<packing>
|
334
|
+
<property name="left_attach">0</property>
|
335
|
+
<property name="top_attach">0</property>
|
336
|
+
</packing>
|
337
|
+
</child>
|
338
|
+
<child>
|
339
|
+
<object class="GtkScrolledWindow" id="listviewAdvanced">
|
340
|
+
<property name="visible">True</property>
|
341
|
+
<property name="can_focus">True</property>
|
342
|
+
<property name="margin_left">12</property>
|
343
|
+
<property name="margin_right">12</property>
|
344
|
+
<property name="margin_top">12</property>
|
345
|
+
<property name="margin_bottom">12</property>
|
346
|
+
<property name="shadow_type">in</property>
|
347
|
+
<property name="min_content_width">600</property>
|
348
|
+
<property name="min_content_height">300</property>
|
349
|
+
<property name="propagate_natural_width">True</property>
|
350
|
+
<child>
|
351
|
+
<placeholder/>
|
352
|
+
</child>
|
353
|
+
</object>
|
354
|
+
<packing>
|
355
|
+
<property name="left_attach">0</property>
|
356
|
+
<property name="top_attach">1</property>
|
357
|
+
</packing>
|
358
|
+
</child>
|
359
|
+
<child>
|
360
|
+
<object class="GtkGrid">
|
361
|
+
<property name="visible">True</property>
|
362
|
+
<property name="can_focus">False</property>
|
363
|
+
<property name="margin_left">12</property>
|
364
|
+
<property name="margin_right">12</property>
|
365
|
+
<property name="margin_top">12</property>
|
366
|
+
<property name="margin_bottom">12</property>
|
367
|
+
<property name="hexpand">True</property>
|
368
|
+
<property name="column_spacing">12</property>
|
369
|
+
<property name="column_homogeneous">True</property>
|
370
|
+
<child>
|
371
|
+
<object class="GtkButton" id="buttonAnalytics">
|
372
|
+
<property name="label" translatable="yes">Analytics</property>
|
373
|
+
<property name="visible">True</property>
|
374
|
+
<property name="can_focus">True</property>
|
375
|
+
<property name="receives_default">True</property>
|
376
|
+
</object>
|
377
|
+
<packing>
|
378
|
+
<property name="left_attach">0</property>
|
379
|
+
<property name="top_attach">0</property>
|
380
|
+
</packing>
|
381
|
+
</child>
|
382
|
+
<child>
|
383
|
+
<object class="GtkButton" id="buttonEvents">
|
384
|
+
<property name="label" translatable="yes">Event History</property>
|
385
|
+
<property name="visible">True</property>
|
386
|
+
<property name="can_focus">True</property>
|
387
|
+
<property name="receives_default">True</property>
|
388
|
+
</object>
|
389
|
+
<packing>
|
390
|
+
<property name="left_attach">1</property>
|
391
|
+
<property name="top_attach">0</property>
|
392
|
+
</packing>
|
393
|
+
</child>
|
394
|
+
<child>
|
395
|
+
<object class="GtkButton" id="buttonAdvancedCancel">
|
396
|
+
<property name="label" translatable="yes">Cancel</property>
|
397
|
+
<property name="visible">True</property>
|
398
|
+
<property name="can_focus">True</property>
|
399
|
+
<property name="receives_default">True</property>
|
400
|
+
</object>
|
401
|
+
<packing>
|
402
|
+
<property name="left_attach">3</property>
|
403
|
+
<property name="top_attach">0</property>
|
404
|
+
</packing>
|
405
|
+
</child>
|
406
|
+
<child>
|
407
|
+
<object class="GtkAlignment">
|
408
|
+
<property name="visible">True</property>
|
409
|
+
<property name="can_focus">False</property>
|
410
|
+
<child>
|
411
|
+
<placeholder/>
|
412
|
+
</child>
|
413
|
+
</object>
|
414
|
+
<packing>
|
415
|
+
<property name="left_attach">2</property>
|
416
|
+
<property name="top_attach">0</property>
|
417
|
+
</packing>
|
418
|
+
</child>
|
419
|
+
</object>
|
420
|
+
<packing>
|
421
|
+
<property name="left_attach">0</property>
|
422
|
+
<property name="top_attach">2</property>
|
423
|
+
</packing>
|
424
|
+
</child>
|
425
|
+
</object>
|
426
|
+
</child>
|
427
|
+
</object>
|
428
|
+
<object class="GtkWindow" id="windowLoading">
|
429
|
+
<property name="width_request">100</property>
|
430
|
+
<property name="height_request">100</property>
|
431
|
+
<property name="can_focus">False</property>
|
432
|
+
<property name="resizable">False</property>
|
433
|
+
<property name="modal">True</property>
|
434
|
+
<property name="window_position">center-on-parent</property>
|
435
|
+
<property name="default_width">100</property>
|
436
|
+
<property name="default_height">100</property>
|
437
|
+
<property name="urgency_hint">True</property>
|
438
|
+
<property name="decorated">False</property>
|
439
|
+
<property name="deletable">False</property>
|
440
|
+
<property name="gravity">center</property>
|
441
|
+
<property name="transient_for">windowAdvanced</property>
|
442
|
+
<child>
|
443
|
+
<object class="GtkAlignment">
|
444
|
+
<property name="visible">True</property>
|
445
|
+
<property name="can_focus">False</property>
|
446
|
+
<child>
|
447
|
+
<object class="GtkLabel">
|
448
|
+
<property name="visible">True</property>
|
449
|
+
<property name="can_focus">False</property>
|
450
|
+
<property name="label" translatable="yes">Loading....</property>
|
451
|
+
</object>
|
452
|
+
</child>
|
453
|
+
</object>
|
454
|
+
</child>
|
455
|
+
</object>
|
300
456
|
<object class="GtkWindow" id="windowBackupRestore">
|
301
457
|
<property name="width_request">300</property>
|
302
458
|
<property name="height_request">300</property>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: savant-scenes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Corey Miller
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir:
|
10
10
|
- bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-05-
|
12
|
+
date: 2017-05-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sqlite3
|