lightwaverf 0.13.3 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/lightwaverf.rb +57 -36
  2. metadata +2 -2
@@ -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
- endDate = nil
197
-
198
- match = /UNTIL=(\d+)/.match(event['rrule'].to_s)
199
- if match
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
- match = /FREQ=(\w+);COUNT=(\d+)/.match(event['rrule'])
204
- # FREQ=DAILY;COUNT=8 - need to check for weekly, monthly etc
205
- if match
206
- endDate = event['date'] + match[2].to_i
207
- end
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
- if !event['rrule']
210
- endDate = event['date']
211
- end
224
+ if !event['rrule']
225
+ endDate = event['date']
226
+ end
212
227
 
213
- if endDate
214
- if endDate < Date.today
215
- next
216
- end
217
- end
228
+ if endDate
229
+ next if endDate < Date.today
230
+ end
218
231
 
219
- if event['type'] == 'device' and event['state'] != 'on' and event['state'] != 'off'
220
- event['room'] = 'sequence' if event['room'].nil?
221
- crontab << self.cron_entry(event, executable)
222
- end_event = event.dup # duplicate event for start and end
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.13.3
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-27 00:00:00.000000000 Z
14
+ date: 2017-03-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: htmlentities