summaryrefslogtreecommitdiffstats
path: root/comm/calendar/base/public/calIICSService.idl
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/base/public/calIICSService.idl')
-rw-r--r--comm/calendar/base/public/calIICSService.idl242
1 files changed, 242 insertions, 0 deletions
diff --git a/comm/calendar/base/public/calIICSService.idl b/comm/calendar/base/public/calIICSService.idl
new file mode 100644
index 0000000000..46d5f90320
--- /dev/null
+++ b/comm/calendar/base/public/calIICSService.idl
@@ -0,0 +1,242 @@
+/* -*- Mode: idl; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// XXX use strings for kind values instead of enumerated constants?
+
+
+#include "nsISupports.idl"
+
+interface calIItemBase;
+interface calIDateTime;
+interface calIDuration;
+interface calITimezone;
+
+interface calIIcalProperty;
+interface nsIInputStream;
+
+/**
+ * General notes:
+ *
+ * As with libical, use of getNextFoo(footype) is only valid if there have been
+ * no intervening getNextFoo(otherfootype)s, or removeFoo()s, or addFoo()s. In
+ * general, you want to do as little manipulation of your FooContainers as
+ * possible while iterating over them.
+ */
+[scriptable,uuid(59132cf2-e48c-4807-ab53-779f414a7fbc)]
+interface calIIcalComponent : nsISupports
+{
+ /**
+ * The parent ical property
+ */
+ readonly attribute calIIcalComponent parent;
+
+ /**
+ * Access to the inner ical.js objects. Only use these if you know what you
+ * are doing.
+ */
+ attribute jsval icalComponent;
+ attribute jsval icalTimezone;
+
+ /**
+ * This is the value that an integer-valued getter will provide if
+ * there is no such property on the wrapped ical structure.
+ */
+ const int32_t INVALID_VALUE = -1;
+
+ /**
+ * @param kind ANY, XROOT, VCALENDAR, VEVENT, etc.
+ */
+ calIIcalComponent getFirstSubcomponent(in AUTF8String componentType);
+ calIIcalComponent getNextSubcomponent(in AUTF8String componentType);
+
+ readonly attribute AUTF8String componentType;
+
+ attribute AUTF8String uid;
+ attribute AUTF8String prodid;
+ attribute AUTF8String version;
+
+ /**
+ * PUBLISH, REQUEST, REPLY, etc.
+ */
+ attribute AUTF8String method;
+
+ /**
+ * TENTATIVE, CONFIRMED, CANCELLED, etc.
+ */
+ attribute AUTF8String status;
+
+ attribute AUTF8String summary;
+ attribute AUTF8String description;
+ attribute AUTF8String location;
+ attribute AUTF8String categories;
+ attribute AUTF8String URL;
+
+ attribute int32_t priority;
+
+ attribute calIDateTime startTime;
+ attribute calIDateTime endTime;
+ readonly attribute calIDuration duration;
+ attribute calIDateTime dueTime;
+ attribute calIDateTime stampTime;
+
+ attribute calIDateTime createdTime;
+ attribute calIDateTime completedTime;
+ attribute calIDateTime lastModified;
+
+ /**
+ * The recurrence ID, a.k.a. DTSTART-of-calculated-occurrence,
+ * or null if this isn't an occurrence.
+ */
+ attribute calIDateTime recurrenceId;
+
+ AUTF8String serializeToICS();
+
+ /**
+ * Return a string representation of this instance.
+ */
+ AUTF8String toString();
+
+ /**
+ * Serializes this component (and subcomponents) directly to an
+ * input stream. Typically used for performance to avoid
+ * unnecessary conversions and XPConnect traversals.
+ *
+ * @result an input stream which can be read to get the serialized
+ * version of this component, encoded in UTF-8. Implements
+ * nsISeekableStream so that it can be used with
+ * nsIUploadChannel.
+ */
+ nsIInputStream serializeToICSStream();
+
+ void addSubcomponent(in calIIcalComponent comp);
+// If you add then remove a property/component, the referenced
+// timezones won't get purged out. There's currently no client code.
+// void removeSubcomponent(in calIIcalComponent comp);
+
+ /**
+ * @param kind ANY, ATTENDEE, X-WHATEVER, etc.
+ */
+ calIIcalProperty getFirstProperty(in AUTF8String kind);
+ calIIcalProperty getNextProperty(in AUTF8String kind);
+ void addProperty(in calIIcalProperty prop);
+// If you add then remove a property/component, the referenced
+// timezones won't get purged out. There's currently no client code.
+// void removeProperty(in calIIcalProperty prop);
+
+ /**
+ * Timezones need special handling, as they must be
+ * emitted as children of VCALENDAR, but can be referenced by
+ * any sub component.
+ * Adding a second timezone (of the same TZID) will remove the
+ * first one.
+ */
+ void addTimezoneReference(in calITimezone aTimezone);
+
+ /**
+ * Returns an array of VTIMEZONE components.
+ * These are the timezones that are in use by this
+ * component and its children.
+ */
+ Array<calITimezone> getReferencedTimezones();
+
+ /**
+ * Clones the component. The cloned component is decoupled from any parent.
+ * @return cloned component
+ */
+ calIIcalComponent clone();
+};
+
+[scriptable,uuid(5b13a69c-53d3-44a0-9203-f89f7e5e1604)]
+interface calIIcalProperty : nsISupports
+{
+ /**
+ * The whole property as an ical string.
+ * @exception Any error will be thrown as an calIError::ICS_ error.
+ */
+ readonly attribute AUTF8String icalString;
+
+ /**
+ * Access to the inner ical.js objects. Only use these if you know what you
+ * are doing.
+ */
+ attribute jsval icalProperty;
+
+ /**
+ * The parent component containing this property
+ */
+ readonly attribute calIIcalComponent parent;
+
+ /**
+ * Return a string representation of this instance.
+ */
+ AUTF8String toString();
+
+ /**
+ * The value of the property as string.
+ * The exception for properties of TEXT or X- type, those will be unescaped
+ * when getting, and also expects an unescaped string when setting.
+ * Datetime, numeric and other non-text types are represented as ical string
+ */
+ attribute AUTF8String value;
+
+ /**
+ * The value of the property in (escaped) ical format.
+ */
+ attribute AUTF8String valueAsIcalString;
+
+ /**
+ * The value of the property as date/datetime value, keeping
+ * track of the used timezone referenced in the owning component.
+ */
+ attribute calIDateTime valueAsDatetime;
+
+ // XXX attribute AUTF8String stringValueWithParams; ?
+ readonly attribute AUTF8String propertyName;
+
+ AUTF8String getParameter(in AUTF8String paramname);
+ void setParameter(in AUTF8String paramname, in AUTF8String paramval);
+
+ AUTF8String getFirstParameterName();
+ AUTF8String getNextParameterName();
+
+ void removeParameter(in AUTF8String paramname);
+ void clearXParameters();
+};
+
+[scriptable,uuid(eda9565f-f9bb-4846-b134-1e0653b2e767)]
+interface calIIcsComponentParsingListener : nsISupports
+{
+ /**
+ * Called when the parsing has completed.
+ *
+ * @param rc The result code of parsing
+ * @param rootComp The root ical component that was parsed
+ */
+ void onParsingComplete(in nsresult rc, in calIIcalComponent rootComp);
+};
+
+[scriptable,uuid(31e7636b-5a64-4d15-bc60-67b67cd85176)]
+interface calIICSService : nsISupports
+{
+ /**
+ * Parse an ICS string into components.
+ *
+ * @param serialized an ICS string
+ */
+ calIIcalComponent parseICS(in AUTF8String serialized);
+
+ /**
+ * Asynchronously parse an ICS string into components.
+ *
+ * @param serialized an ICS string
+ * @param listener The listener that notifies the root component
+ */
+ void parseICSAsync(in AUTF8String serialized,
+ in calIIcsComponentParsingListener listener);
+
+ calIIcalComponent createIcalComponent(in AUTF8String kind);
+ calIIcalProperty createIcalProperty(in AUTF8String kind);
+ calIIcalProperty createIcalPropertyFromString(in AUTF8String str);
+};