mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 04:45:45 +00:00
Adding new EventDisplay component. Fixing getEvents functions to return sorted-by-occurence events
This commit is contained in:
parent
a43cd20380
commit
fc2f16b790
@ -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;
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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 ) {
|
||||||
|
@ -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; */
|
||||||
|
@ -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 );
|
||||||
%}
|
%}
|
||||||
|
Loading…
Reference in New Issue
Block a user