From 9254ccd9792d7dee7638025f618db6d18e5a945b Mon Sep 17 00:00:00 2001 From: niko Date: Mon, 8 Oct 2012 23:27:14 +0000 Subject: kolab3 xml parser --- src/chrome/content/synckolab/calendarTools.js | 118 +++++++++++++++----------- test/suite.js | 4 +- 2 files changed, 71 insertions(+), 51 deletions(-) diff --git a/src/chrome/content/synckolab/calendarTools.js b/src/chrome/content/synckolab/calendarTools.js index ac75edc..1cc602a 100644 --- a/src/chrome/content/synckolab/calendarTools.js +++ b/src/chrome/content/synckolab/calendarTools.js @@ -1968,6 +1968,8 @@ synckolab.calendarTools.json2kolab3 = function (jobj, syncTasks, email) { xml += '\n'; } + xml += '\n'; + xml += synckolab.tools.text.nodeContainerWithContent("uid", "text", jobj.uid, false); if(syncTasks === true) @@ -1998,50 +2000,45 @@ synckolab.calendarTools.json2kolab3 = function (jobj, syncTasks, email) { xml += synckolab.tools.text.nodeContainerWithContent("color-label", "text", jobj.colorLabel, false); var i; - if(jobj.alarms) { - for(i=0; i < jobj.alarms.length; i++) { - var att = ""; - if (jobj.alarms[i].description && jobj.alarms[i].description !== "") { - att += 'description="' + jobj.alarms[i].description + '" '; - } - if (jobj.alarms[i].summary && jobj.alarms[i].summary !== "") { - att += 'summary="' + jobj.alarms[i].summary + '" '; - } - if (jobj.alarms[i].action && jobj.alarms[i].action !== "") { - att += 'action="' + jobj.alarms[i].action + '"'; - } - xml += " " + jobj.alarms[i].offset + "\n"; + if(jobj.categories) { + xml += "\n"; + var catList = jobj.categories.split(" "); + for(i = 0; i < catList.length; i++) { + if(catList[i].length > 0) { + xml += synckolab.tools.text.nodeWithContent("text", catList[i], false); + } } + xml += "\n"; } - - xml += synckolab.tools.text.nodeWithContent("categories", jobj.categories, false); + if(jobj.recurrence) { + xml += " \n"; switch(jobj.recurrence.cycle) { case "daily": - xml += " \n"; + xml += " DAILY\n"; break; case "weekly": - xml += " \n"; + xml += " WEEKLY\n"; for(i=0; i < jobj.recurrence.days.length; i++) { - xml += synckolab.tools.text.nodeWithContent("day", jobj.recurrence.days[i], false); + xml += synckolab.tools.text.nodeWithContent("byday", jobj.recurrence.days[i], false); } break; case "monthly": if(!jobj.recurrence.daynumber && !jobj.recurrence.days) { - xml += " \n"; + xml += " monthly\n"; } else if(jobj.recurrence.days) { - xml += " \n"; + xml += " monthly\n DAYNUMBER\n"; for(i=0; i < jobj.recurrence.days.length; i++) { xml += synckolab.tools.text.nodeWithContent("daynumber", jobj.recurrence.days[i], false); } } else if(!jobj.recurrence.weekday) { - xml += " \n"; + xml += " monthly\n DAYNUMBER\n"; xml += " " + jobj.recurrence.daynumber + "\n"; } else { - xml += " \n"; + xml += " monthly\n WEEKDAY\n"; xml += " " + jobj.recurrence.daynumber + "\n"; - xml += " " + jobj.recurrence.weekday + "\n"; + xml += " " + jobj.recurrence.weekday + "\n"; } break; case "yearly": @@ -2060,7 +2057,7 @@ synckolab.calendarTools.json2kolab3 = function (jobj, syncTasks, email) { //xml += " july\n"; // yearday has - xml += " \n"; + xml += " monthly\n YEARLY\n"; // FIXME we have no matching field in Lighning yet xml += " 1\n"; break; @@ -2068,30 +2065,28 @@ synckolab.calendarTools.json2kolab3 = function (jobj, syncTasks, email) { xml += synckolab.tools.text.nodeWithContent("interval", jobj.recurrence.interval, true); if(jobj.recurrence.count && jobj.recurrence.count > 0) { - xml += " " + jobj.recurrence.count + "\n"; - } else if(jobj.recurrence.untilDate) { - xml += " " + jobj.recurrence.untilDate + "\n"; - } else { - xml += " \n"; - } - + xml += " " + jobj.recurrence.count + "\n"; + } + xml += " \n"; if(jobj.recurrence.exclusion) { + xml+= " \n"; for(i=0; i < jobj.recurrence.exclusion.length; i++) { - xml += synckolab.tools.text.nodeWithContent("exclusion", jobj.recurrence.exclusion[i], true); + xml += synckolab.tools.text.nodeWithContent("date", jobj.recurrence.exclusion[i], true); } + xml+= " \n"; } - - xml += " \n"; } if(jobj.attendees) { for(i=0; i < jobj.attendees.length; i++) { xml += " \n"; - xml += synckolab.tools.text.nodeWithContent("display-name", jobj.attendees[i].displayName, false); - xml += synckolab.tools.text.nodeWithContent("smtp-address", jobj.attendees[i].email, false); - xml += synckolab.tools.text.nodeWithContent("status", jobj.attendees[i].status, false); - xml += synckolab.tools.text.nodeWithContent("request-response", jobj.attendees[i].rsvp ? "true" : "false", false); - xml += synckolab.tools.text.nodeWithContent("role", jobj.attendees[i].role, false); + xml += " \n"; + xml += synckolab.tools.text.nodeContainerWithContent("cn", "text", jobj.attendees[i].displayName, false); + xml += synckolab.tools.text.nodeContainerWithContent("partstat", "text", jobj.attendees[i].status.toUpperCase(), false); + xml += synckolab.tools.text.nodeContainerWithContent("rsvp", "boolean", jobj.attendees[i].rsvp ? "true" : "false", false); + xml += synckolab.tools.text.nodeContainerWithContent("role", "text", jobj.attendees[i].role.toUpperCase(), false); + xml += " \n"; + xml += synckolab.tools.text.nodeWithContent("cal-address", jobj.attendees[i].email, false); xml += " \n"; } } @@ -2099,22 +2094,49 @@ synckolab.calendarTools.json2kolab3 = function (jobj, syncTasks, email) { if (jobj.organizer) { - xml += " \n"; - xml += synckolab.tools.text.nodeWithContent("display-name", jobj.organizer.displayName, false); - xml += synckolab.tools.text.nodeWithContent("smtp-address", jobj.organizer.email, false); + xml += " \n" + + " \n"; + xml += synckolab.tools.text.nodeContainerWithContent("cn", "text", jobj.organizer.displayName, false); + xml += " \n"; + xml += synckolab.tools.text.nodeWithContent("cal-address", jobj.organizer.email, false); xml += " \n"; } if (jobj.creator) { - xml += " \n"; - xml += synckolab.tools.text.nodeWithContent("display-name", jobj.creator.displayName, false); - xml += synckolab.tools.text.nodeWithContent("smtp-address", jobj.creator.email, false); + xml += " \n" + + " \n"; + xml += synckolab.tools.text.nodeContainerWithContent("cn", "text", jobj.creator.displayName, false); + xml += " \n"; + xml += synckolab.tools.text.nodeWithContent("cal-address", jobj.creator.email, false); xml += " \n"; } - xml += " 0\n"; + xml += " \n"; + + if(jobj.alarms) { + xml += "\n"; + for(i=0; i < jobj.alarms.length; i++) { + xml += "\n"; + var att = ""; + if (jobj.alarms[i].description && jobj.alarms[i].description !== "") { + xml += synckolab.tools.text.nodeContainerWithContent("description", "text", jobj.alarms[i].description, false); + } + if (jobj.alarms[i].summary && jobj.alarms[i].summary !== "") { + xml += synckolab.tools.text.nodeContainerWithContent("summary", "text", jobj.alarms[i].summary, false); + } + if (jobj.alarms[i].action && jobj.alarms[i].action !== "") { + xml += synckolab.tools.text.nodeContainerWithContent("action", "text", jobj.alarms[i].action, false); + } + + //xml += jobj.alarms[i].offset"; + xml += "\n"; + } + xml += "\n"; + } + + if (jobj.type === "task") { xml += "\n"; @@ -2164,7 +2186,7 @@ synckolab.calendarTools.json2Human = function (jobj) synckolab.calendarTools.event2kolabXmlMsg = function (event, email) { var syncTasks = (event.type === "task"); - var xml = this.json2xml(event, syncTasks); + var xml = this.json2xml(event, syncTasks, email); return synckolab.tools.generateMail(event.uid, email, "", syncTasks?"application/x-vnd.kolab.task":"application/x-vnd.kolab.event", true, synckolab.tools.text.utf8.encode(xml), this.json2Human(event, syncTasks)); }; @@ -2177,7 +2199,7 @@ synckolab.calendarTools.event2kolabXmlMsg = function (event, email) synckolab.calendarTools.event2kolab3XmlMsg = function (event, email) { var syncTasks = (event.type === "task"); - var xml = this.json2xml(event, syncTasks); + var xml = this.json2kolab3(event, syncTasks, email); return synckolab.tools.generateMail(event.uid, email, "", syncTasks?"application/x-vnd.kolab.task":"application/x-vnd.kolab.event", true, synckolab.tools.text.utf8.encode(xml), this.json2Human(event, syncTasks)); }; diff --git a/test/suite.js b/test/suite.js index c4dba29..a0faaf9 100644 --- a/test/suite.js +++ b/test/suite.js @@ -35,15 +35,13 @@ QUnit.log(function(details) { }); // run the tests - load("test/synckolab/tools/textTest.js"); load("test/synckolab/tools/toolsTest.js"); load("test/synckolab/parser/kolab2/calendarTest.js"); load("test/synckolab/parser/kolab2/contactTest.js"); load("test/synckolab/parser/kolab3/contactTest.js"); - -//load("test/synckolab/parser/kolab3/calendarTest.js"); +load("test/synckolab/parser/kolab3/calendarTest.js"); print("========================") print("Tests Run: " + (testRuns.fail+testRuns.pass)); -- cgit v0.12