From ee8dac6ecd2927d6ea1930ae478ff65766b446d9 Mon Sep 17 00:00:00 2001 From: James Lal Date: Sat, 7 Jul 2012 16:33:27 -0700 Subject: resources request --- lib/caldav/index.js | 1 + lib/caldav/request/index.js | 3 +- lib/caldav/request/resources.js | 69 +++++++++++++++++++++++++++++++++++++++++ lib/caldav/resource_root.js | 14 --------- lib/caldav/resources/index.js | 13 ++++++++ 5 files changed, 85 insertions(+), 15 deletions(-) create mode 100644 lib/caldav/request/resources.js delete mode 100644 lib/caldav/resource_root.js create mode 100644 lib/caldav/resources/index.js (limited to 'lib') diff --git a/lib/caldav/index.js b/lib/caldav/index.js index df7dfa5..e079028 100644 --- a/lib/caldav/index.js +++ b/lib/caldav/index.js @@ -10,6 +10,7 @@ exports.Request = ns.require('request'); exports.Templates = ns.require('templates'); exports.Connection = ns.require('connection'); + exports.Resources = ns.require('resources'); }.apply( this, diff --git a/lib/caldav/request/index.js b/lib/caldav/request/index.js index 6790fd1..6f8c23d 100644 --- a/lib/caldav/request/index.js +++ b/lib/caldav/request/index.js @@ -4,7 +4,8 @@ Abstract: ns.require('request/abstract'), CalendarQuery: ns.require('request/calendar_query'), Propfind: ns.require('request/propfind'), - CalendarHome: ns.require('request/calendar_home') + CalendarHome: ns.require('request/calendar_home'), + Resources: ns.require('request/resources') }; }.apply( diff --git a/lib/caldav/request/resources.js b/lib/caldav/request/resources.js new file mode 100644 index 0000000..1df7cf1 --- /dev/null +++ b/lib/caldav/request/resources.js @@ -0,0 +1,69 @@ +(function(module, ns) { + + var Propfind = ns.require('request/propfind'); + + function ResourceFinder(connection, options) { + Propfind.apply(this, arguments); + + this._resources = {}; + this.depth = 1; + } + + ResourceFinder.prototype = { + __proto__: Propfind.prototype, + + addResource: function(name, handler) { + this._resources[name] = handler; + }, + + _processResult: function(req, callback) { + var results = {}; + var url; + var root; + var collection; + var self = this; + + if ('multistatus' in this.sax.root) { + root = this.sax.root.multistatus; + + for (url in root) { + collection = root[url]; + + if ('resourcetype' in collection) { + collection.resourcetype.forEach(function(type) { + if (type in self._resources) { + + if (!(type in results)) { + results[type] = {}; + } + + results[type][url] = new self._resources[type]( + self.connection, + collection + ); + } + }); + } + } + + callback(null, results, req); + + } else { + //XXX: Improve error handling + callback( + new Error('unexpected xml result'), + this.sax.root, req + ); + } + } + + }; + + module.exports = ResourceFinder; + +}.apply( + this, + (this.Caldav) ? + [Caldav('request/resources'), Caldav] : + [module, require('../caldav')] +)); diff --git a/lib/caldav/resource_root.js b/lib/caldav/resource_root.js deleted file mode 100644 index 0cff9b7..0000000 --- a/lib/caldav/resource_root.js +++ /dev/null @@ -1,14 +0,0 @@ -(function(module, ns) { - - function ResourceRoot() { - - } - - module.exports = ResourceRoot; - -}.apply( - this, - (this.Caldav) ? - [Caldav('resource_root'), Caldav] : - [module, require('./caldav')] -)); diff --git a/lib/caldav/resources/index.js b/lib/caldav/resources/index.js new file mode 100644 index 0000000..e152458 --- /dev/null +++ b/lib/caldav/resources/index.js @@ -0,0 +1,13 @@ +(function(module, ns) { + + module.exports = { + Calendar: ns.require('resources/calendar') + }; + +}.apply( + this, + (this.Caldav) ? + [Caldav('resources'), Caldav] : + [module, require('../caldav')] +)); + -- cgit