-rw-r--r-- | libkcal/event.cpp | 1 | ||||
-rw-r--r-- | libkcal/icalformatimpl.cpp | 10 | ||||
-rw-r--r-- | libkcal/incidence.cpp | 53 | ||||
-rw-r--r-- | libkcal/incidence.h | 5 | ||||
-rw-r--r-- | libkcal/kincidenceformatter.cpp | 4 | ||||
-rw-r--r-- | libkcal/vcalformat.cpp | 4 | ||||
-rw-r--r-- | libkcal/vcalformat.h | 2 |
7 files changed, 55 insertions, 24 deletions
diff --git a/libkcal/event.cpp b/libkcal/event.cpp index ad66639..0766fd9 100644 --- a/libkcal/event.cpp +++ b/libkcal/event.cpp @@ -172,8 +172,9 @@ void Event::setDuration(int seconds) Incidence::setDuration(seconds); } bool Event::matchTime(QDateTime*startDT, QDateTime* endDT) { + if ( cancelled() ) return false; if ( ! doesRecur() ) { if ( doesFloat() ) { if ( mDtEnd.addDays( 1 ) < *startDT) return false; diff --git a/libkcal/icalformatimpl.cpp b/libkcal/icalformatimpl.cpp index 4794bc9..f349681 100644 --- a/libkcal/icalformatimpl.cpp +++ b/libkcal/icalformatimpl.cpp @@ -371,21 +371,18 @@ void ICalFormatImpl::writeIncidence(icalcomponent *parent,Incidence *incidence) incidence->relatedToUid().utf8())); } // recurrence rule stuff - Recurrence *recur = incidence->recurrence(); - if (recur->doesRecur()) { - - icalcomponent_add_property(parent,writeRecurrenceRule(recur)); - } - + if (incidence->doesRecur()) { + icalcomponent_add_property(parent,writeRecurrenceRule(incidence->recurrence())); // recurrence excpetion dates DateList dateList = incidence->exDates(); DateList::ConstIterator exIt; for(exIt = dateList.begin(); exIt != dateList.end(); ++exIt) { icalcomponent_add_property(parent,icalproperty_new_exdate( writeICalDate(*exIt))); } + } // attachments QPtrList<Attachment> attachments = incidence->attachments(); for (Attachment *at = attachments.first(); at; at = attachments.next()) @@ -1294,8 +1291,9 @@ void ICalFormatImpl::readIncidence(icalcomponent *parent,Incidence *incidence) incidence->setIDStr(kp); } // Cancel backwards compatibility mode for subsequent changes by the application + if ( readrec ) incidence->recurrence()->setCompatVersion(); // add categories incidence->setCategories(categories); diff --git a/libkcal/incidence.cpp b/libkcal/incidence.cpp index e4bcc5e..4643a3a 100644 --- a/libkcal/incidence.cpp +++ b/libkcal/incidence.cpp @@ -32,9 +32,9 @@ using namespace KCal; Incidence::Incidence() : IncidenceBase(), mRelatedTo(0), mSecrecy(SecrecyPublic), mPriority(3) { - mRecurrence = new Recurrence(this); + mRecurrence = 0;//new Recurrence(this); mCancelled = false; recreate(); mHasStartDate = true; mAlarms.setAutoDelete(true); @@ -77,9 +77,12 @@ Incidence::Incidence( const Incidence &i ) : IncidenceBase( i ) } mAlarms.setAutoDelete(true); mHasRecurrenceID = i.mHasRecurrenceID; mRecurrenceID = i.mRecurrenceID; + if ( i.mRecurrence ) mRecurrence = new Recurrence( *(i.mRecurrence), this ); + else + mRecurrence = 0; mHoliday = i.mHoliday ; mBirthday = i.mBirthday; mAnniversary = i.mAnniversary; } @@ -92,8 +95,9 @@ Incidence::~Incidence() for (ev=Relations.first();ev;ev=Relations.next()) { if (ev->relatedTo() == this) ev->setRelatedTo(0); } if (relatedTo()) relatedTo()->removeRelation(this); + if ( mRecurrence ) delete mRecurrence; } @@ -207,12 +211,26 @@ bool KCal::operator==( const Incidence& i1, const Incidence& i2 ) } } else { return false; } - if (!( *i1.recurrence() == *i2.recurrence()) ) { - qDebug("recurrence is NOT equal "); + if ( i1.mRecurrence != 0 && i2.mRecurrence != 0 ) { + if (!( *i1.mRecurrence == *i2.mRecurrence) ) { + //qDebug("recurrence is NOT equal "); + return false; + } + } else { + // one ( or both ) recurrence is 0 + if ( i1.mRecurrence == 0 ) { + if ( i2.mRecurrence != 0 && i2.mRecurrence->doesRecur() != Recurrence::rNone ) + return false; + } else { + // i1.mRecurrence != 0 + // i2.mRecurrence == 0 + if ( i1.mRecurrence->doesRecur() != Recurrence::rNone ) return false; } + } + return // i1.created() == i2.created() && stringCompare( i1.description(), i2.description() ) && stringCompare( i1.summary(), i2.summary() ) && @@ -278,9 +296,10 @@ void Incidence::cloneRelations( Incidence * newInc ) } void Incidence::setReadOnly( bool readOnly ) { IncidenceBase::setReadOnly( readOnly ); - recurrence()->setRecurReadOnly( readOnly); + if ( mRecurrence ) + mRecurrence->setRecurReadOnly( readOnly); } void Incidence::setLastModifiedSubInvalid() { mLastModifiedSub = QDateTime(); @@ -329,9 +348,11 @@ int Incidence::revision() const void Incidence::setDtStart(const QDateTime &dtStart) { QDateTime dt = getEvenTime(dtStart); - recurrence()->setRecurStart( dt); + + if ( mRecurrence ) + mRecurrence->setRecurStart( dt); IncidenceBase::setDtStart( dt ); } void Incidence::setDescription(const QString &description) @@ -503,17 +524,16 @@ void Incidence::removeRelation(Incidence *event) } bool Incidence::recursOn(const QDate &qd) const { - if (recurrence()->recursOnPure(qd) && !isException(qd)) return true; + if (mRecurrence && mRecurrence->recursOnPure(qd) && !isException(qd)) return true; else return false; } void Incidence::setExDates(const DateList &exDates) { if (mReadOnly) return; mExDates = exDates; - recurrence()->setRecurExDatesCount(mExDates.count()); updated(); } @@ -697,15 +717,21 @@ bool Incidence::isAlarmEnabled() const return true; } return false; } - -Recurrence *Incidence::recurrence() const +#include <stdlib.h> +Recurrence *Incidence::recurrence() { + if ( ! mRecurrence ) { + mRecurrence = new Recurrence(this); + qDebug("creating new recurence "); + //abort(); + } return mRecurrence; } void Incidence::setRecurrence( Recurrence * r) { + if ( mRecurrence ) delete mRecurrence; mRecurrence = r; } @@ -719,8 +745,13 @@ void Incidence::setLocation(const QString &location) QString Incidence::location() const { return mLocation; } +QString Incidence::recurrenceText() const +{ + if ( mRecurrence ) return mRecurrence->recurrenceText(); + return i18n("No"); +} ushort Incidence::doesRecur() const { if ( mRecurrence ) return mRecurrence->doesRecur(); @@ -732,14 +763,14 @@ QDateTime Incidence::getNextOccurence( const QDateTime& dt, bool* ok ) const QDateTime incidenceStart = dt; *ok = false; if ( doesRecur() ) { bool last; - recurrence()->getPreviousDateTime( incidenceStart , &last ); + mRecurrence->getPreviousDateTime( incidenceStart , &last ); int count = 0; if ( !last ) { while ( !last ) { ++count; - incidenceStart = recurrence()->getNextDateTime( incidenceStart, &last ); + incidenceStart = mRecurrence->getNextDateTime( incidenceStart, &last ); if ( recursOn( incidenceStart.date() ) ) { last = true; // exit while llop } else { if ( last ) { // no alarm on last recurrence diff --git a/libkcal/incidence.h b/libkcal/incidence.h index d4af9f0..8519f01 100644 --- a/libkcal/incidence.h +++ b/libkcal/incidence.h @@ -248,9 +248,9 @@ class Incidence : public IncidenceBase /** Return the recurrence rule associated with this incidence. If there is none, returns an appropriate (non-0) object. */ - Recurrence *recurrence() const; + Recurrence *recurrence(); void setRecurrence(Recurrence * r); /** Forward to Recurrence::doesRecur(). */ @@ -277,11 +277,13 @@ class Incidence : public IncidenceBase bool isHoliday() const; bool isBirthday() const; bool isAnniversary() const; QDateTime lastModifiedSub(); + QString recurrenceText() const; void setLastModifiedSubInvalid(); + Recurrence *mRecurrence; protected: QPtrList<Alarm> mAlarms; QPtrList<Incidence> mRelations; QDateTime mRecurrenceID; @@ -308,9 +310,8 @@ protected: int mSecrecy; int mPriority; // 1 = highest, 2 = less, etc. //QPtrList<Alarm> mAlarms; - Recurrence *mRecurrence; QString mLocation; }; diff --git a/libkcal/kincidenceformatter.cpp b/libkcal/kincidenceformatter.cpp index 9359fad..f8f40f1 100644 --- a/libkcal/kincidenceformatter.cpp +++ b/libkcal/kincidenceformatter.cpp @@ -104,9 +104,9 @@ void KIncidenceFormatter::setEvent(Event *event) addTag("b",i18n("Location: ")); mText.append(deTag(event->location())+"<br>"); } - if (event->recurrence()->doesRecur()) { + if (event->doesRecur()) { QString recurText = event->recurrence()->recurrenceText(); addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); @@ -215,9 +215,9 @@ void KIncidenceFormatter::setTodo(Todo *event ) mText += "</font>"; } - if (event->recurrence()->doesRecur()) { + if (event->doesRecur()) { QString recurText = event->recurrence()->recurrenceText(); addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>"); } diff --git a/libkcal/vcalformat.cpp b/libkcal/vcalformat.cpp index 8efc1ea..2e19740 100644 --- a/libkcal/vcalformat.cpp +++ b/libkcal/vcalformat.cpp @@ -391,9 +391,9 @@ VObject *VCalFormat::eventToVTodo(const Todo *anEvent) return vtodo; } -VObject* VCalFormat::eventToVEvent(const Event *anEvent) +VObject* VCalFormat::eventToVEvent(Event *anEvent) { VObject *vevent; QString tmpStr; @@ -458,9 +458,9 @@ VObject* VCalFormat::eventToVEvent(const Event *anEvent) } } // recurrence rule stuff - if (anEvent->recurrence()->doesRecur()) { + if (anEvent->doesRecur()) { // some more variables QPtrList<Recurrence::rMonthPos> tmpPositions; QPtrList<int> tmpDays; int *tmpDay; diff --git a/libkcal/vcalformat.h b/libkcal/vcalformat.h index c7df017..6dae3d2 100644 --- a/libkcal/vcalformat.h +++ b/libkcal/vcalformat.h @@ -73,9 +73,9 @@ class VCalFormat : public CalFormat { Event *VEventToEvent(VObject *vevent); /** translate a Event into a VTodo-type VObject and return pointer */ VObject *eventToVTodo(const Todo *anEvent); /** translate a Event into a VObject and returns a pointer to it. */ - VObject* eventToVEvent(const Event *anEvent); + VObject* eventToVEvent(Event *anEvent); /** takes a QDate and returns a string in the format YYYYMMDDTHHMMSS */ QString qDateToISO(const QDate &); /** takes a QDateTime and returns a string in format YYYYMMDDTHHMMSS */ |