summaryrefslogtreecommitdiffabout
path: root/libkcal/incidencebase.cpp
Unidiff
Diffstat (limited to 'libkcal/incidencebase.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/incidencebase.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp
index 15c4fa8..64a343c 100644
--- a/libkcal/incidencebase.cpp
+++ b/libkcal/incidencebase.cpp
@@ -1,406 +1,407 @@
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#include <kidmanager.h>
25 25
26#include "calformat.h" 26#include "calformat.h"
27#include "syncdefines.h"
27 28
28#include "incidencebase.h" 29#include "incidencebase.h"
29 30
30using namespace KCal; 31using namespace KCal;
31 32
32IncidenceBase::IncidenceBase() : 33IncidenceBase::IncidenceBase() :
33 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), 34 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false),
34 mPilotId(0), mSyncStatus(SYNCMOD) 35 mPilotId(0), mSyncStatus(SYNCMOD)
35{ 36{
36 setUid(CalFormat::createUniqueId()); 37 setUid(CalFormat::createUniqueId());
37 mOrganizer = ""; 38 mOrganizer = "";
38 mFloats = false; 39 mFloats = false;
39 mDuration = 0; 40 mDuration = 0;
40 mHasDuration = false; 41 mHasDuration = false;
41 mPilotId = 0; 42 mPilotId = 0;
42 mExternalId = ":"; 43 mExternalId = ":";
43 mTempSyncStat = 0; 44 mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
44 mSyncStatus = 0; 45 mSyncStatus = 0;
45 mAttendees.setAutoDelete( true ); 46 mAttendees.setAutoDelete( true );
46} 47}
47 48
48IncidenceBase::IncidenceBase(const IncidenceBase &i) : 49IncidenceBase::IncidenceBase(const IncidenceBase &i) :
49 CustomProperties( i ) 50 CustomProperties( i )
50{ 51{
51 mReadOnly = i.mReadOnly; 52 mReadOnly = i.mReadOnly;
52 mDtStart = i.mDtStart; 53 mDtStart = i.mDtStart;
53 mDuration = i.mDuration; 54 mDuration = i.mDuration;
54 mHasDuration = i.mHasDuration; 55 mHasDuration = i.mHasDuration;
55 mOrganizer = i.mOrganizer; 56 mOrganizer = i.mOrganizer;
56 mUid = i.mUid; 57 mUid = i.mUid;
57 QPtrList<Attendee> attendees = i.attendees(); 58 QPtrList<Attendee> attendees = i.attendees();
58 for( Attendee *a = attendees.first(); a; a = attendees.next() ) { 59 for( Attendee *a = attendees.first(); a; a = attendees.next() ) {
59 mAttendees.append( new Attendee( *a ) ); 60 mAttendees.append( new Attendee( *a ) );
60 } 61 }
61 mFloats = i.mFloats; 62 mFloats = i.mFloats;
62 mLastModified = i.mLastModified; 63 mLastModified = i.mLastModified;
63 mPilotId = i.mPilotId; 64 mPilotId = i.mPilotId;
64 mTempSyncStat = i.mTempSyncStat; 65 mTempSyncStat = i.mTempSyncStat;
65 mSyncStatus = i.mSyncStatus; 66 mSyncStatus = i.mSyncStatus;
66 mExternalId = i.mExternalId; 67 mExternalId = i.mExternalId;
67 // The copied object is a new one, so it isn't observed by the observer 68 // The copied object is a new one, so it isn't observed by the observer
68 // of the original object. 69 // of the original object.
69 mObservers.clear(); 70 mObservers.clear();
70 71
71 mAttendees.setAutoDelete( true ); 72 mAttendees.setAutoDelete( true );
72} 73}
73 74
74IncidenceBase::~IncidenceBase() 75IncidenceBase::~IncidenceBase()
75{ 76{
76} 77}
77 78
78 79
79bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) 80bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 )
80{ 81{
81 // do not compare mSyncStatus and mExternalId 82 // do not compare mSyncStatus and mExternalId
82 if( i1.attendees().count() != i2.attendees().count() ) { 83 if( i1.attendees().count() != i2.attendees().count() ) {
83 return false; // no need to check further 84 return false; // no need to check further
84 } 85 }
85 if ( i1.attendees().count() > 0 ) { 86 if ( i1.attendees().count() > 0 ) {
86 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; 87 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ;
87 while ( a1 ) { 88 while ( a1 ) {
88 if ( !( (*a1) == (*a2)) ) 89 if ( !( (*a1) == (*a2)) )
89 { 90 {
90 //qDebug("Attendee not equal "); 91 //qDebug("Attendee not equal ");
91 return false; 92 return false;
92 } 93 }
93 a1 = i1.attendees().next(); 94 a1 = i1.attendees().next();
94 a2 = i2.attendees().next(); 95 a2 = i2.attendees().next();
95 } 96 }
96 } 97 }
97 //if ( i1.dtStart() != i2.dtStart() ) 98 //if ( i1.dtStart() != i2.dtStart() )
98 // return false; 99 // return false;
99#if 0 100#if 0
100 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); 101 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() );
101 qDebug("1 %d ",i1.duration() == i2.duration() ); 102 qDebug("1 %d ",i1.duration() == i2.duration() );
102 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); 103 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() );
103 qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); 104 qDebug("1 %d ",i1.pilotId() == i2.pilotId() );
104 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); 105 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() );
105 qDebug("6 %d ",i1.organizer() == i2.organizer() ); 106 qDebug("6 %d ",i1.organizer() == i2.organizer() );
106 107
107#endif 108#endif
108 return ( i1.organizer() == i2.organizer() && 109 return ( i1.organizer() == i2.organizer() &&
109 // i1.uid() == i2.uid() && 110 // i1.uid() == i2.uid() &&
110 // Don't compare lastModified, otherwise the operator is not 111 // Don't compare lastModified, otherwise the operator is not
111 // of much use. We are not comparing for identity, after all. 112 // of much use. We are not comparing for identity, after all.
112 i1.doesFloat() == i2.doesFloat() && 113 i1.doesFloat() == i2.doesFloat() &&
113 i1.duration() == i2.duration() && 114 i1.duration() == i2.duration() &&
114 i1.hasDuration() == i2.hasDuration() && 115 i1.hasDuration() == i2.hasDuration() &&
115 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); 116 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() );
116 // no need to compare mObserver 117 // no need to compare mObserver
117} 118}
118 119
119 120
120QDateTime IncidenceBase::getEvenTime( QDateTime dt ) 121QDateTime IncidenceBase::getEvenTime( QDateTime dt )
121{ 122{
122 QTime t = dt.time(); 123 QTime t = dt.time();
123 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 124 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
124 return dt; 125 return dt;
125} 126}
126 127
127 128
128void IncidenceBase::setUid(const QString &uid) 129void IncidenceBase::setUid(const QString &uid)
129{ 130{
130 mUid = uid; 131 mUid = uid;
131 updated(); 132 updated();
132} 133}
133 134
134QString IncidenceBase::uid() const 135QString IncidenceBase::uid() const
135{ 136{
136 return mUid; 137 return mUid;
137} 138}
138 139
139void IncidenceBase::setLastModified(const QDateTime &lm) 140void IncidenceBase::setLastModified(const QDateTime &lm)
140{ 141{
141 // DON'T! updated() because we call this from 142 // DON'T! updated() because we call this from
142 // Calendar::updateEvent(). 143 // Calendar::updateEvent().
143 mLastModified = getEvenTime(lm); 144 mLastModified = getEvenTime(lm);
144 //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1()); 145 //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1());
145} 146}
146 147
147QDateTime IncidenceBase::lastModified() const 148QDateTime IncidenceBase::lastModified() const
148{ 149{
149 return mLastModified; 150 return mLastModified;
150} 151}
151 152
152void IncidenceBase::setOrganizer(const QString &o) 153void IncidenceBase::setOrganizer(const QString &o)
153{ 154{
154 // we don't check for readonly here, because it is 155 // we don't check for readonly here, because it is
155 // possible that by setting the organizer we are changing 156 // possible that by setting the organizer we are changing
156 // the event's readonly status... 157 // the event's readonly status...
157 mOrganizer = o; 158 mOrganizer = o;
158 if (mOrganizer.left(7).upper() == "MAILTO:") 159 if (mOrganizer.left(7).upper() == "MAILTO:")
159 mOrganizer = mOrganizer.remove(0,7); 160 mOrganizer = mOrganizer.remove(0,7);
160 161
161 updated(); 162 updated();
162} 163}
163 164
164QString IncidenceBase::organizer() const 165QString IncidenceBase::organizer() const
165{ 166{
166 return mOrganizer; 167 return mOrganizer;
167} 168}
168 169
169void IncidenceBase::setReadOnly( bool readOnly ) 170void IncidenceBase::setReadOnly( bool readOnly )
170{ 171{
171 mReadOnly = readOnly; 172 mReadOnly = readOnly;
172} 173}
173 174
174void IncidenceBase::setDtStart(const QDateTime &dtStart) 175void IncidenceBase::setDtStart(const QDateTime &dtStart)
175{ 176{
176// if (mReadOnly) return; 177// if (mReadOnly) return;
177 mDtStart = getEvenTime(dtStart); 178 mDtStart = getEvenTime(dtStart);
178 updated(); 179 updated();
179} 180}
180 181
181QDateTime IncidenceBase::dtStart() const 182QDateTime IncidenceBase::dtStart() const
182{ 183{
183 return mDtStart; 184 return mDtStart;
184} 185}
185 186
186QString IncidenceBase::dtStartTimeStr() const 187QString IncidenceBase::dtStartTimeStr() const
187{ 188{
188 return KGlobal::locale()->formatTime(dtStart().time()); 189 return KGlobal::locale()->formatTime(dtStart().time());
189} 190}
190 191
191QString IncidenceBase::dtStartDateStr(bool shortfmt) const 192QString IncidenceBase::dtStartDateStr(bool shortfmt) const
192{ 193{
193 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); 194 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt);
194} 195}
195 196
196QString IncidenceBase::dtStartStr(bool shortfmt) const 197QString IncidenceBase::dtStartStr(bool shortfmt) const
197{ 198{
198 return KGlobal::locale()->formatDateTime(dtStart(), shortfmt); 199 return KGlobal::locale()->formatDateTime(dtStart(), shortfmt);
199} 200}
200 201
201 202
202bool IncidenceBase::doesFloat() const 203bool IncidenceBase::doesFloat() const
203{ 204{
204 return mFloats; 205 return mFloats;
205} 206}
206 207
207void IncidenceBase::setFloats(bool f) 208void IncidenceBase::setFloats(bool f)
208{ 209{
209 if (mReadOnly) return; 210 if (mReadOnly) return;
210 mFloats = f; 211 mFloats = f;
211 updated(); 212 updated();
212} 213}
213 214
214 215
215void IncidenceBase::addAttendee(Attendee *a, bool doupdate) 216void IncidenceBase::addAttendee(Attendee *a, bool doupdate)
216{ 217{
217 if (mReadOnly) return; 218 if (mReadOnly) return;
218 if (a->name().left(7).upper() == "MAILTO:") 219 if (a->name().left(7).upper() == "MAILTO:")
219 a->setName(a->name().remove(0,7)); 220 a->setName(a->name().remove(0,7));
220 221
221 mAttendees.append(a); 222 mAttendees.append(a);
222 if (doupdate) updated(); 223 if (doupdate) updated();
223} 224}
224 225
225#if 0 226#if 0
226void IncidenceBase::removeAttendee(Attendee *a) 227void IncidenceBase::removeAttendee(Attendee *a)
227{ 228{
228 if (mReadOnly) return; 229 if (mReadOnly) return;
229 mAttendees.removeRef(a); 230 mAttendees.removeRef(a);
230 updated(); 231 updated();
231} 232}
232 233
233void IncidenceBase::removeAttendee(const char *n) 234void IncidenceBase::removeAttendee(const char *n)
234{ 235{
235 Attendee *a; 236 Attendee *a;
236 237
237 if (mReadOnly) return; 238 if (mReadOnly) return;
238 for (a = mAttendees.first(); a; a = mAttendees.next()) 239 for (a = mAttendees.first(); a; a = mAttendees.next())
239 if (a->getName() == n) { 240 if (a->getName() == n) {
240 mAttendees.remove(); 241 mAttendees.remove();
241 break; 242 break;
242 } 243 }
243} 244}
244#endif 245#endif
245 246
246void IncidenceBase::clearAttendees() 247void IncidenceBase::clearAttendees()
247{ 248{
248 if (mReadOnly) return; 249 if (mReadOnly) return;
249 mAttendees.clear(); 250 mAttendees.clear();
250} 251}
251 252
252#if 0 253#if 0
253Attendee *IncidenceBase::getAttendee(const char *n) const 254Attendee *IncidenceBase::getAttendee(const char *n) const
254{ 255{
255 QPtrListIterator<Attendee> qli(mAttendees); 256 QPtrListIterator<Attendee> qli(mAttendees);
256 257
257 qli.toFirst(); 258 qli.toFirst();
258 while (qli) { 259 while (qli) {
259 if (qli.current()->getName() == n) 260 if (qli.current()->getName() == n)
260 return qli.current(); 261 return qli.current();
261 ++qli; 262 ++qli;
262 } 263 }
263 return 0L; 264 return 0L;
264} 265}
265#endif 266#endif
266 267
267Attendee *IncidenceBase::attendeeByMail(const QString &email) 268Attendee *IncidenceBase::attendeeByMail(const QString &email)
268{ 269{
269 QPtrListIterator<Attendee> qli(mAttendees); 270 QPtrListIterator<Attendee> qli(mAttendees);
270 271
271 qli.toFirst(); 272 qli.toFirst();
272 while (qli) { 273 while (qli) {
273 if (qli.current()->email() == email) 274 if (qli.current()->email() == email)
274 return qli.current(); 275 return qli.current();
275 ++qli; 276 ++qli;
276 } 277 }
277 return 0L; 278 return 0L;
278} 279}
279 280
280Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email) 281Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email)
281{ 282{
282 QPtrListIterator<Attendee> qli(mAttendees); 283 QPtrListIterator<Attendee> qli(mAttendees);
283 284
284 QStringList mails = emails; 285 QStringList mails = emails;
285 if (!email.isEmpty()) { 286 if (!email.isEmpty()) {
286 mails.append(email); 287 mails.append(email);
287 } 288 }
288 qli.toFirst(); 289 qli.toFirst();
289 while (qli) { 290 while (qli) {
290 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) { 291 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) {
291 if (qli.current()->email() == *it) 292 if (qli.current()->email() == *it)
292 return qli.current(); 293 return qli.current();
293 } 294 }
294 295
295 ++qli; 296 ++qli;
296 } 297 }
297 return 0L; 298 return 0L;
298} 299}
299 300
300void IncidenceBase::setDuration(int seconds) 301void IncidenceBase::setDuration(int seconds)
301{ 302{
302 mDuration = seconds; 303 mDuration = seconds;
303 setHasDuration(true); 304 setHasDuration(true);
304} 305}
305 306
306int IncidenceBase::duration() const 307int IncidenceBase::duration() const
307{ 308{
308 return mDuration; 309 return mDuration;
309} 310}
310 311
311void IncidenceBase::setHasDuration(bool b) 312void IncidenceBase::setHasDuration(bool b)
312{ 313{
313 mHasDuration = b; 314 mHasDuration = b;
314} 315}
315 316
316bool IncidenceBase::hasDuration() const 317bool IncidenceBase::hasDuration() const
317{ 318{
318 return mHasDuration; 319 return mHasDuration;
319} 320}
320 321
321void IncidenceBase::setSyncStatus(int stat) 322void IncidenceBase::setSyncStatus(int stat)
322{ 323{
323 if (mReadOnly) return; 324 if (mReadOnly) return;
324 mSyncStatus = stat; 325 mSyncStatus = stat;
325} 326}
326 327
327int IncidenceBase::syncStatus() const 328int IncidenceBase::syncStatus() const
328{ 329{
329 return mSyncStatus; 330 return mSyncStatus;
330} 331}
331 332
332void IncidenceBase::setPilotId( int id ) 333void IncidenceBase::setPilotId( int id )
333{ 334{
334 if (mReadOnly) return; 335 if (mReadOnly) return;
335 mPilotId = id; 336 mPilotId = id;
336} 337}
337 338
338int IncidenceBase::pilotId() const 339int IncidenceBase::pilotId() const
339{ 340{
340 return mPilotId; 341 return mPilotId;
341} 342}
342 343
343int IncidenceBase::tempSyncStat() const 344int IncidenceBase::tempSyncStat() const
344{ 345{
345 return mTempSyncStat; 346 return mTempSyncStat;
346} 347}
347void IncidenceBase::setTempSyncStat( int id ) 348void IncidenceBase::setTempSyncStat( int id )
348{ 349{
349 if (mReadOnly) return; 350 if (mReadOnly) return;
350 mTempSyncStat = id; 351 mTempSyncStat = id;
351} 352}
352 353
353void IncidenceBase::removeID(const QString &prof) 354void IncidenceBase::removeID(const QString &prof)
354{ 355{
355 mExternalId = KIdManager::removeId ( mExternalId, prof); 356 mExternalId = KIdManager::removeId ( mExternalId, prof);
356 357
357} 358}
358void IncidenceBase::setID( const QString & prof , const QString & id ) 359void IncidenceBase::setID( const QString & prof , const QString & id )
359{ 360{
360 mExternalId = KIdManager::setId ( mExternalId, prof, id ); 361 mExternalId = KIdManager::setId ( mExternalId, prof, id );
361} 362}
362QString IncidenceBase::getID( const QString & prof) 363QString IncidenceBase::getID( const QString & prof)
363{ 364{
364 return KIdManager::getId ( mExternalId, prof ); 365 return KIdManager::getId ( mExternalId, prof );
365} 366}
366 367
367// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0: 368// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0:
368// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0 369// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0
369void IncidenceBase::setCsum( const QString & prof , const QString & id ) 370void IncidenceBase::setCsum( const QString & prof , const QString & id )
370{ 371{
371 mExternalId = KIdManager::setCsum ( mExternalId, prof, id ); 372 mExternalId = KIdManager::setCsum ( mExternalId, prof, id );
372} 373}
373QString IncidenceBase::getCsum( const QString & prof) 374QString IncidenceBase::getCsum( const QString & prof)
374{ 375{
375 return KIdManager::getCsum ( mExternalId, prof ); 376 return KIdManager::getCsum ( mExternalId, prof );
376} 377}
377 378
378void IncidenceBase::setIDStr( const QString & s ) 379void IncidenceBase::setIDStr( const QString & s )
379{ 380{
380 if (mReadOnly) return; 381 if (mReadOnly) return;
381 mExternalId = s; 382 mExternalId = s;
382} 383}
383 384
384QString IncidenceBase::IDStr() const 385QString IncidenceBase::IDStr() const
385{ 386{
386 return mExternalId ; 387 return mExternalId ;
387} 388}
388void IncidenceBase::registerObserver( IncidenceBase::Observer *observer ) 389void IncidenceBase::registerObserver( IncidenceBase::Observer *observer )
389{ 390{
390 if( !mObservers.contains(observer) ) mObservers.append( observer ); 391 if( !mObservers.contains(observer) ) mObservers.append( observer );
391} 392}
392 393
393void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer ) 394void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer )
394{ 395{
395 mObservers.remove( observer ); 396 mObservers.remove( observer );
396} 397}
397 398
398void IncidenceBase::updated() 399void IncidenceBase::updated()
399{ 400{
400 QPtrListIterator<Observer> it(mObservers); 401 QPtrListIterator<Observer> it(mObservers);
401 while( it.current() ) { 402 while( it.current() ) {
402 Observer *o = it.current(); 403 Observer *o = it.current();
403 ++it; 404 ++it;
404 o->incidenceUpdated( this ); 405 o->incidenceUpdated( this );
405 } 406 }
406} 407}