summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt3
-rw-r--r--korganizer/koimportoldialog.cpp8
2 files changed, 7 insertions, 4 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 06d630a..52590d8 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,105 +1,108 @@
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:
11 Fixed the duplicated import if the summary, location or description had whitespaces at the end.
12 Fixed a problem importing certain recurrence rules.
10 13
11********** VERSION 2.1.16 ************ 14********** VERSION 2.1.16 ************
12 15
13Fixed a problem with the menu bar in KO/Pi and using the "Menu" hardware key on the Zaurus. 16Fixed a problem with the menu bar in KO/Pi and using the "Menu" hardware key on the Zaurus.
14Added columns for datetime in todo view: Last modified, created and last modified subtodo 17Added columns for datetime in todo view: Last modified, created and last modified subtodo
15Fixed a bug in agenda view displaying recurring multiday events which are longer than two days. 18Fixed a bug in agenda view displaying recurring multiday events which are longer than two days.
16Made conflict detection up to 4 times faster. 19Made conflict detection up to 4 times faster.
17 20
18********** VERSION 2.1.15 ************ 21********** VERSION 2.1.15 ************
19 22
20Fixed two layout problems on the Z: 23Fixed two layout problems on the Z:
21Made the with of the newly added buttons on the Quick-Todo smaller. 24Made the with of the newly added buttons on the Quick-Todo smaller.
22Made listweek layout in 2 columns on the Z760 in portait screen and full menubar visible. 25Made listweek layout in 2 columns on the Z760 in portait screen and full menubar visible.
23 26
24 27
25********** VERSION 2.1.14 ************ 28********** VERSION 2.1.14 ************
26 29
27Added 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. 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.
28Added a button to add a subtodo quickly. 31Added a button to add a subtodo quickly.
29 32
30Added a possibility to search for conflicting events. (In the Action menu. Keyboard shortcut "q", shift+q or ctrl +q ). 33Added a possibility to search for conflicting events. (In the Action menu. Keyboard shortcut "q", shift+q or ctrl +q ).
31Added an option to change the layout of the list week to column mode. 34Added an option to change the layout of the list week to column mode.
32 35
33Fixed some usability problems in pi-sync mode by adding some progress information about file transfer. 36Fixed some usability problems in pi-sync mode by adding some progress information about file transfer.
34 37
35Fixed pi-sync problems with the new multi calendar feature. 38Fixed pi-sync problems with the new multi calendar feature.
36Now pi-sync behaviour should be: 39Now pi-sync behaviour should be:
371) Local sends file request ( as usual ) 401) Local sends file request ( as usual )
382) Remote sends file which contains data of all enabled ( the calendar where the "eye" column is checked ) calendars. 412) Remote sends file which contains data of all enabled ( the calendar where the "eye" column is checked ) calendars.
393) Local syncs with data, adds new entries to default calendar and sends file back ( as usual ). 423) Local syncs with data, adds new entries to default calendar and sends file back ( as usual ).
40 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. 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.
414) Remote updates the data and adds new entries to default calendar. Readonly entries are not changed on remote. 444) Remote updates the data and adds new entries to default calendar. Readonly entries are not changed on remote.
42 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. 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.
43 46
44Summary: 47Summary:
45No 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. 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.
46If you have different calendars on remote and local and some of them disabled you may get some "strange" bahaviour. 49If you have different calendars on remote and local and some of them disabled you may get some "strange" bahaviour.
47Well, the syncing has become quite complicated ... you should have no problems if you enable all calendars. 50Well, the syncing has become quite complicated ... you should have no problems if you enable all calendars.
48 51
49********** VERSION 2.1.13 ************ 52********** VERSION 2.1.13 ************
50 53
51Fixed a problem in KA/Pi search. 54Fixed a problem in KA/Pi search.
52Fixed some minor problems in KO/Pi. 55Fixed some minor problems in KO/Pi.
53Added calendar selection possibility to the todo view popup and to the event/todo/journal editor. 56Added calendar selection possibility to the todo view popup and to the event/todo/journal editor.
54 57
55Fixed memory usage problems in KA/Pi: 58Fixed memory usage problems in KA/Pi:
56When loading data KA/Pi did load the file data twice. 59When loading data KA/Pi did load the file data twice.
57Example: 60Example:
58 A 600k file did consume 1200k memory during loading process. 61 A 600k file did consume 1200k memory during loading process.
59 This is fixed, it does now consume only 600k during loading process. 62 This is fixed, it does now consume only 600k during loading process.
60When saving data KA/Pi did consume a lot of memory for the data parsing during the save process. 63When saving data KA/Pi did consume a lot of memory for the data parsing during the save process.
61This is fixed. 64This is fixed.
62Example: 65Example:
63 Before saving a 600k file KA/Pi did consume 21.7 Meg of Ram. 66 Before saving a 600k file KA/Pi did consume 21.7 Meg of Ram.
64 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. 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.
65 Now KA/Pi is consuming on saving the same data 22.0 Meg of Ram during the save process. 68 Now KA/Pi is consuming on saving the same data 22.0 Meg of Ram during the save process.
66Note: The memory usage of KA/Pi after the data is loaded/saved has not changed. 69Note: The memory usage of KA/Pi after the data is loaded/saved has not changed.
67The saving of data may be a bit slower now. 70The saving of data may be a bit slower now.
68 71
69Fixed memory usage problems in KO/Pi: 72Fixed memory usage problems in KO/Pi:
70When KO/Pi did save the data to file, it did not release the used buffers after saving. 73When KO/Pi did save the data to file, it did not release the used buffers after saving.
71The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation. 74The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation.
72This is fixed. 75This is fixed.
73Example: 76Example:
74 When saving a 400k file KO/Pi do now use 400k less memory now. 77 When saving a 400k file KO/Pi do now use 400k less memory now.
75 78
76Optimized memory usage in KO/Pi Agenda view: 79Optimized memory usage in KO/Pi Agenda view:
77KO/Pi is storing some paint information in extra buffers for faster repainting of the agenda view. 80KO/Pi is storing some paint information in extra buffers for faster repainting of the agenda view.
78These buffers were not made smaller (i.e. downsized) because of performance reasons. 81These buffers were not made smaller (i.e. downsized) because of performance reasons.
79The handling of these buffers are now much smarter: 82The handling of these buffers are now much smarter:
80Two (of six) buffers are removed completely. 83Two (of six) buffers are removed completely.
81The remaing four buffers are now downsized after not using the agenda view for 45 seconds. 84The remaing four buffers are now downsized after not using the agenda view for 45 seconds.
82Such that the memory usage of KO/Pi is smaller now in general ( because 2 buffers are removed) and is much smaller when not using the agenda view. That is very important when using fastload for KO/Pi. 85Such that the memory usage of KO/Pi is smaller now in general ( because 2 buffers are removed) and is much smaller when not using the agenda view. That is very important when using fastload for KO/Pi.
83 86
84Worst case example ( for a maximum size agenda content): 87Worst case example ( for a maximum size agenda content):
85 When resizing the agenda content to a large scale, KO/Pi did use 17Meg of mem ( and did not use less memory until it was stopped). Now KO/Pi is using on the same operation only 14.3 Meg of mem and after 45 seconds not using the agenda view it uses only 9.4 Meg of mem. 88 When resizing the agenda content to a large scale, KO/Pi did use 17Meg of mem ( and did not use less memory until it was stopped). Now KO/Pi is using on the same operation only 14.3 Meg of mem and after 45 seconds not using the agenda view it uses only 9.4 Meg of mem.
86 89
87When switching to an unused Agenda view now KO/Pi is upizing the buffers again. This takes less than a second. Such that switching to Agenda view (after not using it for more than 45 seconds) is now a bit slower. 90When switching to an unused Agenda view now KO/Pi is upizing the buffers again. This takes less than a second. Such that switching to Agenda view (after not using it for more than 45 seconds) is now a bit slower.
88 91
89Summary: 92Summary:
90Many memory wasting problems of KA/Pi and KO/Pi fixed such that it is better to use on the Zaurus. 93Many memory wasting problems of KA/Pi and KO/Pi fixed such that it is better to use on the Zaurus.
91 94
92********** VERSION 2.1.12 ************ 95********** VERSION 2.1.12 ************
93 96
94KO/Pi: 97KO/Pi:
95Many small usability fixes, e.g. rearranged the popup menus such that they are better to use on the Zaurus. 98Many small usability fixes, e.g. rearranged the popup menus such that they are better to use on the Zaurus.
96Fixed a problem with the month view when file was saved but KO/Pi was not the active window. 99Fixed a problem with the month view when file was saved but KO/Pi was not the active window.
97Fixed some problems in the resource config dialog (e.g. added a warning if you set all calendars to read-only). 100Fixed some problems in the resource config dialog (e.g. added a warning if you set all calendars to read-only).
98Fixed some other small problems. 101Fixed some other small problems.
99 102
100********** VERSION 2.1.11 ************ 103********** VERSION 2.1.11 ************
101 104
102KO/Pi: 105KO/Pi:
103Because we can have many calendars now in KO/Pi we can have more than one journal entry per day. 106Because we can have many calendars now in KO/Pi we can have more than one journal entry per day.
104Added features to handle (and add ) more than one journal entry per day. 107Added features to handle (and add ) more than one journal entry per day.
105Added option for a journal title. 108Added option for a journal title.
diff --git a/korganizer/koimportoldialog.cpp b/korganizer/koimportoldialog.cpp
index 2af436c..79b97e8 100644
--- a/korganizer/koimportoldialog.cpp
+++ b/korganizer/koimportoldialog.cpp
@@ -158,228 +158,228 @@ void KOImportOLdialog::addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent
158 hChild = new OLEListViewItem( iParent , QString::fromUcs2( szName.GetBuffer() ) ); 158 hChild = new OLEListViewItem( iParent , QString::fromUcs2( szName.GetBuffer() ) );
159 if ( iType != 1) 159 if ( iType != 1)
160 hChild->setEnabled( false ); 160 hChild->setEnabled( false );
161 QString ts; 161 QString ts;
162 switch( iType ) { 162 switch( iType ) {
163 case 0: 163 case 0:
164 ts = i18n("Mail"); 164 ts = i18n("Mail");
165 break; 165 break;
166 case 1: 166 case 1:
167 ts = i18n("Calendar"); 167 ts = i18n("Calendar");
168 break; 168 break;
169 case 2: 169 case 2:
170 ts = i18n("Contacts"); 170 ts = i18n("Contacts");
171 break; 171 break;
172 case 3: 172 case 3:
173 ts = i18n("Todos"); 173 ts = i18n("Todos");
174 break; 174 break;
175 case 4: 175 case 4:
176 ts = i18n("Journals"); 176 ts = i18n("Journals");
177 break; 177 break;
178 case 5: 178 case 5:
179 ts = i18n("Notes"); 179 ts = i18n("Notes");
180 break; 180 break;
181 default: 181 default:
182 ts = i18n("Unknown"); 182 ts = i18n("Unknown");
183 } 183 }
184 hChild->setText( 1,ts); 184 hChild->setText( 1,ts);
185 hChild->setData( (DWORD) mfChild.m_lpDispatch ); 185 hChild->setData( (DWORD) mfChild.m_lpDispatch );
186 mfChild.m_lpDispatch->AddRef(); 186 mfChild.m_lpDispatch->AddRef();
187 addFolder(hChild, mfChild.m_lpDispatch); 187 addFolder(hChild, mfChild.m_lpDispatch);
188 } 188 }
189} 189}
190 190
191void KOImportOLdialog::slotApply() 191void KOImportOLdialog::slotApply()
192{ 192{
193 importedItems = 0; 193 importedItems = 0;
194 OLEListViewItem* child = (OLEListViewItem*) mListView->firstChild(); 194 OLEListViewItem* child = (OLEListViewItem*) mListView->firstChild();
195 while ( child ) { 195 while ( child ) {
196 if ( child->isOn()&& child->data() ) 196 if ( child->isOn()&& child->data() )
197 readCalendarData( child->data() ); 197 readCalendarData( child->data() );
198 child = (OLEListViewItem*) child->itemBelow(); 198 child = (OLEListViewItem*) child->itemBelow();
199 } 199 }
200 QString mes = i18n("Importing complete.\n\n%1 items imported.").arg( importedItems); 200 QString mes = i18n("Importing complete.\n\n%1 items imported.").arg( importedItems);
201 KMessageBox::information(this,mes); 201 KMessageBox::information(this,mes);
202} 202}
203void KOImportOLdialog::readCalendarData( DWORD folder ) 203void KOImportOLdialog::readCalendarData( DWORD folder )
204{ 204{
205 205
206 LPDISPATCH dispItem = (LPDISPATCH)folder; 206 LPDISPATCH dispItem = (LPDISPATCH)folder;
207 dispItem->AddRef(); 207 dispItem->AddRef();
208 MAPIFolder mf(dispItem); 208 MAPIFolder mf(dispItem);
209 mf.m_lpDispatch->AddRef(); 209 mf.m_lpDispatch->AddRef();
210 _Items folderItems; 210 _Items folderItems;
211 _variant_t indx((long)0); 211 _variant_t indx((long)0);
212 LPDISPATCH itm; 212 LPDISPATCH itm;
213 int i; 213 int i;
214 folderItems = mf.GetItems(); 214 folderItems = mf.GetItems();
215 QProgressDialog bar( i18n("Importing calendar data"),i18n("Abort"), folderItems.GetCount(),this ); 215 QProgressDialog bar( i18n("Importing calendar data"),i18n("Abort"), folderItems.GetCount(),this );
216 bar.setCaption (i18n("Importing!") ); 216 bar.setCaption (i18n("Importing!") );
217 int h = bar.sizeHint().height() ; 217 int h = bar.sizeHint().height() ;
218 int w = 300; 218 int w = 300;
219 int dw = QApplication::desktop()->width(); 219 int dw = QApplication::desktop()->width();
220 int dh = QApplication::desktop()->height(); 220 int dh = QApplication::desktop()->height();
221 //bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 221 //bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
222 bar.show(); 222 bar.show();
223 for(i=1; i <= folderItems.GetCount(); ++i) 223 for(i=1; i <= folderItems.GetCount(); ++i)
224 { 224 {
225 qApp->processEvents(); 225 qApp->processEvents();
226 if ( ! bar.isVisible() ) 226 if ( ! bar.isVisible() )
227 return ; 227 return ;
228 bar.setProgress( i ); 228 bar.setProgress( i );
229 bar.raise(); 229 bar.raise();
230 indx = (long)i; 230 indx = (long)i;
231 itm = folderItems.Item(indx.Detach()); 231 itm = folderItems.Item(indx.Detach());
232 _AppointmentItem * pItem = (_AppointmentItem *)&itm; 232 _AppointmentItem * pItem = (_AppointmentItem *)&itm;
233 ol2kopiCalendar( pItem ); 233 ol2kopiCalendar( pItem );
234 itm->Release(); 234 itm->Release();
235 } 235 }
236} 236}
237void KOImportOLdialog::slotOk() 237void KOImportOLdialog::slotOk()
238{ 238{
239 QDialog::accept(); 239 QDialog::accept();
240} 240}
241 241
242void KOImportOLdialog::ol2kopiCalendar( _AppointmentItem * aItem, bool computeRecurrence ) 242void KOImportOLdialog::ol2kopiCalendar( _AppointmentItem * aItem, bool computeRecurrence )
243{ 243{
244 KCal::Event* event = new KCal::Event(); 244 KCal::Event* event = new KCal::Event();
245 if ( aItem->GetAllDayEvent() ){ 245 if ( aItem->GetAllDayEvent() ){
246 event->setDtStart( QDateTime( mDdate2Qdtr( aItem->GetStart()).date(),QTime(0,0,0 ) )); 246 event->setDtStart( QDateTime( mDdate2Qdtr( aItem->GetStart()).date(),QTime(0,0,0 ) ));
247 event->setDtEnd( QDateTime( mDdate2Qdtr( aItem->GetEnd()) .date(),QTime(0,0,0 )).addDays(-1)); 247 event->setDtEnd( QDateTime( mDdate2Qdtr( aItem->GetEnd()) .date(),QTime(0,0,0 )).addDays(-1));
248 event->setFloats( true ); 248 event->setFloats( true );
249 } else { 249 } else {
250 event->setDtStart( mDdate2Qdtr( aItem->GetStart()) ); 250 event->setDtStart( mDdate2Qdtr( aItem->GetStart()) );
251 event->setDtEnd( mDdate2Qdtr( aItem->GetEnd()) ); 251 event->setDtEnd( mDdate2Qdtr( aItem->GetEnd()) );
252 event->setFloats( false ); 252 event->setFloats( false );
253 } 253 }
254 event->setSummary( QString::fromUcs2( aItem->GetSubject().GetBuffer()) ); 254 event->setSummary( QString::fromUcs2( aItem->GetSubject().GetBuffer()).stripWhiteSpace() );
255 event->setLocation( QString::fromUcs2( aItem->GetLocation().GetBuffer()) ); 255 event->setLocation( QString::fromUcs2( aItem->GetLocation().GetBuffer()).stripWhiteSpace() );
256 event->setDescription( QString::fromUcs2( aItem->GetBody().GetBuffer()).replace( QRegExp("\\r"), "") ); 256 event->setDescription( QString::fromUcs2( aItem->GetBody().GetBuffer()).replace( QRegExp("\\r"), "").stripWhiteSpace() );
257 QString cat = QString::fromUcs2( aItem->GetCategories().GetBuffer()).replace( QRegExp("; "), ";"); 257 QString cat = QString::fromUcs2( aItem->GetCategories().GetBuffer()).replace( QRegExp("; "), ";");
258 event->setCategories( QStringList::split( ";", cat ) ); 258 event->setCategories( QStringList::split( ";", cat ) );
259 if ( aItem->GetReminderSet() ) { 259 if ( aItem->GetReminderSet() ) {
260 event->clearAlarms(); 260 event->clearAlarms();
261 Alarm* alarm = event->newAlarm(); 261 Alarm* alarm = event->newAlarm();
262 alarm->setStartOffset( -aItem->GetReminderMinutesBeforeStart()*60 ); 262 alarm->setStartOffset( -aItem->GetReminderMinutesBeforeStart()*60 );
263 alarm->setEnabled( true ); 263 alarm->setEnabled( true );
264 if ( aItem->GetReminderPlaySound() ) { 264 if ( aItem->GetReminderPlaySound() ) {
265 alarm->setType( Alarm::Audio ); 265 alarm->setType( Alarm::Audio );
266 alarm->setAudioFile( QString::fromUcs2( aItem->GetReminderSoundFile().GetBuffer())); 266 alarm->setAudioFile( QString::fromUcs2( aItem->GetReminderSoundFile().GetBuffer()));
267 } 267 }
268 else 268 else
269 alarm->setType( Alarm::Display ); 269 alarm->setType( Alarm::Display );
270 alarm->setRepeatCount( aItem->GetReplyTime() ); 270 alarm->setRepeatCount( aItem->GetReplyTime() );
271 } 271 }
272 // OL :pub 0 - pers 1 - priv 2 - conf 3 272 // OL :pub 0 - pers 1 - priv 2 - conf 3
273 // KO : pub 0 - priv 1 - conf 2 273 // KO : pub 0 - priv 1 - conf 2
274 int sec = aItem->GetSensitivity() ; 274 int sec = aItem->GetSensitivity() ;
275 if ( sec > 1 )// mapping pers -> private 275 if ( sec > 1 )// mapping pers -> private
276 --sec; 276 --sec;
277 event->setSecrecy( sec ); 277 event->setSecrecy( sec );
278 if ( aItem->GetBusyStatus() == 0 ) 278 if ( aItem->GetBusyStatus() == 0 )
279 event->setTransparency( Event::Transparent);// OL free 279 event->setTransparency( Event::Transparent);// OL free
280 else 280 else
281 event->setTransparency( Event::Opaque);//OL all other 281 event->setTransparency( Event::Opaque);//OL all other
282 282
283 if ( aItem->GetIsRecurring() && computeRecurrence ) { //recur 283 if ( aItem->GetIsRecurring() && computeRecurrence ) { //recur
284 284
285 RecurrencePattern recpat = aItem->GetRecurrencePattern(); 285 RecurrencePattern recpat = aItem->GetRecurrencePattern();
286 286
287 QDate startDate = mDdate2Qdtr(recpat.GetPatternStartDate()).date(); 287 QDate startDate = mDdate2Qdtr(recpat.GetPatternStartDate()).date();
288 int freq = recpat.GetInterval(); 288 int freq = recpat.GetInterval();
289 289 if ( freq == 0 ) freq = 1;
290 bool hasEndDate = !recpat.GetNoEndDate(); 290 bool hasEndDate = !recpat.GetNoEndDate();
291 QDate endDate = mDdate2Qdtr(recpat.GetPatternEndDate()).date(); 291 QDate endDate = mDdate2Qdtr(recpat.GetPatternEndDate()).date();
292 QBitArray weekDays( 7 ); 292 QBitArray weekDays( 7 );
293 weekDays.fill(false ); 293 weekDays.fill(false );
294 uint weekDaysNum = recpat.GetDayOfWeekMask(); 294 uint weekDaysNum = recpat.GetDayOfWeekMask();
295 int i; 295 int i;
296 int bb = 2; 296 int bb = 2;
297 for( i = 1; i <= 6; ++i ) { 297 for( i = 1; i <= 6; ++i ) {
298 weekDays.setBit( i - 1, ( bb & weekDaysNum )); 298 weekDays.setBit( i - 1, ( bb & weekDaysNum ));
299 bb = 4 << (i-1); 299 bb = 4 << (i-1);
300 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) ); 300 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) );
301 } 301 }
302 if ( 1 & weekDaysNum) 302 if ( 1 & weekDaysNum)
303 weekDays.setBit( 6 ); 303 weekDays.setBit( 6 );
304 // int pos = 1;// pending 304 // int pos = 1;// pending
305 305
306 Recurrence *r = event->recurrence(); 306 Recurrence *r = event->recurrence();
307 int rtype = recpat.GetRecurrenceType(); 307 int rtype = recpat.GetRecurrenceType();
308 //recurrence types are: 308 //recurrence types are:
309 /* 309 /*
310 olRecursDaily(0) 310 olRecursDaily(0)
311 olRecursWeekly(1) 311 olRecursWeekly(1)
312 olRecursMonthly(2) 312 olRecursMonthly(2)
313 olRecursMonthNth(3) 313 olRecursMonthNth(3)
314 olRecursYearly(5) 314 olRecursYearly(5)
315 olRecursYearNth(6) 315 olRecursYearNth(6)
316 */ 316 */
317 317
318 int duration = recpat.GetOccurrences(); 318 int duration = recpat.GetOccurrences();
319 if ( !hasEndDate ) 319 if ( !hasEndDate )
320 duration = -1; 320 duration = -1;
321 321
322 //LPDISPATCH RecurrencePattern::GetExceptions() 322 //LPDISPATCH RecurrencePattern::GetExceptions()
323 //long RecurrencePattern::GetMonthOfYear() 323 //long RecurrencePattern::GetMonthOfYear()
324 if ( rtype == 0 ) { 324 if ( rtype == 0 ) {
325 if ( hasEndDate ) r->setDaily( freq, endDate ); 325 if ( hasEndDate ) r->setDaily( freq, endDate );
326 else r->setDaily( freq, duration ); 326 else r->setDaily( freq, duration );
327 } else if ( rtype == 1 ) { 327 } else if ( rtype == 1 ) {
328 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate ); 328 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate );
329 else r->setWeekly( freq, weekDays, duration ); 329 else r->setWeekly( freq, weekDays, duration );
330 } else if ( rtype == 2 ) { 330 } else if ( rtype == 2 ) {
331 if ( hasEndDate ) 331 if ( hasEndDate )
332 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate ); 332 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate );
333 else 333 else
334 r->setMonthly( Recurrence::rMonthlyDay, freq, duration ); 334 r->setMonthly( Recurrence::rMonthlyDay, freq, duration );
335 //r->addMonthlyDay( startDate.day() ); 335 //r->addMonthlyDay( startDate.day() );
336 r->addMonthlyDay( recpat.GetDayOfMonth() ); 336 r->addMonthlyDay( recpat.GetDayOfMonth() );
337 } else if ( rtype == 3 ) { 337 } else if ( rtype == 3 ) {
338 if ( hasEndDate ) 338 if ( hasEndDate )
339 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 339 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
340 else 340 else
341 r->setMonthly( Recurrence::rMonthlyPos, freq, duration ); 341 r->setMonthly( Recurrence::rMonthlyPos, freq, duration );
342 QBitArray days( 7 ); 342 QBitArray days( 7 );
343 days.fill( false ); 343 days.fill( false );
344 days.setBit( startDate.dayOfWeek() - 1 ); 344 days.setBit( startDate.dayOfWeek() - 1 );
345 int pos = (startDate.day()/7)+1; 345 int pos = (startDate.day()/7)+1;
346 r->addMonthlyPos( pos, days ); 346 r->addMonthlyPos( pos, days );
347 //QString mes = i18n("Importing monthlypos.\n\npos: %1 , day: %2").arg( pos).arg( startDate.dayOfWeek() - 1); 347 //QString mes = i18n("Importing monthlypos.\n\npos: %1 , day: %2").arg( pos).arg( startDate.dayOfWeek() - 1);
348 //KMessageBox::information(this,mes); 348 //KMessageBox::information(this,mes);
349 } else if ( rtype == 5 ) { 349 } else if ( rtype == 5 ) {
350 freq = 1; 350 freq = 1;
351 if ( hasEndDate ) 351 if ( hasEndDate )
352 r->setYearly( Recurrence::rYearlyMonth, freq, endDate ); 352 r->setYearly( Recurrence::rYearlyMonth, freq, endDate );
353 else 353 else
354 r->setYearly( Recurrence::rYearlyMonth, freq, duration ); 354 r->setYearly( Recurrence::rYearlyMonth, freq, duration );
355 r->addYearlyNum( startDate.month() ); 355 r->addYearlyNum( startDate.month() );
356 } else if ( true /*rtype == 6*/ ) { 356 } else if ( true /*rtype == 6*/ ) {
357 // KOganizer cannot handle this in the GUI 357 // KOganizer cannot handle this in the GUI
358 // we are mapping this to monthly - every 12. month 358 // we are mapping this to monthly - every 12. month
359 freq = 12; 359 freq = 12;
360 if ( hasEndDate ) 360 if ( hasEndDate )
361 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 361 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
362 else 362 else
363 r->setMonthly( Recurrence::rMonthlyPos, freq, duration ); 363 r->setMonthly( Recurrence::rMonthlyPos, freq, duration );
364 QBitArray days( 7 ); 364 QBitArray days( 7 );
365 days.fill( false ); 365 days.fill( false );
366 days.setBit( startDate.dayOfWeek() - 1 ); 366 days.setBit( startDate.dayOfWeek() - 1 );
367 int pos = (startDate.day()/7)+1; 367 int pos = (startDate.day()/7)+1;
368 r->addMonthlyPos( pos, days ); 368 r->addMonthlyPos( pos, days );
369 } 369 }
370 // recurrence exceptions 370 // recurrence exceptions
371 LPDISPATCH dispItem = recpat.GetExceptions(); 371 LPDISPATCH dispItem = recpat.GetExceptions();
372 dispItem->AddRef(); 372 dispItem->AddRef();
373 Exceptions ex(dispItem); 373 Exceptions ex(dispItem);
374 _variant_t indx((long)0); 374 _variant_t indx((long)0);
375 LPDISPATCH itm; 375 LPDISPATCH itm;
376 for(i=1; i <= ex.GetCount(); ++i) { 376 for(i=1; i <= ex.GetCount(); ++i) {
377 indx = (long)i; 377 indx = (long)i;
378 itm = ex.Item( indx.Detach() ); 378 itm = ex.Item( indx.Detach() );
379 ::Exception * pItem = (::Exception *)&itm; 379 ::Exception * pItem = (::Exception *)&itm;
380 event->addExDate( QDateTime( mDdate2Qdtr( pItem->GetOriginalDate())).date() ); 380 event->addExDate( QDateTime( mDdate2Qdtr( pItem->GetOriginalDate())).date() );
381 if ( !pItem->GetDeleted() ) { 381 if ( !pItem->GetDeleted() ) {
382 LPDISPATCH appIt = pItem->GetAppointmentItem(); 382 LPDISPATCH appIt = pItem->GetAppointmentItem();
383 _AppointmentItem * paItem = (_AppointmentItem *)&appIt; 383 _AppointmentItem * paItem = (_AppointmentItem *)&appIt;
384 ol2kopiCalendar( paItem, false ); 384 ol2kopiCalendar( paItem, false );
385 } 385 }