Adding new EventDisplay component. Fixing getEvents functions to return sorted-by-occurence events

This commit is contained in:
mostafah%oeone.com 2002-05-22 14:01:38 +00:00
parent a43cd20380
commit fc2f16b790
5 changed files with 406 additions and 11 deletions

View File

@ -19,6 +19,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): Mostafa Hosseini <mostafah@oeone.com> * Contributor(s): Mostafa Hosseini <mostafah@oeone.com>
* Gary Frederick <gary.frederick@jsoft.com>
* *
* Alternatively, the contents of this file may be used under the terms of * Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or * either the GNU General Public License Version 2 or later (the "GPL"), or
@ -102,6 +103,8 @@ PRTime ConvertToPrtime ( icaltimetype indate ) {
return result; return result;
} }
int gEventCount = 0;
int gEventDisplayCount = 0;
////////////////////////////////////////////////// //////////////////////////////////////////////////
// ICalEvent Factory // ICalEvent Factory
@ -128,7 +131,7 @@ NS_NewICalEvent( oeIICalEvent** inst )
oeICalEventImpl::oeICalEventImpl() oeICalEventImpl::oeICalEventImpl()
{ {
#ifdef ICAL_DEBUG #ifdef ICAL_DEBUG
printf( "oeICalEventImpl::oeICalEventImpl()\n" ); printf( "oeICalEventImpl::oeICalEventImpl(): %d\n", ++gEventCount );
#endif #endif
NS_INIT_ISUPPORTS(); NS_INIT_ISUPPORTS();
/* member initializers and constructor code */ /* member initializers and constructor code */
@ -170,7 +173,7 @@ oeICalEventImpl::oeICalEventImpl()
oeICalEventImpl::~oeICalEventImpl() oeICalEventImpl::~oeICalEventImpl()
{ {
#ifdef ICAL_DEBUG #ifdef ICAL_DEBUG
printf( "oeICalEventImpl::~oeICalEventImpl( %d )\n", mRefCnt ); printf( "oeICalEventImpl::~oeICalEventImpl(): %d\n", --gEventCount );
#endif #endif
/* destructor code */ /* destructor code */
if( m_id ) if( m_id )
@ -848,6 +851,19 @@ icaltimetype oeICalEventImpl::GetNextRecurrence( icaltimetype begin ) {
return result; return result;
} }
icaltimetype oeICalEventImpl::GetPreviousOccurrence( icaltimetype beforethis ) {
icaltimetype result = icaltime_null_time();
PRTime beforethisinms = ConvertToPrtime( beforethis );
PRTime resultinms;
PRBool isvalid;
GetPreviousOccurrence( beforethisinms ,&resultinms, &isvalid );
if( !isvalid )
return result;
result = ConvertFromPrtime( resultinms );
return result;
}
icaltimetype oeICalEventImpl::GetNextAlarmTime( icaltimetype begin ) { icaltimetype oeICalEventImpl::GetNextAlarmTime( icaltimetype begin ) {
#ifdef ICAL_DEBUG_ALL #ifdef ICAL_DEBUG_ALL
printf( "oeICalEventImpl::GetNextAlarmTime()\n" ); printf( "oeICalEventImpl::GetNextAlarmTime()\n" );
@ -1463,7 +1479,7 @@ bool oeICalEventImpl::ParseIcalComponent( icalcomponent *comp )
} }
#define ICALEVENT_VERSION "2.0" #define ICALEVENT_VERSION "2.0"
#define ICALEVENT_PRODID "PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN" // ggf #define ICALEVENT_PRODID "PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN"
icalcomponent* oeICalEventImpl::AsIcalComponent() icalcomponent* oeICalEventImpl::AsIcalComponent()
{ {
@ -1484,7 +1500,7 @@ icalcomponent* oeICalEventImpl::AsIcalComponent()
icalproperty *prop = icalproperty_new_version( ICALEVENT_VERSION ); icalproperty *prop = icalproperty_new_version( ICALEVENT_VERSION );
icalcomponent_add_property( newcalendar, prop ); icalcomponent_add_property( newcalendar, prop );
//prodid - ggf //prodid
prop = icalproperty_new_prodid( ICALEVENT_PRODID ); prop = icalproperty_new_prodid( ICALEVENT_PRODID );
icalcomponent_add_property( newcalendar, prop ); icalcomponent_add_property( newcalendar, prop );
@ -1774,3 +1790,107 @@ icalcomponent* oeICalEventImpl::AsIcalComponent()
icalcomponent_add_component( newcalendar, vevent ); icalcomponent_add_component( newcalendar, vevent );
return newcalendar; return newcalendar;
} }
/********************************************************************************************/
#include <nsIServiceManager.h>
NS_IMPL_ADDREF(oeICalEventDisplayImpl)
NS_IMPL_RELEASE(oeICalEventDisplayImpl)
//NS_IMPL_ISUPPORTS1(oeICalEventDisplayImpl, oeIICalEventDisplay)
nsresult
NS_NewICalEventDisplay( oeIICalEvent* event, oeIICalEventDisplay** inst )
{
NS_PRECONDITION(inst != nsnull, "null ptr");
if (! inst)
return NS_ERROR_NULL_POINTER;
*inst = new oeICalEventDisplayImpl( event );
if (! *inst)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(*inst);
return NS_OK;
}
oeICalEventDisplayImpl::oeICalEventDisplayImpl( oeIICalEvent* event )
{
#ifdef ICAL_DEBUG_ALL
printf( "oeICalEventDisplayImpl::oeICalEventDisplayImpl(): %d\n", ++gEventDisplayCount );
#endif
NS_INIT_ISUPPORTS();
nsresult rv;
if( event == nsnull ) {
mEvent = do_CreateInstance(OE_ICALEVENTDISPLAY_CONTRACTID, &rv);
} else {
NS_ADDREF( event );
mEvent = event;
}
/* member initializers and constructor code */
m_displaydate = icaltime_null_time();
}
oeICalEventDisplayImpl::~oeICalEventDisplayImpl()
{
#ifdef ICAL_DEBUG_ALL
printf( "oeICalEventDisplayImpl::~oeICalEventDisplayImpl(): %d\n", --gEventDisplayCount );
#endif
/* destructor code */
mEvent = nsnull;
}
NS_IMETHODIMP
oeICalEventDisplayImpl::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (nsnull == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
if (aIID.Equals(NS_GET_IID(nsISupports))) {
*aInstancePtr = (void*)(oeIICalEventDisplay*)this;
*aInstancePtr = (nsISupports*)*aInstancePtr;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(oeIICalEventDisplay))) {
*aInstancePtr = (void*)(oeIICalEventDisplay*)this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(NS_GET_IID(oeIICalEvent))) {
return mEvent->QueryInterface( aIID, aInstancePtr );
}
return NS_NOINTERFACE;
}
NS_IMETHODIMP oeICalEventDisplayImpl::GetDisplayDate( PRTime *aRetVal )
{
#ifdef ICAL_DEBUG_ALL
printf( "oeICalEventDisplayImpl::GetDisplayDate()\n" );
#endif
*aRetVal = ConvertToPrtime( m_displaydate );
return NS_OK;
}
NS_IMETHODIMP oeICalEventDisplayImpl::SetDisplayDate( PRTime aNewVal )
{
#ifdef ICAL_DEBUG_ALL
printf( "oeICalEventDisplayImpl::SetDisplayDate()\n" );
#endif
m_displaydate = ConvertFromPrtime( aNewVal );
return NS_OK;
}
NS_IMETHODIMP oeICalEventDisplayImpl::GetEvent( oeIICalEvent **ev )
{
#ifdef ICAL_DEBUG_ALL
printf( "oeICalEventDisplayImpl::GetEvent()\n" );
#endif
#ifdef ICAL_DEBUG
printf( "WARNING: .event is no longer needed to access event fields\n" );
#endif
*ev = mEvent;
NS_ADDREF(*ev);
return NS_OK;
}

View File

@ -86,6 +86,7 @@ public:
icaltimetype GetNextAlarmTime( icaltimetype begin ); icaltimetype GetNextAlarmTime( icaltimetype begin );
bool matchId( const char *id ); bool matchId( const char *id );
icaltimetype GetNextRecurrence( icaltimetype begin ); icaltimetype GetNextRecurrence( icaltimetype begin );
icaltimetype GetPreviousOccurrence( icaltimetype beforethis );
private: private:
char *m_id; char *m_id;
char *m_syncid; char *m_syncid;
@ -117,4 +118,22 @@ private:
bool IsExcepted( PRTime date ); bool IsExcepted( PRTime date );
}; };
/*******************************************************************************************/
#define OE_ICALEVENTDISPLAY_CONTRACTID "@mozilla.org/icaleventdisplay;1"
class oeICalEventDisplayImpl : public oeIICalEventDisplay
{
public:
NS_DECL_ISUPPORTS
NS_FORWARD_OEIICALEVENT(mEvent->)
NS_DECL_OEIICALEVENTDISPLAY
oeICalEventDisplayImpl( oeIICalEvent *event );
virtual ~oeICalEventDisplayImpl();
private:
icaltimetype m_displaydate;
nsCOMPtr<oeIICalEvent> mEvent;
};
#endif #endif

View File

@ -51,6 +51,7 @@
#include "nsIURL.h" #include "nsIURL.h"
#include "nsNetCID.h" #include "nsNetCID.h"
#include "nsEscape.h" #include "nsEscape.h"
#include "nsISupportsArray.h"
extern "C" { extern "C" {
#include "icalss.h" #include "icalss.h"
@ -136,7 +137,7 @@ oeEventEnumerator::HasMoreElements(PRBool *result)
} }
return NS_OK; return NS_OK;
} }
/*
NS_IMETHODIMP NS_IMETHODIMP
oeEventEnumerator::GetNext(nsISupports **_retval) oeEventEnumerator::GetNext(nsISupports **_retval)
{ {
@ -153,6 +154,24 @@ oeEventEnumerator::GetNext(nsISupports **_retval)
++mCurrentIndex; ++mCurrentIndex;
} }
return NS_OK;
}*/
NS_IMETHODIMP
oeEventEnumerator::GetNext(nsISupports **_retval)
{
if( mCurrentIndex >= mEventVector.size() )
{
*_retval = nsnull;
}
else
{
oeIICalEvent* event = mEventVector[ mCurrentIndex ];
nsresult rv = NS_NewICalEventDisplay( event, (oeIICalEventDisplay**) _retval );
++mCurrentIndex;
return rv;
}
return NS_OK; return NS_OK;
} }
@ -865,7 +884,7 @@ NS_IMETHODIMP oeICalImpl::ModifyEvent(oeIICalEvent *icalevent, char **retid)
return NS_OK; return NS_OK;
} }
((oeICalEventImpl *)icalevent)->GetId( retid ); icalevent->GetId( retid );
if( *retid == nsnull ) { if( *retid == nsnull ) {
#ifdef ICAL_DEBUG #ifdef ICAL_DEBUG
printf( "oeICalImpl::ModifyEvent() - Invalid Id.\n" ); printf( "oeICalImpl::ModifyEvent() - Invalid Id.\n" );
@ -1045,11 +1064,11 @@ oeICalImpl::DeleteEvent( const char *id )
SetupAlarmManager(); SetupAlarmManager();
return NS_OK; return NS_OK;
} }
/*
NS_IMETHODIMP NS_IMETHODIMP
oeICalImpl::GetAllEvents(nsISimpleEnumerator **resultList ) oeICalImpl::GetAllEvents(nsISimpleEnumerator **resultList )
{ {
#ifdef ICAL_DEBUG_ALL #ifdef ICAL_DEBUG
printf( "oeICalImpl::GetAllEvents()\n" ); printf( "oeICalImpl::GetAllEvents()\n" );
#endif #endif
nsCOMPtr<oeEventEnumerator> eventEnum = new oeEventEnumerator(); nsCOMPtr<oeEventEnumerator> eventEnum = new oeEventEnumerator();
@ -1065,6 +1084,119 @@ oeICalImpl::GetAllEvents(nsISimpleEnumerator **resultList )
tmplistptr = tmplistptr->next; tmplistptr = tmplistptr->next;
} }
// bump ref count
return eventEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)resultList);
}*/
NS_IMETHODIMP
oeICalImpl::GetAllEvents(nsISimpleEnumerator **resultList )
{
#ifdef ICAL_DEBUG
printf( "oeICalImpl::GetAllEvents()\n" );
#endif
nsCOMPtr<oeEventEnumerator> eventEnum = new oeEventEnumerator();
if (!eventEnum)
return NS_ERROR_OUT_OF_MEMORY;
nsCOMPtr<nsISupportsArray> eventArray;
NS_NewISupportsArray(getter_AddRefs(eventArray));
if (eventArray == nsnull)
return NS_ERROR_OUT_OF_MEMORY;
EventList *tmplistptr = &m_eventlist;
while( tmplistptr ) {
if( tmplistptr->event ) {
eventArray->AppendElement( tmplistptr->event );
}
tmplistptr = tmplistptr->next;
}
PRTime todayinms = PR_Now();
PRInt64 usecpermsec;
LL_I2L( usecpermsec, PR_USEC_PER_MSEC );
LL_DIV( todayinms, todayinms, usecpermsec );
struct icaltimetype checkdate = ConvertFromPrtime( todayinms );
struct icaltimetype now = ConvertFromPrtime( todayinms );
icaltime_adjust( &now, 0, 0, 0, -1 );
icaltimetype nextcheckdate;
PRUint32 num;
do {
icaltimetype soonest = icaltime_null_time();
eventArray->Count( &num );
for ( unsigned int i=0; i<num; i++ ) {
oeIICalEvent* tmpevent;
eventArray->GetElementAt( i, (nsISupports **)&tmpevent );
icaltimetype next = ((oeICalEventImpl *)tmpevent)->GetNextRecurrence( now );
if( !icaltime_is_null_time( next ) )
continue;
icaltimetype previous = ((oeICalEventImpl *)tmpevent)->GetPreviousOccurrence( checkdate );
if( !icaltime_is_null_time( previous ) && ( icaltime_is_null_time( soonest ) || (icaltime_compare( soonest, previous ) > 0) ) ) {
soonest = previous;
}
}
nextcheckdate = soonest;
if( !icaltime_is_null_time( nextcheckdate )) {
for ( unsigned int i=0; i<num; i++ ) {
oeIICalEvent* tmpevent;
eventArray->GetElementAt( i, (nsISupports **)&tmpevent );
icaltimetype next = ((oeICalEventImpl *)tmpevent)->GetNextRecurrence( now );
if( !icaltime_is_null_time( next ) )
continue;
icaltimetype previous = ((oeICalEventImpl *)tmpevent)->GetPreviousOccurrence( checkdate );
if( !icaltime_is_null_time( previous ) && (icaltime_compare( nextcheckdate, previous ) == 0) ) {
eventEnum->AddEvent( tmpevent );
// PRTime nextdateinms = ConvertToPrtime( nextcheckdate );
// dateEnum->AddDate( nextdateinms );
eventArray->RemoveElementAt( i );
break;
}
}
}
} while ( !icaltime_is_null_time( nextcheckdate ) );
checkdate = ConvertFromPrtime( todayinms );
icaltime_adjust( &checkdate, 0, 0, 0, -1 );
do {
icaltimetype soonest = icaltime_null_time();
eventArray->Count( &num );
for ( unsigned int i=0; i<num; i++ ) {
oeIICalEvent* tmpevent;
eventArray->GetElementAt( i, (nsISupports **)&tmpevent );
icaltimetype next = ((oeICalEventImpl *)tmpevent)->GetNextRecurrence( checkdate );
if( !icaltime_is_null_time( next ) && ( icaltime_is_null_time( soonest ) || (icaltime_compare( soonest, next ) > 0) ) ) {
soonest = next;
}
}
nextcheckdate = soonest;
if( !icaltime_is_null_time( nextcheckdate )) {
for ( unsigned int i=0; i<num; i++ ) {
oeIICalEvent* tmpevent;
eventArray->GetElementAt( i, (nsISupports **)&tmpevent );
icaltimetype next = ((oeICalEventImpl *)tmpevent)->GetNextRecurrence( checkdate );
if( !icaltime_is_null_time( next ) && (icaltime_compare( nextcheckdate, next ) == 0) ) {
eventEnum->AddEvent( tmpevent );
// PRTime nextdateinms = ConvertToPrtime( nextcheckdate );
// dateEnum->AddDate( nextdateinms );
eventArray->RemoveElementAt( i );
icaltime_adjust( &nextcheckdate, 0, 0, 0, -1 );
break;
}
}
checkdate = nextcheckdate;
}
} while ( !icaltime_is_null_time( nextcheckdate ) );
// bump ref count // bump ref count
return eventEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)resultList); return eventEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)resultList);
} }
@ -1209,7 +1341,7 @@ oeICalImpl::GetEventsForDay( PRTime datems, nsISimpleEnumerator **datelist, nsIS
return GetEventsForRange(checkdateinms ,checkenddateinms ,datelist ,eventlist ); return GetEventsForRange(checkdateinms ,checkenddateinms ,datelist ,eventlist );
} }
/*
NS_IMETHODIMP NS_IMETHODIMP
oeICalImpl::GetEventsForRange( PRTime checkdateinms, PRTime checkenddateinms, nsISimpleEnumerator **datelist, nsISimpleEnumerator **eventlist ) { oeICalImpl::GetEventsForRange( PRTime checkdateinms, PRTime checkenddateinms, nsISimpleEnumerator **datelist, nsISimpleEnumerator **eventlist ) {
#ifdef ICAL_DEBUG_ALL #ifdef ICAL_DEBUG_ALL
@ -1245,8 +1377,57 @@ oeICalImpl::GetEventsForRange( PRTime checkdateinms, PRTime checkenddateinms, ns
eventEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)eventlist); eventEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)eventlist);
dateEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)datelist); dateEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)datelist);
return NS_OK; return NS_OK;
} }*/
NS_IMETHODIMP
oeICalImpl::GetEventsForRange( PRTime checkdateinms, PRTime checkenddateinms, nsISimpleEnumerator **datelist, nsISimpleEnumerator **eventlist ) {
#ifdef ICAL_DEBUG_ALL
printf( "oeICalImpl::GetEventsForRange()\n" );
#endif
nsCOMPtr<oeEventEnumerator> eventEnum = new oeEventEnumerator( );
if (!eventEnum)
return NS_ERROR_OUT_OF_MEMORY;
nsCOMPtr<oeDateEnumerator> dateEnum = new oeDateEnumerator( );
if (!dateEnum)
return NS_ERROR_OUT_OF_MEMORY;
struct icaltimetype checkdate = ConvertFromPrtime( checkdateinms );
icaltime_adjust( &checkdate, 0, 0, 0, -1 );
struct icaltimetype checkenddate = ConvertFromPrtime( checkenddateinms );
icaltimetype nextcheckdate;
do {
nextcheckdate = GetNextEvent( checkdate );
if( icaltime_compare( nextcheckdate, checkenddate ) >= 0 )
break;
if( !icaltime_is_null_time( nextcheckdate )) {
EventList *tmplistptr = &m_eventlist;
while( tmplistptr ) {
if( tmplistptr->event ) {
oeIICalEvent* tmpevent = tmplistptr->event;
icaltimetype next = ((oeICalEventImpl *)tmpevent)->GetNextRecurrence( checkdate );
if( !icaltime_is_null_time( next ) && (icaltime_compare( nextcheckdate, next ) == 0) ) {
eventEnum->AddEvent( tmpevent );
PRTime nextdateinms = ConvertToPrtime( nextcheckdate );
dateEnum->AddDate( nextdateinms );
}
}
tmplistptr = tmplistptr->next;
}
checkdate = nextcheckdate;
}
} while ( !icaltime_is_null_time( nextcheckdate ) );
eventEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)eventlist);
dateEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)datelist);
return NS_OK;
}
/*
NS_IMETHODIMP NS_IMETHODIMP
oeICalImpl::GetFirstEventsForRange( PRTime checkdateinms, PRTime checkenddateinms, nsISimpleEnumerator **eventlist ) { oeICalImpl::GetFirstEventsForRange( PRTime checkdateinms, PRTime checkenddateinms, nsISimpleEnumerator **eventlist ) {
#ifdef ICAL_DEBUG_ALL #ifdef ICAL_DEBUG_ALL
@ -1274,6 +1455,72 @@ oeICalImpl::GetFirstEventsForRange( PRTime checkdateinms, PRTime checkenddateinm
eventEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)eventlist); eventEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)eventlist);
return NS_OK; return NS_OK;
}*/
NS_IMETHODIMP
oeICalImpl::GetFirstEventsForRange( PRTime checkdateinms, PRTime checkenddateinms, nsISimpleEnumerator **eventlist ) {
//NOTE: checkenddateinms is being ignored for now
#ifdef ICAL_DEBUG_ALL
printf( "oeICalImpl::GetFirstEventsForRange()\n" );
#endif
nsCOMPtr<oeEventEnumerator> eventEnum = new oeEventEnumerator();
if (!eventEnum)
return NS_ERROR_OUT_OF_MEMORY;
nsCOMPtr<nsISupportsArray> eventArray;
NS_NewISupportsArray(getter_AddRefs(eventArray));
if (eventArray == nsnull)
return NS_ERROR_OUT_OF_MEMORY;
EventList *tmplistptr = &m_eventlist;
while( tmplistptr ) {
if( tmplistptr->event ) {
eventArray->AppendElement( tmplistptr->event );
}
tmplistptr = tmplistptr->next;
}
struct icaltimetype checkdate = ConvertFromPrtime( checkdateinms );
icaltime_adjust( &checkdate, 0, 0, 0, -1 );
icaltimetype nextcheckdate;
do {
PRUint32 num;
icaltimetype soonest = icaltime_null_time();
eventArray->Count( &num );
for ( unsigned int i=0; i<num; i++ ) {
oeIICalEvent* tmpevent;
eventArray->GetElementAt( i, (nsISupports **)&tmpevent );
icaltimetype next = ((oeICalEventImpl *)tmpevent)->GetNextRecurrence( checkdate );
if( !icaltime_is_null_time( next ) && ( icaltime_is_null_time( soonest ) || (icaltime_compare( soonest, next ) > 0) ) ) {
soonest = next;
}
}
nextcheckdate = soonest;
if( !icaltime_is_null_time( nextcheckdate )) {
for ( unsigned int i=0; i<num; i++ ) {
oeIICalEvent* tmpevent;
eventArray->GetElementAt( i, (nsISupports **)&tmpevent );
icaltimetype next = ((oeICalEventImpl *)tmpevent)->GetNextRecurrence( checkdate );
if( !icaltime_is_null_time( next ) && (icaltime_compare( nextcheckdate, next ) == 0) ) {
eventEnum->AddEvent( tmpevent );
// PRTime nextdateinms = ConvertToPrtime( nextcheckdate );
// dateEnum->AddDate( nextdateinms );
eventArray->RemoveElementAt( i );
icaltime_adjust( &nextcheckdate, 0, 0, 0, -1 );
break;
}
}
checkdate = nextcheckdate;
}
} while ( !icaltime_is_null_time( nextcheckdate ) );
// bump ref count
return eventEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)eventlist);
} }
icaltimetype oeICalImpl::GetNextEvent( icaltimetype starting ) { icaltimetype oeICalImpl::GetNextEvent( icaltimetype starting ) {

View File

@ -104,7 +104,7 @@ oeICalTodoImpl::~oeICalTodoImpl()
m_due->Release(); m_due->Release();
if( m_completed ) if( m_completed )
m_completed->Release(); m_completed->Release();
mEvent->Release(); mEvent = nsnull;
} }
/* readonly attribute oeIDateTime due; */ /* readonly attribute oeIDateTime due; */

View File

@ -101,6 +101,13 @@ interface oeIICalEvent : nsISupports
oeIICalEvent clone(); oeIICalEvent clone();
}; };
[scriptable, uuid(f95df40e-0d5f-49ec-9ba8-4b88d3eb53e0)]
interface oeIICalEventDisplay : oeIICalEvent
{
readonly attribute oeIICalEvent event;
attribute PRTime displayDate;
};
[scriptable, uuid(d44987b4-1dd1-11b2-9783-8a78ed685caf)] [scriptable, uuid(d44987b4-1dd1-11b2-9783-8a78ed685caf)]
interface oeIICalTodo : oeIICalEvent interface oeIICalTodo : oeIICalEvent
{ {
@ -153,4 +160,6 @@ extern nsresult
NS_NewICalEvent(oeIICalEvent** inst); NS_NewICalEvent(oeIICalEvent** inst);
extern nsresult extern nsresult
NS_NewDateTime(oeIDateTime** inst); NS_NewDateTime(oeIDateTime** inst);
extern nsresult
NS_NewICalEventDisplay( oeIICalEvent* event, oeIICalEventDisplay** inst );
%} %}