From 6cffdfd1e881f701701e3e116ccfaccfcfe1ee74 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 15 Feb 2013 11:37:44 -0500 Subject: [PATCH 01/65] start adding date field & ical support --- src/server/serverRoutes.coffee | 22 ++++++++++++++++++++++ views/app/index.html | 11 +++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/server/serverRoutes.coffee b/src/server/serverRoutes.coffee index 7f53e8d186..90d7b7870d 100644 --- a/src/server/serverRoutes.coffee +++ b/src/server/serverRoutes.coffee @@ -12,6 +12,28 @@ module.exports = (expressApp, root, derby) -> expressApp.get '/terms', (req, res) -> staticPages.render 'terms', res + # localhost:3000/users/9/tasks.ics?apiToken=ae164366-f1ad-4a7d-83ef-b1d1085a96b6 + expressApp.get '/users/:uid/tasks.ics', (req, res, next) -> + {uid} = req.params + {apiToken} = req.query + + model = req.getModel() + query = model.query('users').withIdAndToken(uid, apiToken) + query.fetch (err, result) -> + return next(err) if err + userObj = result.at(0).get() + tasksWithDates = _.filter userObj.tasks, (task) -> !!task.date + console.log("DATES LOLOL " + tasksWithDates) + + ical = new icalendar.iCalendar() + _.each tasksWithDates, (task) -> + ical.addComponent event + event2 = ical.addComponent("VEVENT") + event2.setSummary "Second test event" + event2.setDate new Date(2011, 11, 5, 12, 0, 0), 60 * 60 # Duration in seconds + res.send(200, ical.generateIcs()) + next() + # ---------- Deprecated Paths ------------ deprecatedMessage = 'This API is no longer supported, see https://github.com/lefnire/habitrpg/wiki/API for new protocol' diff --git a/views/app/index.html b/views/app/index.html index ff6b22dc69..e1be8079e0 100644 --- a/views/app/index.html +++ b/views/app/index.html @@ -584,8 +584,7 @@ do a find for the string after "→" - {/} - {#if equal(:task.type, 'daily')} + {else if equal(:task.type, 'daily')}
@@ -597,8 +596,7 @@ do a find for the string after "→"
- {/} - {#if equal(:task.type, 'reward')} + {else if equal(:task.type, 'reward')}
+ {else if equal(:task.type, 'todo')} +
+ + +
{/} From 10a8ad551f9fe18b3e2f647bf4a317313b3b6791 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 15 Feb 2013 12:26:43 -0500 Subject: [PATCH 02/65] got ical to send downloadable icsf files --- package.json | 3 ++- src/server/serverRoutes.coffee | 21 +++++++++++---------- views/app/index.html | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 6b05205679..b499d77383 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "coffee-script": "*", "underscore": "*", "mongoskin": "*", - "nconf": "*" + "nconf": "*", + "icalendar": "*" }, "private": true, "subdomain": "habitrpg", diff --git a/src/server/serverRoutes.coffee b/src/server/serverRoutes.coffee index 90d7b7870d..5cb5f562be 100644 --- a/src/server/serverRoutes.coffee +++ b/src/server/serverRoutes.coffee @@ -1,5 +1,6 @@ scoring = require('../app/scoring') _ = require('underscore') +icalendar = require('icalendar') module.exports = (expressApp, root, derby) -> @@ -13,26 +14,26 @@ module.exports = (expressApp, root, derby) -> staticPages.render 'terms', res # localhost:3000/users/9/tasks.ics?apiToken=ae164366-f1ad-4a7d-83ef-b1d1085a96b6 - expressApp.get '/users/:uid/tasks.ics', (req, res, next) -> + expressApp.get '/users/:uid/tasks.ics', (req, res) -> {uid} = req.params {apiToken} = req.query model = req.getModel() query = model.query('users').withIdAndToken(uid, apiToken) query.fetch (err, result) -> - return next(err) if err - userObj = result.at(0).get() - tasksWithDates = _.filter userObj.tasks, (task) -> !!task.date - console.log("DATES LOLOL " + tasksWithDates) + throw err if err + tasks = result.at(0).get('tasks') + tasksWithDates = _.filter tasks, (task) -> !!task.date ical = new icalendar.iCalendar() _.each tasksWithDates, (task) -> + event = new icalendar.VEvent(task.id); + event.setSummary(task.text); +# event.setDate new Date(task.date), 60 * 60 # Duration in seconds + event.setDate new Date(task.date), 60 * 60 # Duration in seconds ical.addComponent event - event2 = ical.addComponent("VEVENT") - event2.setSummary "Second test event" - event2.setDate new Date(2011, 11, 5, 12, 0, 0), 60 * 60 # Duration in seconds - res.send(200, ical.generateIcs()) - next() + res.type('ics') + res.send(200, ical.toString()) # ---------- Deprecated Paths ------------ diff --git a/views/app/index.html b/views/app/index.html index e1be8079e0..28d537c160 100644 --- a/views/app/index.html +++ b/views/app/index.html @@ -607,7 +607,7 @@ do a find for the string after "→" {else if equal(:task.type, 'todo')}
- +
{/} From 45d07f1c386b4ffc096128f809637402e38705e0 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 15 Feb 2013 13:05:54 -0500 Subject: [PATCH 03/65] add ical links --- src/app/helpers.coffee | 4 ++++ views/app/index.html | 12 ++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/app/helpers.coffee b/src/app/helpers.coffee index 86a3a8d59d..25ba17a87d 100644 --- a/src/app/helpers.coffee +++ b/src/app/helpers.coffee @@ -25,4 +25,8 @@ module.exports.viewHelpers = (view) -> view.fn "mod", (a, b) -> parseInt(a) % parseInt(b) == 0 + view.fn "encodeiCalLink", (uid, apiToken) -> + loc = window?.location.href or process.env.BASE_URL + encodeURIComponent "#{loc}users/#{uid}/tasks.ics?apiToken=#{apiToken}" + diff --git a/views/app/index.html b/views/app/index.html index 28d537c160..fa745ccf4f 100644 --- a/views/app/index.html +++ b/views/app/index.html @@ -336,10 +336,14 @@ do a find for the string after "→" Clear Completed

 

- {#if _user.history.todos} - - - {/} + + {#if _user.history.todos} + + {/} + iCal + GCal + +