-rw-r--r-- | bin/kdepim/WhatsNew.txt | 2 | ||||
-rw-r--r-- | libkcal/icalformatimpl.cpp | 31 | ||||
-rw-r--r-- | libkcal/incidencebase.cpp | 11 |
3 files changed, 27 insertions, 17 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt index 06aa5f6..01d9e27 100644 --- a/bin/kdepim/WhatsNew.txt +++ b/bin/kdepim/WhatsNew.txt @@ -1,37 +1,39 @@ Info about the changes in new versions of KDE-Pim/Pi ********** VERSION 2.0.8 ************ Fixed a problem in dependency info in the ipk files for the Zaurus. Added icon for the stealth new week view and made navigation more user friendly in monthview by adding a prev/next week button to the navigator bar. Added a "go today" button to the datepicker. Added "created" and "last modified" to event/todo viewer (and What'sThis viewer) and made it configureable to show these values. +Fixed a problem for events (from external iCal files) that do have a duration but no end date. + ********** VERSION 2.0.7 ************ Added global application font settings (for all KDE-Pim/Pi apps) to the general settings. Fixed a problem in OM/Pi when trying to login to some IMAP servers (like the IMAP server of Apple: mail.mac.com ) Added recurring todos to KO/Pi. ********** VERSION 2.0.6 ************ Some bugfixes in the pi-sync mode. Added German translation for pi-sync mode. KO/Pi: Made the todolist using alternate background. Other minor fixes in KO/Pi. ********** VERSION 2.0.5 ************ diff --git a/libkcal/icalformatimpl.cpp b/libkcal/icalformatimpl.cpp index 2e38ae3..eae41aa 100644 --- a/libkcal/icalformatimpl.cpp +++ b/libkcal/icalformatimpl.cpp @@ -387,53 +387,53 @@ void ICalFormatImpl::writeIncidence(icalcomponent *parent,Incidence *incidence) } // attachments QPtrList<Attachment> attachments = incidence->attachments(); for (Attachment *at = attachments.first(); at; at = attachments.next()) icalcomponent_add_property(parent,writeAttachment(at)); // alarms QPtrList<Alarm> alarms = incidence->alarms(); Alarm* alarm; for (alarm = alarms.first(); alarm; alarm = alarms.next()) { if (alarm->enabled()) { kdDebug(5800) << "Write alarm for " << incidence->summary() << endl; icalcomponent_add_component(parent,writeAlarm(alarm)); } } if( incidence->hasRecurrenceID() ) { icalcomponent_add_property(parent, icalproperty_new_recurrenceid( writeICalDateTime( incidence->recurrenceID()))); } // duration // turned off as it always is set to PTS0 (and must not occur together with DTEND -// if (incidence->hasDuration()) { -// icaldurationtype duration; -// duration = writeICalDuration(incidence->duration()); -// icalcomponent_add_property(parent,icalproperty_new_duration(duration)); -// } + if (incidence->hasDuration()) { + icaldurationtype duration; + duration = writeICalDuration(incidence->duration()); + icalcomponent_add_property(parent,icalproperty_new_duration(duration)); + } } void ICalFormatImpl::writeIncidenceBase(icalcomponent *parent,IncidenceBase *incidenceBase) { icalcomponent_add_property(parent,icalproperty_new_dtstamp( writeICalDateTime(QDateTime::currentDateTime()))); // organizer stuff icalcomponent_add_property(parent,icalproperty_new_organizer( ("MAILTO:" + incidenceBase->organizer()).utf8())); // attendees if (incidenceBase->attendeeCount() != 0) { QPtrList<Attendee> al = incidenceBase->attendees(); QPtrListIterator<Attendee> ai(al); for (; ai.current(); ++ai) { icalcomponent_add_property(parent,writeAttendee(ai.current())); } } // custom properties writeCustomProperties(parent, incidenceBase); } @@ -1748,59 +1748,60 @@ icaltimetype ICalFormatImpl::writeICalDateTime(const QDateTime &dt ) } QDateTime ICalFormatImpl::readICalDateTime(icaltimetype t) { QDateTime dt (QDate(t.year,t.month,t.day), QTime(t.hour,t.minute,t.second) ); if (t.is_utc) { int offset = KGlobal::locale()->localTimeOffset( dt ); dt = dt.addSecs ( offset*60); } return dt; } QDate ICalFormatImpl::readICalDate(icaltimetype t) { return QDate(t.year,t.month,t.day); } icaldurationtype ICalFormatImpl::writeICalDuration(int seconds) { icaldurationtype d; - d.weeks = seconds % gSecondsPerWeek; - seconds -= d.weeks * gSecondsPerWeek; - d.days = seconds % gSecondsPerDay; - seconds -= d.days * gSecondsPerDay; - d.hours = seconds % gSecondsPerHour; - seconds -= d.hours * gSecondsPerHour; - d.minutes = seconds % gSecondsPerMinute; - seconds -= d.minutes * gSecondsPerMinute; + d.is_neg = (seconds<0)?1:0; + if (seconds<0) seconds = -seconds; + + d.weeks = seconds / gSecondsPerWeek; + seconds %= gSecondsPerWeek; + d.days = seconds / gSecondsPerDay; + seconds %= gSecondsPerDay; + d.hours = seconds / gSecondsPerHour; + seconds %= gSecondsPerHour; + d.minutes = seconds / gSecondsPerMinute; + seconds %= gSecondsPerMinute; d.seconds = seconds; - d.is_neg = 0; - return d; } int ICalFormatImpl::readICalDuration(icaldurationtype d) { int result = 0; result += d.weeks * gSecondsPerWeek; result += d.days * gSecondsPerDay; result += d.hours * gSecondsPerHour; result += d.minutes * gSecondsPerMinute; result += d.seconds; if (d.is_neg) result *= -1; return result; } icalcomponent *ICalFormatImpl::createCalendarComponent(Calendar *cal) { icalcomponent *calendar; // Root component calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index 51f2e9d..1e99082 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp @@ -85,55 +85,62 @@ bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) } if ( i1.attendees().count() > 0 ) { Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; while ( a1 ) { if ( !( (*a1) == (*a2)) ) { //qDebug("Attendee not equal "); return false; } a1 = i1.attendees().next(); a2 = i2.attendees().next(); } } //if ( i1.dtStart() != i2.dtStart() ) // return false; #if 0 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); qDebug("1 %d ",i1.duration() == i2.duration() ); qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); qDebug("6 %d ",i1.organizer() == i2.organizer() ); #endif + if ( i1.hasDuration() == i2.hasDuration() ) { + if ( i1.hasDuration() ) { + if ( i1.duration() != i2.duration() ) + return false; + } + } else { + return false; + } + return ( i1.organizer() == i2.organizer() && // i1.uid() == i2.uid() && // Don't compare lastModified, otherwise the operator is not // of much use. We are not comparing for identity, after all. i1.doesFloat() == i2.doesFloat() && - i1.duration() == i2.duration() && - i1.hasDuration() == i2.hasDuration() && i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); // no need to compare mObserver } QDateTime IncidenceBase::getEvenTime( QDateTime dt ) { QTime t = dt.time(); dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); return dt; } void IncidenceBase::setUid(const QString &uid) { mUid = uid; updated(); } QString IncidenceBase::uid() const { return mUid; } |