summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-07-12 13:32:09 (UTC)
committer zautrix <zautrix>2004-07-12 13:32:09 (UTC)
commit915a3b162dea2755ec1c8267a9c9f65709bce602 (patch) (unidiff)
tree75b3d15a2386a4da7ab790a1f249ff811a7a7ae8
parentcbc789907408fa3359444c464ba5a86be892f301 (diff)
downloadkdepimpi-915a3b162dea2755ec1c8267a9c9f65709bce602.zip
kdepimpi-915a3b162dea2755ec1c8267a9c9f65709bce602.tar.gz
kdepimpi-915a3b162dea2755ec1c8267a9c9f65709bce602.tar.bz2
Another win import fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koimportoldialog.cpp21
-rw-r--r--korganizer/koimportoldialog.h1
2 files changed, 17 insertions, 5 deletions
diff --git a/korganizer/koimportoldialog.cpp b/korganizer/koimportoldialog.cpp
index 36363e5..16f2eca 100644
--- a/korganizer/koimportoldialog.cpp
+++ b/korganizer/koimportoldialog.cpp
@@ -1,240 +1,241 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qtooltip.h> 24#include <qtooltip.h>
25#include <qframe.h> 25#include <qframe.h>
26#include <qpixmap.h> 26#include <qpixmap.h>
27#include <qlayout.h> 27#include <qlayout.h>
28#include <qprogressbar.h> 28#include <qprogressbar.h>
29#include <qwidgetstack.h> 29#include <qwidgetstack.h>
30#include <qdatetime.h> 30#include <qdatetime.h>
31#include <qdir.h> 31#include <qdir.h>
32#include <qapplication.h> 32#include <qapplication.h>
33#include <qhbox.h> 33#include <qhbox.h>
34#include <qheader.h> 34#include <qheader.h>
35#include <qdatetime.h> 35#include <qdatetime.h>
36#include <qlistview.h> 36#include <qlistview.h>
37 37
38#include <kdebug.h> 38#include <kdebug.h>
39#include <klocale.h> 39#include <klocale.h>
40#include <kstandarddirs.h> 40#include <kstandarddirs.h>
41#include <kmessagebox.h> 41#include <kmessagebox.h>
42#include <kfiledialog.h> 42#include <kfiledialog.h>
43 43
44#include <libkdepim/categoryselectdialog.h> 44#include <libkdepim/categoryselectdialog.h>
45#include <libkdepim/kinputdialog.h> 45#include <libkdepim/kinputdialog.h>
46 46
47#include <libkcal/calendarlocal.h> 47#include <libkcal/calendarlocal.h>
48#include <libkcal/icalformat.h> 48#include <libkcal/icalformat.h>
49#include <kabc/stdaddressbook.h>
49 50
50#include "koprefs.h" 51#include "koprefs.h"
51#include "koglobals.h" 52#include "koglobals.h"
52 53
53#include "koimportoldialog.h" 54#include "koimportoldialog.h"
54 55
55#include "../outport/msoutl9.h" 56#include "../outport/msoutl9.h"
56#include <ole2.h> 57#include <ole2.h>
57#include <comutil.h> 58#include <comutil.h>
58_Application gOlApp; 59_Application gOlApp;
59 60
60QDateTime mDdate2Qdtr( DATE dt) 61QDateTime mDdate2Qdtr( DATE dt)
61{ 62{
62 COleDateTime odt; 63 COleDateTime odt;
63 SYSTEMTIME st; 64 SYSTEMTIME st;
64 odt = dt; 65 odt = dt;
65 odt.GetAsSystemTime(st); 66 odt.GetAsSystemTime(st);
66 QDateTime qdt (QDate(st.wYear, st.wMonth,st.wDay ),QTime( st.wHour, st.wMinute,st.wSecond ) ); 67 QDateTime qdt (QDate(st.wYear, st.wMonth,st.wDay ),QTime( st.wHour, st.wMinute,st.wSecond ) );
67 return qdt; 68 return qdt;
68} 69}
69 70
70class OLEListViewItem : public QCheckListItem 71class OLEListViewItem : public QCheckListItem
71{ 72{
72 public: 73 public:
73 OLEListViewItem( QListView *parent, QString text ) : 74 OLEListViewItem( QListView *parent, QString text ) :
74 QCheckListItem( parent, text, QCheckListItem::CheckBox ) { ; }; 75 QCheckListItem( parent, text, QCheckListItem::CheckBox ) { ; };
75 OLEListViewItem( QListViewItem *after, QString text ) : 76 OLEListViewItem( QListViewItem *after, QString text ) :
76 QCheckListItem( after, text, QCheckListItem::CheckBox ) { ; }; 77 QCheckListItem( after, text, QCheckListItem::CheckBox ) { ; };
77 ~OLEListViewItem() {}; 78 ~OLEListViewItem() {};
78 void setData( DWORD data ) {mData= data; }; 79 void setData( DWORD data ) {mData= data; };
79 DWORD data() { return mData ;}; 80 DWORD data() { return mData ;};
80 private: 81 private:
81 DWORD mData; 82 DWORD mData;
82}; 83};
83 84
84KOImportOLdialog::KOImportOLdialog( const QString &caption, 85KOImportOLdialog::KOImportOLdialog( const QString &caption,
85 Calendar *calendar, QWidget *parent ) : 86 Calendar *calendar, QWidget *parent ) :
86 KDialogBase( Plain, caption, User1 | Close, Ok, 87 KDialogBase( Plain, caption, User1 | Close, Ok,
87 parent, caption, true, false, i18n("Import!") ) 88 parent, caption, true, false, i18n("Import!") )
88{ 89{
89 QHBox * mw = new QHBox( this ); 90 QHBox * mw = new QHBox( this );
90 setMainWidget( mw ); 91 setMainWidget( mw );
91 mListView = new QListView( mw ); 92 mListView = new QListView( mw );
92 mListView->addColumn(i18n("Select Folder to import")); 93 mListView->addColumn(i18n("Select Folder to import"));
93 mListView->addColumn(i18n("Content Type")); 94 mListView->addColumn(i18n("Content Type"));
94 mCalendar = calendar; 95 mCalendar = calendar;
95 connect( this, SIGNAL( user1Clicked() ),SLOT ( slotApply())); 96 connect( this, SIGNAL( user1Clicked() ),SLOT ( slotApply()));
96 setupFolderView(); 97 setupFolderView();
97 resize( sizeHint().width()+50, sizeHint().height()+50 ); 98 resize( sizeHint().width()+50, sizeHint().height()+50 );
98} 99}
99 100
100KOImportOLdialog::~KOImportOLdialog() 101KOImportOLdialog::~KOImportOLdialog()
101{ 102{
102 103
103} 104}
104 105
105 106
106void KOImportOLdialog::setupFolderView() 107void KOImportOLdialog::setupFolderView()
107{ 108{
108 SCODE sc = ::OleInitialize(NULL); 109 SCODE sc = ::OleInitialize(NULL);
109 if ( FAILED ( sc ) ) { 110 if ( FAILED ( sc ) ) {
110 KMessageBox::information(this,"OLE initialisation failed"); 111 KMessageBox::information(this,"OLE initialisation failed");
111 return; 112 return;
112 } 113 }
113 114
114 if(!gOlApp.CreateDispatch(_T("Outlook.Application"),NULL)){ 115 if(!gOlApp.CreateDispatch(_T("Outlook.Application"),NULL)){
115 KMessageBox::information(this,"Sorry, cannot access Outlook"); 116 KMessageBox::information(this,"Sorry, cannot access Outlook");
116 return ; 117 return ;
117 } 118 }
118 MAPIFolder mfInbox; 119 MAPIFolder mfInbox;
119 MAPIFolder mfRoot; 120 MAPIFolder mfRoot;
120 CString szName; 121 CString szName;
121 _NameSpace olNS; 122 _NameSpace olNS;
122 olNS = gOlApp.GetNamespace(_T("MAPI")); 123 olNS = gOlApp.GetNamespace(_T("MAPI"));
123 mfInbox = olNS.GetDefaultFolder(6); 124 mfInbox = olNS.GetDefaultFolder(6);
124 mfRoot = mfInbox.GetParent(); 125 mfRoot = mfInbox.GetParent();
125 szName = mfRoot.GetName(); 126 szName = mfRoot.GetName();
126 long iType = mfRoot.GetDefaultItemType(); 127 long iType = mfRoot.GetDefaultItemType();
127 QString mes; 128 QString mes;
128 mes = QString::fromUcs2( szName.GetBuffer() ); 129 mes = QString::fromUcs2( szName.GetBuffer() );
129 OLEListViewItem * root = new OLEListViewItem( mListView, mes ); 130 OLEListViewItem * root = new OLEListViewItem( mListView, mes );
130 mfRoot.m_lpDispatch->AddRef(); 131 mfRoot.m_lpDispatch->AddRef();
131 addFolder( root, mfRoot.m_lpDispatch ); 132 addFolder( root, mfRoot.m_lpDispatch );
132 root->setOpen( true ); 133 root->setOpen( true );
133 mListView->setSortColumn( 0 ); 134 mListView->setSortColumn( 0 );
134 mListView->sort( ); 135 mListView->sort( );
135} 136}
136 137
137 138
138void KOImportOLdialog::addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent) 139void KOImportOLdialog::addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent)
139{ 140{
140 MAPIFolder mfParent(dispParent), mfChild; 141 MAPIFolder mfParent(dispParent), mfChild;
141 _Folders folders; 142 _Folders folders;
142 _variant_t fndx((long)0); 143 _variant_t fndx((long)0);
143 CString szName; 144 CString szName;
144 long iType; 145 long iType;
145 OLEListViewItem* hChild; 146 OLEListViewItem* hChild;
146 147
147 folders = mfParent.GetFolders(); 148 folders = mfParent.GetFolders();
148 for(int i=1; i <= folders.GetCount(); ++i) 149 for(int i=1; i <= folders.GetCount(); ++i)
149 { 150 {
150 fndx = (long)i; 151 fndx = (long)i;
151 mfChild = folders.Item(fndx.Detach()); 152 mfChild = folders.Item(fndx.Detach());
152 mfChild.m_lpDispatch->AddRef(); 153 mfChild.m_lpDispatch->AddRef();
153 szName = mfChild.GetName(); 154 szName = mfChild.GetName();
154 iType = mfChild.GetDefaultItemType(); 155 iType = mfChild.GetDefaultItemType();
155 hChild = new OLEListViewItem( iParent , QString::fromUcs2( szName.GetBuffer() ) ); 156 hChild = new OLEListViewItem( iParent , QString::fromUcs2( szName.GetBuffer() ) );
156 if ( iType != 1) 157 if ( iType != 1)
157 hChild->setEnabled( false ); 158 hChild->setEnabled( false );
158 QString ts; 159 QString ts;
159 switch( iType ) { 160 switch( iType ) {
160 case 0: 161 case 0:
161 ts = i18n("Mail"); 162 ts = i18n("Mail");
162 break; 163 break;
163 case 1: 164 case 1:
164 ts = i18n("Calendar"); 165 ts = i18n("Calendar");
165 break; 166 break;
166 case 2: 167 case 2:
167 ts = i18n("Contacts"); 168 ts = i18n("Contacts");
168 break; 169 break;
169 case 3: 170 case 3:
170 ts = i18n("Todos"); 171 ts = i18n("Todos");
171 break; 172 break;
172 case 4: 173 case 4:
173 ts = i18n("Journals"); 174 ts = i18n("Journals");
174 break; 175 break;
175 case 5: 176 case 5:
176 ts = i18n("Notes"); 177 ts = i18n("Notes");
177 break; 178 break;
178 default: 179 default:
179 ts = i18n("Unknown"); 180 ts = i18n("Unknown");
180 } 181 }
181 hChild->setText( 1,ts); 182 hChild->setText( 1,ts);
182 hChild->setData( (DWORD) mfChild.m_lpDispatch ); 183 hChild->setData( (DWORD) mfChild.m_lpDispatch );
183 mfChild.m_lpDispatch->AddRef(); 184 mfChild.m_lpDispatch->AddRef();
184 addFolder(hChild, mfChild.m_lpDispatch); 185 addFolder(hChild, mfChild.m_lpDispatch);
185 } 186 }
186} 187}
187 188
188void KOImportOLdialog::slotApply() 189void KOImportOLdialog::slotApply()
189{ 190{
190 importedItems = 0; 191 importedItems = 0;
191 OLEListViewItem* child = (OLEListViewItem*) mListView->firstChild(); 192 OLEListViewItem* child = (OLEListViewItem*) mListView->firstChild();
192 while ( child ) { 193 while ( child ) {
193 if ( child->isOn() ) 194 if ( child->isOn() )
194 readCalendarData( child->data() ); 195 readCalendarData( child->data() );
195 child = (OLEListViewItem*) child->itemBelow(); 196 child = (OLEListViewItem*) child->itemBelow();
196 } 197 }
197 QString mes = i18n("Importing complete.\n\n%1 items imported.").arg( importedItems); 198 QString mes = i18n("Importing complete.\n\n%1 items imported.").arg( importedItems);
198 KMessageBox::information(this,mes); 199 KMessageBox::information(this,mes);
199} 200}
200void KOImportOLdialog::readCalendarData( DWORD folder ) 201void KOImportOLdialog::readCalendarData( DWORD folder )
201{ 202{
202 203
203 LPDISPATCH dispItem = (LPDISPATCH)folder; 204 LPDISPATCH dispItem = (LPDISPATCH)folder;
204 dispItem->AddRef(); 205 dispItem->AddRef();
205 MAPIFolder mf(dispItem); 206 MAPIFolder mf(dispItem);
206 mf.m_lpDispatch->AddRef(); 207 mf.m_lpDispatch->AddRef();
207 _Items folderItems; 208 _Items folderItems;
208 _variant_t indx((long)0); 209 _variant_t indx((long)0);
209 LPDISPATCH itm; 210 LPDISPATCH itm;
210 int i; 211 int i;
211 folderItems = mf.GetItems(); 212 folderItems = mf.GetItems();
212 QProgressBar bar( folderItems.GetCount(),0 ); 213 QProgressBar bar( folderItems.GetCount(),0 );
213 bar.setCaption (i18n("Importing - close to abort!") ); 214 bar.setCaption (i18n("Importing - close to abort!") );
214 int h = bar.sizeHint().height() ; 215 int h = bar.sizeHint().height() ;
215 int w = 300; 216 int w = 300;
216 int dw = QApplication::desktop()->width(); 217 int dw = QApplication::desktop()->width();
217 int dh = QApplication::desktop()->height(); 218 int dh = QApplication::desktop()->height();
218 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 219 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
219 bar.show(); 220 bar.show();
220 for(i=1; i <= folderItems.GetCount(); ++i) 221 for(i=1; i <= folderItems.GetCount(); ++i)
221 { 222 {
222 qApp->processEvents(); 223 qApp->processEvents();
223 if ( ! bar.isVisible() ) 224 if ( ! bar.isVisible() )
224 return ; 225 return ;
225 bar.setProgress( i ); 226 bar.setProgress( i );
226 indx = (long)i; 227 indx = (long)i;
227 itm = folderItems.Item(indx.Detach()); 228 itm = folderItems.Item(indx.Detach());
228 _AppointmentItem * pItem = (_AppointmentItem *)&itm; 229 _AppointmentItem * pItem = (_AppointmentItem *)&itm;
229 ol2kopiCalendar( pItem ); 230 ol2kopiCalendar( pItem );
230 itm->Release(); 231 itm->Release();
231 } 232 }
232} 233}
233void KOImportOLdialog::slotOk() 234void KOImportOLdialog::slotOk()
234{ 235{
235 QDialog::accept(); 236 QDialog::accept();
236} 237}
237 238
238void KOImportOLdialog::ol2kopiCalendar( _AppointmentItem * aItem, bool computeRecurrence ) 239void KOImportOLdialog::ol2kopiCalendar( _AppointmentItem * aItem, bool computeRecurrence )
239{ 240{
240 KCal::Event* event = new KCal::Event(); 241 KCal::Event* event = new KCal::Event();
@@ -251,216 +252,226 @@ void KOImportOLdialog::ol2kopiCalendar( _AppointmentItem * aItem, bool computeRe
251 event->setLocation( QString::fromUcs2( aItem->GetLocation().GetBuffer()) ); 252 event->setLocation( QString::fromUcs2( aItem->GetLocation().GetBuffer()) );
252 event->setDescription( QString::fromUcs2( aItem->GetBody().GetBuffer()) ); 253 event->setDescription( QString::fromUcs2( aItem->GetBody().GetBuffer()) );
253 QString cat = QString::fromUcs2( aItem->GetCategories().GetBuffer()); 254 QString cat = QString::fromUcs2( aItem->GetCategories().GetBuffer());
254 event->setCategories( QStringList::split( ";", cat )); 255 event->setCategories( QStringList::split( ";", cat ));
255 if ( aItem->GetReminderSet() ) { 256 if ( aItem->GetReminderSet() ) {
256 event->clearAlarms(); 257 event->clearAlarms();
257 Alarm* alarm = event->newAlarm(); 258 Alarm* alarm = event->newAlarm();
258 alarm->setStartOffset( -aItem->GetReminderMinutesBeforeStart()*60 ); 259 alarm->setStartOffset( -aItem->GetReminderMinutesBeforeStart()*60 );
259 alarm->setEnabled( true ); 260 alarm->setEnabled( true );
260 if ( aItem->GetReminderPlaySound() ) { 261 if ( aItem->GetReminderPlaySound() ) {
261 alarm->setType( Alarm::Audio ); 262 alarm->setType( Alarm::Audio );
262 alarm->setAudioFile( QString::fromUcs2( aItem->GetReminderSoundFile().GetBuffer())); 263 alarm->setAudioFile( QString::fromUcs2( aItem->GetReminderSoundFile().GetBuffer()));
263 } 264 }
264 else 265 else
265 alarm->setType( Alarm::Display ); 266 alarm->setType( Alarm::Display );
266 alarm->setRepeatCount( aItem->GetReplyTime() ); 267 alarm->setRepeatCount( aItem->GetReplyTime() );
267 } 268 }
268 // OL :pub 0 - pers 1 - priv 2 - conf 3 269 // OL :pub 0 - pers 1 - priv 2 - conf 3
269 // KO : pub 0 - priv 1 - conf 2 270 // KO : pub 0 - priv 1 - conf 2
270 int sec = aItem->GetSensitivity() ; 271 int sec = aItem->GetSensitivity() ;
271 if ( sec > 1 )// mapping pers -> private 272 if ( sec > 1 )// mapping pers -> private
272 --sec; 273 --sec;
273 event->setSecrecy( sec ); 274 event->setSecrecy( sec );
274 if ( aItem->GetBusyStatus() == 0 ) 275 if ( aItem->GetBusyStatus() == 0 )
275 event->setTransparency( Event::Transparent);// OL free 276 event->setTransparency( Event::Transparent);// OL free
276 else 277 else
277 event->setTransparency( Event::Opaque);//OL all other 278 event->setTransparency( Event::Opaque);//OL all other
278 279
279 if ( aItem->GetIsRecurring() && computeRecurrence ) { //recur 280 if ( aItem->GetIsRecurring() && computeRecurrence ) { //recur
280 281
281 RecurrencePattern recpat = aItem->GetRecurrencePattern(); 282 RecurrencePattern recpat = aItem->GetRecurrencePattern();
282 283
283 QDate startDate = mDdate2Qdtr(recpat.GetPatternStartDate()).date(); 284 QDate startDate = mDdate2Qdtr(recpat.GetPatternStartDate()).date();
284 int freq = recpat.GetInterval(); 285 int freq = recpat.GetInterval();
285 286
286 bool hasEndDate = !recpat.GetNoEndDate(); 287 bool hasEndDate = !recpat.GetNoEndDate();
287 QDate endDate = mDdate2Qdtr(recpat.GetPatternEndDate()).date(); 288 QDate endDate = mDdate2Qdtr(recpat.GetPatternEndDate()).date();
288 QBitArray weekDays( 7 ); 289 QBitArray weekDays( 7 );
289 weekDays.fill(false ); 290 weekDays.fill(false );
290 uint weekDaysNum = recpat.GetDayOfWeekMask(); 291 uint weekDaysNum = recpat.GetDayOfWeekMask();
291 int i; 292 int i;
292 int bb = 2; 293 int bb = 2;
293 for( i = 1; i <= 6; ++i ) { 294 for( i = 1; i <= 6; ++i ) {
294 weekDays.setBit( i - 1, ( bb & weekDaysNum )); 295 weekDays.setBit( i - 1, ( bb & weekDaysNum ));
295 bb = 4 << (i-1); 296 bb = 4 << (i-1);
296 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) ); 297 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) );
297 } 298 }
298 if ( 1 & weekDaysNum) 299 if ( 1 & weekDaysNum)
299 weekDays.setBit( 6 ); 300 weekDays.setBit( 6 );
300 // int pos = 1;// pending 301 // int pos = 1;// pending
301 302
302 Recurrence *r = event->recurrence(); 303 Recurrence *r = event->recurrence();
303 int rtype = recpat.GetRecurrenceType(); 304 int rtype = recpat.GetRecurrenceType();
304 //recurrence types are: 305 //recurrence types are:
305 /* 306 /*
306 olRecursDaily(0) 307 olRecursDaily(0)
307 olRecursWeekly(1) 308 olRecursWeekly(1)
308 olRecursMonthly(2) 309 olRecursMonthly(2)
309 olRecursMonthNth(3) 310 olRecursMonthNth(3)
310 olRecursYearly(5) 311 olRecursYearly(5)
311 olRecursYearNth(6) 312 olRecursYearNth(6)
312 */ 313 */
313 314
314 int duration = recpat.GetOccurrences(); 315 int duration = recpat.GetOccurrences();
315 if ( !hasEndDate ) 316 if ( !hasEndDate )
316 duration = -1; 317 duration = -1;
317 318
318 //LPDISPATCH RecurrencePattern::GetExceptions() 319 //LPDISPATCH RecurrencePattern::GetExceptions()
319 //long RecurrencePattern::GetMonthOfYear() 320 //long RecurrencePattern::GetMonthOfYear()
320 if ( rtype == 0 ) { 321 if ( rtype == 0 ) {
321 if ( hasEndDate ) r->setDaily( freq, endDate ); 322 if ( hasEndDate ) r->setDaily( freq, endDate );
322 else r->setDaily( freq, duration ); 323 else r->setDaily( freq, duration );
323 } else if ( rtype == 1 ) { 324 } else if ( rtype == 1 ) {
324 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate ); 325 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate );
325 else r->setWeekly( freq, weekDays, duration ); 326 else r->setWeekly( freq, weekDays, duration );
326 } else if ( rtype == 2 ) { 327 } else if ( rtype == 2 ) {
327 if ( hasEndDate ) 328 if ( hasEndDate )
328 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate ); 329 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate );
329 else 330 else
330 r->setMonthly( Recurrence::rMonthlyDay, freq, duration ); 331 r->setMonthly( Recurrence::rMonthlyDay, freq, duration );
331 //r->addMonthlyDay( startDate.day() ); 332 //r->addMonthlyDay( startDate.day() );
332 r->addMonthlyDay( recpat.GetDayOfMonth() ); 333 r->addMonthlyDay( recpat.GetDayOfMonth() );
333 } else if ( rtype == 3 ) { 334 } else if ( rtype == 3 ) {
334 if ( hasEndDate ) 335 if ( hasEndDate )
335 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 336 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
336 else 337 else
337 r->setMonthly( Recurrence::rMonthlyPos, freq, duration ); 338 r->setMonthly( Recurrence::rMonthlyPos, freq, duration );
338 QBitArray days( 7 ); 339 QBitArray days( 7 );
339 days.fill( false ); 340 days.fill( false );
340 days.setBit( startDate.dayOfWeek() - 1 ); 341 days.setBit( startDate.dayOfWeek() - 1 );
341 int pos = (startDate.day()/7)+1; 342 int pos = (startDate.day()/7)+1;
342 r->addMonthlyPos( pos, days ); 343 r->addMonthlyPos( pos, days );
343 //QString mes = i18n("Importing monthlypos.\n\npos: %1 , day: %2").arg( pos).arg( startDate.dayOfWeek() - 1); 344 //QString mes = i18n("Importing monthlypos.\n\npos: %1 , day: %2").arg( pos).arg( startDate.dayOfWeek() - 1);
344 //KMessageBox::information(this,mes); 345 //KMessageBox::information(this,mes);
345 } else if ( rtype == 5 ) { 346 } else if ( rtype == 5 ) {
346 freq = 1; 347 freq = 1;
347 if ( hasEndDate ) 348 if ( hasEndDate )
348 r->setYearly( Recurrence::rYearlyMonth, freq, endDate ); 349 r->setYearly( Recurrence::rYearlyMonth, freq, endDate );
349 else 350 else
350 r->setYearly( Recurrence::rYearlyMonth, freq, duration ); 351 r->setYearly( Recurrence::rYearlyMonth, freq, duration );
351 r->addYearlyNum( startDate.month() ); 352 r->addYearlyNum( startDate.month() );
352 } else if ( true /*rtype == 6*/ ) { 353 } else if ( true /*rtype == 6*/ ) {
353 // KOganizer cannot handle this in the GUI 354 // KOganizer cannot handle this in the GUI
354 // we are mapping this to monthly - every 12. month 355 // we are mapping this to monthly - every 12. month
355 freq = 12; 356 freq = 12;
356 if ( hasEndDate ) 357 if ( hasEndDate )
357 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 358 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
358 else 359 else
359 r->setMonthly( Recurrence::rMonthlyPos, freq, duration ); 360 r->setMonthly( Recurrence::rMonthlyPos, freq, duration );
360 QBitArray days( 7 ); 361 QBitArray days( 7 );
361 days.fill( false ); 362 days.fill( false );
362 days.setBit( startDate.dayOfWeek() - 1 ); 363 days.setBit( startDate.dayOfWeek() - 1 );
363 int pos = (startDate.day()/7)+1; 364 int pos = (startDate.day()/7)+1;
364 r->addMonthlyPos( pos, days ); 365 r->addMonthlyPos( pos, days );
365 } 366 }
366 // recurrence exceptions 367 // recurrence exceptions
367 LPDISPATCH dispItem = recpat.GetExceptions(); 368 LPDISPATCH dispItem = recpat.GetExceptions();
368 dispItem->AddRef(); 369 dispItem->AddRef();
369 Exceptions ex(dispItem); 370 Exceptions ex(dispItem);
370 _variant_t indx((long)0); 371 _variant_t indx((long)0);
371 LPDISPATCH itm; 372 LPDISPATCH itm;
372 for(i=1; i <= ex.GetCount(); ++i) { 373 for(i=1; i <= ex.GetCount(); ++i) {
373 indx = (long)i; 374 indx = (long)i;
374 itm = ex.Item( indx.Detach() ); 375 itm = ex.Item( indx.Detach() );
375 ::Exception * pItem = (::Exception *)&itm; 376 ::Exception * pItem = (::Exception *)&itm;
376 event->addExDate( QDateTime( mDdate2Qdtr( pItem->GetOriginalDate())).date() ); 377 event->addExDate( QDateTime( mDdate2Qdtr( pItem->GetOriginalDate())).date() );
377 if ( !pItem->GetDeleted() ) { 378 if ( !pItem->GetDeleted() ) {
378 LPDISPATCH appIt = pItem->GetAppointmentItem(); 379 LPDISPATCH appIt = pItem->GetAppointmentItem();
379 _AppointmentItem * paItem = (_AppointmentItem *)&appIt; 380 _AppointmentItem * paItem = (_AppointmentItem *)&appIt;
380 ol2kopiCalendar( paItem, false ); 381 ol2kopiCalendar( paItem, false );
381 } 382 }
382 itm->Release(); 383 itm->Release();
383 } 384 }
384 } 385 }
385 // recurrence ENTE 386 // recurrence ENTE
386 event->setOrganizer( QString::fromUcs2( aItem->GetOrganizer().GetBuffer())); 387 event->setOrganizer( QString::fromUcs2( aItem->GetOrganizer().GetBuffer()));
387 388
388 //GetOptionalAttendees() 389 //GetOptionalAttendees()
389 //GetRequiredAttendees() 390 //GetRequiredAttendees()
390 LPDISPATCH dispItem = aItem->GetRecipients(); 391 LPDISPATCH dispItem = aItem->GetRecipients();
391 dispItem->AddRef(); 392 dispItem->AddRef();
392 _Folders mf(dispItem); 393 _Folders mf(dispItem);
393 mf.m_lpDispatch->AddRef(); 394 mf.m_lpDispatch->AddRef();
394 _variant_t indx((long)0); 395 _variant_t indx((long)0);
395 LPDISPATCH itm; 396 LPDISPATCH itm;
396 int i; 397 int i;
397 QString optAtt = QString::fromUcs2( aItem->GetOptionalAttendees().GetBuffer()); 398 QString optAtt = QString::fromUcs2( aItem->GetOptionalAttendees().GetBuffer());
398 QString reqAtt = QString::fromUcs2( aItem->GetRequiredAttendees().GetBuffer()); 399 QString reqAtt = QString::fromUcs2( aItem->GetRequiredAttendees().GetBuffer());
399 //GetRequiredAttendees() 400 //GetRequiredAttendees()
400 for(i=1; i <= mf.GetCount(); ++i) { 401 for(i=1; i <= mf.GetCount(); ++i) {
401 indx = (long)i; 402 indx = (long)i;
402 itm = mf.Item( indx.Detach() ); 403 itm = mf.Item( indx.Detach() );
403 Recipient * pItem = (Recipient *)&itm; 404 Recipient * pItem = (Recipient *)&itm;
404 405
405 //a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 406 //a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
406 QString name = QString::fromUcs2( pItem->GetName().GetBuffer()); 407 QString name = QString::fromUcs2( pItem->GetName().GetBuffer());
407 KCal::Attendee::PartStat stat; 408 KCal::Attendee::PartStat stat;
408 bool rsvp = false; 409 bool rsvp = false;
409 switch ( pItem->GetMeetingResponseStatus() ) { 410 switch ( pItem->GetMeetingResponseStatus() ) {
410 case 0: //not answered 411 case 0: //not answered
411 rsvp = true; 412 rsvp = true;
412 case 5: //not answered 413 case 5: //not answered
413 stat = Attendee::NeedsAction; 414 stat = Attendee::NeedsAction;
414 break; 415 break;
415 case 1: //organizer 416 case 1: //organizer
416 stat = Attendee::Delegated ; 417 stat = Attendee::Delegated ;
417 break; 418 break;
418 case 2: //tentative 419 case 2: //tentative
419 stat = Attendee::Tentative ; 420 stat = Attendee::Tentative ;
420 break; 421 break;
421 case 3: //accepted 422 case 3: //accepted
422 stat = Attendee::Accepted; 423 stat = Attendee::Accepted;
423 break; 424 break;
424 case 4: //declined 425 case 4: //declined
425 stat =Attendee::Declined ; 426 stat =Attendee::Declined ;
426 break; 427 break;
427 default: 428 default:
428 stat = Attendee::NeedsAction ; 429 stat = Attendee::NeedsAction ;
429 430
430 } 431 }
431 KCal::Attendee::Role role; 432 KCal::Attendee::Role role;
432 if ( event->organizer() == name ) 433 if ( event->organizer() == name )
433 role = KCal::Attendee::Chair; 434 role = KCal::Attendee::Chair;
434 else if ( reqAtt.find( name ) >= 0 ) 435 else if ( reqAtt.find( name ) >= 0 )
435 role = KCal::Attendee::ReqParticipant; 436 role = KCal::Attendee::ReqParticipant;
436 else if ( optAtt.find( name ) >= 0 ) 437 else if ( optAtt.find( name ) >= 0 )
437 role = KCal::Attendee::OptParticipant; 438 role = KCal::Attendee::OptParticipant;
438 else 439 else
439 role = KCal::Attendee::NonParticipant; 440 role = KCal::Attendee::NonParticipant;
440 QString mail = QString::fromUcs2(pItem->GetAddress().GetBuffer()); 441 QString mail = QString::fromUcs2(pItem->GetAddress().GetBuffer());
441 if( mail.isEmpty() && name.find("@") > 0 ) 442 if( mail.isEmpty() && name.find("@") > 0 )
442 mail = name; 443 mail = name;
443 QString uid;
444 if ( mail.isEmpty() )
445 uid = QString::fromUcs2( pItem->GetEntryID().GetBuffer());
446 else
447 uid = mail;
448 mail = mail.stripWhiteSpace(); 444 mail = mail.stripWhiteSpace();
445
446 QString uid = getUidByEmail( mail );
447 //uid = QString::fromUcs2( pItem->GetEntryID().GetBuffer());
449 KCal::Attendee * a = new KCal::Attendee( name, mail,rsvp,stat,role,uid) ; 448 KCal::Attendee * a = new KCal::Attendee( name, mail,rsvp,stat,role,uid) ;
450 event->addAttendee( a , false ); 449 event->addAttendee( a , false );
451 itm->Release(); 450 itm->Release();
452 } 451 }
453 452
454 453
455 if ( !mCalendar->addEventNoDup( event )) 454 if ( !mCalendar->addEventNoDup( event ))
456 delete event; 455 delete event;
457 else { 456 else {
458 // QString mes = i18n("Importing %1.\n date: %2 date: %3").arg( event->summary()).arg( event->dtStart().toString()).arg( event->dtEnd().toString()); 457 // QString mes = i18n("Importing %1.\n date: %2 date: %3").arg( event->summary()).arg( event->dtStart().toString()).arg( event->dtEnd().toString());
459 //KMessageBox::information(this,mes); 458 //KMessageBox::information(this,mes);
460 ++importedItems; 459 ++importedItems;
461 } 460 }
462} 461}
463void KOImportOLdialog::slotCancel() 462void KOImportOLdialog::slotCancel()
464{ 463{
465 reject(); 464 reject();
466} 465}
466
467QString KOImportOLdialog::getUidByEmail( QString email )
468{
469 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
470 KABC::AddressBook::Iterator it;
471 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
472 QStringList em = (*it).emails();
473 if ( em.contains( email ))
474 return (*it).uid();
475 }
476 return "";
477}
diff --git a/korganizer/koimportoldialog.h b/korganizer/koimportoldialog.h
index f6a753d..c8847c5 100644
--- a/korganizer/koimportoldialog.h
+++ b/korganizer/koimportoldialog.h
@@ -1,83 +1,84 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23#ifndef KOINCIDENCEEDITOR_H 23#ifndef KOINCIDENCEEDITOR_H
24#define KOINCIDENCEEDITOR_H 24#define KOINCIDENCEEDITOR_H
25 25
26#include <kdialogbase.h> 26#include <kdialogbase.h>
27 27
28#include <afxdisp.h> 28#include <afxdisp.h>
29#include <libkcal/calendar.h> 29#include <libkcal/calendar.h>
30#include <libkcal/event.h> 30#include <libkcal/event.h>
31 31
32 32
33class QDateTime; 33class QDateTime;
34class QListView; 34class QListView;
35class OLEListViewItem; 35class OLEListViewItem;
36class _AppointmentItem; 36class _AppointmentItem;
37namespace KPIM { class CategorySelectDialog; } 37namespace KPIM { class CategorySelectDialog; }
38 38
39using namespace KCal; 39using namespace KCal;
40 40
41/** 41/**
42 This is the base class for the calendar component editors. 42 This is the base class for the calendar component editors.
43*/ 43*/
44class KOImportOLdialog : public KDialogBase 44class KOImportOLdialog : public KDialogBase
45{ 45{
46 Q_OBJECT 46 Q_OBJECT
47 public: 47 public:
48 /** 48 /**
49 Construct new IncidenceEditor. 49 Construct new IncidenceEditor.
50 */ 50 */
51 KOImportOLdialog( const QString &caption, Calendar *calendar, 51 KOImportOLdialog( const QString &caption, Calendar *calendar,
52 QWidget *parent ); 52 QWidget *parent );
53 virtual ~KOImportOLdialog(); 53 virtual ~KOImportOLdialog();
54 54
55 /** Initialize editor. This function creates the tab widgets. */ 55 /** Initialize editor. This function creates the tab widgets. */
56 void init(); 56 void init();
57 57
58 public slots: 58 public slots:
59 59
60 60
61 signals: 61 signals:
62 62
63 protected slots: 63 protected slots:
64 void slotApply(); 64 void slotApply();
65 void slotOk(); 65 void slotOk();
66 void slotCancel(); 66 void slotCancel();
67 67
68 protected: 68 protected:
69 void setupFolderView(); 69 void setupFolderView();
70 void addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent); 70 void addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent);
71 void readCalendarData( DWORD folder ); 71 void readCalendarData( DWORD folder );
72 void ol2kopiCalendar( _AppointmentItem * , bool computeRecurrence = true ); 72 void ol2kopiCalendar( _AppointmentItem * , bool computeRecurrence = true );
73 73
74 Calendar *mCalendar; 74 Calendar *mCalendar;
75 QListView * mListView; 75 QListView * mListView;
76 QString getUidByEmail( QString email );
76 77
77 private: 78 private:
78 int importedItems; 79 int importedItems;
79}; 80};
80 81
81#endif 82#endif
82 83
83 84