summaryrefslogtreecommitdiffabout
path: root/libkcal/incidencebase.cpp
Unidiff
Diffstat (limited to 'libkcal/incidencebase.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/incidencebase.cpp96
1 files changed, 20 insertions, 76 deletions
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp
index 5d8785b..15c4fa8 100644
--- a/libkcal/incidencebase.cpp
+++ b/libkcal/incidencebase.cpp
@@ -1,128 +1,127 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library 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 GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24#include <kidmanager.h>
24 25
25#include "calformat.h" 26#include "calformat.h"
26 27
27#include "incidencebase.h" 28#include "incidencebase.h"
28 29
29using namespace KCal; 30using namespace KCal;
30 31
31IncidenceBase::IncidenceBase() : 32IncidenceBase::IncidenceBase() :
32 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), 33 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false),
33 mPilotId(0), mSyncStatus(SYNCMOD) 34 mPilotId(0), mSyncStatus(SYNCMOD)
34{ 35{
35 setUid(CalFormat::createUniqueId()); 36 setUid(CalFormat::createUniqueId());
36 mOrganizer = ""; 37 mOrganizer = "";
37 mFloats = false; 38 mFloats = false;
38 mDuration = 0; 39 mDuration = 0;
39 mHasDuration = false; 40 mHasDuration = false;
40 mPilotId = 0; 41 mPilotId = 0;
41 mZaurusUid = 0;
42 mExternalId = ":"; 42 mExternalId = ":";
43 mTempSyncStat = 0; 43 mTempSyncStat = 0;
44 mSyncStatus = 0; 44 mSyncStatus = 0;
45 mAttendees.setAutoDelete( true ); 45 mAttendees.setAutoDelete( true );
46} 46}
47 47
48IncidenceBase::IncidenceBase(const IncidenceBase &i) : 48IncidenceBase::IncidenceBase(const IncidenceBase &i) :
49 CustomProperties( i ) 49 CustomProperties( i )
50{ 50{
51 mReadOnly = i.mReadOnly; 51 mReadOnly = i.mReadOnly;
52 mDtStart = i.mDtStart; 52 mDtStart = i.mDtStart;
53 mDuration = i.mDuration; 53 mDuration = i.mDuration;
54 mHasDuration = i.mHasDuration; 54 mHasDuration = i.mHasDuration;
55 mOrganizer = i.mOrganizer; 55 mOrganizer = i.mOrganizer;
56 mUid = i.mUid; 56 mUid = i.mUid;
57 QPtrList<Attendee> attendees = i.attendees(); 57 QPtrList<Attendee> attendees = i.attendees();
58 for( Attendee *a = attendees.first(); a; a = attendees.next() ) { 58 for( Attendee *a = attendees.first(); a; a = attendees.next() ) {
59 mAttendees.append( new Attendee( *a ) ); 59 mAttendees.append( new Attendee( *a ) );
60 } 60 }
61 mFloats = i.mFloats; 61 mFloats = i.mFloats;
62 mLastModified = i.mLastModified; 62 mLastModified = i.mLastModified;
63 mPilotId = i.mPilotId; 63 mPilotId = i.mPilotId;
64 mZaurusUid = i.mZaurusUid;
65 mTempSyncStat = i.mTempSyncStat; 64 mTempSyncStat = i.mTempSyncStat;
66 mSyncStatus = i.mSyncStatus; 65 mSyncStatus = i.mSyncStatus;
67 mExternalId = i.mExternalId; 66 mExternalId = i.mExternalId;
68 // The copied object is a new one, so it isn't observed by the observer 67 // The copied object is a new one, so it isn't observed by the observer
69 // of the original object. 68 // of the original object.
70 mObservers.clear(); 69 mObservers.clear();
71 70
72 mAttendees.setAutoDelete( true ); 71 mAttendees.setAutoDelete( true );
73} 72}
74 73
75IncidenceBase::~IncidenceBase() 74IncidenceBase::~IncidenceBase()
76{ 75{
77} 76}
78 77
79 78
80bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) 79bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 )
81{ 80{
82 // do not compare mSyncStatus and mExternalId 81 // do not compare mSyncStatus and mExternalId
83 if( i1.attendees().count() != i2.attendees().count() ) { 82 if( i1.attendees().count() != i2.attendees().count() ) {
84 return false; // no need to check further 83 return false; // no need to check further
85 } 84 }
86 if ( i1.attendees().count() > 0 ) { 85 if ( i1.attendees().count() > 0 ) {
87 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; 86 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ;
88 while ( a1 ) { 87 while ( a1 ) {
89 if ( !( (*a1) == (*a2)) ) 88 if ( !( (*a1) == (*a2)) )
90 { 89 {
91 //qDebug("Attendee not equal "); 90 //qDebug("Attendee not equal ");
92 return false; 91 return false;
93 } 92 }
94 a1 = i1.attendees().next(); 93 a1 = i1.attendees().next();
95 a2 = i2.attendees().next(); 94 a2 = i2.attendees().next();
96 } 95 }
97 } 96 }
98 //if ( i1.dtStart() != i2.dtStart() ) 97 //if ( i1.dtStart() != i2.dtStart() )
99 // return false; 98 // return false;
100#if 0 99#if 0
101 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); 100 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() );
102 qDebug("1 %d ",i1.duration() == i2.duration() ); 101 qDebug("1 %d ",i1.duration() == i2.duration() );
103 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); 102 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() );
104 qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); 103 qDebug("1 %d ",i1.pilotId() == i2.pilotId() );
105 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); 104 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() );
106 qDebug("6 %d ",i1.organizer() == i2.organizer() ); 105 qDebug("6 %d ",i1.organizer() == i2.organizer() );
107 106
108#endif 107#endif
109 return ( i1.organizer() == i2.organizer() && 108 return ( i1.organizer() == i2.organizer() &&
110 // i1.uid() == i2.uid() && 109 // i1.uid() == i2.uid() &&
111 // Don't compare lastModified, otherwise the operator is not 110 // Don't compare lastModified, otherwise the operator is not
112 // of much use. We are not comparing for identity, after all. 111 // of much use. We are not comparing for identity, after all.
113 i1.doesFloat() == i2.doesFloat() && 112 i1.doesFloat() == i2.doesFloat() &&
114 i1.duration() == i2.duration() && 113 i1.duration() == i2.duration() &&
115 i1.hasDuration() == i2.hasDuration() && 114 i1.hasDuration() == i2.hasDuration() &&
116 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); 115 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() );
117 // no need to compare mObserver 116 // no need to compare mObserver
118} 117}
119 118
120 119
121QDateTime IncidenceBase::getEvenTime( QDateTime dt ) 120QDateTime IncidenceBase::getEvenTime( QDateTime dt )
122{ 121{
123 QTime t = dt.time(); 122 QTime t = dt.time();
124 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 123 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
125 return dt; 124 return dt;
126} 125}
127 126
128 127
@@ -280,183 +279,128 @@ Attendee *IncidenceBase::attendeeByMail(const QString &email)
280 279
281Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email) 280Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email)
282{ 281{
283 QPtrListIterator<Attendee> qli(mAttendees); 282 QPtrListIterator<Attendee> qli(mAttendees);
284 283
285 QStringList mails = emails; 284 QStringList mails = emails;
286 if (!email.isEmpty()) { 285 if (!email.isEmpty()) {
287 mails.append(email); 286 mails.append(email);
288 } 287 }
289 qli.toFirst(); 288 qli.toFirst();
290 while (qli) { 289 while (qli) {
291 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) { 290 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) {
292 if (qli.current()->email() == *it) 291 if (qli.current()->email() == *it)
293 return qli.current(); 292 return qli.current();
294 } 293 }
295 294
296 ++qli; 295 ++qli;
297 } 296 }
298 return 0L; 297 return 0L;
299} 298}
300 299
301void IncidenceBase::setDuration(int seconds) 300void IncidenceBase::setDuration(int seconds)
302{ 301{
303 mDuration = seconds; 302 mDuration = seconds;
304 setHasDuration(true); 303 setHasDuration(true);
305} 304}
306 305
307int IncidenceBase::duration() const 306int IncidenceBase::duration() const
308{ 307{
309 return mDuration; 308 return mDuration;
310} 309}
311 310
312void IncidenceBase::setHasDuration(bool b) 311void IncidenceBase::setHasDuration(bool b)
313{ 312{
314 mHasDuration = b; 313 mHasDuration = b;
315} 314}
316 315
317bool IncidenceBase::hasDuration() const 316bool IncidenceBase::hasDuration() const
318{ 317{
319 return mHasDuration; 318 return mHasDuration;
320} 319}
321 320
322void IncidenceBase::setSyncStatus(int stat) 321void IncidenceBase::setSyncStatus(int stat)
323{ 322{
324 if (mReadOnly) return; 323 if (mReadOnly) return;
325 mSyncStatus = stat; 324 mSyncStatus = stat;
326} 325}
327 326
328int IncidenceBase::syncStatus() const 327int IncidenceBase::syncStatus() const
329{ 328{
330 return mSyncStatus; 329 return mSyncStatus;
331} 330}
332 331
333void IncidenceBase::setPilotId( int id ) 332void IncidenceBase::setPilotId( int id )
334{ 333{
335 if (mReadOnly) return; 334 if (mReadOnly) return;
336 mPilotId = id; 335 mPilotId = id;
337} 336}
338 337
339int IncidenceBase::pilotId() const 338int IncidenceBase::pilotId() const
340{ 339{
341 return mPilotId; 340 return mPilotId;
342} 341}
343 342
344int IncidenceBase::zaurusUid() const
345{
346 return mZaurusUid;
347}
348void IncidenceBase::setZaurusUid( int id )
349{
350 if (mReadOnly) return;
351 mZaurusUid = id;
352}
353
354int IncidenceBase::tempSyncStat() const 343int IncidenceBase::tempSyncStat() const
355{ 344{
356 return mTempSyncStat; 345 return mTempSyncStat;
357} 346}
358void IncidenceBase::setTempSyncStat( int id ) 347void IncidenceBase::setTempSyncStat( int id )
359{ 348{
360 if (mReadOnly) return; 349 if (mReadOnly) return;
361 mTempSyncStat = id; 350 mTempSyncStat = id;
362} 351}
363 352
364void IncidenceBase::setID( const QString & prof , int id ) 353void IncidenceBase::removeID(const QString &prof)
365{ 354{
366 int num = mExternalId.find( ":"+prof+";" ); 355 mExternalId = KIdManager::removeId ( mExternalId, prof);
367 if ( num >= 0 ) { 356
368 int len = prof.length()+2; 357}
369 int end = mExternalId.find( ";", num+len ); 358void IncidenceBase::setID( const QString & prof , const QString & id )
370 if ( end > 0 ) { 359{
371 mExternalId = mExternalId.left( num+len ) +QString::number( id)+mExternalId.mid( end ); 360 mExternalId = KIdManager::setId ( mExternalId, prof, id );
372 } else 361}
373 qDebug("Error in IncidenceBase::setID "); 362QString IncidenceBase::getID( const QString & prof)
374 } else { 363{
375 mExternalId += prof+";"+QString::number( id) +";0:"; 364 return KIdManager::getId ( mExternalId, prof );
376 }
377 qDebug("setID*%s*%d*%s* ", prof.latin1(), id,mExternalId.latin1() );
378}
379int IncidenceBase::getID( const QString & prof)
380{
381 int ret = -1;
382 int num = mExternalId.find(":"+ prof+";" );
383 if ( num >= 0 ) {
384 int len = prof.length()+2;
385 int end = mExternalId.find( ";", num+len );
386 if ( end > 0 ) {
387 bool ok;
388 ret = mExternalId.mid ( num + len,end-len-num).toInt( &ok );
389 if (!ok)
390 ret = -1;
391 }
392 }
393 qDebug("getID*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() );
394 return ret;
395} 365}
396 366
397// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0: 367// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0:
398// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0 368// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0
399void IncidenceBase::setCsum( const QString & prof , int id ) 369void IncidenceBase::setCsum( const QString & prof , const QString & id )
400{ 370{
401 int num = mExternalId.find( ":"+prof+";"); 371 mExternalId = KIdManager::setCsum ( mExternalId, prof, id );
402 if ( num >= 0 ) { 372}
403 int len = prof.length()+2; 373QString IncidenceBase::getCsum( const QString & prof)
404 num = mExternalId.find( ";", num+len ); 374{
405 int end = mExternalId.find( ":", num+1 ); 375 return KIdManager::getCsum ( mExternalId, prof );
406 if ( end > 0 ) {
407 mExternalId = mExternalId.left( num ) +QString::number(id)+mExternalId.mid( end );
408 } else
409 qDebug("Error in IncidenceBase::setCsum ");
410 } else {
411 mExternalId += prof+";-1;"+QString::number( id) +":";
412 }
413 qDebug("setCsum*%s*%d*%s* ", prof.latin1(), id,mExternalId.latin1() );
414}
415int IncidenceBase::getCsum( const QString & prof)
416{
417 int ret = -1;
418 int num = mExternalId.find( ":"+prof+";" );
419 if ( num >= 0 ) {
420 int len = prof.length()+2;
421 num = mExternalId.find( ";", num+len );
422 int end = mExternalId.find( ":", num+1 );
423 if ( end > 0 ) {
424 bool ok;
425 ret = mExternalId.mid ( num ,end-num).toInt( &ok );
426 if (!ok)
427 ret = -1;
428 }
429 }
430 qDebug("getCsum*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() );
431 return ret;
432} 376}
433 377
434void IncidenceBase::setIDStr( const QString & s ) 378void IncidenceBase::setIDStr( const QString & s )
435{ 379{
436 if (mReadOnly) return; 380 if (mReadOnly) return;
437 mExternalId = s; 381 mExternalId = s;
438} 382}
439 383
440QString IncidenceBase::IDStr() const 384QString IncidenceBase::IDStr() const
441{ 385{
442 return mExternalId ; 386 return mExternalId ;
443} 387}
444void IncidenceBase::registerObserver( IncidenceBase::Observer *observer ) 388void IncidenceBase::registerObserver( IncidenceBase::Observer *observer )
445{ 389{
446 if( !mObservers.contains(observer) ) mObservers.append( observer ); 390 if( !mObservers.contains(observer) ) mObservers.append( observer );
447} 391}
448 392
449void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer ) 393void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer )
450{ 394{
451 mObservers.remove( observer ); 395 mObservers.remove( observer );
452} 396}
453 397
454void IncidenceBase::updated() 398void IncidenceBase::updated()
455{ 399{
456 QPtrListIterator<Observer> it(mObservers); 400 QPtrListIterator<Observer> it(mObservers);
457 while( it.current() ) { 401 while( it.current() ) {
458 Observer *o = it.current(); 402 Observer *o = it.current();
459 ++it; 403 ++it;
460 o->incidenceUpdated( this ); 404 o->incidenceUpdated( this );
461 } 405 }
462} 406}