1- parser = require ' ./utility/atomParser.js '
1+ parser = require ' xml2json '
22rest = require ' restler'
3+ date = require ' date-utils'
4+ _date = require ' underscore.date'
5+
6+ parseFeed = (feed ) ->
7+ JSON .parse (parser .toJson (feed)).feed .entry
8+
9+ messageFeed = ' http://groups.google.com/group/kc-nodejs/feed/atom_v1_0_topics.xml'
10+ eventFeed = ' http://www.google.com/calendar/feeds/nodekc.org_e8lg6hesldeld1utui23ebpg7k%40group.calendar.google.com/public/basic'
11+ twitterFeed = ' http://search.twitter.com/search.json?q=%40nodekc'
12+
13+ lastMessageFetchResult = {}
14+ lastEventFetchResult = {}
15+ lastTwitterFetchResult = {}
16+
17+ striphtml = (value ) ->
18+ value .replace (/ <(?:. | \n )*? >/ gm , ' ' )
19+
20+ timeAgo = (date ) ->
21+ _date (new Date (date)).fromNow ()
22+
23+ formatContent = (content ) ->
24+ content = striphtml (content).trim ()
25+ content += ' \u 2026' if / [\w ] $ / i .test content
26+ content
327
428fetchMessages = (cb ) ->
5- rest .get (' http://groups.google.com/group/kc-nodejs/feed/atom_v1_0_topics.xml' ).on (' complete' , (data ) -> cb (parser (data).items ))
29+ if lastMessageFetchResult .on ? and lastMessageFetchResult .on > (new Date ).addMinutes (- 1 )
30+ cb lastMessageFetchResult .value
31+ return
32+
33+ rest .get (messageFeed).on (' complete' , (data ) ->
34+
35+ messages = for x in parseFeed data
36+ { subject : x .title .$t , body : formatContent (x .summary .$t ), author : x .author .name , timeago : timeAgo (x .updated ), url : x .link .href }
37+
38+ lastMessageFetchResult .value = messages
39+ lastMessageFetchResult .on = new Date
40+
41+ cb messages
42+
43+ )
644
745fetchTweets = (cb ) ->
8- rest .get (' http://search.twitter.com/search.json?q=%40nodekc' ).on (' complete' , (data ) -> cb (data))
46+ if lastTwitterFetchResult .on ? and lastTwitterFetchResult .on > (new Date ).addMinutes (- 1 )
47+ cb lastTwitterFetchResult .value
48+ return
49+
50+ rest .get (twitterFeed).on (' complete' , (data ) ->
51+ tweets = for x in data .results
52+ { timeago : timeAgo (x .created_at ), created_at : x .created_at , created_by : x .from_user , tweet : x .text }
53+
54+ lastTwitterFetchResult .value = tweets
55+ lastTwitterFetchResult .on = new Date
56+
57+ cb tweets
58+ )
959
1060fetchEvents = (cb ) ->
11- rest .get (' http://www.google.com/calendar/feeds/nodekc.org_e8lg6hesldeld1utui23ebpg7k%40group.calendar.google.com/public/basic' ).on (' complete' , (data ) -> cb (parser (data).items ))
61+ if lastEventFetchResult .on ? and lastEventFetchResult .on > (new Date ).addMinutes (- 1 )
62+ cb lastEventFetchResult .value
63+ return
64+
65+ rest .get (eventFeed).on (' complete' , (data ) ->
66+ events = for x in parseFeed data
67+ { title : x .title .$t , when : striphtml (x .summary .$t ), url : x .id }
68+
69+ lastEventFetchResult .value = events
70+ lastEventFetchResult .on = new Date
71+
72+ cb events
73+ )
1274
1375module .exports = {
1476 load : (keys ... ) ->
@@ -21,15 +83,15 @@ module.exports = {
2183 next () if finished .length == keys .length
2284
2385 messages : (data , cb ) ->
24- fetchMessages (items ) ->
25- data .messages = items
86+ fetchMessages (messages ) ->
87+ data .messages = messages
2688 cb ' messages'
2789 tweets : (data , cb ) ->
28- fetchTweets (result ) ->
29- data .tweets = result
90+ fetchTweets (tweets ) ->
91+ data .tweets = tweets
3092 cb ' tweets'
3193 events : (data , cb ) ->
32- fetchEvents (result ) ->
33- data .events = result
94+ fetchEvents (events ) ->
95+ data .events = events
3496 cb ' events'
3597}
0 commit comments