1 | _ = require 'underscore'
|
2 | moment = require 'moment'
|
3 | cronJob = require("cron").CronJob
|
4 |
|
5 | class Reminders
|
6 | constructor: (@robot, @key, @cb) ->
|
7 | @robot.brain.once 'loaded', =>
|
8 |
|
9 | new cronJob('0 * * * * 1-5', @_check.bind(@), null, true)
|
10 |
|
11 | _get: ->
|
12 | @robot.brain.get(@key) or []
|
13 |
|
14 | _save: (reminders) ->
|
15 | @robot.brain.set @key, reminders
|
16 |
|
17 | _check: ->
|
18 | reminders = @_get()
|
19 | _.chain(reminders).filter(@_shouldFire).pluck('room').each @cb
|
20 |
|
21 | _shouldFire: (reminder) ->
|
22 | now = new Date
|
23 | currentHours = now.getHours()
|
24 | currentMinutes = now.getMinutes()
|
25 | reminderHours = reminder.time.split(':')[0]
|
26 | reminderMinutes = reminder.time.split(':')[1]
|
27 | try
|
28 | reminderHours = parseInt reminderHours, 10
|
29 | reminderMinutes = parseInt reminderMinutes, 10
|
30 | catch _error
|
31 | return false
|
32 | if reminderHours is currentHours and reminderMinutes is currentMinutes
|
33 | return true
|
34 | return false
|
35 |
|
36 | getAll: ->
|
37 | @_get()
|
38 |
|
39 | getForRoom: (room) ->
|
40 | _.where @_get(), room: room
|
41 |
|
42 | save: (room, time) ->
|
43 | reminders = @_get()
|
44 | newReminder =
|
45 | time: time
|
46 | room: room
|
47 | reminders.push newReminder
|
48 | @_save reminders
|
49 |
|
50 | clearAllForRoom: (room) ->
|
51 | reminders = @_get()
|
52 | remindersToKeep = _.reject(reminders, room: room)
|
53 | @_save remindersToKeep
|
54 | reminders.length - (remindersToKeep.length)
|
55 |
|
56 | clearForRoomAtTime: (room, time) ->
|
57 | reminders = @_get()
|
58 | remindersToKeep = _.reject reminders,
|
59 | room: room
|
60 | time: time
|
61 | @_save remindersToKeep
|
62 | reminders.length - (remindersToKeep.length)
|
63 |
|
64 | module.exports = Reminders
|