summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koimportoldialog.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/korganizer/koimportoldialog.cpp b/korganizer/koimportoldialog.cpp
index c0bde0d..cc13395 100644
--- a/korganizer/koimportoldialog.cpp
+++ b/korganizer/koimportoldialog.cpp
@@ -1,323 +1,323 @@
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 <qregexp.h> 34#include <qregexp.h>
35#include <qheader.h> 35#include <qheader.h>
36#include <qdatetime.h> 36#include <qdatetime.h>
37#include <qlistview.h> 37#include <qlistview.h>
38 38
39#include <kdebug.h> 39#include <kdebug.h>
40#include <klocale.h> 40#include <klocale.h>
41#include <kstandarddirs.h> 41#include <kstandarddirs.h>
42#include <kmessagebox.h> 42#include <kmessagebox.h>
43#include <kfiledialog.h> 43#include <kfiledialog.h>
44 44
45#include <libkdepim/categoryselectdialog.h> 45#include <libkdepim/categoryselectdialog.h>
46#include <libkdepim/kinputdialog.h> 46#include <libkdepim/kinputdialog.h>
47 47
48#include <libkcal/calendarlocal.h> 48#include <libkcal/calendarlocal.h>
49#include <libkcal/icalformat.h> 49#include <libkcal/icalformat.h>
50#include <kabc/stdaddressbook.h> 50#include <kabc/stdaddressbook.h>
51 51
52#include "koprefs.h" 52#include "koprefs.h"
53#include "koglobals.h" 53#include "koglobals.h"
54 54
55#include "koimportoldialog.h" 55#include "koimportoldialog.h"
56 56
57#include "../outport/msoutl9.h" 57#include "../outport/msoutl9.h"
58#include <ole2.h> 58#include <ole2.h>
59#include <comutil.h> 59#include <comutil.h>
60_Application gOlApp; 60_Application gOlApp;
61 61
62QDateTime mDdate2Qdtr( DATE dt) 62QDateTime mDdate2Qdtr( DATE dt)
63{ 63{
64 COleDateTime odt; 64 COleDateTime odt;
65 SYSTEMTIME st; 65 SYSTEMTIME st;
66 odt = dt; 66 odt = dt;
67 odt.GetAsSystemTime(st); 67 odt.GetAsSystemTime(st);
68 QDateTime qdt (QDate(st.wYear, st.wMonth,st.wDay ),QTime( st.wHour, st.wMinute,st.wSecond ) ); 68 QDateTime qdt (QDate(st.wYear, st.wMonth,st.wDay ),QTime( st.wHour, st.wMinute,st.wSecond ) );
69 return qdt; 69 return qdt;
70} 70}
71 71
72class OLEListViewItem : public QCheckListItem 72class OLEListViewItem : public QCheckListItem
73{ 73{
74 public: 74 public:
75 OLEListViewItem( QListView *parent, QString text ) : 75 OLEListViewItem( QListView *parent, QString text ) :
76 QCheckListItem( parent, text, QCheckListItem::CheckBox ) { ; }; 76 QCheckListItem( parent, text, QCheckListItem::CheckBox ) { mData = 0; };
77 OLEListViewItem( QListViewItem *after, QString text ) : 77 OLEListViewItem( QListViewItem *after, QString text ) :
78 QCheckListItem( after, text, QCheckListItem::CheckBox ) { ; }; 78 QCheckListItem( after, text, QCheckListItem::CheckBox ) { mData = 0; };
79 ~OLEListViewItem() {}; 79 ~OLEListViewItem() {};
80 void setData( DWORD data ) {mData= data; }; 80 void setData( DWORD data ) {mData= data; };
81 DWORD data() { return mData ;}; 81 DWORD data() { return mData ;};
82 private: 82 private:
83 DWORD mData; 83 DWORD mData;
84}; 84};
85 85
86KOImportOLdialog::KOImportOLdialog( const QString &caption, 86KOImportOLdialog::KOImportOLdialog( const QString &caption,
87 Calendar *calendar, QWidget *parent ) : 87 Calendar *calendar, QWidget *parent ) :
88 KDialogBase( Plain, caption, User1 | Close, Ok, 88 KDialogBase( Plain, caption, User1 | Close, Ok,
89 parent, caption, true, false, i18n("Import!") ) 89 parent, caption, true, false, i18n("Import!") )
90{ 90{
91 QHBox * mw = new QHBox( this ); 91 QHBox * mw = new QHBox( this );
92 setMainWidget( mw ); 92 setMainWidget( mw );
93 mListView = new QListView( mw ); 93 mListView = new QListView( mw );
94 mListView->addColumn(i18n("Select Folder to import")); 94 mListView->addColumn(i18n("Select Folder to import"));
95 mListView->addColumn(i18n("Content Type")); 95 mListView->addColumn(i18n("Content Type"));
96 mCalendar = calendar; 96 mCalendar = calendar;
97 connect( this, SIGNAL( user1Clicked() ),SLOT ( slotApply())); 97 connect( this, SIGNAL( user1Clicked() ),SLOT ( slotApply()));
98 setupFolderView(); 98 setupFolderView();
99 resize( sizeHint().width()+50, sizeHint().height()+50 ); 99 resize( sizeHint().width()+50, sizeHint().height()+50 );
100} 100}
101 101
102KOImportOLdialog::~KOImportOLdialog() 102KOImportOLdialog::~KOImportOLdialog()
103{ 103{
104 104
105} 105}
106 106
107 107
108void KOImportOLdialog::setupFolderView() 108void KOImportOLdialog::setupFolderView()
109{ 109{
110 SCODE sc = ::OleInitialize(NULL); 110 SCODE sc = ::OleInitialize(NULL);
111 if ( FAILED ( sc ) ) { 111 if ( FAILED ( sc ) ) {
112 KMessageBox::information(this,"OLE initialisation failed"); 112 KMessageBox::information(this,"OLE initialisation failed");
113 return; 113 return;
114 } 114 }
115 115
116 if(!gOlApp.CreateDispatch(_T("Outlook.Application"),NULL)){ 116 if(!gOlApp.CreateDispatch(_T("Outlook.Application"),NULL)){
117 KMessageBox::information(this,"Sorry, cannot access Outlook"); 117 KMessageBox::information(this,"Sorry, cannot access Outlook");
118 return ; 118 return ;
119 } 119 }
120 MAPIFolder mfInbox; 120 MAPIFolder mfInbox;
121 MAPIFolder mfRoot; 121 MAPIFolder mfRoot;
122 CString szName; 122 CString szName;
123 _NameSpace olNS; 123 _NameSpace olNS;
124 olNS = gOlApp.GetNamespace(_T("MAPI")); 124 olNS = gOlApp.GetNamespace(_T("MAPI"));
125 mfInbox = olNS.GetDefaultFolder(6); 125 mfInbox = olNS.GetDefaultFolder(6);
126 mfRoot = mfInbox.GetParent(); 126 mfRoot = mfInbox.GetParent();
127 szName = mfRoot.GetName(); 127 szName = mfRoot.GetName();
128 long iType = mfRoot.GetDefaultItemType(); 128 long iType = mfRoot.GetDefaultItemType();
129 QString mes; 129 QString mes;
130 mes = QString::fromUcs2( szName.GetBuffer() ); 130 mes = QString::fromUcs2( szName.GetBuffer() );
131 OLEListViewItem * root = new OLEListViewItem( mListView, mes ); 131 OLEListViewItem * root = new OLEListViewItem( mListView, mes );
132 mfRoot.m_lpDispatch->AddRef(); 132 mfRoot.m_lpDispatch->AddRef();
133 addFolder( root, mfRoot.m_lpDispatch ); 133 addFolder( root, mfRoot.m_lpDispatch );
134 root->setOpen( true ); 134 root->setOpen( true );
135 mListView->setSortColumn( 0 ); 135 mListView->setSortColumn( 0 );
136 mListView->sort( ); 136 mListView->sort( );
137} 137}
138 138
139 139
140void KOImportOLdialog::addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent) 140void KOImportOLdialog::addFolder(OLEListViewItem* iParent, LPDISPATCH dispParent)
141{ 141{
142 MAPIFolder mfParent(dispParent), mfChild; 142 MAPIFolder mfParent(dispParent), mfChild;
143 _Folders folders; 143 _Folders folders;
144 _variant_t fndx((long)0); 144 _variant_t fndx((long)0);
145 CString szName; 145 CString szName;
146 long iType; 146 long iType;
147 OLEListViewItem* hChild; 147 OLEListViewItem* hChild;
148 148
149 folders = mfParent.GetFolders(); 149 folders = mfParent.GetFolders();
150 for(int i=1; i <= folders.GetCount(); ++i) 150 for(int i=1; i <= folders.GetCount(); ++i)
151 { 151 {
152 fndx = (long)i; 152 fndx = (long)i;
153 mfChild = folders.Item(fndx.Detach()); 153 mfChild = folders.Item(fndx.Detach());
154 mfChild.m_lpDispatch->AddRef(); 154 mfChild.m_lpDispatch->AddRef();
155 szName = mfChild.GetName(); 155 szName = mfChild.GetName();
156 iType = mfChild.GetDefaultItemType(); 156 iType = mfChild.GetDefaultItemType();
157 hChild = new OLEListViewItem( iParent , QString::fromUcs2( szName.GetBuffer() ) ); 157 hChild = new OLEListViewItem( iParent , QString::fromUcs2( szName.GetBuffer() ) );
158 if ( iType != 1) 158 if ( iType != 1)
159 hChild->setEnabled( false ); 159 hChild->setEnabled( false );
160 QString ts; 160 QString ts;
161 switch( iType ) { 161 switch( iType ) {
162 case 0: 162 case 0:
163 ts = i18n("Mail"); 163 ts = i18n("Mail");
164 break; 164 break;
165 case 1: 165 case 1:
166 ts = i18n("Calendar"); 166 ts = i18n("Calendar");
167 break; 167 break;
168 case 2: 168 case 2:
169 ts = i18n("Contacts"); 169 ts = i18n("Contacts");
170 break; 170 break;
171 case 3: 171 case 3:
172 ts = i18n("Todos"); 172 ts = i18n("Todos");
173 break; 173 break;
174 case 4: 174 case 4:
175 ts = i18n("Journals"); 175 ts = i18n("Journals");
176 break; 176 break;
177 case 5: 177 case 5:
178 ts = i18n("Notes"); 178 ts = i18n("Notes");
179 break; 179 break;
180 default: 180 default:
181 ts = i18n("Unknown"); 181 ts = i18n("Unknown");
182 } 182 }
183 hChild->setText( 1,ts); 183 hChild->setText( 1,ts);
184 hChild->setData( (DWORD) mfChild.m_lpDispatch ); 184 hChild->setData( (DWORD) mfChild.m_lpDispatch );
185 mfChild.m_lpDispatch->AddRef(); 185 mfChild.m_lpDispatch->AddRef();
186 addFolder(hChild, mfChild.m_lpDispatch); 186 addFolder(hChild, mfChild.m_lpDispatch);
187 } 187 }
188} 188}
189 189
190void KOImportOLdialog::slotApply() 190void KOImportOLdialog::slotApply()
191{ 191{
192 importedItems = 0; 192 importedItems = 0;
193 OLEListViewItem* child = (OLEListViewItem*) mListView->firstChild(); 193 OLEListViewItem* child = (OLEListViewItem*) mListView->firstChild();
194 while ( child ) { 194 while ( child ) {
195 if ( child->isOn() ) 195 if ( child->isOn()&& child->data() )
196 readCalendarData( child->data() ); 196 readCalendarData( child->data() );
197 child = (OLEListViewItem*) child->itemBelow(); 197 child = (OLEListViewItem*) child->itemBelow();
198 } 198 }
199 QString mes = i18n("Importing complete.\n\n%1 items imported.").arg( importedItems); 199 QString mes = i18n("Importing complete.\n\n%1 items imported.").arg( importedItems);
200 KMessageBox::information(this,mes); 200 KMessageBox::information(this,mes);
201} 201}
202void KOImportOLdialog::readCalendarData( DWORD folder ) 202void KOImportOLdialog::readCalendarData( DWORD folder )
203{ 203{
204 204
205 LPDISPATCH dispItem = (LPDISPATCH)folder; 205 LPDISPATCH dispItem = (LPDISPATCH)folder;
206 dispItem->AddRef(); 206 dispItem->AddRef();
207 MAPIFolder mf(dispItem); 207 MAPIFolder mf(dispItem);
208 mf.m_lpDispatch->AddRef(); 208 mf.m_lpDispatch->AddRef();
209 _Items folderItems; 209 _Items folderItems;
210 _variant_t indx((long)0); 210 _variant_t indx((long)0);
211 LPDISPATCH itm; 211 LPDISPATCH itm;
212 int i; 212 int i;
213 folderItems = mf.GetItems(); 213 folderItems = mf.GetItems();
214 QProgressBar bar( folderItems.GetCount(),0 ); 214 QProgressBar bar( folderItems.GetCount(),0 );
215 bar.setCaption (i18n("Importing - close to abort!") ); 215 bar.setCaption (i18n("Importing - close to abort!") );
216 int h = bar.sizeHint().height() ; 216 int h = bar.sizeHint().height() ;
217 int w = 300; 217 int w = 300;
218 int dw = QApplication::desktop()->width(); 218 int dw = QApplication::desktop()->width();
219 int dh = QApplication::desktop()->height(); 219 int dh = QApplication::desktop()->height();
220 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 220 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
221 bar.show(); 221 bar.show();
222 for(i=1; i <= folderItems.GetCount(); ++i) 222 for(i=1; i <= folderItems.GetCount(); ++i)
223 { 223 {
224 qApp->processEvents(); 224 qApp->processEvents();
225 if ( ! bar.isVisible() ) 225 if ( ! bar.isVisible() )
226 return ; 226 return ;
227 bar.setProgress( i ); 227 bar.setProgress( i );
228 indx = (long)i; 228 indx = (long)i;
229 itm = folderItems.Item(indx.Detach()); 229 itm = folderItems.Item(indx.Detach());
230 _AppointmentItem * pItem = (_AppointmentItem *)&itm; 230 _AppointmentItem * pItem = (_AppointmentItem *)&itm;
231 ol2kopiCalendar( pItem ); 231 ol2kopiCalendar( pItem );
232 itm->Release(); 232 itm->Release();
233 } 233 }
234} 234}
235void KOImportOLdialog::slotOk() 235void KOImportOLdialog::slotOk()
236{ 236{
237 QDialog::accept(); 237 QDialog::accept();
238} 238}
239 239
240void KOImportOLdialog::ol2kopiCalendar( _AppointmentItem * aItem, bool computeRecurrence ) 240void KOImportOLdialog::ol2kopiCalendar( _AppointmentItem * aItem, bool computeRecurrence )
241{ 241{
242 KCal::Event* event = new KCal::Event(); 242 KCal::Event* event = new KCal::Event();
243 if ( aItem->GetAllDayEvent() ){ 243 if ( aItem->GetAllDayEvent() ){
244 event->setDtStart( QDateTime( mDdate2Qdtr( aItem->GetStart()).date(),QTime(0,0,0 ) )); 244 event->setDtStart( QDateTime( mDdate2Qdtr( aItem->GetStart()).date(),QTime(0,0,0 ) ));
245 event->setDtEnd( QDateTime( mDdate2Qdtr( aItem->GetEnd()) .date(),QTime(0,0,0 )).addDays(-1)); 245 event->setDtEnd( QDateTime( mDdate2Qdtr( aItem->GetEnd()) .date(),QTime(0,0,0 )).addDays(-1));
246 event->setFloats( true ); 246 event->setFloats( true );
247 } else { 247 } else {
248 event->setDtStart( mDdate2Qdtr( aItem->GetStart()) ); 248 event->setDtStart( mDdate2Qdtr( aItem->GetStart()) );
249 event->setDtEnd( mDdate2Qdtr( aItem->GetEnd()) ); 249 event->setDtEnd( mDdate2Qdtr( aItem->GetEnd()) );
250 event->setFloats( false ); 250 event->setFloats( false );
251 } 251 }
252 event->setSummary( QString::fromUcs2( aItem->GetSubject().GetBuffer()) ); 252 event->setSummary( QString::fromUcs2( aItem->GetSubject().GetBuffer()) );
253 event->setLocation( QString::fromUcs2( aItem->GetLocation().GetBuffer()) ); 253 event->setLocation( QString::fromUcs2( aItem->GetLocation().GetBuffer()) );
254 event->setDescription( QString::fromUcs2( aItem->GetBody().GetBuffer()).replace( QRegExp("\\r"), "") ); 254 event->setDescription( QString::fromUcs2( aItem->GetBody().GetBuffer()).replace( QRegExp("\\r"), "") );
255 QString cat = QString::fromUcs2( aItem->GetCategories().GetBuffer()); 255 QString cat = QString::fromUcs2( aItem->GetCategories().GetBuffer());
256 event->setCategories( QStringList::split( ";", cat )); 256 event->setCategories( QStringList::split( ";", cat ));
257 if ( aItem->GetReminderSet() ) { 257 if ( aItem->GetReminderSet() ) {
258 event->clearAlarms(); 258 event->clearAlarms();
259 Alarm* alarm = event->newAlarm(); 259 Alarm* alarm = event->newAlarm();
260 alarm->setStartOffset( -aItem->GetReminderMinutesBeforeStart()*60 ); 260 alarm->setStartOffset( -aItem->GetReminderMinutesBeforeStart()*60 );
261 alarm->setEnabled( true ); 261 alarm->setEnabled( true );
262 if ( aItem->GetReminderPlaySound() ) { 262 if ( aItem->GetReminderPlaySound() ) {
263 alarm->setType( Alarm::Audio ); 263 alarm->setType( Alarm::Audio );
264 alarm->setAudioFile( QString::fromUcs2( aItem->GetReminderSoundFile().GetBuffer())); 264 alarm->setAudioFile( QString::fromUcs2( aItem->GetReminderSoundFile().GetBuffer()));
265 } 265 }
266 else 266 else
267 alarm->setType( Alarm::Display ); 267 alarm->setType( Alarm::Display );
268 alarm->setRepeatCount( aItem->GetReplyTime() ); 268 alarm->setRepeatCount( aItem->GetReplyTime() );
269 } 269 }
270 // OL :pub 0 - pers 1 - priv 2 - conf 3 270 // OL :pub 0 - pers 1 - priv 2 - conf 3
271 // KO : pub 0 - priv 1 - conf 2 271 // KO : pub 0 - priv 1 - conf 2
272 int sec = aItem->GetSensitivity() ; 272 int sec = aItem->GetSensitivity() ;
273 if ( sec > 1 )// mapping pers -> private 273 if ( sec > 1 )// mapping pers -> private
274 --sec; 274 --sec;
275 event->setSecrecy( sec ); 275 event->setSecrecy( sec );
276 if ( aItem->GetBusyStatus() == 0 ) 276 if ( aItem->GetBusyStatus() == 0 )
277 event->setTransparency( Event::Transparent);// OL free 277 event->setTransparency( Event::Transparent);// OL free
278 else 278 else
279 event->setTransparency( Event::Opaque);//OL all other 279 event->setTransparency( Event::Opaque);//OL all other
280 280
281 if ( aItem->GetIsRecurring() && computeRecurrence ) { //recur 281 if ( aItem->GetIsRecurring() && computeRecurrence ) { //recur
282 282
283 RecurrencePattern recpat = aItem->GetRecurrencePattern(); 283 RecurrencePattern recpat = aItem->GetRecurrencePattern();
284 284
285 QDate startDate = mDdate2Qdtr(recpat.GetPatternStartDate()).date(); 285 QDate startDate = mDdate2Qdtr(recpat.GetPatternStartDate()).date();
286 int freq = recpat.GetInterval(); 286 int freq = recpat.GetInterval();
287 287
288 bool hasEndDate = !recpat.GetNoEndDate(); 288 bool hasEndDate = !recpat.GetNoEndDate();
289 QDate endDate = mDdate2Qdtr(recpat.GetPatternEndDate()).date(); 289 QDate endDate = mDdate2Qdtr(recpat.GetPatternEndDate()).date();
290 QBitArray weekDays( 7 ); 290 QBitArray weekDays( 7 );
291 weekDays.fill(false ); 291 weekDays.fill(false );
292 uint weekDaysNum = recpat.GetDayOfWeekMask(); 292 uint weekDaysNum = recpat.GetDayOfWeekMask();
293 int i; 293 int i;
294 int bb = 2; 294 int bb = 2;
295 for( i = 1; i <= 6; ++i ) { 295 for( i = 1; i <= 6; ++i ) {
296 weekDays.setBit( i - 1, ( bb & weekDaysNum )); 296 weekDays.setBit( i - 1, ( bb & weekDaysNum ));
297 bb = 4 << (i-1); 297 bb = 4 << (i-1);
298 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) ); 298 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) );
299 } 299 }
300 if ( 1 & weekDaysNum) 300 if ( 1 & weekDaysNum)
301 weekDays.setBit( 6 ); 301 weekDays.setBit( 6 );
302 // int pos = 1;// pending 302 // int pos = 1;// pending
303 303
304 Recurrence *r = event->recurrence(); 304 Recurrence *r = event->recurrence();
305 int rtype = recpat.GetRecurrenceType(); 305 int rtype = recpat.GetRecurrenceType();
306 //recurrence types are: 306 //recurrence types are:
307 /* 307 /*
308 olRecursDaily(0) 308 olRecursDaily(0)
309 olRecursWeekly(1) 309 olRecursWeekly(1)
310 olRecursMonthly(2) 310 olRecursMonthly(2)
311 olRecursMonthNth(3) 311 olRecursMonthNth(3)
312 olRecursYearly(5) 312 olRecursYearly(5)
313 olRecursYearNth(6) 313 olRecursYearNth(6)
314 */ 314 */
315 315
316 int duration = recpat.GetOccurrences(); 316 int duration = recpat.GetOccurrences();
317 if ( !hasEndDate ) 317 if ( !hasEndDate )
318 duration = -1; 318 duration = -1;
319 319
320 //LPDISPATCH RecurrencePattern::GetExceptions() 320 //LPDISPATCH RecurrencePattern::GetExceptions()
321 //long RecurrencePattern::GetMonthOfYear() 321 //long RecurrencePattern::GetMonthOfYear()
322 if ( rtype == 0 ) { 322 if ( rtype == 0 ) {
323 if ( hasEndDate ) r->setDaily( freq, endDate ); 323 if ( hasEndDate ) r->setDaily( freq, endDate );