зеркало из https://github.com/mozilla/gecko-dev.git
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.
This commit is contained in:
Родитель
4126ab4c9a
Коммит
4714253f86
|
@ -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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче