diff --git a/calendar/base/backend/icaljs/calIDateTimeJS.idl b/calendar/base/backend/icaljs/calIDateTimeJS.idl new file mode 100644 index 0000000000..1937f865fa --- /dev/null +++ b/calendar/base/backend/icaljs/calIDateTimeJS.idl @@ -0,0 +1,235 @@ +/* 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/. */ + +#include "nsISupports.idl" + +interface calIDuration; +interface calITimezone; +[ptr] native icaltimetypeptr(struct icaltimetype); + +[scriptable, uuid(04139dff-a6f0-446d-9aec-2062df887ef2)] +interface calIDateTime : nsISupports +{ + /** + * isMutable is true if this instance is modifiable. + * If isMutable is false, any attempts to modify + * the object will throw NS_ERROR_OBJECT_IS_IMMUTABLE. + */ + readonly attribute boolean isMutable; + + /** + * Make this calIDateTime instance immutable. + */ + void makeImmutable(); + + /** + * Clone this calIDateTime instance into a new + * mutable object. + */ + calIDateTime clone(); + + /** + * valid is true if this object contains a valid + * time/date. + */ + // true if this thing is set/valid + readonly attribute boolean isValid; + + /** + * nativeTime contains this instance's PRTime value relative + * to the UTC epoch, regardless of the timezone that's set + * on this instance. If nativeTime is set, the given UTC PRTime + * value is exploded into year/month/etc, forcing the timezone + * setting to UTC. + * + * @warning: When the timezone is set to 'floating', this will return + * the nativeTime as-if the timezone was UTC. Take this into account + * when comparing values. + * + * @note on objects that are pinned to a timezone and have isDate set, + * nativeTime will be 00:00:00 in the timezone of that date, not 00:00:00 in + * UTC. + */ + attribute PRTime nativeTime; + + /** + * Full 4-digit year value (e.g. "1989", "2004") + */ + attribute short year; + + /** + * Month, 0-11, 0 = January + */ + attribute short month; + + /** + * Day of month, 1-[28,29,30,31] + */ + attribute short day; + + /** + * Hour, 0-23 + */ + attribute short hour; + + /** + * Minute, 0-59 + */ + attribute short minute; + + /** + * Second, 0-59 + */ + attribute short second; + + /** + * Gets or sets the timezone of this calIDateTime instance. + * Setting the timezone does not change the actual date/time components; + * to convert between timezones, use getInTimezone(). + * + * @throws NS_ERROR_INVALID_ARG if null is passed in. + */ + attribute calITimezone timezone; + + /** + * Resets the datetime object. + * + * @param year full 4-digit year value (e.g. "1989", "2004") + * @param month month, 0-11, 0 = January + * @param day day of month, 1-[28,29,31] + * @param hour hour, 0-23 + * @param minute minute, 0-59 + * @param second decond, 0-59 + * @param timezone timezone + * + * The passed datetime will be normalized, e.g. a minute value of 60 will + * increase the hour. + * + * @throws NS_ERROR_INVALID_ARG if no timezone is passed in. + */ + void resetTo(in short year, + in short month, + in short day, + in short hour, + in short minute, + in short second, + in calITimezone timezone); + + /** + * The offset of the timezone this datetime is in, relative to UTC, in + * seconds. A positive number means that the timezone is ahead of UTC. + */ + readonly attribute long timezoneOffset; + + /** + * isDate indicates that this calIDateTime instance represents a date + * (a whole day), and not a specific time on that day. If isDate is set, + * accessing the hour/minute/second fields will return 0, and and setting + * them is an illegal operation. + */ + attribute boolean isDate; + + /* + * computed values + */ + + /** + * Day of the week. 0-6, with Sunday = 0. + */ + readonly attribute short weekday; + + /** + * Day of the year, 1-[365,366]. + */ + readonly attribute short yearday; + + /* + * Methods + */ + + /** + * Resets this instance to Jan 1, 1970 00:00:00 UTC. + */ + void reset(); + + /** + * Return a string representation of this instance. + */ + AUTF8String toString(); + + /** + * Return a new calIDateTime instance that's the result of + * converting this one into the given timezone. Valid values + * for aTimezone are the same as the timezone field. If + * the "floating" timezone is given, then this object + * is just cloned, and the timezone is set to floating. + */ + calIDateTime getInTimezone(in calITimezone aTimezone); + + // add the given calIDateTime, treating it as a duration, to + // this item. + // XXX will change + void addDuration (in calIDuration aDuration); + + // Subtract two dates and return a duration + // returns duration of this - aOtherDate + // if aOtherDate is > this the duration will be negative + calIDuration subtractDate (in calIDateTime aOtherDate); + + /** + * Compare this calIDateTime instance to aOther. Returns -1, 0, 1 to + * indicate if this < aOther, this == aOther, or this > aOther, + * respectively. + * + * This comparison is timezone-aware; the given values are converted + * to a common timezone before comparing. If either this or aOther is + * floating, both objects are treated as floating for the comparison. + * + * If either this or aOther has isDate set, then only the date portion is + * compared. + * + * @exception calIErrors.INVALID_TIMEZONE bad timezone on this object + * (not the argument object) + */ + long compare (in calIDateTime aOther); + + // + // Some helper getters for calculating useful ranges + // + + /** + * Returns SUNDAY of the given datetime object's week. + */ + readonly attribute calIDateTime startOfWeek; + + /** + * Returns SATURDAY of the datetime object's week. + */ + readonly attribute calIDateTime endOfWeek; + + // the start/end of the current object's month + readonly attribute calIDateTime startOfMonth; + readonly attribute calIDateTime endOfMonth; + + // the start/end of the current object's year + readonly attribute calIDateTime startOfYear; + readonly attribute calIDateTime endOfYear; + + [noscript,notxpcom] void toIcalTime(in icaltimetypeptr itt); + + /** + * This object as either an iCalendar DATE or DATETIME string, as + * appropriate and sets the timezone to either UTC or floating. + */ + attribute ACString icalString; + + /** + * Setting jsDate via a JavaScript Date object will set + * the calIDateTime to the jsDate's time ***in UTC***. + * There's no way for us to recover TZ info from a jsDate, + * so we always pull it out as UTC, and force the calIDateTime's + * timezone to UTC. + */ + attribute jsval jsDate; +}; diff --git a/calendar/base/backend/icaljs/moz.build b/calendar/base/backend/icaljs/moz.build new file mode 100644 index 0000000000..08a750e005 --- /dev/null +++ b/calendar/base/backend/icaljs/moz.build @@ -0,0 +1,10 @@ +# vim: set filetype=python: +# 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/. + +XPIDL_SOURCES += [ + 'calIDateTimeJS.idl', +] + +XPIDL_MODULE = 'caldatetime_icaljs' diff --git a/calendar/base/backend/libical/Makefile.in b/calendar/base/backend/libical/Makefile.in index 9f12530db0..3419e5d50d 100644 --- a/calendar/base/backend/libical/Makefile.in +++ b/calendar/base/backend/libical/Makefile.in @@ -15,6 +15,7 @@ FORCE_STATIC_LIB = 1 GRE_MODULE = 1 FORCE_USE_PIC = 1 # Force use of PIC USE_STATIC_LIBS = 1 +NO_INTERFACES_MANIFEST = 1 CPPSRCS = calDateTime.cpp \ calDuration.cpp \ diff --git a/calendar/base/backend/libical/build/Makefile.in b/calendar/base/backend/libical/build/Makefile.in index fd00969a64..db8a4104a7 100644 --- a/calendar/base/backend/libical/build/Makefile.in +++ b/calendar/base/backend/libical/build/Makefile.in @@ -58,7 +58,7 @@ include $(topsrcdir)/config/rules.mk EMBED_MANIFEST_AT = BACKEND_MANIFESTS = libical.manifest -DEFINES += -DSHARED_LIBRARY=$(SHARED_LIBRARY) +DEFINES += -DSHARED_LIBRARY=$(SHARED_LIBRARY) -DXPIDL_MODULE=$(XPIDL_MODULE) libs:: $(BACKEND_MANIFESTS) $(EXIT_ON_ERROR) \ diff --git a/calendar/base/backend/libical/build/libical.manifest b/calendar/base/backend/libical/build/libical.manifest index ce2ad8ade2..76207bbfe6 100644 --- a/calendar/base/backend/libical/build/libical.manifest +++ b/calendar/base/backend/libical/build/libical.manifest @@ -1 +1,2 @@ #expand binary-component __SHARED_LIBRARY__ +#expand interfaces __XPIDL_MODULE__.xpt diff --git a/calendar/base/backend/libical/build/moz.build b/calendar/base/backend/libical/build/moz.build index cadb2d7f10..e8ba9347f5 100644 --- a/calendar/base/backend/libical/build/moz.build +++ b/calendar/base/backend/libical/build/moz.build @@ -3,5 +3,6 @@ # 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/. +XPIDL_MODULE = 'caldatetime_libical' MODULE = 'calbasecomps' diff --git a/calendar/base/public/calIDateTime.idl b/calendar/base/backend/libical/calIDateTime.idl similarity index 100% rename from calendar/base/public/calIDateTime.idl rename to calendar/base/backend/libical/calIDateTime.idl diff --git a/calendar/base/backend/libical/moz.build b/calendar/base/backend/libical/moz.build index 451deea421..b3f52005c8 100644 --- a/calendar/base/backend/libical/moz.build +++ b/calendar/base/backend/libical/moz.build @@ -8,3 +8,9 @@ DIRS = [ 'build' ] + +XPIDL_SOURCES += [ + 'calIDateTime.idl', +] + +XPIDL_MODULE = 'caldatetime_libical' diff --git a/calendar/base/public/moz.build b/calendar/base/public/moz.build index ab5b0cfdb4..7368cd6999 100644 --- a/calendar/base/public/moz.build +++ b/calendar/base/public/moz.build @@ -16,7 +16,6 @@ XPIDL_SOURCES += [ 'calICalendarView.idl', 'calICalendarViewController.idl', 'calIChangeLog.idl', - 'calIDateTime.idl', 'calIDateTimeFormatter.idl', 'calIDeletedItems.idl', 'calIDuration.idl',