You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
227 lines
5.5 KiB
227 lines
5.5 KiB
/*
|
|
This file is part of libkcal.
|
|
|
|
Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
|
|
Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
|
|
Copyright (C) 2004 Bram Schoenmakers <bramschoenmakers@kde.nl>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include "calfilter.h"
|
|
|
|
using namespace KCal;
|
|
|
|
CalFilter::CalFilter()
|
|
{
|
|
mEnabled = true;
|
|
mCriteria = 0;
|
|
mCompletedTimeSpan = 0;
|
|
}
|
|
|
|
CalFilter::CalFilter(const QString &name)
|
|
{
|
|
mName = name;
|
|
mEnabled = true;
|
|
mCriteria = 0;
|
|
mCompletedTimeSpan = 0;
|
|
}
|
|
|
|
CalFilter::~CalFilter()
|
|
{
|
|
}
|
|
|
|
void CalFilter::apply( Event::List *eventlist ) const
|
|
{
|
|
if ( !mEnabled ) return;
|
|
|
|
// kdDebug(5800) << "CalFilter::apply()" << endl;
|
|
|
|
Event::List::Iterator it = eventlist->begin();
|
|
while( it != eventlist->end() ) {
|
|
if ( !filterIncidence( *it ) ) {
|
|
it = eventlist->remove( it );
|
|
} else {
|
|
++it;
|
|
}
|
|
}
|
|
|
|
// kdDebug(5800) << "CalFilter::apply() done" << endl;
|
|
}
|
|
|
|
// TODO: avoid duplicating apply() code
|
|
void CalFilter::apply( Todo::List *todolist ) const
|
|
{
|
|
if ( !mEnabled ) return;
|
|
|
|
// kdDebug(5800) << "CalFilter::apply()" << endl;
|
|
|
|
Todo::List::Iterator it = todolist->begin();
|
|
while( it != todolist->end() ) {
|
|
if ( !filterIncidence( *it ) ) {
|
|
it = todolist->remove( it );
|
|
} else {
|
|
++it;
|
|
}
|
|
}
|
|
|
|
// kdDebug(5800) << "CalFilter::apply() done" << endl;
|
|
}
|
|
|
|
void CalFilter::apply( Journal::List *journallist ) const
|
|
{
|
|
if ( !mEnabled ) return;
|
|
|
|
Journal::List::Iterator it = journallist->begin();
|
|
while( it != journallist->end() ) {
|
|
if ( !filterIncidence( *it ) ) {
|
|
it = journallist->remove( it );
|
|
} else {
|
|
++it;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool CalFilter::filterIncidence(Incidence *incidence) const
|
|
{
|
|
// kdDebug(5800) << "CalFilter::filterIncidence(): " << incidence->summary() << endl;
|
|
|
|
if ( !mEnabled ) return true;
|
|
|
|
Todo *todo = dynamic_cast<Todo *>(incidence);
|
|
if( todo ) {
|
|
if ( (mCriteria & HideCompleted) && todo->isCompleted() ) {
|
|
// Check if completion date is suffently long ago:
|
|
if ( todo->completed().addDays( mCompletedTimeSpan ) <
|
|
QDateTime::currentDateTime() ) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if( ( mCriteria & HideInactiveTodos ) &&
|
|
( todo->hasStartDate() &&
|
|
QDateTime::currentDateTime() < todo->dtStart() ||
|
|
todo->isCompleted() ) )
|
|
return false;
|
|
|
|
if ( mCriteria & HideTodosWithoutAttendeeInEmailList ) {
|
|
bool iAmOneOfTheAttendees = false;
|
|
const Attendee::List &attendees = todo->attendees();
|
|
if ( !todo->attendees().isEmpty() ) {
|
|
Attendee::List::ConstIterator it;
|
|
for( it = attendees.begin(); it != attendees.end(); ++it ) {
|
|
if ( mEmailList.find( (*it)->email() ) != mEmailList.end() ) {
|
|
iAmOneOfTheAttendees = true;
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
// no attendees, must be me only
|
|
iAmOneOfTheAttendees = true;
|
|
}
|
|
if ( !iAmOneOfTheAttendees )
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
if (mCriteria & HideRecurring) {
|
|
if (incidence->doesRecur()) return false;
|
|
}
|
|
|
|
if (mCriteria & ShowCategories) {
|
|
for (QStringList::ConstIterator it = mCategoryList.constBegin();
|
|
it != mCategoryList.constEnd(); ++it ) {
|
|
QStringList incidenceCategories = incidence->categories();
|
|
for (QStringList::ConstIterator it2 = incidenceCategories.constBegin();
|
|
it2 != incidenceCategories.constEnd(); ++it2 ) {
|
|
if ((*it) == (*it2)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
} else {
|
|
for (QStringList::ConstIterator it = mCategoryList.constBegin();
|
|
it != mCategoryList.constEnd(); ++it ) {
|
|
QStringList incidenceCategories = incidence->categories();
|
|
for (QStringList::ConstIterator it2 = incidenceCategories.constBegin();
|
|
it2 != incidenceCategories.constEnd(); ++it2 ) {
|
|
if ((*it) == (*it2)) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// kdDebug(5800) << "CalFilter::filterIncidence(): passed" << endl;
|
|
|
|
return true;
|
|
}
|
|
|
|
void CalFilter::setEnabled(bool enabled)
|
|
{
|
|
mEnabled = enabled;
|
|
}
|
|
|
|
bool CalFilter::isEnabled() const
|
|
{
|
|
return mEnabled;
|
|
}
|
|
|
|
void CalFilter::setCriteria(int criteria)
|
|
{
|
|
mCriteria = criteria;
|
|
}
|
|
|
|
int CalFilter::criteria() const
|
|
{
|
|
return mCriteria;
|
|
}
|
|
|
|
void CalFilter::setCategoryList(const QStringList &categoryList)
|
|
{
|
|
mCategoryList = categoryList;
|
|
}
|
|
|
|
QStringList CalFilter::categoryList() const
|
|
{
|
|
return mCategoryList;
|
|
}
|
|
|
|
void CalFilter::setEmailList(const QStringList &emailList)
|
|
{
|
|
mEmailList = emailList;
|
|
}
|
|
|
|
QStringList CalFilter::emailList() const
|
|
{
|
|
return mEmailList;
|
|
}
|
|
|
|
void CalFilter::setCompletedTimeSpan( int timespan )
|
|
{
|
|
mCompletedTimeSpan = timespan;
|
|
}
|
|
|
|
int CalFilter::completedTimeSpan() const
|
|
{
|
|
return mCompletedTimeSpan;
|
|
}
|