summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt3
-rw-r--r--libkcal/icalformatimpl.cpp3
2 files changed, 6 insertions, 0 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 52590d8..21cee6e 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,77 +1,80 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.1.17 ************ 3********** VERSION 2.1.17 ************
4 4
5KO/Pi: 5KO/Pi:
6Added option to display times in What's Next View on two lines. 6Added option to display times in What's Next View on two lines.
7(Useful for display on the Zaurus with 240x320 screen) 7(Useful for display on the Zaurus with 240x320 screen)
8Removed "Allday" for allday events of one day duration in What's Next View. 8Removed "Allday" for allday events of one day duration in What's Next View.
9Added date range for allday events of more than one day duration in What's Next View. 9Added date range for allday events of more than one day duration in What's Next View.
10Fixed two problems in the data importing from Outlook: 10Fixed two problems in the data importing from Outlook:
11 Fixed the duplicated import if the summary, location or description had whitespaces at the end. 11 Fixed the duplicated import if the summary, location or description had whitespaces at the end.
12 Fixed a problem importing certain recurrence rules. 12 Fixed a problem importing certain recurrence rules.
13 13
14A journal in an ics file may have no dtStart value (as files from KNotes, which stores its notes in an ics journal file).
15If now a journal has no dtStart value the dtStart value is set to the created value of the journal when loading the file. That makes it possible to view and edit "notes" from KNotes. Simply add another Resource in KO/Pi which is a copy of the ics file from KNotes. You will find the "notes" in KO/Pi as a journal entry on the date you created it.
16
14********** VERSION 2.1.16 ************ 17********** VERSION 2.1.16 ************
15 18
16Fixed a problem with the menu bar in KO/Pi and using the "Menu" hardware key on the Zaurus. 19Fixed a problem with the menu bar in KO/Pi and using the "Menu" hardware key on the Zaurus.
17Added columns for datetime in todo view: Last modified, created and last modified subtodo 20Added columns for datetime in todo view: Last modified, created and last modified subtodo
18Fixed a bug in agenda view displaying recurring multiday events which are longer than two days. 21Fixed a bug in agenda view displaying recurring multiday events which are longer than two days.
19Made conflict detection up to 4 times faster. 22Made conflict detection up to 4 times faster.
20 23
21********** VERSION 2.1.15 ************ 24********** VERSION 2.1.15 ************
22 25
23Fixed two layout problems on the Z: 26Fixed two layout problems on the Z:
24Made the with of the newly added buttons on the Quick-Todo smaller. 27Made the with of the newly added buttons on the Quick-Todo smaller.
25Made listweek layout in 2 columns on the Z760 in portait screen and full menubar visible. 28Made listweek layout in 2 columns on the Z760 in portait screen and full menubar visible.
26 29
27 30
28********** VERSION 2.1.14 ************ 31********** VERSION 2.1.14 ************
29 32
30Added some buttons to the KO/Pi Quick-todo line to make it possible to quickly access some todo view layout settings like display all flat/open/close and hide/show running/done. 33Added some buttons to the KO/Pi Quick-todo line to make it possible to quickly access some todo view layout settings like display all flat/open/close and hide/show running/done.
31Added a button to add a subtodo quickly. 34Added a button to add a subtodo quickly.
32 35
33Added a possibility to search for conflicting events. (In the Action menu. Keyboard shortcut "q", shift+q or ctrl +q ). 36Added a possibility to search for conflicting events. (In the Action menu. Keyboard shortcut "q", shift+q or ctrl +q ).
34Added an option to change the layout of the list week to column mode. 37Added an option to change the layout of the list week to column mode.
35 38
36Fixed some usability problems in pi-sync mode by adding some progress information about file transfer. 39Fixed some usability problems in pi-sync mode by adding some progress information about file transfer.
37 40
38Fixed pi-sync problems with the new multi calendar feature. 41Fixed pi-sync problems with the new multi calendar feature.
39Now pi-sync behaviour should be: 42Now pi-sync behaviour should be:
401) Local sends file request ( as usual ) 431) Local sends file request ( as usual )
412) Remote sends file which contains data of all enabled ( the calendar where the "eye" column is checked ) calendars. 442) Remote sends file which contains data of all enabled ( the calendar where the "eye" column is checked ) calendars.
423) Local syncs with data, adds new entries to default calendar and sends file back ( as usual ). 453) Local syncs with data, adds new entries to default calendar and sends file back ( as usual ).
43 If the data which local receives contains entries which are on disabled calendars on local this entries are updated and not added as duplicates to the default calendar. 46 If the data which local receives contains entries which are on disabled calendars on local this entries are updated and not added as duplicates to the default calendar.
444) Remote updates the data and adds new entries to default calendar. Readonly entries are not changed on remote. 474) Remote updates the data and adds new entries to default calendar. Readonly entries are not changed on remote.
45 If the data which remote receives contains entries which are on disabled calendars on remote this entries are updated and not added as duplicates to the default calendar. 48 If the data which remote receives contains entries which are on disabled calendars on remote this entries are updated and not added as duplicates to the default calendar.
46 49
47Summary: 50Summary:
48No new item ( new created after the last sync ) in a disabled calendar is propagated to the sync partner. Readonly items are synced and added/changed on the sync partner if it is not readonly on the sync partner. 51No new item ( new created after the last sync ) in a disabled calendar is propagated to the sync partner. Readonly items are synced and added/changed on the sync partner if it is not readonly on the sync partner.
49If you have different calendars on remote and local and some of them disabled you may get some "strange" bahaviour. 52If you have different calendars on remote and local and some of them disabled you may get some "strange" bahaviour.
50Well, the syncing has become quite complicated ... you should have no problems if you enable all calendars. 53Well, the syncing has become quite complicated ... you should have no problems if you enable all calendars.
51 54
52********** VERSION 2.1.13 ************ 55********** VERSION 2.1.13 ************
53 56
54Fixed a problem in KA/Pi search. 57Fixed a problem in KA/Pi search.
55Fixed some minor problems in KO/Pi. 58Fixed some minor problems in KO/Pi.
56Added calendar selection possibility to the todo view popup and to the event/todo/journal editor. 59Added calendar selection possibility to the todo view popup and to the event/todo/journal editor.
57 60
58Fixed memory usage problems in KA/Pi: 61Fixed memory usage problems in KA/Pi:
59When loading data KA/Pi did load the file data twice. 62When loading data KA/Pi did load the file data twice.
60Example: 63Example:
61 A 600k file did consume 1200k memory during loading process. 64 A 600k file did consume 1200k memory during loading process.
62 This is fixed, it does now consume only 600k during loading process. 65 This is fixed, it does now consume only 600k during loading process.
63When saving data KA/Pi did consume a lot of memory for the data parsing during the save process. 66When saving data KA/Pi did consume a lot of memory for the data parsing during the save process.
64This is fixed. 67This is fixed.
65Example: 68Example:
66 Before saving a 600k file KA/Pi did consume 21.7 Meg of Ram. 69 Before saving a 600k file KA/Pi did consume 21.7 Meg of Ram.
67 When saving KA/Pi did consume 28.6 Meg of Ram. That causes a crash on the Zaurus because there was no memeory left in the system. 70 When saving KA/Pi did consume 28.6 Meg of Ram. That causes a crash on the Zaurus because there was no memeory left in the system.
68 Now KA/Pi is consuming on saving the same data 22.0 Meg of Ram during the save process. 71 Now KA/Pi is consuming on saving the same data 22.0 Meg of Ram during the save process.
69Note: The memory usage of KA/Pi after the data is loaded/saved has not changed. 72Note: The memory usage of KA/Pi after the data is loaded/saved has not changed.
70The saving of data may be a bit slower now. 73The saving of data may be a bit slower now.
71 74
72Fixed memory usage problems in KO/Pi: 75Fixed memory usage problems in KO/Pi:
73When KO/Pi did save the data to file, it did not release the used buffers after saving. 76When KO/Pi did save the data to file, it did not release the used buffers after saving.
74The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation. 77The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation.
75This is fixed. 78This is fixed.
76Example: 79Example:
77 When saving a 400k file KO/Pi do now use 400k less memory now. 80 When saving a 400k file KO/Pi do now use 400k less memory now.
diff --git a/libkcal/icalformatimpl.cpp b/libkcal/icalformatimpl.cpp
index 3e28714..4794bc9 100644
--- a/libkcal/icalformatimpl.cpp
+++ b/libkcal/icalformatimpl.cpp
@@ -962,128 +962,131 @@ Event *ICalFormatImpl::readEvent(icalcomponent *vevent)
962 } 962 }
963 963
964 // some stupid vCal exporters ignore the standard and use Description 964 // some stupid vCal exporters ignore the standard and use Description
965 // instead of Summary for the default field. Correct for this. 965 // instead of Summary for the default field. Correct for this.
966 if (event->summary().isEmpty() && 966 if (event->summary().isEmpty() &&
967 !(event->description().isEmpty())) { 967 !(event->description().isEmpty())) {
968 QString tmpStr = event->description().simplifyWhiteSpace(); 968 QString tmpStr = event->description().simplifyWhiteSpace();
969 event->setDescription(""); 969 event->setDescription("");
970 event->setSummary(tmpStr); 970 event->setSummary(tmpStr);
971 } 971 }
972 972
973 return event; 973 return event;
974} 974}
975 975
976FreeBusy *ICalFormatImpl::readFreeBusy(icalcomponent *vfreebusy) 976FreeBusy *ICalFormatImpl::readFreeBusy(icalcomponent *vfreebusy)
977{ 977{
978 FreeBusy *freebusy = new FreeBusy; 978 FreeBusy *freebusy = new FreeBusy;
979 979
980 readIncidenceBase(vfreebusy,freebusy); 980 readIncidenceBase(vfreebusy,freebusy);
981 981
982 icalproperty *p = icalcomponent_get_first_property(vfreebusy,ICAL_ANY_PROPERTY); 982 icalproperty *p = icalcomponent_get_first_property(vfreebusy,ICAL_ANY_PROPERTY);
983 983
984 icaltimetype icaltime; 984 icaltimetype icaltime;
985 icalperiodtype icalperiod; 985 icalperiodtype icalperiod;
986 QDateTime period_start, period_end; 986 QDateTime period_start, period_end;
987 987
988 while (p) { 988 while (p) {
989 icalproperty_kind kind = icalproperty_isa(p); 989 icalproperty_kind kind = icalproperty_isa(p);
990 switch (kind) { 990 switch (kind) {
991 991
992 case ICAL_DTSTART_PROPERTY: // start date and time 992 case ICAL_DTSTART_PROPERTY: // start date and time
993 icaltime = icalproperty_get_dtstart(p); 993 icaltime = icalproperty_get_dtstart(p);
994 freebusy->setDtStart(readICalDateTime(icaltime)); 994 freebusy->setDtStart(readICalDateTime(icaltime));
995 break; 995 break;
996 996
997 case ICAL_DTEND_PROPERTY: // start End Date and Time 997 case ICAL_DTEND_PROPERTY: // start End Date and Time
998 icaltime = icalproperty_get_dtend(p); 998 icaltime = icalproperty_get_dtend(p);
999 freebusy->setDtEnd(readICalDateTime(icaltime)); 999 freebusy->setDtEnd(readICalDateTime(icaltime));
1000 break; 1000 break;
1001 1001
1002 case ICAL_FREEBUSY_PROPERTY: //Any FreeBusy Times 1002 case ICAL_FREEBUSY_PROPERTY: //Any FreeBusy Times
1003 icalperiod = icalproperty_get_freebusy(p); 1003 icalperiod = icalproperty_get_freebusy(p);
1004 period_start = readICalDateTime(icalperiod.start); 1004 period_start = readICalDateTime(icalperiod.start);
1005 period_end = readICalDateTime(icalperiod.end); 1005 period_end = readICalDateTime(icalperiod.end);
1006 freebusy->addPeriod(period_start, period_end); 1006 freebusy->addPeriod(period_start, period_end);
1007 break; 1007 break;
1008 1008
1009 default: 1009 default:
1010 kdDebug(5800) << "ICALFormat::readIncidence(): Unknown property: " << kind 1010 kdDebug(5800) << "ICALFormat::readIncidence(): Unknown property: " << kind
1011 << endl; 1011 << endl;
1012 break; 1012 break;
1013 } 1013 }
1014 p = icalcomponent_get_next_property(vfreebusy,ICAL_ANY_PROPERTY); 1014 p = icalcomponent_get_next_property(vfreebusy,ICAL_ANY_PROPERTY);
1015 } 1015 }
1016 1016
1017 return freebusy; 1017 return freebusy;
1018} 1018}
1019 1019
1020Journal *ICalFormatImpl::readJournal(icalcomponent *vjournal) 1020Journal *ICalFormatImpl::readJournal(icalcomponent *vjournal)
1021{ 1021{
1022 Journal *journal = new Journal; 1022 Journal *journal = new Journal;
1023 1023
1024 readIncidence(vjournal,journal); 1024 readIncidence(vjournal,journal);
1025 1025
1026 if ( !journal->dtStart().isValid() && journal->created().isValid() ) {
1027 journal->setDtStart( journal->created() );
1028 }
1026 return journal; 1029 return journal;
1027} 1030}
1028 1031
1029Attendee *ICalFormatImpl::readAttendee(icalproperty *attendee) 1032Attendee *ICalFormatImpl::readAttendee(icalproperty *attendee)
1030{ 1033{
1031 icalparameter *p = 0; 1034 icalparameter *p = 0;
1032 1035
1033 QString email = QString::fromUtf8(icalproperty_get_attendee(attendee)); 1036 QString email = QString::fromUtf8(icalproperty_get_attendee(attendee));
1034 1037
1035 QString name; 1038 QString name;
1036 QString uid = QString::null; 1039 QString uid = QString::null;
1037 p = icalproperty_get_first_parameter(attendee,ICAL_CN_PARAMETER); 1040 p = icalproperty_get_first_parameter(attendee,ICAL_CN_PARAMETER);
1038 if (p) { 1041 if (p) {
1039 name = QString::fromUtf8(icalparameter_get_cn(p)); 1042 name = QString::fromUtf8(icalparameter_get_cn(p));
1040 } else { 1043 } else {
1041 } 1044 }
1042 1045
1043 bool rsvp=false; 1046 bool rsvp=false;
1044 p = icalproperty_get_first_parameter(attendee,ICAL_RSVP_PARAMETER); 1047 p = icalproperty_get_first_parameter(attendee,ICAL_RSVP_PARAMETER);
1045 if (p) { 1048 if (p) {
1046 icalparameter_rsvp rsvpParameter = icalparameter_get_rsvp(p); 1049 icalparameter_rsvp rsvpParameter = icalparameter_get_rsvp(p);
1047 if (rsvpParameter == ICAL_RSVP_TRUE) rsvp = true; 1050 if (rsvpParameter == ICAL_RSVP_TRUE) rsvp = true;
1048 } 1051 }
1049 1052
1050 Attendee::PartStat status = Attendee::NeedsAction; 1053 Attendee::PartStat status = Attendee::NeedsAction;
1051 p = icalproperty_get_first_parameter(attendee,ICAL_PARTSTAT_PARAMETER); 1054 p = icalproperty_get_first_parameter(attendee,ICAL_PARTSTAT_PARAMETER);
1052 if (p) { 1055 if (p) {
1053 icalparameter_partstat partStatParameter = icalparameter_get_partstat(p); 1056 icalparameter_partstat partStatParameter = icalparameter_get_partstat(p);
1054 switch(partStatParameter) { 1057 switch(partStatParameter) {
1055 default: 1058 default:
1056 case ICAL_PARTSTAT_NEEDSACTION: 1059 case ICAL_PARTSTAT_NEEDSACTION:
1057 status = Attendee::NeedsAction; 1060 status = Attendee::NeedsAction;
1058 break; 1061 break;
1059 case ICAL_PARTSTAT_ACCEPTED: 1062 case ICAL_PARTSTAT_ACCEPTED:
1060 status = Attendee::Accepted; 1063 status = Attendee::Accepted;
1061 break; 1064 break;
1062 case ICAL_PARTSTAT_DECLINED: 1065 case ICAL_PARTSTAT_DECLINED:
1063 status = Attendee::Declined; 1066 status = Attendee::Declined;
1064 break; 1067 break;
1065 case ICAL_PARTSTAT_TENTATIVE: 1068 case ICAL_PARTSTAT_TENTATIVE:
1066 status = Attendee::Tentative; 1069 status = Attendee::Tentative;
1067 break; 1070 break;
1068 case ICAL_PARTSTAT_DELEGATED: 1071 case ICAL_PARTSTAT_DELEGATED:
1069 status = Attendee::Delegated; 1072 status = Attendee::Delegated;
1070 break; 1073 break;
1071 case ICAL_PARTSTAT_COMPLETED: 1074 case ICAL_PARTSTAT_COMPLETED:
1072 status = Attendee::Completed; 1075 status = Attendee::Completed;
1073 break; 1076 break;
1074 case ICAL_PARTSTAT_INPROCESS: 1077 case ICAL_PARTSTAT_INPROCESS:
1075 status = Attendee::InProcess; 1078 status = Attendee::InProcess;
1076 break; 1079 break;
1077 } 1080 }
1078 } 1081 }
1079 1082
1080 Attendee::Role role = Attendee::ReqParticipant; 1083 Attendee::Role role = Attendee::ReqParticipant;
1081 p = icalproperty_get_first_parameter(attendee,ICAL_ROLE_PARAMETER); 1084 p = icalproperty_get_first_parameter(attendee,ICAL_ROLE_PARAMETER);
1082 if (p) { 1085 if (p) {
1083 icalparameter_role roleParameter = icalparameter_get_role(p); 1086 icalparameter_role roleParameter = icalparameter_get_role(p);
1084 switch(roleParameter) { 1087 switch(roleParameter) {
1085 case ICAL_ROLE_CHAIR: 1088 case ICAL_ROLE_CHAIR:
1086 role = Attendee::Chair; 1089 role = Attendee::Chair;
1087 break; 1090 break;
1088 default: 1091 default:
1089 case ICAL_ROLE_REQPARTICIPANT: 1092 case ICAL_ROLE_REQPARTICIPANT: