author | zautrix <zautrix> | 2004-06-26 19:01:18 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-06-26 19:01:18 (UTC) |
commit | b9aad1f15dc600e4dbe4c62d3fcced6363188ba3 (patch) (unidiff) | |
tree | 2c3d4004fb21c72cba65793859f9bcd8ffd3a49c /korganizer/incomingdialog.cpp | |
download | kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.zip kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.gz kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.bz2 |
Initial revision
Diffstat (limited to 'korganizer/incomingdialog.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | korganizer/incomingdialog.cpp | 527 |
1 files changed, 527 insertions, 0 deletions
diff --git a/korganizer/incomingdialog.cpp b/korganizer/incomingdialog.cpp new file mode 100644 index 0000000..490d21e --- a/dev/null +++ b/korganizer/incomingdialog.cpp | |||
@@ -0,0 +1,527 @@ | |||
1 | /* | ||
2 | This file is part of KOrganizer. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
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 | ||
7 | the Free Software Foundation; either version 2 of the License, or | ||
8 | (at your option) any later version. | ||
9 | |||
10 | This program is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | GNU General Public License for more details. | ||
14 | |||
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 | ||
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
18 | */ | ||
19 | |||
20 | #include <qlistview.h> | ||
21 | #include <qfile.h> | ||
22 | #include <qdir.h> | ||
23 | #include <qmap.h> | ||
24 | |||
25 | #include <kglobal.h> | ||
26 | #include <klocale.h> | ||
27 | #include <kdebug.h> | ||
28 | #include <kstandarddirs.h> | ||
29 | #include <kmessagebox.h> | ||
30 | |||
31 | #include <libkcal/incidence.h> | ||
32 | #include <libkcal/event.h> | ||
33 | #include <libkcal/calendar.h> | ||
34 | #include <libkcal/freebusy.h> | ||
35 | #include <libkcal/attendee.h> | ||
36 | #include <libkcal/calendarresources.h> | ||
37 | #include <libkcal/resourcecalendar.h> | ||
38 | #include <kresources/resourceselectdialog.h> | ||
39 | |||
40 | #ifndef KORG_NOMAIL | ||
41 | #include "mailscheduler.h" | ||
42 | #else | ||
43 | #include <libkcal/dummyscheduler.h> | ||
44 | #endif | ||
45 | |||
46 | |||
47 | #include "incomingdialog.h" | ||
48 | #include "koeventviewerdialog.h" | ||
49 | #include "kocounterdialog.h" | ||
50 | #include "koprefs.h" | ||
51 | |||
52 | #ifndef KORG_NOKABC | ||
53 | #include <kabc/stdaddressbook.h> | ||
54 | #define size count | ||
55 | #endif | ||
56 | |||
57 | |||
58 | ScheduleItemIn::ScheduleItemIn(QListView *parent,IncidenceBase *ev, | ||
59 | Scheduler::Method method,ScheduleMessage::Status status) | ||
60 | : QListViewItem(parent) | ||
61 | { | ||
62 | mIncidence = ev; | ||
63 | mMethod = method; | ||
64 | mStatus = status; | ||
65 | setText(6,Scheduler::translatedMethodName(mMethod)+" "); | ||
66 | setText(7,ScheduleMessage::statusName(status)); | ||
67 | } | ||
68 | |||
69 | |||
70 | /* Visitor */ | ||
71 | ScheduleItemVisitor::ScheduleItemVisitor(ScheduleItemIn *item) | ||
72 | { | ||
73 | mItem = item; | ||
74 | } | ||
75 | |||
76 | ScheduleItemVisitor::~ScheduleItemVisitor() | ||
77 | { | ||
78 | } | ||
79 | |||
80 | bool ScheduleItemVisitor::visit(Event *e) | ||
81 | { | ||
82 | mItem->setText(0,e->summary()); | ||
83 | mItem->setText(1,e->dtStartDateStr()); | ||
84 | if (e->doesFloat()) { | ||
85 | mItem->setText(2,i18n("no time ")); | ||
86 | mItem->setText(4,i18n("no time ")); | ||
87 | } | ||
88 | else { | ||
89 | mItem->setText(2,e->dtStartTimeStr()); | ||
90 | mItem->setText(4,e->dtEndTimeStr()); | ||
91 | } | ||
92 | if (e->hasEndDate()) { | ||
93 | mItem->setText(3,e->dtEndDateStr()); | ||
94 | } | ||
95 | else { | ||
96 | mItem->setText(3,""); | ||
97 | } | ||
98 | mItem->setText(5,e->organizer()+" "); | ||
99 | |||
100 | return true; | ||
101 | } | ||
102 | |||
103 | bool ScheduleItemVisitor::visit(Todo *e) | ||
104 | { | ||
105 | mItem->setText(0,e->summary()); | ||
106 | if (e->hasStartDate()) { | ||
107 | mItem->setText(1,e->dtStartDateStr()); | ||
108 | if (!e->doesFloat()) { | ||
109 | mItem->setText(2,e->dtStartTimeStr()); | ||
110 | } | ||
111 | } | ||
112 | if (e->hasDueDate()) { | ||
113 | mItem->setText(1,e->dtDueDateStr()); | ||
114 | if (!e->doesFloat()) { | ||
115 | mItem->setText(2,e->dtDueTimeStr()); | ||
116 | } | ||
117 | } | ||
118 | mItem->setText(5,e->organizer()+" "); | ||
119 | |||
120 | return true; | ||
121 | } | ||
122 | |||
123 | bool ScheduleItemVisitor::visit(Journal *) | ||
124 | { | ||
125 | return false; | ||
126 | } | ||
127 | |||
128 | |||
129 | /* | ||
130 | * Constructs a IncomingDialog which is a child of 'parent', with the | ||
131 | * name 'name' and widget flags set to 'f' | ||
132 | * | ||
133 | * The dialog will by default be modeless, unless you set 'modal' to | ||
134 | * TRUE to construct a modal dialog. | ||
135 | */ | ||
136 | IncomingDialog::IncomingDialog(Calendar *calendar,OutgoingDialog *outgoing, | ||
137 | QWidget* parent,const char* name,bool modal,WFlags fl) : | ||
138 | IncomingDialog_base(parent,name,modal,fl) | ||
139 | { | ||
140 | mCalendar = calendar; | ||
141 | mOutgoing = outgoing; | ||
142 | #ifndef KORG_NOMAIL | ||
143 | mScheduler = new MailScheduler(mCalendar); | ||
144 | #else | ||
145 | mScheduler = new DummyScheduler(mCalendar); | ||
146 | #endif | ||
147 | mMessageListView->setColumnAlignment(1,AlignHCenter); | ||
148 | mMessageListView->setColumnAlignment(2,AlignHCenter); | ||
149 | mMessageListView->setColumnAlignment(3,AlignHCenter); | ||
150 | mMessageListView->setColumnAlignment(4,AlignHCenter); | ||
151 | QObject::connect(mMessageListView,SIGNAL(doubleClicked(QListViewItem *)), | ||
152 | this,SLOT(showEvent(QListViewItem *))); | ||
153 | retrieve(); | ||
154 | } | ||
155 | |||
156 | /* | ||
157 | * Destroys the object and frees any allocated resources | ||
158 | */ | ||
159 | IncomingDialog::~IncomingDialog() | ||
160 | { | ||
161 | // no need to delete child widgets, Qt does it all for us | ||
162 | } | ||
163 | |||
164 | void IncomingDialog::setOutgoingDialog(OutgoingDialog *outgoing) | ||
165 | { | ||
166 | mOutgoing = outgoing; | ||
167 | } | ||
168 | |||
169 | void IncomingDialog::retrieve() | ||
170 | { | ||
171 | QPtrList <ScheduleMessage> messages = mScheduler->retrieveTransactions(); | ||
172 | |||
173 | ScheduleMessage *message; | ||
174 | for(message = messages.first();message;message = messages.next()) { | ||
175 | IncidenceBase *inc = message->event(); | ||
176 | Scheduler::Method method = (Scheduler::Method)message->method(); | ||
177 | ScheduleMessage::Status status = message->status(); | ||
178 | |||
179 | ScheduleItemIn *item = new ScheduleItemIn(mMessageListView,inc,method,status); | ||
180 | if(inc->type()!="FreeBusy") { | ||
181 | Incidence *incidence = static_cast<Incidence *>(inc); | ||
182 | ScheduleItemVisitor v(item); | ||
183 | if (!incidence->accept(v)) delete item; | ||
184 | } else { | ||
185 | FreeBusy *fb = static_cast<FreeBusy *>(item->event()); | ||
186 | item->setText(0, "FreeBusy"); | ||
187 | item->setText(1, KGlobal::locale()->formatDate( fb->dtStart().date() ) ); | ||
188 | item->setText(2, KGlobal::locale()->formatTime( fb->dtStart().time() ) ); | ||
189 | item->setText(3, KGlobal::locale()->formatDate( fb->dtEnd().date() ) ); | ||
190 | item->setText(4, KGlobal::locale()->formatTime( fb->dtEnd().time() ) ); | ||
191 | item->setText(5, fb->organizer()); | ||
192 | } | ||
193 | automaticAction(item); | ||
194 | } | ||
195 | emit numMessagesChanged(mMessageListView->childCount()); | ||
196 | } | ||
197 | |||
198 | void IncomingDialog::acceptAllMessages() | ||
199 | { | ||
200 | bool success = false; | ||
201 | |||
202 | ScheduleItemIn *item = (ScheduleItemIn *)mMessageListView->firstChild(); | ||
203 | while(item) { | ||
204 | ScheduleItemIn *nextitem = (ScheduleItemIn *)(item->nextSibling()); | ||
205 | if (acceptMessage(item)) success = true; | ||
206 | item = nextitem; | ||
207 | } | ||
208 | |||
209 | if (success) emit calendarUpdated(); | ||
210 | } | ||
211 | |||
212 | void IncomingDialog::acceptMessage() | ||
213 | { | ||
214 | ScheduleItemIn *item = (ScheduleItemIn *)mMessageListView->selectedItem(); | ||
215 | if (item) { | ||
216 | if (acceptMessage(item)) emit calendarUpdated(); | ||
217 | } | ||
218 | } | ||
219 | |||
220 | bool IncomingDialog::acceptMessage(ScheduleItemIn *item) | ||
221 | { | ||
222 | switch (item->method()) { | ||
223 | case Scheduler::Refresh: | ||
224 | return incomeRefresh(item); | ||
225 | break; | ||
226 | case Scheduler::Counter: | ||
227 | return incomeCounter(item); | ||
228 | break; | ||
229 | case Scheduler::Declinecounter: | ||
230 | return incomeDeclineCounter(item); | ||
231 | break; | ||
232 | case Scheduler::Add: | ||
233 | return incomeAdd(item); | ||
234 | break; | ||
235 | case Scheduler::Request: | ||
236 | return incomeRequest(item); | ||
237 | break; | ||
238 | default: | ||
239 | return incomeDefault(item); | ||
240 | } | ||
241 | return false; | ||
242 | } | ||
243 | |||
244 | void IncomingDialog::rejectMessage() | ||
245 | { | ||
246 | ScheduleItemIn *item = (ScheduleItemIn *)mMessageListView->selectedItem(); | ||
247 | if (item) { | ||
248 | mScheduler->deleteTransaction(item->event()); | ||
249 | delete item; | ||
250 | emit numMessagesChanged(mMessageListView->childCount()); | ||
251 | } | ||
252 | } | ||
253 | |||
254 | void IncomingDialog::showEvent(QListViewItem *item) | ||
255 | { | ||
256 | IncidenceBase *incidence = ((ScheduleItemIn *)item)->event(); | ||
257 | if( incidence && incidence->type() == "Event" ) { | ||
258 | Event *event = static_cast<Event *>(incidence); | ||
259 | KOEventViewerDialog *eventViewer = new KOEventViewerDialog(this); | ||
260 | eventViewer->setEvent(event); | ||
261 | eventViewer->show(); | ||
262 | } | ||
263 | } | ||
264 | |||
265 | bool IncomingDialog::incomeRefresh(ScheduleItemIn *item) | ||
266 | { | ||
267 | Event *ev = mCalendar->event(item->event()->uid()); | ||
268 | if (ev) { | ||
269 | //user interaction before?? | ||
270 | Attendee *att; | ||
271 | QPtrList<Attendee> attlist = ev->attendees(); | ||
272 | for (att=attlist.first(); att; att=attlist.next()) { | ||
273 | Event *event = new Event(*ev); | ||
274 | mOutgoing->addMessage(event,Scheduler::Request,att->email()); | ||
275 | delete(event); | ||
276 | } | ||
277 | mScheduler->deleteTransaction(item->event()); | ||
278 | delete item; | ||
279 | emit numMessagesChanged(mMessageListView->childCount()); | ||
280 | return true; | ||
281 | } | ||
282 | mScheduler->deleteTransaction(item->event()); | ||
283 | delete item; | ||
284 | emit numMessagesChanged(mMessageListView->childCount()); | ||
285 | return false; | ||
286 | } | ||
287 | |||
288 | bool IncomingDialog::incomeCounter(ScheduleItemIn *item) | ||
289 | { | ||
290 | IncidenceBase *incidence = ((ScheduleItemIn *)item)->event(); | ||
291 | // currently only events supportet - attetion at insertion below! | ||
292 | if ( incidence->type() != "Event" ) return false; | ||
293 | |||
294 | Event *counterEvent = static_cast<Event *>( incidence ); | ||
295 | |||
296 | Event *even = mCalendar->event(counterEvent->uid()); | ||
297 | |||
298 | KOCounterDialog *eventViewer = new KOCounterDialog(this); | ||
299 | eventViewer->addText(i18n("counter proposal event","<b>Counter-event:</b><p>")); | ||
300 | eventViewer->addEvent(counterEvent); | ||
301 | eventViewer->addText("<hr>"); | ||
302 | eventViewer->addText(i18n("<b>Original event:</b><p>")); | ||
303 | if (even) eventViewer->addEvent(even); | ||
304 | else eventViewer->addText(i18n("A corresponding event is missing in your calendar!")); | ||
305 | eventViewer->addText("<hr>"); | ||
306 | eventViewer->addText(i18n("If this counter-event is a good proposal for your event, press 'Accept'. All Attendees will then get the new version of this event")); | ||
307 | eventViewer->show(); | ||
308 | |||
309 | eventViewer->exec(); | ||
310 | if (eventViewer->result()) { | ||
311 | kdDebug() << "IncomingDialog::Counter:Accept" << endl; | ||
312 | int revision = 0; | ||
313 | if (even) { | ||
314 | revision = even->revision(); | ||
315 | mCalendar->deleteEvent(even); | ||
316 | } | ||
317 | mCalendar->addIncidence(counterEvent); | ||
318 | |||
319 | even = mCalendar->event(item->event()->uid()); | ||
320 | if (even) { | ||
321 | if (revision < even->revision()) | ||
322 | even->setRevision(even->revision()+1); | ||
323 | else | ||
324 | even->setRevision(revision+1); | ||
325 | Event *ev = new Event(*even); | ||
326 | mOutgoing->addMessage(ev,Scheduler::Request); | ||
327 | delete(ev); | ||
328 | } | ||
329 | mScheduler->deleteTransaction(item->event()); | ||
330 | delete item; | ||
331 | emit numMessagesChanged(mMessageListView->childCount()); | ||
332 | return true; | ||
333 | } else { | ||
334 | kdDebug() << "IncomingDialog::Counter:Decline" << endl; | ||
335 | //the counter-sender's email is missing... | ||
336 | //now every attendee gets an declinecounter :-( | ||
337 | mOutgoing->addMessage(counterEvent,Scheduler::Declinecounter); | ||
338 | delete item; | ||
339 | emit numMessagesChanged(mMessageListView->childCount()); | ||
340 | mScheduler->deleteTransaction(item->event()); | ||
341 | delete item; | ||
342 | emit numMessagesChanged(mMessageListView->childCount()); | ||
343 | return true; | ||
344 | } | ||
345 | //mScheduler->deleteTransaction(item->event()); | ||
346 | delete item; | ||
347 | emit numMessagesChanged(mMessageListView->childCount()); | ||
348 | return false; | ||
349 | } | ||
350 | |||
351 | bool IncomingDialog::incomeDeclineCounter(ScheduleItemIn *item) | ||
352 | { | ||
353 | Event *even = mCalendar->event(item->event()->uid()); | ||
354 | if (even) { | ||
355 | mOutgoing->addMessage(even,Scheduler::Refresh); | ||
356 | mScheduler->deleteTransaction(item->event()); | ||
357 | delete item; | ||
358 | emit numMessagesChanged(mMessageListView->childCount()); | ||
359 | return true; | ||
360 | } | ||
361 | mScheduler->deleteTransaction(item->event()); | ||
362 | delete item; | ||
363 | emit numMessagesChanged(mMessageListView->childCount()); | ||
364 | return false; | ||
365 | } | ||
366 | |||
367 | bool IncomingDialog::incomeAdd(ScheduleItemIn *item) | ||
368 | { | ||
369 | IncidenceBase *incidence = ((ScheduleItemIn *)item)->event(); | ||
370 | if (incidence->type() == "Event" ) { | ||
371 | Event *refr = static_cast<Event *>( incidence ); | ||
372 | mOutgoing->addMessage(refr,Scheduler::Refresh); | ||
373 | mScheduler->deleteTransaction( incidence ); | ||
374 | delete item; | ||
375 | emit numMessagesChanged(mMessageListView->childCount()); | ||
376 | return true; | ||
377 | } | ||
378 | else { | ||
379 | kdDebug() << "IncomingDialog::incomeAdd - only Events are supportet yet" << endl; | ||
380 | mScheduler->deleteTransaction( incidence ); | ||
381 | delete item; | ||
382 | emit numMessagesChanged(mMessageListView->childCount()); | ||
383 | return false; | ||
384 | } | ||
385 | } | ||
386 | |||
387 | bool IncomingDialog::incomeDefault(ScheduleItemIn *item) | ||
388 | { | ||
389 | if (mScheduler->acceptTransaction(item->event(),item->method(),item->status())) { | ||
390 | delete item; | ||
391 | emit numMessagesChanged(mMessageListView->childCount()); | ||
392 | return true; | ||
393 | } | ||
394 | else { | ||
395 | KMessageBox::error(this,i18n("Unable to accept the IMIP-message. It may be a problem with the email addresses.")); | ||
396 | kdDebug() << "IncomingDialog::acceptMessage(): Error!" << endl; | ||
397 | return false; | ||
398 | } | ||
399 | return false; | ||
400 | } | ||
401 | |||
402 | bool IncomingDialog::incomeRequest(ScheduleItemIn *item) | ||
403 | { | ||
404 | if (item->event()->type()=="FreeBusy") { | ||
405 | //handel freebusy request | ||
406 | IncidenceBase *inc = item->event(); | ||
407 | QDateTime start = inc->dtStart(); | ||
408 | QDateTime end = start.addDays(inc->duration()/86400); | ||
409 | |||
410 | FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); | ||
411 | freebusy->setOrganizer(inc->organizer()); | ||
412 | Attendee *att = new Attendee(KOPrefs::instance()->fullName(), | ||
413 | KOPrefs::instance()->email()); | ||
414 | freebusy->addAttendee(att); | ||
415 | |||
416 | kdDebug() << "calendarview: schedule_publish_freebusy: startDate: " | ||
417 | << KGlobal::locale()->formatDateTime( start ) << " End Date: " | ||
418 | << KGlobal::locale()->formatDateTime( end ) << endl; | ||
419 | |||
420 | if (mOutgoing->addMessage(freebusy,Scheduler::Reply)) { | ||
421 | delete item; | ||
422 | emit numMessagesChanged(mMessageListView->childCount()); | ||
423 | delete(freebusy); | ||
424 | return true; | ||
425 | } | ||
426 | return false; | ||
427 | } else { | ||
428 | return incomeDefault(item); | ||
429 | } | ||
430 | return false; | ||
431 | } | ||
432 | |||
433 | bool IncomingDialog::automaticAction(ScheduleItemIn *item) | ||
434 | { | ||
435 | bool autoAction = false; | ||
436 | IncidenceBase *inc = item->event(); | ||
437 | Scheduler::Method method = item->method(); | ||
438 | |||
439 | if( inc->type()=="FreeBusy" ) { | ||
440 | if ( method==Scheduler::Request ) { | ||
441 | if ( KOPrefs::instance()->mIMIPAutoFreeBusy==KOPrefs::addressbookAuto ) { | ||
442 | // reply freebusy information | ||
443 | if ( checkOrganizerInAddressbook(inc->organizer()) ) { | ||
444 | incomeRequest(item); | ||
445 | } | ||
446 | } else return false; | ||
447 | } else { | ||
448 | |||
449 | if ( method==Scheduler::Reply ) { | ||
450 | if ( KOPrefs::instance()->mIMIPAutoFreeBusy==KOPrefs::addressbookAuto ) { | ||
451 | // insert freebusy information | ||
452 | //if ( checkAttendeesInAddressbook(inc) ) | ||
453 | |||
454 | } else return false; | ||
455 | } else { | ||
456 | if ( method==Scheduler::Publish) { | ||
457 | if ( KOPrefs::instance()->mIMIPAutoFreeBusy==KOPrefs::addressbookAuto ) { | ||
458 | // insert freebusy information | ||
459 | //if ( checkOrganizerInAddressbook(inc->organizer()) ) | ||
460 | |||
461 | } | ||
462 | } else return false; | ||
463 | } | ||
464 | } | ||
465 | } | ||
466 | |||
467 | if ( inc->type()=="Event" ) { | ||
468 | if ( method==Scheduler::Request || method==Scheduler::Publish ) { | ||
469 | if ( KOPrefs::instance()->mIMIPAutoInsertRequest==KOPrefs::addressbookAuto ) { | ||
470 | // insert event | ||
471 | if ( checkOrganizerInAddressbook(inc->organizer()) ) | ||
472 | autoAction = acceptMessage(item); | ||
473 | } else return false; | ||
474 | } else { | ||
475 | |||
476 | if ( method==Scheduler::Reply ) { | ||
477 | if ( KOPrefs::instance()->mIMIPAutoInsertReply==KOPrefs::addressbookAuto ) { | ||
478 | // update event information | ||
479 | if ( checkAttendeesInAddressbook(inc) ) | ||
480 | autoAction = acceptMessage(item); | ||
481 | } else return false; | ||
482 | } else { | ||
483 | |||
484 | if ( method==Scheduler::Refresh ) { | ||
485 | if ( KOPrefs::instance()->mIMIPAutoRefresh==KOPrefs::addressbookAuto ) { | ||
486 | // send refresh-information | ||
487 | if ( checkAttendeesInAddressbook(inc) ) | ||
488 | autoAction = acceptMessage(item); | ||
489 | else return false; | ||
490 | } else return false; | ||
491 | } else return false; | ||
492 | } | ||
493 | } | ||
494 | } | ||
495 | return autoAction; | ||
496 | } | ||
497 | |||
498 | bool IncomingDialog::checkOrganizerInAddressbook(QString organizer) | ||
499 | { | ||
500 | bool inBook = false; | ||
501 | #ifndef KORG_NOKABC | ||
502 | KABC::AddressBook *add_book = KABC::StdAddressBook::self(); | ||
503 | KABC::Addressee::List addressList; | ||
504 | addressList = add_book->findByEmail(organizer); | ||
505 | if ( addressList.size()>0 ) inBook = true; | ||
506 | #endif | ||
507 | return inBook; | ||
508 | } | ||
509 | |||
510 | bool IncomingDialog::checkAttendeesInAddressbook(IncidenceBase *inc) | ||
511 | { | ||
512 | bool inBook = false; | ||
513 | #ifndef KORG_NOKABC | ||
514 | KABC::AddressBook *add_book = KABC::StdAddressBook::self(); | ||
515 | KABC::Addressee::List addressList; | ||
516 | QPtrList <Attendee> attendees; | ||
517 | Attendee *att; | ||
518 | attendees = inc->attendees(); | ||
519 | for (att=attendees.first();att;att=attendees.next()) { | ||
520 | addressList = add_book->findByEmail(att->email()); | ||
521 | if (addressList.size()>0 ) inBook = true; | ||
522 | } | ||
523 | #endif | ||
524 | return inBook; | ||
525 | } | ||
526 | |||
527 | #include "incomingdialog.moc" | ||