savant-scenes 1.0.2 → 1.0.11
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 +110 -177
- data/bin/src/glade/SceneManager.glade +2 -158
- 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: 8013caf1f3b6d86518e85483a94129473b7b93ad
|
4
|
+
data.tar.gz: c170d5ab124b408fcebb8714fd60d562fa571635
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f567f774f64655a3ef3c6f99824223674473d4af888a231ce15c4a625460cdf079d69979ad49555e89518abb1cf73fdaede1c06483247adcfb8f16454ffc046
|
7
|
+
data.tar.gz: 3895d15ca2cebed9f83cd131c858d3e6578a99cbc6a70dc2908406dd168874e1cb8942554cd3a5e7f430718908db2aab07ddbc4646efb85f3a758ddde30f1ca9
|
data/bin/src/SceneManager.rb
CHANGED
@@ -6,7 +6,6 @@ require 'socket'
|
|
6
6
|
require 'timeout'
|
7
7
|
require 'ipaddress'
|
8
8
|
require 'sqlite3'
|
9
|
-
require 'date'
|
10
9
|
|
11
10
|
|
12
11
|
class SceneManager
|
@@ -17,16 +16,11 @@ class SceneManager
|
|
17
16
|
def initialize
|
18
17
|
#Initialize the Scenes List view
|
19
18
|
@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
|
-
|
21
19
|
@listviewSavantScenes.col_sortable(true)
|
22
|
-
|
23
20
|
@listviewSavantScenes.col_sort_column_id(:scene => @listviewSavantScenes.id(:scene), :user => @listviewSavantScenes.id(:user))
|
24
|
-
|
25
21
|
@listviewSavantScenes.col_title(:modify => "", :scene => "Scene Name", :tags => "Zones Affected", :isGlobal => "Global", :isActive => "Active", :isScheduled => "Scheduled", :hasCustomImage => "Custom Image", :userSceneOrder => "User Order")
|
26
|
-
|
27
22
|
@listviewSavantScenes.col_xalign(:isGlobal => 0.5, :isActive => 0.5, :isScheduled => 0.5, :hasCustomImage => 0.5, :userSceneOrder => 0.5)
|
28
23
|
@listviewSavantScenes.col_width(:tags => 100, :image => 100)
|
29
|
-
|
30
24
|
@listviewSavantScenes.ren_editable(:scene => true, :user => true, :id => true, :isGlobal => String)
|
31
25
|
|
32
26
|
row = @listviewSavantScenes.add_row
|
@@ -68,21 +62,6 @@ class SceneManager
|
|
68
62
|
#
|
69
63
|
# @listviewSavantScenes.renderer(:isActive).edited_callback = Proc.new { |model_sym, row, view |
|
70
64
|
# 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
|
-
|
86
65
|
# }
|
87
66
|
end
|
88
67
|
|
@@ -91,9 +70,6 @@ class SceneManager
|
|
91
70
|
@savantURL = "192.168.77.40"
|
92
71
|
@login = 'RPM'
|
93
72
|
@password = 'RPM'
|
94
|
-
|
95
|
-
@builder["buttonAdvanced"].hide
|
96
|
-
@builder["buttonActivateScene"].hide
|
97
73
|
|
98
74
|
@ftv = VR::FileTreeView.new(Dir.home, File.join(File.dirname(__FILE__), "/../img"), glob = "*", validate_block = nil)
|
99
75
|
@builder["scrolledwindow_BackupRestore"].add(@ftv)
|
@@ -123,7 +99,7 @@ class SceneManager
|
|
123
99
|
begin
|
124
100
|
@builder["labelHostInfo"].label = ""
|
125
101
|
Net::SSH.start(ip, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
|
126
|
-
#Check host type and update sclibridge location
|
102
|
+
#Check host type and update sclibridge location for reference, though only Pro Host is supported
|
127
103
|
ssh.open_channel do |ch, success|
|
128
104
|
ch.exec("uname")
|
129
105
|
ch.on_data do |ch, data|
|
@@ -131,68 +107,76 @@ class SceneManager
|
|
131
107
|
@scliBridge = "~/Applications/RacePointMedia/sclibridge "
|
132
108
|
@dis = "/Users/RPM/Library/Application Support/RacePointMedia/statusfiles/dis/dashboard.sqlite"
|
133
109
|
else
|
134
|
-
@scliBridge = "
|
110
|
+
@scliBridge = "/usr/local/bin/sclibridge "
|
135
111
|
@dis = "GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/dis/dashboard.sqlite"
|
112
|
+
alert "smart host"
|
136
113
|
end
|
137
114
|
end
|
138
|
-
ch.on_extended_data do |ch, type, data|
|
139
|
-
alert "Error: #{data.inspect}"
|
140
|
-
end
|
141
115
|
end
|
142
116
|
ssh.loop
|
143
|
-
#parse the
|
117
|
+
#parse the rpmSystemInfo.plist form the pro host to get host name
|
144
118
|
if @scliBridge == "~/Applications/RacePointMedia/sclibridge "
|
145
119
|
ssh.open_channel do |ch, success|
|
146
120
|
|
147
|
-
ch.exec("plutil -p 'library/application support/racepointmedia/
|
121
|
+
ch.exec("plutil -p 'library/application support/racepointmedia/userconfig.rpmconfig/rpmSystemInfo.plist'")
|
148
122
|
ch.on_data do |ch, data|
|
149
|
-
if data.to_s.include? '
|
150
|
-
x = data.split(
|
151
|
-
x = x[1].split(
|
152
|
-
@savantHostName = x[0]
|
153
|
-
@str = @scliBridge + "readstate \
|
154
|
-
@savantHostVersion = ssh.exec!(@str)
|
123
|
+
if data.to_s.include? 'module'
|
124
|
+
x = data.split("\"RPMSystemName\" => ")
|
125
|
+
x = x[1].split("\n")
|
126
|
+
@savantHostName = x[0][1..-2]
|
127
|
+
@str = @scliBridge + "readstate \"" + @savantHostName + ".SoftwareVersion\""
|
155
128
|
end
|
156
129
|
end
|
157
|
-
ch.on_extended_data do |ch, type, data|
|
158
|
-
alert "Error: #{data.inspect}"
|
159
|
-
end
|
160
130
|
end
|
161
131
|
ssh.loop
|
162
|
-
#parse the
|
163
|
-
elsif @scliBridge == "
|
132
|
+
#parse the rpmSystemInfo.plist from the smart host to get host name
|
133
|
+
elsif @scliBridge == "/usr/local/bin/sclibridge "
|
164
134
|
ssh.open_channel do |ch, success|
|
165
|
-
ch.exec("strings 'GNUstep/Library/ApplicationSupport/RacePointMedia/
|
135
|
+
ch.exec("strings 'GNUstep/Library/ApplicationSupport/RacePointMedia/userConfig.rpmConfig/rpmSystemInfo.plist'")
|
166
136
|
ch.on_data do |ch, data|
|
167
|
-
if data.to_s.include? '
|
168
|
-
x = data.split("
|
169
|
-
|
170
|
-
x = x[
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
@
|
137
|
+
if data.to_s.include? 'DOCTYPE'
|
138
|
+
x = data.split("RPMUserDefinedName</key><string>")
|
139
|
+
y = x[1].split("</string>")
|
140
|
+
x = x[1].split("VERSION</key><integer>")
|
141
|
+
x = x[1].split("</integer>")
|
142
|
+
alert("Instant host found at specified IP address. Instant hosts are not supported (even by Savant!)", :parent => self)
|
143
|
+
return false
|
144
|
+
@instantHost = true
|
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
|
175
151
|
end
|
176
152
|
end
|
177
|
-
|
178
|
-
ch.on_extended_data do |ch, type, data|
|
179
|
-
alert "Error: #{data.inspect}"
|
180
|
-
end
|
181
153
|
end
|
182
154
|
ssh.loop
|
155
|
+
end
|
156
|
+
#Use host name to query SoftwareVersion state from host
|
157
|
+
ssh.open_channel do |ch, success|
|
158
|
+
alert "in open channel"
|
159
|
+
ch.exec(@str)
|
160
|
+
ch.on_data do |ch, data|
|
161
|
+
alert "data"
|
162
|
+
@savantHostVersion = data
|
163
|
+
end
|
164
|
+
end
|
165
|
+
ssh.loop
|
166
|
+
end
|
167
|
+
alert @savantHostName
|
168
|
+
alert @savantHostVersion
|
169
|
+
@builder["labelHostInfo"].text = @savantHostName + " Version : " + @savantHostVersion
|
183
170
|
|
184
|
-
|
171
|
+
#return true if version is 8.3 or later
|
172
|
+
if @savantHostVersion.to_r > 8.2 && !@savantHostVersion.empty?
|
173
|
+
return true
|
174
|
+
else
|
175
|
+
return false
|
185
176
|
end
|
186
|
-
|
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
|
177
|
+
|
195
178
|
rescue Net::SSH::ConnectionTimeout, SocketError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Errno::EHOSTDOWN
|
179
|
+
|
196
180
|
end
|
197
181
|
end
|
198
182
|
|
@@ -208,11 +192,6 @@ class SceneManager
|
|
208
192
|
@builder["window1"].show_all
|
209
193
|
unless savantVersion?(@savantURL)
|
210
194
|
@builder["buttonActivateScene"].hide
|
211
|
-
end
|
212
|
-
if @savantHostVersion.to_r > 8.0
|
213
|
-
@builder["buttonAdvanced"].show
|
214
|
-
else
|
215
|
-
@builder["buttonAdvanced"].hide
|
216
195
|
end
|
217
196
|
end
|
218
197
|
|
@@ -220,8 +199,10 @@ class SceneManager
|
|
220
199
|
def buttonScanHost__clicked(*argv)
|
221
200
|
@savantURL = @builder["savantURL"].text
|
222
201
|
if is_port_open?(@savantURL,"11263") || is_port_open?(@savantURL,"48664") || is_port_open?(@savantURL,"1124")
|
202
|
+
unless savantVersion?(@savantURL)
|
203
|
+
@builder["buttonActivateScene"].hide
|
204
|
+
end
|
223
205
|
begin
|
224
|
-
savantVersion?(@savantURL)
|
225
206
|
@listviewSavantScenes.model.clear
|
226
207
|
Net::SSH.start(@savantURL, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
|
227
208
|
# test to see if remote files exist and transfer them if they do
|
@@ -390,6 +371,64 @@ class SceneManager
|
|
390
371
|
end
|
391
372
|
end
|
392
373
|
|
374
|
+
# Duplicate the selected scenes
|
375
|
+
# def buttonDuplicateScene__clicked(*argv)
|
376
|
+
# get_glade_variables()
|
377
|
+
#
|
378
|
+
# duplicateIDs = []
|
379
|
+
# duplicateScenes = []
|
380
|
+
# duplicateUserss = []
|
381
|
+
# duplicateImages = []
|
382
|
+
# duplicateTags = []
|
383
|
+
# duplicateGlobals = []
|
384
|
+
# duplicateActives = []
|
385
|
+
# duplicateScheduled = []
|
386
|
+
# duplicateCustomImages = []
|
387
|
+
# duplicateSceneOrders = []
|
388
|
+
#
|
389
|
+
# count = 0
|
390
|
+
# @listviewSavantScenes.each_row do |row|
|
391
|
+
# if row[:modify]
|
392
|
+
# count += 1
|
393
|
+
# duplicateIDs << row[:id]
|
394
|
+
# duplicateScenes << row[:scene]
|
395
|
+
# duplicateUsers << row[:user]
|
396
|
+
# duplicateImages << row[:image]
|
397
|
+
# duplicateTags << row[:tags]
|
398
|
+
# duplicateGlobals << row[:isGlobal]
|
399
|
+
# duplicateActives << row[:isActive]
|
400
|
+
# duplicateScheduled << row[:isScheduled]
|
401
|
+
# duplicateCustomImages << row[:HasCustomImage]
|
402
|
+
# duplicateSceneOrders << row[:userSceneOrder]
|
403
|
+
# end
|
404
|
+
# end
|
405
|
+
# make sure a scene was selected, else alert the user
|
406
|
+
# if count > 0
|
407
|
+
# confirm the edits should be made
|
408
|
+
# strAlert = "Do you want to delete the following scenes from the Savant host?\n\n" + deleteScenes.join("\n")
|
409
|
+
# if alert(strAlert, :headline => "Delete Scenes?", :button_yes => "Delete", :button_cancel => "Cancel", :parent => self)
|
410
|
+
# edit the database with the updated info
|
411
|
+
# deleteIDs.each do |id|
|
412
|
+
# stm = @db.prepare( "delete from sceneusermap where sceneIdentifier=?" )
|
413
|
+
# stm.bind_param 1, id
|
414
|
+
# stm.execute
|
415
|
+
# stm.close
|
416
|
+
# stm = @db.prepare( "delete from scenes where identifier=?" )
|
417
|
+
# stm.bind_param 1, id
|
418
|
+
# stm.execute
|
419
|
+
# stm.close
|
420
|
+
# stm = @db.prepare( "delete from scenedefinitions where sceneIdentifier=?" )
|
421
|
+
# stm.bind_param 1, id
|
422
|
+
# stm.execute
|
423
|
+
# stm.close
|
424
|
+
# end
|
425
|
+
# updateDatabase()
|
426
|
+
# buttonScanHost__clicked()
|
427
|
+
# end
|
428
|
+
# else
|
429
|
+
# alert("Please select at least 1 row to modify.", :parent => self)
|
430
|
+
# end
|
431
|
+
# end
|
393
432
|
|
394
433
|
# #
|
395
434
|
# BACKUP AND RESTORE #
|
@@ -467,110 +506,4 @@ class SceneManager
|
|
467
506
|
@builder["window1"].destroy
|
468
507
|
end
|
469
508
|
|
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
|
576
509
|
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">240</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,18 +246,6 @@
|
|
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>
|
261
249
|
</object>
|
262
250
|
<packing>
|
263
251
|
<property name="left_attach">0</property>
|
@@ -294,9 +282,7 @@
|
|
294
282
|
<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.
|
295
283
|
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.
|
296
284
|
|
297
|
-
If the host is running 8.
|
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>
|
285
|
+
If the host is running at least 8.3, you can also activate scenes.</property>
|
300
286
|
<property name="justify">center</property>
|
301
287
|
<property name="wrap">True</property>
|
302
288
|
<property name="wrap_mode">word-char</property>
|
@@ -311,148 +297,6 @@ If the host is running at least 8.3, you can Activate Scenes.</property>
|
|
311
297
|
</object>
|
312
298
|
</child>
|
313
299
|
</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>
|
456
300
|
<object class="GtkWindow" id="windowBackupRestore">
|
457
301
|
<property name="width_request">300</property>
|
458
302
|
<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.11
|
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-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sqlite3
|