From 218632d1504630993b58ee659797f3d66a2d2b8f Mon Sep 17 00:00:00 2001 From: jysperm Date: Sun, 27 Jul 2014 09:57:54 +0800 Subject: [PATCH] fetch commit's real time --- app.coffee | 48 +++++++++++++++++++++++++++++++----------------- package.json | 4 +++- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/app.coffee b/app.coffee index 1b54114..2d297c9 100644 --- a/app.coffee +++ b/app.coffee @@ -1,8 +1,14 @@ express = require 'express' request = require 'request' +async = require 'async' harp = require 'harp' path = require 'path' ical = require 'ical-generator' +_ = require 'underscore' + +default_request_flags = + headers: + 'User-Agent': 'github-commit-ical' app = express() @@ -11,25 +17,33 @@ app.use harp.mount(path.join(__dirname, 'static')) app.get '/:username', (req, res) -> username = req.param 'username' - request "https://api.github.com/users/#{username}/events", - headers: - 'User-Agent': 'github-commit-ical' - , (err, _res, body) -> - body = JSON.parse body + request "https://api.github.com/users/#{username}/events", default_request_flags, (err, _res, body) -> + events = _.filter JSON.parse(body), (event) -> + return event.type == 'PushEvent' - cal = ical() - cal.setDomain('commit-calendar.newsbee.io').setName("#{username} Commit History") + async.map events, (event, callback) -> + async.map event.payload.commits, (commit, callback) -> + request "https://api.github.com/repos/#{event.repo.name}/git/commits/#{commit.sha}", default_request_flags, (err, _res, body) -> + real_time = JSON.parse(body).committer.date - for item in body - if item.type == 'PushEvent' - for commit in item.payload.commits - cal.addEvent - start: new Date item.created_at - end: new Date item.created_at - summary: "#{commit.message} (#{item.repo.name})" - url: commit.url + callback err, + start: new Date real_time + end: new Date real_time + summary: "#{commit.message} (#{event.repo.name})" + url: commit.html_url - res.header 'Content-Type', 'text/calendar; charset=utf-8' - res.status(200).end(cal.toString()) + , (err, result) -> + callback err, result + + , (err, result) -> + cal = ical() + cal.setDomain('commit-calendar.newsbee.io').setName("#{username} Commit History") + + for commits in result + for commit in commits + cal.addEvent commit + + res.header 'Content-Type', 'text/calendar; charset=utf-8' + res.status(200).end(cal.toString()) app.listen 3000 diff --git a/package.json b/package.json index 806d7d9..3fb6cb1 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "express": "*", "request": "*", "ical-generator": "*", - "harp": "*" + "harp": "*", + "async": "*", + "underscore": "*" } } \ No newline at end of file