Adding filter functionality for getTodos

This commit is contained in:
mostafah%oeone.com 2002-06-25 13:50:39 +00:00
Родитель da09a403da
Коммит 17d64bca5d
6 изменённых файлов: 485 добавлений и 24 удалений

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

@ -85,6 +85,7 @@ function TestAll()
var iCalTodo = TestFetchTodo( id );
id = TestUpdateTodo( iCalTodo );
TestDeleteTodo( id );
TestFilterTodo( id );
alert( "Test Successfull" );
}
@ -480,3 +481,66 @@ function TestDeleteTodo( id )
alert( "Delete failed" );
}
function TestFilterTodo()
{
var iCalTodoComponent = Components.classes["@mozilla.org/icaltodo;1"].createInstance();
var iCalTodo = iCalTodoComponent.QueryInterface(Components.interfaces.oeIICalTodo);
iCalTodo.id = 999999999;
iCalTodo.start.year = 2002;
iCalTodo.start.month = 0;
iCalTodo.start.day = 1;
iCalTodo.start.hour = 0;
iCalTodo.start.minute = 0;
iCalTodo.due.year = 2003;
iCalTodo.due.month = 0;
iCalTodo.due.day = 1;
iCalTodo.due.hour = 0;
iCalTodo.due.minute = 0;
var id = iCalLib.addTodo( iCalTodo );
var todoList = this.iCalLib.getAllTodos();
if ( !todoList.hasMoreElements() ) {
alert( "TestFilterTodo-Step1: failed" );
return;
}
var now = Date();
iCalLib.filter.completed.setTime( now );
todoList = this.iCalLib.getAllTodos();
if ( !todoList.hasMoreElements() ) {
alert( "TestFilterTodo-Step2: failed" );
return;
}
iCalTodo.completed.setTime( now );
now = Date();
iCalLib.filter.completed.setTime( now );
todoList = this.iCalLib.getAllTodos();
if ( todoList.hasMoreElements() ) {
alert( "TestFilterTodo-Step3: failed" );
return;
}
iCalTodo.completed.clear();
todoList = this.iCalLib.getAllTodos();
if ( !todoList.hasMoreElements() ) {
alert( "TestFilterTodo-Step4: failed" );
return;
}
iCalLib.deleteTodo( id );
}

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

@ -164,6 +164,12 @@ NS_IMETHODIMP oeDateTimeImpl::SetTime( PRTime ms )
return NS_OK;
}
NS_IMETHODIMP oeDateTimeImpl::Clear()
{
m_datetime = icaltime_null_time();
return NS_OK;
}
void oeDateTimeImpl::AdjustToWeekday( short weekday ) {
short currentday = icaltime_day_of_week( m_datetime );
while( currentday != weekday ) {

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

@ -286,6 +286,9 @@ oeICalImpl::oeICalImpl()
m_batchMode = false;
m_alarmtimer = nsnull;
m_filter = new oeICalFilter();
NS_ADDREF( m_filter );
}
oeICalImpl::~oeICalImpl()
@ -303,6 +306,8 @@ oeICalImpl::~oeICalImpl()
m_alarmtimer->Release();
m_alarmtimer = nsnull;
}
NS_RELEASE( m_filter );
}
/**
@ -1779,29 +1784,6 @@ NS_IMETHODIMP oeICalImpl::AddTodo(oeIICalTodo *icaltodo,char **retid)
return NS_OK;
}
NS_IMETHODIMP
oeICalImpl::GetAllTodos(nsISimpleEnumerator **resultList )
{
#ifdef ICAL_DEBUG
printf( "oeICalImpl::GetAllTodos()\n" );
#endif
nsCOMPtr<oeEventEnumerator> todoEnum = new oeEventEnumerator();
if (!todoEnum)
return NS_ERROR_OUT_OF_MEMORY;
TodoList *tmplistptr = &m_todolist;
while( tmplistptr ) {
if( tmplistptr->todo ) {
todoEnum->AddEvent( tmplistptr->todo );
}
tmplistptr = tmplistptr->next;
}
// bump ref count
return todoEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)resultList);
}
NS_IMETHODIMP
oeICalImpl::DeleteTodo( const char *id )
{
@ -1981,3 +1963,365 @@ NS_IMETHODIMP oeICalImpl::ModifyTodo(oeIICalTodo *icalevent, char **retid)
return NS_OK;
}
NS_IMETHODIMP
oeICalImpl::GetAllTodos(nsISimpleEnumerator **resultList )
{
#ifdef ICAL_DEBUG
printf( "oeICalImpl::GetAllTodos()\n" );
#endif
nsCOMPtr<oeEventEnumerator> todoEnum = new oeEventEnumerator();
if (!todoEnum)
return NS_ERROR_OUT_OF_MEMORY;
TodoList *tmplistptr = &m_todolist;
while( tmplistptr ) {
if( tmplistptr->todo ) {
if( SatisfiesFilter( tmplistptr->todo ) )
todoEnum->AddEvent( tmplistptr->todo );
}
tmplistptr = tmplistptr->next;
}
// bump ref count
return todoEnum->QueryInterface(NS_GET_IID(nsISimpleEnumerator), (void **)resultList);
}
/*************************************************************************************************************/
/*************************************************************************************************************/
/*************************************************************************************************************/
/* Filter stuff here */
/*************************************************************************************************************/
/*************************************************************************************************************/
bool oeICalImpl::SatisfiesFilter( oeIICalTodo *comp )
{
bool result=false;
if( m_filter && m_filter->m_completed ) {
if( icaltime_is_null_time( m_filter->m_completed->m_datetime ) )
return true;
}
oeDateTimeImpl *completed;
nsresult rv;
rv = comp->GetCompleted( (oeIDateTime **)&completed );
if( NS_FAILED( rv ) ) {
#ifdef ICAL_DEBUG
printf( "oeICalImpl::SatisfiesFilter() : WARNING GetCompleted() unsuccessful\n" );
#endif
return false;
}
if( icaltime_is_null_time( completed->m_datetime ) )
result = true;
if( icaltime_compare( completed->m_datetime , m_filter->m_completed->m_datetime ) > 0 )
result = true;
NS_RELEASE( completed );
return result;
}
NS_IMETHODIMP oeICalImpl::GetFilter( oeIICalTodo **retval )
{
*retval = m_filter;
NS_ADDREF(*retval);
return NS_OK;
}
NS_IMETHODIMP oeICalImpl::ResetFilter()
{
if( m_filter && m_filter->m_completed )
m_filter->m_completed->m_datetime = icaltime_null_time();
return NS_OK;
}
NS_IMPL_ISUPPORTS1(oeICalFilter, oeIICalTodo)
oeICalFilter::oeICalFilter()
{
NS_INIT_ISUPPORTS();
nsresult rv;
if( NS_FAILED( rv = NS_NewDateTime((oeIDateTime**) &m_completed ))) {
m_completed = nsnull;
}
}
oeICalFilter::~oeICalFilter()
{
if( m_completed )
m_completed->Release();
}
NS_IMETHODIMP oeICalFilter::GetId(char **aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetId(const char *aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetTitle(char **aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetTitle(const char * aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetDescription(char * *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetDescription(const char * aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetLocation(char **aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetLocation(const char * aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetCategory(char **aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetCategory(const char * aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetPrivateEvent(PRBool *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetPrivateEvent(PRBool aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetSyncId(char * *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetSyncId(const char * aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetAllDay(PRBool *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetAllDay(PRBool aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetAlarm(PRBool *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetAlarm(PRBool aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetAlarmUnits(char * *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetAlarmUnits(const char * aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetAlarmLength(PRUint32 *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetAlarmLength(PRUint32 aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetAlarmEmailAddress(char * *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetAlarmEmailAddress(const char * aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetInviteEmailAddress(char * *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetInviteEmailAddress(const char * aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetRecurInterval(PRUint32 *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetRecurInterval(PRUint32 aNewVal )
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetRecurUnits(char **aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetRecurUnits(const char * aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetRecur(PRBool *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetRecur(PRBool aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetRecurForever(PRBool *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetRecurForever(PRBool aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetLastAlarmAck(PRTime *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetLastAlarmAck(PRTime aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetNextRecurrence( PRTime begin, PRTime *retval, PRBool *isvalid ) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetPreviousOccurrence( PRTime beforethis, PRTime *retval, PRBool *isvalid ) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetStart(oeIDateTime * *start)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetEnd(oeIDateTime * *end)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetRecurEnd(oeIDateTime * *recurend)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetRecurWeekdays(PRInt16 *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetRecurWeekdays(PRInt16 aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetRecurWeekNumber(PRInt16 *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetRecurWeekNumber(PRInt16 aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetIcalString(char **aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::ParseIcalString(const char *aNewVal, PRBool *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::AddException( PRTime exdate )
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::RemoveAllExceptions()
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetExceptions(nsISimpleEnumerator **datelist )
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetSnoozeTime( PRTime snoozetime )
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::Clone( oeIICalEvent **ev )
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetDue(oeIDateTime * *due)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::GetCompleted(oeIDateTime * *completed)
{
*completed = m_completed;
NS_ADDREF(*completed);
return NS_OK;
}
NS_IMETHODIMP oeICalFilter::GetPercent(PRInt16 *aRetVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP oeICalFilter::SetPercent(PRInt16 aNewVal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}

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

@ -168,6 +168,47 @@ public:
}
};
class oeICalFilter : public oeIICalTodo
{
public:
NS_DECL_ISUPPORTS
NS_DECL_OEIICALEVENT
NS_DECL_OEIICALTODO
oeICalFilter();
virtual ~oeICalFilter();
oeDateTimeImpl *m_completed;
private:
/* char *m_id;
char *m_syncid;
char *m_title;
char *m_description;
char *m_location;
char *m_category;
bool m_isprivate;
bool m_allday;
bool m_hasalarm;
unsigned long m_alarmlength;
char *m_alarmunits;
char *m_alarmemail;
char *m_inviteemail;
short m_recurtype;
unsigned long m_recurinterval;
bool m_recur;
bool m_recurforever;
char *m_recurunits;
short m_recurweekdays;
short m_recurweeknumber;
oeDateTimeImpl *m_start;
oeDateTimeImpl *m_end;
oeDateTimeImpl *m_recurend;
icaltimetype m_lastalarmack;
std::vector<PRTime> m_exceptiondates;
std::vector<PRTime> m_snoozetimes;
int m_percent;
oeDateTimeImpl *m_due;*/
};
class oeICalImpl : public oeIICal
{
public:
@ -204,4 +245,6 @@ private:
TodoList m_todolist;
nsITimer *m_alarmtimer;
char serveraddr[200];
oeICalFilter *m_filter;
bool SatisfiesFilter( oeIICalTodo *comp );
};

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

@ -310,7 +310,7 @@ icalcomponent* oeICalTodoImpl::AsIcalComponent()
icalcomponent_add_property( vtodo, prop );
//completed
if( m_completed ) {
if( m_completed && !icaltime_is_null_time( m_completed->m_datetime ) ) {
prop = icalproperty_new_completed( m_completed->m_datetime );
icalcomponent_add_property( vtodo, prop );
}

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

@ -62,6 +62,7 @@ interface oeIDateTime : nsISupports
PRTime getTime();
void setTime( in PRTime ms );
string toString();
void clear();
};
[scriptable, uuid(89c5cd5a-af2d-45e6-83c7-2f2420a13626)]
@ -134,6 +135,7 @@ interface oeIICal : nsISupports
void Test();
attribute boolean batchMode;
readonly attribute oeIICalTodo filter;
void setServer( in string str );
void addObserver( in oeIICalObserver observer );
@ -156,6 +158,8 @@ interface oeIICal : nsISupports
void deleteTodo( in string id );
oeIICalTodo fetchTodo( in string id );
nsISimpleEnumerator getAllTodos();
void resetFilter();
};