From 6e7c63bc6bc8bd2e55dc828c3454e5b5769bbf1e Mon Sep 17 00:00:00 2001 From: "shaver%mozilla.org" Date: Tue, 14 Dec 2004 02:00:34 +0000 Subject: [PATCH] Recurrence fixes: - add an icalProperty getter/setter for serialization (yet to come). - fix bogus assertion - throw NOT_IMPLEMENTED for getOccurrences, rather than NS_OK crash bait. git-svn-id: svn://10.0.0.236/trunk@166690 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/calendar/base/public/calIAttendee.idl | 2 +- .../base/public/calIRecurrenceInfo.idl | 6 +++- mozilla/calendar/base/src/calICSService.cpp | 20 ----------- mozilla/calendar/base/src/calICSService.h | 29 ++++++++++++++++ .../calendar/base/src/calRecurrenceInfo.cpp | 34 ++++++++++++++++++- 5 files changed, 68 insertions(+), 23 deletions(-) diff --git a/mozilla/calendar/base/public/calIAttendee.idl b/mozilla/calendar/base/public/calIAttendee.idl index 23e22f23880..436efd06749 100644 --- a/mozilla/calendar/base/public/calIAttendee.idl +++ b/mozilla/calendar/base/public/calIAttendee.idl @@ -65,7 +65,7 @@ interface calIAttendee : nsISupports attribute AUTF8String role; /** - * NEEDSACTION + * NEEDS-ACTION * ACCEPTED * DECLINED * TENTATIVE diff --git a/mozilla/calendar/base/public/calIRecurrenceInfo.idl b/mozilla/calendar/base/public/calIRecurrenceInfo.idl index 394bd1d0259..8b121ed67a6 100644 --- a/mozilla/calendar/base/public/calIRecurrenceInfo.idl +++ b/mozilla/calendar/base/public/calIRecurrenceInfo.idl @@ -42,6 +42,8 @@ interface calIItemBase; interface calIDateTime; interface calIItemOccurrence; +interface calIIcalProperty; + [scriptable, uuid(a6a458cf-052c-45d1-bee7-b700ad21109a)] interface calIRecurrenceInfo : nsISupports { @@ -71,7 +73,7 @@ interface calIRecurrenceInfo : nsISupports attribute long recurType; - attribute calIDateTime recurStart; + attribute calIDatetime recurStart; // setting either of these attributes calculates the other. // recurCount of -1 or null recurEnd means "forever" @@ -119,4 +121,6 @@ interface calIRecurrenceInfo : nsISupports in calIDateTime aStartTime, in unsigned long aMaxCount, out unsigned long aCount, [array,size_is(aCount),retval] out calIItemOccurrence aItems); + + attribute calIIcalProperty icalProperty; }; diff --git a/mozilla/calendar/base/src/calICSService.cpp b/mozilla/calendar/base/src/calICSService.cpp index e544f9a8c26..f44abee66cb 100644 --- a/mozilla/calendar/base/src/calICSService.cpp +++ b/mozilla/calendar/base/src/calICSService.cpp @@ -51,26 +51,6 @@ extern "C" { # include "ical.h" } -class calIcalProperty : public calIIcalProperty -{ -public: - calIcalProperty(icalproperty *prop, calIIcalComponent *parent) : - mProperty(prop), mParent(parent) { } - virtual ~calIcalProperty() - { - if (!mParent) - icalproperty_free(mProperty); - } - - NS_DECL_ISUPPORTS - NS_DECL_CALIICALPROPERTY - - friend class calIcalComponent; -protected: - icalproperty *mProperty; - nsCOMPtr mParent; -}; - NS_IMPL_ISUPPORTS1(calIcalProperty, calIIcalProperty) NS_IMETHODIMP diff --git a/mozilla/calendar/base/src/calICSService.h b/mozilla/calendar/base/src/calICSService.h index a70af6a79bd..583811cb030 100644 --- a/mozilla/calendar/base/src/calICSService.h +++ b/mozilla/calendar/base/src/calICSService.h @@ -36,7 +36,14 @@ * * ***** END LICENSE BLOCK ***** */ +#include "nsCOMPtr.h" #include "calIICSService.h" +extern "C" { +# include "ical.h" +} + +class calIIcalComponent; +class calIcalComponent; class calICSService : public calIICSService { @@ -47,3 +54,25 @@ class calICSService : public calIICSService NS_DECL_ISUPPORTS NS_DECL_CALIICSSERVICE }; + +class calIcalProperty : public calIIcalProperty +{ +public: + calIcalProperty(icalproperty *prop, calIIcalComponent *parent) : + mProperty(prop), mParent(parent) { } + virtual ~calIcalProperty() + { + if (!mParent) + icalproperty_free(mProperty); + } + + icalproperty *getIcalProperty() { return mProperty; } + + NS_DECL_ISUPPORTS + NS_DECL_CALIICALPROPERTY + + friend class calIcalComponent; +protected: + icalproperty *mProperty; + nsCOMPtr mParent; +}; diff --git a/mozilla/calendar/base/src/calRecurrenceInfo.cpp b/mozilla/calendar/base/src/calRecurrenceInfo.cpp index ade8f803d0c..9c322e3e7a0 100644 --- a/mozilla/calendar/base/src/calRecurrenceInfo.cpp +++ b/mozilla/calendar/base/src/calRecurrenceInfo.cpp @@ -40,6 +40,8 @@ #include "calDateTime.h" #include "calIItemBase.h" +#include "calICSService.h" + #include "nsCOMArray.h" extern "C" { @@ -186,7 +188,6 @@ NS_IMETHODIMP calRecurrenceInfo::GetRecurStart(calIDateTime * *aRecurStart) { NS_ENSURE_ARG_POINTER(aRecurStart); - NS_ENSURE_ARG_POINTER(*aRecurStart); NS_IF_ADDREF(*aRecurStart = mRecurStart); return NS_OK; @@ -486,5 +487,36 @@ NS_IMETHODIMP calRecurrenceInfo::GetOccurrences(calIItemBase *aItem, calIDateTime *aStartTime, PRUint32 aMaxCount, PRUint32 *aCount, calIItemOccurrence ***aItems) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +calRecurrenceInfo::GetIcalProperty(calIIcalProperty **prop) +{ + icalproperty* rrule = icalproperty_new_rrule(*mIcalRecur); + if (!rrule) + return NS_ERROR_OUT_OF_MEMORY; // XXX map error code + *prop = new calIcalProperty(rrule, nsnull); + if (!*prop) { + icalproperty_free(rrule); + return NS_ERROR_FAILURE; + } + + NS_ADDREF(*prop); + return NS_OK; +} + +NS_IMETHODIMP +calRecurrenceInfo::SetIcalProperty(calIIcalProperty *prop) +{ + nsCAutoString propName; + if (NS_FAILED(prop->GetPropertyName(propName))) + return NS_ERROR_FAILURE; // hahahahaha + if (!propName.EqualsLiteral("RRULE")) + return NS_ERROR_INVALID_ARG; + icalproperty* rrule = ((calIcalProperty *)prop)->getIcalProperty(); + if (!rrule) + return NS_ERROR_INVALID_ARG; + *mIcalRecur = icalproperty_get_rrule(rrule); return NS_OK; }