lightwaverf 0.13.3 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|