lightwaverf 0.13.3 → 0.14.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.
- data/lib/lightwaverf.rb +57 -36
- metadata +2 -2
data/lib/lightwaverf.rb
CHANGED
@@ -186,48 +186,71 @@ class LightWaveRF
|
|
186
186
|
|
187
187
|
cals = RiCal.parse_string(body)
|
188
188
|
|
189
|
+
state = ''
|
190
|
+
|
191
|
+
cals.first.events.each do | e |
|
192
|
+
event = self.tokenise_event e, debug
|
193
|
+
next unless event['type'] == 'state'
|
194
|
+
next if event['date'] > Date.today
|
195
|
+
next if event['end'] < Date.today
|
196
|
+
state = event['state'].to_s
|
197
|
+
end
|
198
|
+
|
199
|
+
if state != ''
|
200
|
+
crontab << '# we have state modifier "' + state + '" so not including all events lwrf_cron'
|
201
|
+
end
|
202
|
+
|
203
|
+
debug and (p 'state is ' + state)
|
204
|
+
|
189
205
|
cals.first.events.each do | e |
|
190
206
|
event = self.tokenise_event e, debug
|
207
|
+
next if event['type'] == 'state'
|
191
208
|
event = self.get_modifiers event, debug
|
192
209
|
event.delete 'command'
|
193
210
|
event.delete 'modifier_start'
|
194
211
|
event.delete 'time_modifier'
|
195
212
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
endDate = DateTime.parse(match[1].to_s)
|
201
|
-
end
|
213
|
+
match = /UNTIL=(\d+)/.match(event['rrule'].to_s)
|
214
|
+
if match
|
215
|
+
endDate = DateTime.parse(match[1].to_s)
|
216
|
+
end
|
202
217
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
218
|
+
match = /FREQ=(\w+);COUNT=(\d+)/.match(event['rrule'])
|
219
|
+
# FREQ=DAILY;COUNT=8 - need to check for weekly, monthly etc
|
220
|
+
if match
|
221
|
+
endDate = event['date'] + match[2].to_i
|
222
|
+
end
|
208
223
|
|
209
|
-
|
210
|
-
|
211
|
-
|
224
|
+
if !event['rrule']
|
225
|
+
endDate = event['date']
|
226
|
+
end
|
212
227
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
end
|
217
|
-
end
|
228
|
+
if endDate
|
229
|
+
next if endDate < Date.today
|
230
|
+
end
|
218
231
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
end_event['date'] = event['end']
|
224
|
-
end_event['state'] = 'off'
|
225
|
-
crontab << self.cron_entry(end_event, executable)
|
226
|
-
else
|
227
|
-
event['room'] = 'sequence' if event['room'].nil?
|
228
|
-
crontab << self.cron_entry(event, executable, true)
|
232
|
+
unless event['when_modifiers'].empty?
|
233
|
+
unless event['when_modifiers'].include?(state)
|
234
|
+
debug and ( p state + ' not in when modifiers for ' + event.to_s + ' so skipping' )
|
235
|
+
next
|
229
236
|
end
|
230
|
-
|
237
|
+
end
|
238
|
+
if event['unless_modifiers'].include?(state)
|
239
|
+
debug and ( p state + ' is in unless modifiers ' + event.to_s + ' so skipping' )
|
240
|
+
next
|
241
|
+
end
|
242
|
+
|
243
|
+
if event['type'] == 'device' and event['state'] != 'on' and event['state'] != 'off'
|
244
|
+
event['room'] = 'sequence' if event['room'].nil?
|
245
|
+
crontab << self.cron_entry(event, executable)
|
246
|
+
end_event = event.dup # duplicate event for start and end
|
247
|
+
end_event['date'] = event['end']
|
248
|
+
end_event['state'] = 'off'
|
249
|
+
crontab << self.cron_entry(end_event, executable)
|
250
|
+
else
|
251
|
+
event['room'] = 'sequence' if event['room'].nil?
|
252
|
+
crontab << self.cron_entry(event, executable, true)
|
253
|
+
end
|
231
254
|
|
232
255
|
end
|
233
256
|
File.open( '/tmp/cron.tab', 'w' ) do | handle |
|
@@ -905,16 +928,16 @@ class LightWaveRF
|
|
905
928
|
|
906
929
|
def get_modifiers event, debug = false
|
907
930
|
event['time_modifier'] = 0
|
931
|
+
event['when_modifiers'] = []
|
932
|
+
event['unless_modifiers'] = []
|
908
933
|
if event['command'].length > event['modifier_start']
|
909
|
-
event['when_modifiers'] = [ ]
|
910
|
-
event['unless_modifiers'] = [ ]
|
911
934
|
for i in event['modifier_start']..(event['command'].length-1)
|
912
935
|
modifier = event['command'][i]
|
913
936
|
if modifier[0,1] == '@'
|
914
|
-
debug and ( p 'Found when modifier: ' + modifier[1..-1] )
|
937
|
+
# debug and ( p 'Found when modifier: ' + modifier[1..-1] + ' for ' + event['command'].to_s )
|
915
938
|
event['when_modifiers'].push modifier[1..-1]
|
916
939
|
elsif modifier[0,1] == '!'
|
917
|
-
debug and ( p 'Found unless modifier: ' + modifier[1..-1] )
|
940
|
+
# debug and ( p 'Found unless modifier: ' + modifier[1..-1] + ' for ' + event['command'].to_s )
|
918
941
|
event['unless_modifiers'].push modifier[1..-1]
|
919
942
|
elsif modifier[0,1] == '+'
|
920
943
|
event['time_modifier'] = modifier[1..-1].to_i
|
@@ -925,12 +948,10 @@ class LightWaveRF
|
|
925
948
|
end
|
926
949
|
event['time_modifier'] += self.class.variance( event['summary'] ).to_i
|
927
950
|
if event['time_modifier'] != 0
|
928
|
-
debug and (p 'Adjusting timings by: ' + event['time_modifier'].to_s + ' ' + event.inspect)
|
929
951
|
event['date'] = (( event['date'].to_time ) + event['time_modifier'] * 60 ).to_datetime
|
930
952
|
if event['end']
|
931
953
|
event['end'] = (( event['end'].to_time ) + event['time_modifier'] * 60 ).to_datetime
|
932
954
|
end
|
933
|
-
debug and (p 'dates now ' + event['date'].to_s + ' ' + event['end'].to_s)
|
934
955
|
end
|
935
956
|
event
|
936
957
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lightwaverf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2017-02
|
14
|
+
date: 2017-03-02 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: htmlentities
|