/* -*- 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 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); };