зеркало из 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;
|
attribute AUTF8String role;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NEEDSACTION
|
* NEEDS-ACTION
|
||||||
* ACCEPTED
|
* ACCEPTED
|
||||||
* DECLINED
|
* DECLINED
|
||||||
* TENTATIVE
|
* TENTATIVE
|
||||||
|
|
|
@ -42,6 +42,8 @@ interface calIItemBase;
|
||||||
interface calIDateTime;
|
interface calIDateTime;
|
||||||
interface calIItemOccurrence;
|
interface calIItemOccurrence;
|
||||||
|
|
||||||
|
interface calIIcalProperty;
|
||||||
|
|
||||||
[scriptable, uuid(a6a458cf-052c-45d1-bee7-b700ad21109a)]
|
[scriptable, uuid(a6a458cf-052c-45d1-bee7-b700ad21109a)]
|
||||||
interface calIRecurrenceInfo : nsISupports
|
interface calIRecurrenceInfo : nsISupports
|
||||||
{
|
{
|
||||||
|
@ -71,7 +73,7 @@ interface calIRecurrenceInfo : nsISupports
|
||||||
|
|
||||||
attribute long recurType;
|
attribute long recurType;
|
||||||
|
|
||||||
attribute calIDateTime recurStart;
|
attribute calIDatetime recurStart;
|
||||||
|
|
||||||
// setting either of these attributes calculates the other.
|
// setting either of these attributes calculates the other.
|
||||||
// recurCount of -1 or null recurEnd means "forever"
|
// recurCount of -1 or null recurEnd means "forever"
|
||||||
|
@ -119,4 +121,6 @@ interface calIRecurrenceInfo : nsISupports
|
||||||
in calIDateTime aStartTime,
|
in calIDateTime aStartTime,
|
||||||
in unsigned long aMaxCount,
|
in unsigned long aMaxCount,
|
||||||
out unsigned long aCount, [array,size_is(aCount),retval] out calIItemOccurrence aItems);
|
out unsigned long aCount, [array,size_is(aCount),retval] out calIItemOccurrence aItems);
|
||||||
|
|
||||||
|
attribute calIIcalProperty icalProperty;
|
||||||
};
|
};
|
||||||
|
|
|
@ -51,26 +51,6 @@ extern "C" {
|
||||||
# include "ical.h"
|
# 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_IMPL_ISUPPORTS1(calIcalProperty, calIIcalProperty)
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
|
|
@ -36,7 +36,14 @@
|
||||||
*
|
*
|
||||||
* ***** END LICENSE BLOCK ***** */
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#include "nsCOMPtr.h"
|
||||||
#include "calIICSService.h"
|
#include "calIICSService.h"
|
||||||
|
extern "C" {
|
||||||
|
# include "ical.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
class calIIcalComponent;
|
||||||
|
class calIcalComponent;
|
||||||
|
|
||||||
class calICSService : public calIICSService
|
class calICSService : public calIICSService
|
||||||
{
|
{
|
||||||
|
@ -47,3 +54,25 @@ class calICSService : public calIICSService
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS
|
||||||
NS_DECL_CALIICSSERVICE
|
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 "calDateTime.h"
|
||||||
#include "calIItemBase.h"
|
#include "calIItemBase.h"
|
||||||
|
|
||||||
|
#include "calICSService.h"
|
||||||
|
|
||||||
#include "nsCOMArray.h"
|
#include "nsCOMArray.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -186,7 +188,6 @@ NS_IMETHODIMP
|
||||||
calRecurrenceInfo::GetRecurStart(calIDateTime * *aRecurStart)
|
calRecurrenceInfo::GetRecurStart(calIDateTime * *aRecurStart)
|
||||||
{
|
{
|
||||||
NS_ENSURE_ARG_POINTER(aRecurStart);
|
NS_ENSURE_ARG_POINTER(aRecurStart);
|
||||||
NS_ENSURE_ARG_POINTER(*aRecurStart);
|
|
||||||
|
|
||||||
NS_IF_ADDREF(*aRecurStart = mRecurStart);
|
NS_IF_ADDREF(*aRecurStart = mRecurStart);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -486,5 +487,36 @@ NS_IMETHODIMP
|
||||||
calRecurrenceInfo::GetOccurrences(calIItemBase *aItem, calIDateTime *aStartTime, PRUint32 aMaxCount,
|
calRecurrenceInfo::GetOccurrences(calIItemBase *aItem, calIDateTime *aStartTime, PRUint32 aMaxCount,
|
||||||
PRUint32 *aCount, calIItemOccurrence ***aItems)
|
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;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче