savant-scenes 1.0.197 → 1.1.0
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/src/SceneManager.rb +165 -118
- 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: e1e18993338df2f5af7ecf72cefd29641b6cf60d
|
4
|
+
data.tar.gz: b7cbed0345fbb29bc73ab0fd0c1bd957ad746b9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7b467d85c69a312edf819654cfc6171a15449fbd1966f2c781c72c59cd3634406ba1e4a9fc27e8765f311e0a2aef9574dd1deebb8c55ecb9e72978a54d8a428
|
7
|
+
data.tar.gz: 96c60c822028ac53c44ac22059ae3185d712e03d8dba366d8445e9d5d3696e8d40520cffbd390b8278a1a79b7dd4b93343dda974c2ae134ea0089a9ae7f95eac
|
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|
|
@@ -116,87 +140,59 @@ class SceneManager
|
|
116
140
|
end
|
117
141
|
end
|
118
142
|
ssh.loop
|
119
|
-
#parse the
|
143
|
+
#parse the scscredentials.plist from the pro host to get host name and then version
|
120
144
|
if @scliBridge == "~/Applications/RacePointMedia/sclibridge "
|
121
145
|
ssh.open_channel do |ch, success|
|
122
146
|
|
123
|
-
ch.exec("plutil -p 'library/application support/racepointmedia/
|
147
|
+
ch.exec("plutil -p 'library/application support/racepointmedia/statusfiles/scscredentials.plist'")
|
124
148
|
ch.on_data do |ch, data|
|
125
|
-
if data.to_s.include? '
|
126
|
-
x = data.split("
|
127
|
-
x = x[1].split("
|
128
|
-
@savantHostName = x[0]
|
129
|
-
@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)
|
130
155
|
end
|
131
156
|
end
|
132
|
-
end
|
133
|
-
ssh.loop
|
134
|
-
#Use host name to query SoftwareVersion state from host
|
135
|
-
ssh.open_channel do |ch, success|
|
136
|
-
ch.exec(@str)
|
137
|
-
ch.on_data do |ch, data|
|
138
|
-
#alert data.inspect
|
139
|
-
@savantHostVersion = data
|
140
|
-
end
|
141
157
|
ch.on_extended_data do |ch, type, data|
|
142
158
|
alert "Error: #{data.inspect}"
|
143
159
|
end
|
144
160
|
end
|
145
161
|
ssh.loop
|
146
|
-
#parse the
|
162
|
+
#parse the scscredentials.plist from the smart host to get host name and then version
|
147
163
|
elsif @scliBridge == "source ~/.zshrc && /usr/local/bin/sclibridge "
|
148
164
|
ssh.open_channel do |ch, success|
|
149
|
-
ch.exec("strings 'GNUstep/Library/ApplicationSupport/RacePointMedia/
|
165
|
+
ch.exec("strings 'GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/scsCredentials.plist'")
|
150
166
|
ch.on_data do |ch, data|
|
151
|
-
if data.to_s.include? '
|
152
|
-
x = data.split("
|
153
|
-
|
154
|
-
x = x[
|
155
|
-
|
156
|
-
|
157
|
-
return false
|
158
|
-
@instantHost = true
|
159
|
-
elsif data.to_s.include? 'module'
|
160
|
-
x = data.split('module')
|
161
|
-
x = x[1].split("\n")
|
162
|
-
@savantHostName = x[0][1..-1]
|
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
|
+
|
163
173
|
@str = @scliBridge + "readstate \'" + @savantHostName + ".SoftwareVersion\'"
|
174
|
+
@savantHostVersion = ssh.exec!(@str)
|
164
175
|
end
|
165
176
|
end
|
177
|
+
|
166
178
|
ch.on_extended_data do |ch, type, data|
|
167
179
|
alert "Error: #{data.inspect}"
|
168
180
|
end
|
169
181
|
end
|
170
182
|
ssh.loop
|
171
|
-
#Get version from file on smart host
|
172
|
-
@savantHostVersion = ssh.exec!(@str)
|
173
|
-
# ssh.open_channel do |ch, success|
|
174
|
-
# alert "in channel"
|
175
|
-
# ch.exec("strings 'GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/scsCredentials.plist'")
|
176
|
-
# ch.on_data do |ch, data|
|
177
|
-
# alert data
|
178
|
-
# if data.to_s.include? 'version'
|
179
|
-
# x = data.split("version</key>")
|
180
|
-
# x = x[1].split(%q{</string>})
|
181
|
-
# x = x[0].split(%q{<string>})
|
182
|
-
# @savantHostVersion = x[1]
|
183
|
-
# end
|
184
|
-
# end
|
185
|
-
# end
|
186
|
-
# ssh.loop
|
187
|
-
end
|
188
|
-
end
|
189
|
-
@builder["labelHostInfo"].text = @savantHostName + " Version : " + @savantHostVersion
|
190
183
|
|
191
|
-
|
192
|
-
if @savantHostVersion.to_r > 8.2 && !@savantHostVersion.empty?
|
193
|
-
return true
|
194
|
-
else
|
195
|
-
return false
|
184
|
+
end
|
196
185
|
end
|
197
|
-
|
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
|
198
195
|
rescue Net::SSH::ConnectionTimeout, SocketError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Errno::EHOSTDOWN
|
199
|
-
|
200
196
|
end
|
201
197
|
end
|
202
198
|
|
@@ -212,6 +208,11 @@ class SceneManager
|
|
212
208
|
@builder["window1"].show_all
|
213
209
|
unless savantVersion?(@savantURL)
|
214
210
|
@builder["buttonActivateScene"].hide
|
211
|
+
end
|
212
|
+
if @savantHostVersion.to_r > 8.0
|
213
|
+
@builder["buttonAdvanced"].show
|
214
|
+
else
|
215
|
+
@builder["buttonAdvanced"].hide
|
215
216
|
end
|
216
217
|
end
|
217
218
|
|
@@ -219,10 +220,8 @@ class SceneManager
|
|
219
220
|
def buttonScanHost__clicked(*argv)
|
220
221
|
@savantURL = @builder["savantURL"].text
|
221
222
|
if is_port_open?(@savantURL,"11263") || is_port_open?(@savantURL,"48664") || is_port_open?(@savantURL,"1124")
|
222
|
-
unless savantVersion?(@savantURL)
|
223
|
-
@builder["buttonActivateScene"].hide
|
224
|
-
end
|
225
223
|
begin
|
224
|
+
savantVersion?(@savantURL)
|
226
225
|
@listviewSavantScenes.model.clear
|
227
226
|
Net::SSH.start(@savantURL, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
|
228
227
|
# test to see if remote files exist and transfer them if they do
|
@@ -391,64 +390,6 @@ class SceneManager
|
|
391
390
|
end
|
392
391
|
end
|
393
392
|
|
394
|
-
# Duplicate the selected scenes
|
395
|
-
# def buttonDuplicateScene__clicked(*argv)
|
396
|
-
# get_glade_variables()
|
397
|
-
#
|
398
|
-
# duplicateIDs = []
|
399
|
-
# duplicateScenes = []
|
400
|
-
# duplicateUserss = []
|
401
|
-
# duplicateImages = []
|
402
|
-
# duplicateTags = []
|
403
|
-
# duplicateGlobals = []
|
404
|
-
# duplicateActives = []
|
405
|
-
# duplicateScheduled = []
|
406
|
-
# duplicateCustomImages = []
|
407
|
-
# duplicateSceneOrders = []
|
408
|
-
#
|
409
|
-
# count = 0
|
410
|
-
# @listviewSavantScenes.each_row do |row|
|
411
|
-
# if row[:modify]
|
412
|
-
# count += 1
|
413
|
-
# duplicateIDs << row[:id]
|
414
|
-
# duplicateScenes << row[:scene]
|
415
|
-
# duplicateUsers << row[:user]
|
416
|
-
# duplicateImages << row[:image]
|
417
|
-
# duplicateTags << row[:tags]
|
418
|
-
# duplicateGlobals << row[:isGlobal]
|
419
|
-
# duplicateActives << row[:isActive]
|
420
|
-
# duplicateScheduled << row[:isScheduled]
|
421
|
-
# duplicateCustomImages << row[:HasCustomImage]
|
422
|
-
# duplicateSceneOrders << row[:userSceneOrder]
|
423
|
-
# end
|
424
|
-
# end
|
425
|
-
# make sure a scene was selected, else alert the user
|
426
|
-
# if count > 0
|
427
|
-
# confirm the edits should be made
|
428
|
-
# strAlert = "Do you want to delete the following scenes from the Savant host?\n\n" + deleteScenes.join("\n")
|
429
|
-
# if alert(strAlert, :headline => "Delete Scenes?", :button_yes => "Delete", :button_cancel => "Cancel", :parent => self)
|
430
|
-
# edit the database with the updated info
|
431
|
-
# deleteIDs.each do |id|
|
432
|
-
# stm = @db.prepare( "delete from sceneusermap where sceneIdentifier=?" )
|
433
|
-
# stm.bind_param 1, id
|
434
|
-
# stm.execute
|
435
|
-
# stm.close
|
436
|
-
# stm = @db.prepare( "delete from scenes where identifier=?" )
|
437
|
-
# stm.bind_param 1, id
|
438
|
-
# stm.execute
|
439
|
-
# stm.close
|
440
|
-
# stm = @db.prepare( "delete from scenedefinitions where sceneIdentifier=?" )
|
441
|
-
# stm.bind_param 1, id
|
442
|
-
# stm.execute
|
443
|
-
# stm.close
|
444
|
-
# end
|
445
|
-
# updateDatabase()
|
446
|
-
# buttonScanHost__clicked()
|
447
|
-
# end
|
448
|
-
# else
|
449
|
-
# alert("Please select at least 1 row to modify.", :parent => self)
|
450
|
-
# end
|
451
|
-
# end
|
452
393
|
|
453
394
|
# #
|
454
395
|
# BACKUP AND RESTORE #
|
@@ -526,4 +467,110 @@ class SceneManager
|
|
526
467
|
@builder["window1"].destroy
|
527
468
|
end
|
528
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
|
529
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.1.0
|
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
|