Mercurial > psgxs
view backends/file.js @ 28:7cfcd7d5796c
Replace Paul Sowden’s ISO8601 functions by my own, since their licence is possibly incompatible with AGPL.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Mon, 01 Nov 2010 03:01:40 +0100 |
parents | a36a514e8be8 |
children | e007a6364bf0 |
line wrap: on
line source
/* * Copyright (C) 2010 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> * * This file is part of PSĜS, a PubSub server written in JavaScript. * * PSĜS is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License. * * PSĜS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with PSĜS. If not, see <http://www.gnu.org/licenses/>. */ var fs = require('fs'); var backend = exports; backend.save = function(file) { function sanitize(o) { var n = {}; for (var i in o) { if (i == 'content' || o[i].setFromISO8601) n[i] = o[i].toString(); else if (o[i] instanceof Array) n[i] = o[i]; else if (typeof o[i] == 'object') n[i] = sanitize(o[i]); else if (typeof o[i] == 'function') ; else n[i] = o[i]; } return n; } var data = sanitize(backend.list); if (!file) file = 'save.json'; fs.writeFile(file, require('sys').inspect(data, null, null)); } backend.load = function(file) { var xmpp = require('xmpp'); function parseStanza(path, content) { var stanza = null; var stream = new xmpp.Stream({ stanza: function (stanza) { path[content] = stanza; } }); stream.opened = true; stream.data(path[content]); } function endParsing(o) { var regexp = /\d{4}-\d\d-\d\dT\d\d:\d\d:\d\dZ/; for (var i in o) { if (typeof o[i] == 'string' && i == 'content') parseStanza(o, i); else if (typeof o[i] == 'string' && regexp(o[i])) { var today = new Date(); today.setFromISO8601(o[i]); o[i] = today; } else if (typeof o[i] == 'object') endParsing(o[i]); } return o; } if (!file) file = 'save.json'; fs.stat(file, function(err, stats) { if (err) fs.writeFileSync(file, '{}'); else if (!stats.isFile()) { console.log('\033[1;41mThe file “' + file + '” isn’t a regular file. Exiting.\033[0m'); process.exit(1); } var data = fs.readFileSync(file); var obj = eval('('+data+')'); backend.list = endParsing(obj); for (var i in backend.list) for (var j in Node.prototype) backend.list[i][j] = Node.prototype[j]; }); }