-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,61 +1,63 @@ | |||
1 | Info about the changes in new versions of KDE-Pim/Pi | 1 | Info about the changes in new versions of KDE-Pim/Pi |
2 | 2 | ||
3 | ********** VERSION 2.0.8 ************ | 3 | ********** VERSION 2.0.8 ************ |
4 | 4 | ||
5 | Fixed a problem in dependency info in the ipk files for the Zaurus. | 5 | Fixed a problem in dependency info in the ipk files for the Zaurus. |
6 | 6 | ||
7 | 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. | 7 | 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. |
8 | 8 | ||
9 | Added a "go today" button to the datepicker. | 9 | Added a "go today" button to the datepicker. |
10 | 10 | ||
11 | Added "created" and "last modified" to event/todo viewer (and What'sThis viewer) | 11 | Added "created" and "last modified" to event/todo viewer (and What'sThis viewer) |
12 | and made it configureable to show these values. | 12 | and made it configureable to show these values. |
13 | 13 | ||
14 | Fixed a problem for events (from external iCal files) that do have a duration but no end date. | ||
15 | |||
14 | 16 | ||
15 | ********** VERSION 2.0.7 ************ | 17 | ********** VERSION 2.0.7 ************ |
16 | 18 | ||
17 | Added global application font settings | 19 | Added global application font settings |
18 | (for all KDE-Pim/Pi apps) to the general settings. | 20 | (for all KDE-Pim/Pi apps) to the general settings. |
19 | 21 | ||
20 | Fixed a problem in OM/Pi when trying to login to some IMAP servers | 22 | Fixed a problem in OM/Pi when trying to login to some IMAP servers |
21 | (like the IMAP server of Apple: mail.mac.com ) | 23 | (like the IMAP server of Apple: mail.mac.com ) |
22 | 24 | ||
23 | Added recurring todos to KO/Pi. | 25 | Added recurring todos to KO/Pi. |
24 | 26 | ||
25 | 27 | ||
26 | ********** VERSION 2.0.6 ************ | 28 | ********** VERSION 2.0.6 ************ |
27 | 29 | ||
28 | Some bugfixes in the pi-sync mode. | 30 | Some bugfixes in the pi-sync mode. |
29 | Added German translation for pi-sync mode. | 31 | Added German translation for pi-sync mode. |
30 | 32 | ||
31 | KO/Pi: | 33 | KO/Pi: |
32 | Made the todolist using alternate background. | 34 | Made the todolist using alternate background. |
33 | 35 | ||
34 | Other minor fixes in KO/Pi. | 36 | Other minor fixes in KO/Pi. |
35 | 37 | ||
36 | 38 | ||
37 | ********** VERSION 2.0.5 ************ | 39 | ********** VERSION 2.0.5 ************ |
38 | 40 | ||
39 | Bugfixes in KO/Pi. | 41 | Bugfixes in KO/Pi. |
40 | 42 | ||
41 | ********** VERSION 2.0.4 ************ | 43 | ********** VERSION 2.0.4 ************ |
42 | 44 | ||
43 | KO/Pi: | 45 | KO/Pi: |
44 | Fixed problem loading translations for summary/location edit boxes in event/todo editor. | 46 | Fixed problem loading translations for summary/location edit boxes in event/todo editor. |
45 | 47 | ||
46 | Added a general "select week number" to the toolbar. | 48 | Added a general "select week number" to the toolbar. |
47 | 49 | ||
48 | Fixed some small problem of the new features introduced in version 2.0.3. | 50 | Fixed some small problem of the new features introduced in version 2.0.3. |
49 | 51 | ||
50 | Made it possible to specify one specific category as category color, | 52 | Made it possible to specify one specific category as category color, |
51 | if more than one categories are selected. | 53 | if more than one categories are selected. |
52 | 54 | ||
53 | Fixed a bug in saving colors for categories with non-ascii characters. | 55 | Fixed a bug in saving colors for categories with non-ascii characters. |
54 | (Like, e.g. German Umlauts). | 56 | (Like, e.g. German Umlauts). |
55 | Propably you have to set your colors again for those categories. | 57 | Propably you have to set your colors again for those categories. |
56 | 58 | ||
57 | 59 | ||
58 | ********** VERSION 2.0.3 ************ | 60 | ********** VERSION 2.0.3 ************ |
59 | 61 | ||
60 | KO/Pi: | 62 | KO/Pi: |
61 | Added feature for changing alarm settings for many items at once: | 63 | Added feature for changing alarm settings for many items at once: |
diff --git a/libkcal/icalformatimpl.cpp b/libkcal/icalformatimpl.cpp index 2e38ae3..eae41aa 100644 --- a/libkcal/icalformatimpl.cpp +++ b/libkcal/icalformatimpl.cpp | |||
@@ -363,101 +363,101 @@ void ICalFormatImpl::writeIncidence(icalcomponent *parent,Incidence *incidence) | |||
363 | icalcomponent_add_property(parent,icalproperty_new_categories( | 363 | icalcomponent_add_property(parent,icalproperty_new_categories( |
364 | writeText(incidence->getCategories().join(";")))); | 364 | writeText(incidence->getCategories().join(";")))); |
365 | } | 365 | } |
366 | */ | 366 | */ |
367 | 367 | ||
368 | // related event | 368 | // related event |
369 | if (incidence->relatedTo()) { | 369 | if (incidence->relatedTo()) { |
370 | icalcomponent_add_property(parent,icalproperty_new_relatedto( | 370 | icalcomponent_add_property(parent,icalproperty_new_relatedto( |
371 | incidence->relatedTo()->uid().utf8())); | 371 | incidence->relatedTo()->uid().utf8())); |
372 | } | 372 | } |
373 | 373 | ||
374 | // recurrence rule stuff | 374 | // recurrence rule stuff |
375 | Recurrence *recur = incidence->recurrence(); | 375 | Recurrence *recur = incidence->recurrence(); |
376 | if (recur->doesRecur()) { | 376 | if (recur->doesRecur()) { |
377 | 377 | ||
378 | icalcomponent_add_property(parent,writeRecurrenceRule(recur)); | 378 | icalcomponent_add_property(parent,writeRecurrenceRule(recur)); |
379 | } | 379 | } |
380 | 380 | ||
381 | // recurrence excpetion dates | 381 | // recurrence excpetion dates |
382 | DateList dateList = incidence->exDates(); | 382 | DateList dateList = incidence->exDates(); |
383 | DateList::ConstIterator exIt; | 383 | DateList::ConstIterator exIt; |
384 | for(exIt = dateList.begin(); exIt != dateList.end(); ++exIt) { | 384 | for(exIt = dateList.begin(); exIt != dateList.end(); ++exIt) { |
385 | icalcomponent_add_property(parent,icalproperty_new_exdate( | 385 | icalcomponent_add_property(parent,icalproperty_new_exdate( |
386 | writeICalDate(*exIt))); | 386 | writeICalDate(*exIt))); |
387 | } | 387 | } |
388 | 388 | ||
389 | // attachments | 389 | // attachments |
390 | QPtrList<Attachment> attachments = incidence->attachments(); | 390 | QPtrList<Attachment> attachments = incidence->attachments(); |
391 | for (Attachment *at = attachments.first(); at; at = attachments.next()) | 391 | for (Attachment *at = attachments.first(); at; at = attachments.next()) |
392 | icalcomponent_add_property(parent,writeAttachment(at)); | 392 | icalcomponent_add_property(parent,writeAttachment(at)); |
393 | 393 | ||
394 | // alarms | 394 | // alarms |
395 | QPtrList<Alarm> alarms = incidence->alarms(); | 395 | QPtrList<Alarm> alarms = incidence->alarms(); |
396 | Alarm* alarm; | 396 | Alarm* alarm; |
397 | for (alarm = alarms.first(); alarm; alarm = alarms.next()) { | 397 | for (alarm = alarms.first(); alarm; alarm = alarms.next()) { |
398 | if (alarm->enabled()) { | 398 | if (alarm->enabled()) { |
399 | kdDebug(5800) << "Write alarm for " << incidence->summary() << endl; | 399 | kdDebug(5800) << "Write alarm for " << incidence->summary() << endl; |
400 | icalcomponent_add_component(parent,writeAlarm(alarm)); | 400 | icalcomponent_add_component(parent,writeAlarm(alarm)); |
401 | } | 401 | } |
402 | } | 402 | } |
403 | if( incidence->hasRecurrenceID() ) { | 403 | if( incidence->hasRecurrenceID() ) { |
404 | icalcomponent_add_property(parent, | 404 | icalcomponent_add_property(parent, |
405 | icalproperty_new_recurrenceid( writeICalDateTime( incidence->recurrenceID()))); | 405 | icalproperty_new_recurrenceid( writeICalDateTime( incidence->recurrenceID()))); |
406 | } | 406 | } |
407 | // duration | 407 | // duration |
408 | 408 | ||
409 | // turned off as it always is set to PTS0 (and must not occur together with DTEND | 409 | // turned off as it always is set to PTS0 (and must not occur together with DTEND |
410 | 410 | ||
411 | // if (incidence->hasDuration()) { | 411 | if (incidence->hasDuration()) { |
412 | // icaldurationtype duration; | 412 | icaldurationtype duration; |
413 | // duration = writeICalDuration(incidence->duration()); | 413 | duration = writeICalDuration(incidence->duration()); |
414 | // icalcomponent_add_property(parent,icalproperty_new_duration(duration)); | 414 | icalcomponent_add_property(parent,icalproperty_new_duration(duration)); |
415 | // } | 415 | } |
416 | } | 416 | } |
417 | 417 | ||
418 | void ICalFormatImpl::writeIncidenceBase(icalcomponent *parent,IncidenceBase *incidenceBase) | 418 | void ICalFormatImpl::writeIncidenceBase(icalcomponent *parent,IncidenceBase *incidenceBase) |
419 | { | 419 | { |
420 | icalcomponent_add_property(parent,icalproperty_new_dtstamp( | 420 | icalcomponent_add_property(parent,icalproperty_new_dtstamp( |
421 | writeICalDateTime(QDateTime::currentDateTime()))); | 421 | writeICalDateTime(QDateTime::currentDateTime()))); |
422 | 422 | ||
423 | // organizer stuff | 423 | // organizer stuff |
424 | icalcomponent_add_property(parent,icalproperty_new_organizer( | 424 | icalcomponent_add_property(parent,icalproperty_new_organizer( |
425 | ("MAILTO:" + incidenceBase->organizer()).utf8())); | 425 | ("MAILTO:" + incidenceBase->organizer()).utf8())); |
426 | 426 | ||
427 | // attendees | 427 | // attendees |
428 | if (incidenceBase->attendeeCount() != 0) { | 428 | if (incidenceBase->attendeeCount() != 0) { |
429 | QPtrList<Attendee> al = incidenceBase->attendees(); | 429 | QPtrList<Attendee> al = incidenceBase->attendees(); |
430 | QPtrListIterator<Attendee> ai(al); | 430 | QPtrListIterator<Attendee> ai(al); |
431 | for (; ai.current(); ++ai) { | 431 | for (; ai.current(); ++ai) { |
432 | icalcomponent_add_property(parent,writeAttendee(ai.current())); | 432 | icalcomponent_add_property(parent,writeAttendee(ai.current())); |
433 | } | 433 | } |
434 | } | 434 | } |
435 | 435 | ||
436 | // custom properties | 436 | // custom properties |
437 | writeCustomProperties(parent, incidenceBase); | 437 | writeCustomProperties(parent, incidenceBase); |
438 | } | 438 | } |
439 | 439 | ||
440 | void ICalFormatImpl::writeCustomProperties(icalcomponent *parent,CustomProperties *properties) | 440 | void ICalFormatImpl::writeCustomProperties(icalcomponent *parent,CustomProperties *properties) |
441 | { | 441 | { |
442 | QMap<QCString, QString> custom = properties->customProperties(); | 442 | QMap<QCString, QString> custom = properties->customProperties(); |
443 | for (QMap<QCString, QString>::Iterator c = custom.begin(); c != custom.end(); ++c) { | 443 | for (QMap<QCString, QString>::Iterator c = custom.begin(); c != custom.end(); ++c) { |
444 | icalproperty *p = icalproperty_new_x(c.data().utf8()); | 444 | icalproperty *p = icalproperty_new_x(c.data().utf8()); |
445 | icalproperty_set_x_name(p,c.key()); | 445 | icalproperty_set_x_name(p,c.key()); |
446 | icalcomponent_add_property(parent,p); | 446 | icalcomponent_add_property(parent,p); |
447 | } | 447 | } |
448 | } | 448 | } |
449 | 449 | ||
450 | icalproperty *ICalFormatImpl::writeAttendee(Attendee *attendee) | 450 | icalproperty *ICalFormatImpl::writeAttendee(Attendee *attendee) |
451 | { | 451 | { |
452 | icalproperty *p = icalproperty_new_attendee("mailto:" + attendee->email().utf8()); | 452 | icalproperty *p = icalproperty_new_attendee("mailto:" + attendee->email().utf8()); |
453 | 453 | ||
454 | if (!attendee->name().isEmpty()) { | 454 | if (!attendee->name().isEmpty()) { |
455 | icalproperty_add_parameter(p,icalparameter_new_cn(attendee->name().utf8())); | 455 | icalproperty_add_parameter(p,icalparameter_new_cn(attendee->name().utf8())); |
456 | } | 456 | } |
457 | 457 | ||
458 | 458 | ||
459 | icalproperty_add_parameter(p,icalparameter_new_rsvp( | 459 | icalproperty_add_parameter(p,icalparameter_new_rsvp( |
460 | attendee->RSVP() ? ICAL_RSVP_TRUE : ICAL_RSVP_FALSE )); | 460 | attendee->RSVP() ? ICAL_RSVP_TRUE : ICAL_RSVP_FALSE )); |
461 | 461 | ||
462 | icalparameter_partstat status = ICAL_PARTSTAT_NEEDSACTION; | 462 | icalparameter_partstat status = ICAL_PARTSTAT_NEEDSACTION; |
463 | switch (attendee->status()) { | 463 | switch (attendee->status()) { |
@@ -1724,107 +1724,108 @@ icaltimetype ICalFormatImpl::writeICalDateTime(const QDateTime &dt ) | |||
1724 | datetime = dt; | 1724 | datetime = dt; |
1725 | t.is_utc = 0; | 1725 | t.is_utc = 0; |
1726 | 1726 | ||
1727 | } | 1727 | } |
1728 | t.year = datetime.date().year(); | 1728 | t.year = datetime.date().year(); |
1729 | t.month = datetime.date().month(); | 1729 | t.month = datetime.date().month(); |
1730 | t.day = datetime.date().day(); | 1730 | t.day = datetime.date().day(); |
1731 | 1731 | ||
1732 | t.hour = datetime.time().hour(); | 1732 | t.hour = datetime.time().hour(); |
1733 | t.minute = datetime.time().minute(); | 1733 | t.minute = datetime.time().minute(); |
1734 | t.second = datetime.time().second(); | 1734 | t.second = datetime.time().second(); |
1735 | 1735 | ||
1736 | //qDebug("*** time %s localtime %s ",dt .toString().latin1() ,datetime .toString().latin1() ); | 1736 | //qDebug("*** time %s localtime %s ",dt .toString().latin1() ,datetime .toString().latin1() ); |
1737 | 1737 | ||
1738 | // if ( mParent->utc() ) { | 1738 | // if ( mParent->utc() ) { |
1739 | // datetime = KGlobal::locale()->localTime( dt ); | 1739 | // datetime = KGlobal::locale()->localTime( dt ); |
1740 | // qDebug("*** time %s localtime %s ",dt .toString().latin1() ,datetime .toString().latin1() ); | 1740 | // qDebug("*** time %s localtime %s ",dt .toString().latin1() ,datetime .toString().latin1() ); |
1741 | // if (mParent->timeZoneId().isEmpty()) | 1741 | // if (mParent->timeZoneId().isEmpty()) |
1742 | // t = icaltime_as_utc(t, 0); | 1742 | // t = icaltime_as_utc(t, 0); |
1743 | // else | 1743 | // else |
1744 | // t = icaltime_as_utc(t,mParent->timeZoneId().local8Bit()); | 1744 | // t = icaltime_as_utc(t,mParent->timeZoneId().local8Bit()); |
1745 | // } | 1745 | // } |
1746 | 1746 | ||
1747 | return t; | 1747 | return t; |
1748 | } | 1748 | } |
1749 | 1749 | ||
1750 | QDateTime ICalFormatImpl::readICalDateTime(icaltimetype t) | 1750 | QDateTime ICalFormatImpl::readICalDateTime(icaltimetype t) |
1751 | { | 1751 | { |
1752 | QDateTime dt (QDate(t.year,t.month,t.day), | 1752 | QDateTime dt (QDate(t.year,t.month,t.day), |
1753 | QTime(t.hour,t.minute,t.second) ); | 1753 | QTime(t.hour,t.minute,t.second) ); |
1754 | 1754 | ||
1755 | if (t.is_utc) { | 1755 | if (t.is_utc) { |
1756 | int offset = KGlobal::locale()->localTimeOffset( dt ); | 1756 | int offset = KGlobal::locale()->localTimeOffset( dt ); |
1757 | dt = dt.addSecs ( offset*60); | 1757 | dt = dt.addSecs ( offset*60); |
1758 | } | 1758 | } |
1759 | 1759 | ||
1760 | return dt; | 1760 | return dt; |
1761 | } | 1761 | } |
1762 | 1762 | ||
1763 | QDate ICalFormatImpl::readICalDate(icaltimetype t) | 1763 | QDate ICalFormatImpl::readICalDate(icaltimetype t) |
1764 | { | 1764 | { |
1765 | return QDate(t.year,t.month,t.day); | 1765 | return QDate(t.year,t.month,t.day); |
1766 | } | 1766 | } |
1767 | 1767 | ||
1768 | icaldurationtype ICalFormatImpl::writeICalDuration(int seconds) | 1768 | icaldurationtype ICalFormatImpl::writeICalDuration(int seconds) |
1769 | { | 1769 | { |
1770 | icaldurationtype d; | 1770 | icaldurationtype d; |
1771 | 1771 | ||
1772 | d.weeks = seconds % gSecondsPerWeek; | 1772 | d.is_neg = (seconds<0)?1:0; |
1773 | seconds -= d.weeks * gSecondsPerWeek; | 1773 | if (seconds<0) seconds = -seconds; |
1774 | d.days = seconds % gSecondsPerDay; | 1774 | |
1775 | seconds -= d.days * gSecondsPerDay; | 1775 | d.weeks = seconds / gSecondsPerWeek; |
1776 | d.hours = seconds % gSecondsPerHour; | 1776 | seconds %= gSecondsPerWeek; |
1777 | seconds -= d.hours * gSecondsPerHour; | 1777 | d.days = seconds / gSecondsPerDay; |
1778 | d.minutes = seconds % gSecondsPerMinute; | 1778 | seconds %= gSecondsPerDay; |
1779 | seconds -= d.minutes * gSecondsPerMinute; | 1779 | d.hours = seconds / gSecondsPerHour; |
1780 | seconds %= gSecondsPerHour; | ||
1781 | d.minutes = seconds / gSecondsPerMinute; | ||
1782 | seconds %= gSecondsPerMinute; | ||
1780 | d.seconds = seconds; | 1783 | d.seconds = seconds; |
1781 | d.is_neg = 0; | ||
1782 | |||
1783 | return d; | 1784 | return d; |
1784 | } | 1785 | } |
1785 | 1786 | ||
1786 | int ICalFormatImpl::readICalDuration(icaldurationtype d) | 1787 | int ICalFormatImpl::readICalDuration(icaldurationtype d) |
1787 | { | 1788 | { |
1788 | int result = 0; | 1789 | int result = 0; |
1789 | 1790 | ||
1790 | result += d.weeks * gSecondsPerWeek; | 1791 | result += d.weeks * gSecondsPerWeek; |
1791 | result += d.days * gSecondsPerDay; | 1792 | result += d.days * gSecondsPerDay; |
1792 | result += d.hours * gSecondsPerHour; | 1793 | result += d.hours * gSecondsPerHour; |
1793 | result += d.minutes * gSecondsPerMinute; | 1794 | result += d.minutes * gSecondsPerMinute; |
1794 | result += d.seconds; | 1795 | result += d.seconds; |
1795 | 1796 | ||
1796 | if (d.is_neg) result *= -1; | 1797 | if (d.is_neg) result *= -1; |
1797 | 1798 | ||
1798 | return result; | 1799 | return result; |
1799 | } | 1800 | } |
1800 | 1801 | ||
1801 | icalcomponent *ICalFormatImpl::createCalendarComponent(Calendar *cal) | 1802 | icalcomponent *ICalFormatImpl::createCalendarComponent(Calendar *cal) |
1802 | { | 1803 | { |
1803 | icalcomponent *calendar; | 1804 | icalcomponent *calendar; |
1804 | 1805 | ||
1805 | // Root component | 1806 | // Root component |
1806 | calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); | 1807 | calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); |
1807 | 1808 | ||
1808 | icalproperty *p; | 1809 | icalproperty *p; |
1809 | 1810 | ||
1810 | // Product Identifier | 1811 | // Product Identifier |
1811 | p = icalproperty_new_prodid(CalFormat::productId().utf8()); | 1812 | p = icalproperty_new_prodid(CalFormat::productId().utf8()); |
1812 | icalcomponent_add_property(calendar,p); | 1813 | icalcomponent_add_property(calendar,p); |
1813 | 1814 | ||
1814 | // TODO: Add time zone | 1815 | // TODO: Add time zone |
1815 | 1816 | ||
1816 | // iCalendar version (2.0) | 1817 | // iCalendar version (2.0) |
1817 | p = icalproperty_new_version(const_cast<char *>(_ICAL_VERSION)); | 1818 | p = icalproperty_new_version(const_cast<char *>(_ICAL_VERSION)); |
1818 | icalcomponent_add_property(calendar,p); | 1819 | icalcomponent_add_property(calendar,p); |
1819 | 1820 | ||
1820 | // Custom properties | 1821 | // Custom properties |
1821 | if( cal != 0 ) | 1822 | if( cal != 0 ) |
1822 | writeCustomProperties(calendar, cal); | 1823 | writeCustomProperties(calendar, cal); |
1823 | 1824 | ||
1824 | return calendar; | 1825 | return calendar; |
1825 | } | 1826 | } |
1826 | 1827 | ||
1827 | 1828 | ||
1828 | 1829 | ||
1829 | // take a raw vcalendar (i.e. from a file on disk, clipboard, etc. etc. | 1830 | // take a raw vcalendar (i.e. from a file on disk, clipboard, etc. etc. |
1830 | // and break it down from its tree-like format into the dictionary format | 1831 | // and break it down from its tree-like format into the dictionary format |
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index 51f2e9d..1e99082 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp | |||
@@ -61,103 +61,110 @@ IncidenceBase::IncidenceBase(const IncidenceBase &i) : | |||
61 | } | 61 | } |
62 | mFloats = i.mFloats; | 62 | mFloats = i.mFloats; |
63 | mLastModified = i.mLastModified; | 63 | mLastModified = i.mLastModified; |
64 | mPilotId = i.mPilotId; | 64 | mPilotId = i.mPilotId; |
65 | mTempSyncStat = i.mTempSyncStat; | 65 | mTempSyncStat = i.mTempSyncStat; |
66 | mSyncStatus = i.mSyncStatus; | 66 | mSyncStatus = i.mSyncStatus; |
67 | mExternalId = i.mExternalId; | 67 | mExternalId = i.mExternalId; |
68 | // The copied object is a new one, so it isn't observed by the observer | 68 | // The copied object is a new one, so it isn't observed by the observer |
69 | // of the original object. | 69 | // of the original object. |
70 | mObservers.clear(); | 70 | mObservers.clear(); |
71 | 71 | ||
72 | mAttendees.setAutoDelete( true ); | 72 | mAttendees.setAutoDelete( true ); |
73 | } | 73 | } |
74 | 74 | ||
75 | IncidenceBase::~IncidenceBase() | 75 | IncidenceBase::~IncidenceBase() |
76 | { | 76 | { |
77 | } | 77 | } |
78 | 78 | ||
79 | 79 | ||
80 | bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) | 80 | bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) |
81 | { | 81 | { |
82 | // do not compare mSyncStatus and mExternalId | 82 | // do not compare mSyncStatus and mExternalId |
83 | if( i1.attendees().count() != i2.attendees().count() ) { | 83 | if( i1.attendees().count() != i2.attendees().count() ) { |
84 | return false; // no need to check further | 84 | return false; // no need to check further |
85 | } | 85 | } |
86 | if ( i1.attendees().count() > 0 ) { | 86 | if ( i1.attendees().count() > 0 ) { |
87 | Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; | 87 | Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; |
88 | while ( a1 ) { | 88 | while ( a1 ) { |
89 | if ( !( (*a1) == (*a2)) ) | 89 | if ( !( (*a1) == (*a2)) ) |
90 | { | 90 | { |
91 | //qDebug("Attendee not equal "); | 91 | //qDebug("Attendee not equal "); |
92 | return false; | 92 | return false; |
93 | } | 93 | } |
94 | a1 = i1.attendees().next(); | 94 | a1 = i1.attendees().next(); |
95 | a2 = i2.attendees().next(); | 95 | a2 = i2.attendees().next(); |
96 | } | 96 | } |
97 | } | 97 | } |
98 | //if ( i1.dtStart() != i2.dtStart() ) | 98 | //if ( i1.dtStart() != i2.dtStart() ) |
99 | // return false; | 99 | // return false; |
100 | #if 0 | 100 | #if 0 |
101 | qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); | 101 | qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); |
102 | qDebug("1 %d ",i1.duration() == i2.duration() ); | 102 | qDebug("1 %d ",i1.duration() == i2.duration() ); |
103 | qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); | 103 | qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); |
104 | qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); | 104 | qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); |
105 | qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); | 105 | qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); |
106 | qDebug("6 %d ",i1.organizer() == i2.organizer() ); | 106 | qDebug("6 %d ",i1.organizer() == i2.organizer() ); |
107 | 107 | ||
108 | #endif | 108 | #endif |
109 | if ( i1.hasDuration() == i2.hasDuration() ) { | ||
110 | if ( i1.hasDuration() ) { | ||
111 | if ( i1.duration() != i2.duration() ) | ||
112 | return false; | ||
113 | } | ||
114 | } else { | ||
115 | return false; | ||
116 | } | ||
117 | |||
109 | return ( i1.organizer() == i2.organizer() && | 118 | return ( i1.organizer() == i2.organizer() && |
110 | // i1.uid() == i2.uid() && | 119 | // i1.uid() == i2.uid() && |
111 | // Don't compare lastModified, otherwise the operator is not | 120 | // Don't compare lastModified, otherwise the operator is not |
112 | // of much use. We are not comparing for identity, after all. | 121 | // of much use. We are not comparing for identity, after all. |
113 | i1.doesFloat() == i2.doesFloat() && | 122 | i1.doesFloat() == i2.doesFloat() && |
114 | i1.duration() == i2.duration() && | ||
115 | i1.hasDuration() == i2.hasDuration() && | ||
116 | i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); | 123 | i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); |
117 | // no need to compare mObserver | 124 | // no need to compare mObserver |
118 | } | 125 | } |
119 | 126 | ||
120 | 127 | ||
121 | QDateTime IncidenceBase::getEvenTime( QDateTime dt ) | 128 | QDateTime IncidenceBase::getEvenTime( QDateTime dt ) |
122 | { | 129 | { |
123 | QTime t = dt.time(); | 130 | QTime t = dt.time(); |
124 | dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); | 131 | dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); |
125 | return dt; | 132 | return dt; |
126 | } | 133 | } |
127 | 134 | ||
128 | 135 | ||
129 | void IncidenceBase::setUid(const QString &uid) | 136 | void IncidenceBase::setUid(const QString &uid) |
130 | { | 137 | { |
131 | mUid = uid; | 138 | mUid = uid; |
132 | updated(); | 139 | updated(); |
133 | } | 140 | } |
134 | 141 | ||
135 | QString IncidenceBase::uid() const | 142 | QString IncidenceBase::uid() const |
136 | { | 143 | { |
137 | return mUid; | 144 | return mUid; |
138 | } | 145 | } |
139 | 146 | ||
140 | void IncidenceBase::setLastModified(const QDateTime &lm) | 147 | void IncidenceBase::setLastModified(const QDateTime &lm) |
141 | { | 148 | { |
142 | // DON'T! updated() because we call this from | 149 | // DON'T! updated() because we call this from |
143 | // Calendar::updateEvent(). | 150 | // Calendar::updateEvent(). |
144 | mLastModified = getEvenTime(lm); | 151 | mLastModified = getEvenTime(lm); |
145 | //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1()); | 152 | //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1()); |
146 | } | 153 | } |
147 | 154 | ||
148 | QDateTime IncidenceBase::lastModified() const | 155 | QDateTime IncidenceBase::lastModified() const |
149 | { | 156 | { |
150 | return mLastModified; | 157 | return mLastModified; |
151 | } | 158 | } |
152 | 159 | ||
153 | void IncidenceBase::setOrganizer(const QString &o) | 160 | void IncidenceBase::setOrganizer(const QString &o) |
154 | { | 161 | { |
155 | // we don't check for readonly here, because it is | 162 | // we don't check for readonly here, because it is |
156 | // possible that by setting the organizer we are changing | 163 | // possible that by setting the organizer we are changing |
157 | // the event's readonly status... | 164 | // the event's readonly status... |
158 | mOrganizer = o; | 165 | mOrganizer = o; |
159 | if (mOrganizer.left(7).upper() == "MAILTO:") | 166 | if (mOrganizer.left(7).upper() == "MAILTO:") |
160 | mOrganizer = mOrganizer.remove(0,7); | 167 | mOrganizer = mOrganizer.remove(0,7); |
161 | 168 | ||
162 | updated(); | 169 | updated(); |
163 | } | 170 | } |