@@ -3,90 +3,44 @@ rest = require 'restler'
33date = require ' date-utils'
44moment = require ' moment'
55ical = require ' ical'
6-
7- parseFeed = (feed ) ->
8- JSON .parse (parser .toJson (feed)).feed .entry
6+ cache = require ' ./cache'
7+ Event = require ' ./models/event'
8+ Tweet = require ' ./models/tweet'
9+ Message = require ' ./models/message'
910
1011messageFeed = ' http://groups.google.com/group/kc-nodejs/feed/atom_v1_0_topics.xml'
1112eventFeed = ' http://www.google.com/calendar/ical/nodekc.org_e8lg6hesldeld1utui23ebpg7k%40group.calendar.google.com/public/basic.ics'
1213twitterFeed = ' http://search.twitter.com/search.json?q=%40nodekc&rpp=5'
1314
14- lastMessageFetchResult = {}
15- lastEventFetchResult = {}
16- lastTwitterFetchResult = {}
17-
18- determineDate = (start , end ) ->
19- start = moment (start)
20- end = moment (end)
21- date = moment (new Date (start .native ())).add (' hours' , - 6 ).format (' ddd, MMM D' )
22-
23- return date if start .diff (end, ' days' ) == - 1
24-
25- date + start .add (' hours' , - 6 ).format (' h:mma CST' )
26-
27- createEventUrl = (id ) ->
28- id = id .split (' @' )[0 ]
29- id = new Buffer (id + ' e8lg6hesldeld1utui23ebpg7k@google.com' ).toString (' base64' ).replace (' ==' , ' ' )
30- " http://calendar.nodekc.org"
31-
32- striphtml = (value ) ->
33- value .replace (/ <(?:. | \n )*? >/ gm , ' ' )
34-
35- timeAgo = (date ) ->
36- moment (new Date (date)).fromNow ()
15+ parseFeed = (feed ) ->
16+ JSON .parse (parser .toJson (feed)).feed .entry
3717
38- formatContent = (content ) ->
39- content = striphtml (content).trim ()
40- content += ' \u 2026' if / [\w ] $ / i .test content
41- content
18+ tenMinutes = 10 * 60 * 1000
4219
43- fetchMessages = (cb ) ->
44- if lastMessageFetchResult .on ? and lastMessageFetchResult .on > (new Date ).addMinutes (- 1 )
45- cb lastMessageFetchResult .value
46- return
47-
20+ fetchMessages = cache .for tenMinutes, (cb ) ->
4821 rest .get (messageFeed).on (' complete' , (data ) ->
4922 data or= ' '
5023
5124 messages = for x in parseFeed data
52- { subject : x .title .$t , body : formatContent (x .summary .$t ), author : x .author .name , timeago : timeAgo (x .updated ), url : x .link .href }
53-
54- lastMessageFetchResult .value = messages
55- lastMessageFetchResult .on = new Date
56-
25+ new Message x
5726 cb messages
58-
5927 )
6028
61- fetchTweets = (cb ) ->
62- if lastTwitterFetchResult .on ? and lastTwitterFetchResult .on > (new Date ).addMinutes (- 1 )
63- cb lastTwitterFetchResult .value
64- return
65-
29+ fetchTweets = cache .for tenMinutes, (cb ) ->
6630 rest .get (twitterFeed).on (' complete' , (data ) ->
6731 data or= {}
6832 data .results or= []
6933 tweets = for x in data .results
70- { timeago : timeAgo (x .created_at ), created_at : x .created_at , created_by : x .from_user , tweet : x .text }
71-
72- lastTwitterFetchResult .value = tweets
73- lastTwitterFetchResult .on = new Date
74-
34+ new Tweet x
35+
7536 cb tweets
7637 )
7738
78- fetchEvents = (cb ) ->
79- if lastEventFetchResult .on ? and lastEventFetchResult .on > (new Date ).addMinutes (- 1 )
80- cb lastEventFetchResult .value
81- return
82-
39+ fetchEvents = cache .for tenMinutes, (cb ) ->
8340 ical .fromURL eventFeed, {}, (err , calendar ) ->
8441 calendar or= {}
8542 events = for k,v of calendar
86- {title : v .summary , location : v .location , details : v .description , when : determineDate (v .start , v .end ), url : createEventUrl v .uid }
87- lastEventFetchResult .value = events
88- lastEventFetchResult .on = new Date
89-
43+ new Event v
9044 cb events
9145
9246module .exports = {
@@ -97,8 +51,7 @@ module.exports = {
9751 keys .forEach (key) =>
9852 this [key] res .data , (k ) ->
9953 finished .push k
100- next () if finished .length == keys .length
101-
54+ next () if finished .length == keys .length
10255 messages : (data , cb ) ->
10356 fetchMessages (messages ) ->
10457 data .messages = messages
0 commit comments