- add an icalProperty getter/setter for serialization (yet to come).
 - fix bogus assertion
 - throw NOT_IMPLEMENTED for getOccurrences, rather than NS_OK crash bait.
This commit is contained in:
shaver%mozilla.org 2004-12-14 02:00:34 +00:00
Родитель 4126ab4c9a
Коммит 4714253f86
5 изменённых файлов: 68 добавлений и 23 удалений

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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