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
This commit is contained in:
shaver%mozilla.org
2004-12-14 02:00:34 +00:00
parent 22e4b3570a
commit 6e7c63bc6b
5 changed files with 68 additions and 23 deletions

View File

@@ -65,7 +65,7 @@ interface calIAttendee : nsISupports
attribute AUTF8String role;
/**
* NEEDSACTION
* NEEDS-ACTION
* ACCEPTED
* DECLINED
* TENTATIVE

View File

@@ -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;
};

View File

@@ -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<calIIcalComponent> mParent;
};
NS_IMPL_ISUPPORTS1(calIcalProperty, calIIcalProperty)
NS_IMETHODIMP

View File

@@ -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<calIIcalComponent> mParent;
};

View File

@@ -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;
}