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.
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