savant-scenes 1.0.2 → 1.0.11
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 +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
|