libkcal

resourcecached.cpp
1/*
2 This file is part of libkcal.
3
4 Copyright (c) 2003,2004 Cornelius Schumacher <schumacher@kde.org>
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA.
20*/
21
22// TODO [FIXME] IMPORTANT
23// If a cached resource initiates a reload while an event editor is active, or an event is locked for editing,
24// a big fat crash will ensue. The reload subroutine must ABORT if ANY korganizer events are locked for editing!!!
25
26#include <tqdatastream.h>
27#include <tqdatetime.h>
28#include <tqfile.h>
29#include <tqstring.h>
30#include <tqptrlist.h>
31
32#include <kdebug.h>
33#include <tdelocale.h>
34#include <kurl.h>
35#include <tdestandarddirs.h>
36
37#include "event.h"
38#include "exceptions.h"
39#include "incidence.h"
40#include "journal.h"
41#include "todo.h"
42#include <unistd.h>
43
44
45#include "resourcecached.h"
46
47using namespace KCal;
48
49static bool m_editoropen = false;
50
51ResourceCached::ResourceCached( const TDEConfig* config )
52 : ResourceCalendar( config ), mCalendar( TQString::fromLatin1( "UTC" ) ),
53 mReloadPolicy( ReloadNever ), mReloadInterval( 10 ),
54 mReloadTimer( 0, "mReloadTimer" ), mReloaded( false ),
55 mSavePolicy( SaveNever ), mSaveInterval( 10 ),
56 mSaveTimer( 0, "mSaveTimer" ), mIdMapper( "kcal/uidmaps/" )
57{
58 connect( &mReloadTimer, TQ_SIGNAL( timeout() ), TQ_SLOT( slotReload() ) );
59 connect( &mSaveTimer, TQ_SIGNAL( timeout() ), TQ_SLOT( slotSave() ) );
60}
61
62ResourceCached::~ResourceCached()
63{
64}
65
67{
68 mReloadPolicy = i;
69
70 setupReloadTimer();
71}
72
74{
75 return mReloadPolicy;
76}
77
79{
80 mReloadInterval = minutes;
81}
82
84{
85 return mReloadInterval;
86}
87
89{
90 mSavePolicy = i;
91
92 setupSaveTimer();
93}
94
96{
97 return mSavePolicy;
98}
99
101{
102 mSaveInterval = minutes;
103}
104
106{
107 return mSaveInterval;
108}
109
110void ResourceCached::readConfig( const TDEConfig *config )
111{
112 mReloadPolicy = config->readNumEntry( "ReloadPolicy", ReloadNever );
113 mReloadInterval = config->readNumEntry( "ReloadInterval", 10 );
114
115 mSaveInterval = config->readNumEntry( "SaveInterval", 10 );
116 mSavePolicy = config->readNumEntry( "SavePolicy", SaveNever );
117
118 mLastLoad = config->readDateTimeEntry( "LastLoad" );
119 mLastSave = config->readDateTimeEntry( "LastSave" );
120
121 setupSaveTimer();
122 setupReloadTimer();
123}
124
125void ResourceCached::setupSaveTimer()
126{
127 if ( mSavePolicy == SaveInterval ) {
128 kdDebug(5800) << "ResourceCached::setSavePolicy(): start save timer (interval "
129 << mSaveInterval << " minutes)." << endl;
130 mSaveTimer.start( mSaveInterval * 60 * 1000 ); // n minutes
131 } else {
132 mSaveTimer.stop();
133 }
134}
135
136void ResourceCached::setupReloadTimer()
137{
138 if ( mReloadPolicy == ReloadInterval ) {
139 kdDebug(5800) << "ResourceCached::setSavePolicy(): start reload timer "
140 "(interval " << mReloadInterval << " minutes)" << endl;
141 mReloadTimer.start( mReloadInterval * 60 * 1000 ); // n minutes
142 } else {
143 mReloadTimer.stop();
144 }
145}
146
147void ResourceCached::writeConfig( TDEConfig *config )
148{
149 config->writeEntry( "ReloadPolicy", mReloadPolicy );
150 config->writeEntry( "ReloadInterval", mReloadInterval );
151
152 config->writeEntry( "SavePolicy", mSavePolicy );
153 config->writeEntry( "SaveInterval", mSaveInterval );
154
155 config->writeEntry( "LastLoad", mLastLoad );
156 config->writeEntry( "LastSave", mLastSave );
157}
158
160{
161 return mCalendar.addEvent( event );
162}
163
164bool ResourceCached::addEvent(Event *event, const TQString &subresource )
165{
166 Q_UNUSED( subresource ); // CalendarLocal does not support subresources
167 return mCalendar.addEvent( event );
168}
169
170// probably not really efficient, but...it works for now.
172{
173 kdDebug(5800) << "ResourceCached::deleteEvent" << endl;
174
175 return mCalendar.deleteEvent( event );
176}
177
178
179Event *ResourceCached::event( const TQString &uid )
180{
181 return mCalendar.event( uid );
182}
183
185 EventSortField sortField,
186 SortDirection sortDirection )
187{
188 Event::List list = mCalendar.rawEventsForDate( qd, sortField, sortDirection );
189
190 return list;
191}
192
193Event::List ResourceCached::rawEvents( const TQDate &start, const TQDate &end,
194 bool inclusive )
195{
196 return mCalendar.rawEvents( start, end, inclusive );
197}
198
200{
201 return mCalendar.rawEventsForDate( qdt.date() );
202}
203
205{
206 return mCalendar.rawEvents( sortField, sortDirection );
207}
208
210{
211 return mCalendar.addTodo( todo );
212}
213
214bool ResourceCached::addTodo( Todo *todo, const TQString &subresource )
215{
216 Q_UNUSED( subresource ); // CalendarLocal does not support subresources
217 return mCalendar.addTodo( todo );
218}
219
221{
222 return mCalendar.deleteTodo( todo );
223}
224
226{
227 return mCalendar.deleteJournal( journal );
228}
229
230
232{
233 return mCalendar.rawTodos( sortField, sortDirection );
234}
235
236Todo *ResourceCached::todo( const TQString &uid )
237{
238 return mCalendar.todo( uid );
239}
240
242{
243 return mCalendar.rawTodosForDate( date );
244}
245
247{
248 return mCalendar.addJournal( journal );
249}
250
251bool ResourceCached::addJournal( Journal *journal, const TQString &subresource )
252{
253 Q_UNUSED( subresource ); // CalendarLocal does not support subresources
254 return mCalendar.addJournal( journal );
255}
256
257Journal *ResourceCached::journal( const TQString &uid )
258{
259 return mCalendar.journal( uid );
260}
261
263{
264 return mCalendar.rawJournals( sortField, sortDirection );
265}
266
268{
269 return mCalendar.rawJournalsForDate( date );
270}
271
272
274{
275 return mCalendar.alarmsTo( to );
276}
277
278Alarm::List ResourceCached::alarms( const TQDateTime &from, const TQDateTime &to )
279{
280 // kdDebug(5800) << "ResourceCached::alarms(" << from.toString() << " - " << to.toString() << ")\n";
281 return mCalendar.alarms( from, to );
282}
283
284
285void ResourceCached::setTimeZoneId( const TQString& tzid )
286{
287 mCalendar.setTimeZoneId( tzid );
288}
289
290TQString ResourceCached::timeZoneId() const
291{
292 return mCalendar.timeZoneId();
293}
294
295void ResourceCached::clearChanges()
296{
297 mAddedIncidences.clear();
298 mChangedIncidences.clear();
299 mDeletedIncidences.clear();
300}
301
303{
304 setIdMapperIdentifier();
305 mIdMapper.load();
306
307 if ( TDEStandardDirs::exists( cacheFile() ) ) {
308 mCalendar.load( cacheFile() );
309 if ( readOnly() ) {
310 Incidence::List incidences( rawIncidences() );
311 Incidence::List::Iterator it;
312 for ( it = incidences.begin(); it != incidences.end(); ++it ) {
313 (*it)->setReadOnly( true );
314 }
315 }
316 }
317}
318
320{
321 kdDebug(5800) << "ResourceCached::saveCache(): " << cacheFile() << endl;
322
323 setIdMapperIdentifier();
324 mIdMapper.save();
325
326 mCalendar.save( cacheFile() );
327}
328
329void ResourceCached::setIdMapperIdentifier()
330{
331 mIdMapper.setIdentifier( type() + "_" + identifier() );
332}
333
335{
336 mCalendar.close();
337}
338
340{
341 mCalendar.closeEvents();
342}
343
345{
346 mCalendar.closeTodos();
347}
348
350{
351 mCalendar.closeJournals();
352}
353
354void ResourceCached::cleanUpEventCache( const Event::List &eventList )
355{
356 CalendarLocal calendar ( TQString::fromLatin1( "UTC" ) );
357
358 if ( TDEStandardDirs::exists( cacheFile() ) )
359 calendar.load( cacheFile() );
360 else
361 return;
362
363 Event::List list = calendar.events();
364 Event::List::ConstIterator cacheIt, it;
365 for ( cacheIt = list.begin(); cacheIt != list.end(); ++cacheIt ) {
366 bool found = false;
367 for ( it = eventList.begin(); it != eventList.end(); ++it ) {
368 if ( (*it)->uid() == (*cacheIt)->uid() )
369 found = true;
370 }
371
372 if ( !found ) {
373 mIdMapper.removeRemoteId( mIdMapper.remoteId( (*cacheIt)->uid() ) );
374 Event *event = mCalendar.event( (*cacheIt)->uid() );
375 if ( event )
376 mCalendar.deleteEvent( event );
377 }
378 }
379
380 calendar.close();
381}
382
383void ResourceCached::cleanUpTodoCache( const Todo::List &todoList )
384{
385 CalendarLocal calendar ( TQString::fromLatin1( "UTC" ) );
386
387 if ( TDEStandardDirs::exists( cacheFile() ) )
388 calendar.load( cacheFile() );
389 else
390 return;
391
392 Todo::List list = calendar.todos();
393 Todo::List::ConstIterator cacheIt, it;
394 for ( cacheIt = list.begin(); cacheIt != list.end(); ++cacheIt ) {
395
396 bool found = false;
397 for ( it = todoList.begin(); it != todoList.end(); ++it ) {
398 if ( (*it)->uid() == (*cacheIt)->uid() )
399 found = true;
400 }
401
402 if ( !found ) {
403 mIdMapper.removeRemoteId( mIdMapper.remoteId( (*cacheIt)->uid() ) );
404 Todo *todo = mCalendar.todo( (*cacheIt)->uid() );
405 if ( todo )
406 mCalendar.deleteTodo( todo );
407 }
408 }
409
410 calendar.close();
411}
412
414{
415 return mIdMapper;
416}
417
419{
420 return locateLocal( "cache", "kcal/tderesources/" + identifier() );
421}
422
423TQString ResourceCached::changesCacheFile( const TQString &type ) const
424{
425 return locateLocal( "cache", "kcal/changescache/" + identifier() + "_" + type );
426}
427
428void ResourceCached::saveChangesCache( const TQMap<Incidence*, bool> &map, const TQString &type )
429{
430 CalendarLocal calendar ( TQString::fromLatin1( "UTC" ) );
431
432 bool isEmpty = true;
433 TQMap<Incidence *,bool>::ConstIterator it;
434 for ( it = map.begin(); it != map.end(); ++it ) {
435 isEmpty = false;
436 calendar.addIncidence( it.key()->clone() );
437 }
438
439 if ( !isEmpty ) {
440 calendar.save( changesCacheFile( type ) );
441 } else {
442 TQFile file( changesCacheFile( type ) );
443 file.remove();
444 }
445
446 calendar.close();
447}
448
449void ResourceCached::saveChangesCache()
450{
451 saveChangesCache( mAddedIncidences, "added" );
452 saveChangesCache( mDeletedIncidences, "deleted" );
453 saveChangesCache( mChangedIncidences, "changed" );
454}
455
456void ResourceCached::loadChangesCache( TQMap<Incidence*, bool> &map, const TQString &type )
457{
458 CalendarLocal calendar ( TQString::fromLatin1( "UTC" ) );
459
460 if ( TDEStandardDirs::exists( changesCacheFile( type ) ) )
461 calendar.load( changesCacheFile( type ) );
462 else
463 return;
464
465 const Incidence::List list = calendar.incidences();
466 Incidence::List::ConstIterator it;
467 for ( it = list.begin(); it != list.end(); ++it )
468 map.insert( (*it)->clone(), true );
469
470 calendar.close();
471}
472
473void ResourceCached::loadChangesCache()
474{
475 loadChangesCache( mAddedIncidences, "added" );
476 loadChangesCache( mDeletedIncidences, "deleted" );
477 loadChangesCache( mChangedIncidences, "changed" );
478}
479
481{
482#if 1
483 kdDebug(5800) << "ResourceCached::calendarIncidenceAdded(): "
484 << i->uid() << endl;
485#endif
486
487 TQMap<Incidence *,bool>::ConstIterator it;
488 it = mAddedIncidences.find( i );
489 if ( it == mAddedIncidences.end() ) {
490 mAddedIncidences.insert( i, true );
491 }
492
493 checkForAutomaticSave();
494}
495
497{
498#if 1
499 kdDebug(5800) << "ResourceCached::calendarIncidenceChanged(): "
500 << i->uid() << endl;
501#endif
502
503 TQMap<Incidence *,bool>::ConstIterator it;
504 it = mChangedIncidences.find( i );
505 // FIXME: If you modify an added incidence, there's no need to add it to mChangedIncidences!
506 if ( it == mChangedIncidences.end() ) {
507 mChangedIncidences.insert( i, true );
508 }
509
510 checkForAutomaticSave();
511}
512
514{
515#if 1
516 kdDebug(5800) << "ResourceCached::calendarIncidenceDeleted(): "
517 << i->uid() << endl;
518#endif
519
520 if (i->hasRecurrenceID()) {
521 // This incidence has a parent; notify the parent of the child's death and do not destroy the parent!
522 // Get the parent
523 IncidenceList il = i->childIncidences();
524 IncidenceListIterator it;
525 it = il.begin();
526 Incidence *parentIncidence;
527 parentIncidence = this->incidence(*it);
528 // Remove the child
529 calendarIncidenceChanged(parentIncidence);
530 }
531 else {
532 TQMap<Incidence *,bool>::ConstIterator it;
533 it = mDeletedIncidences.find( i );
534 if ( it == mDeletedIncidences.end() ) {
535 mDeletedIncidences.insert( i, true );
536 }
537 }
538 checkForAutomaticSave();
539}
540
541Incidence::List ResourceCached::addedIncidences() const
542{
543 Incidence::List added;
544 TQMap<Incidence *,bool>::ConstIterator it;
545 for( it = mAddedIncidences.begin(); it != mAddedIncidences.end(); ++it ) {
546 added.append( it.key() );
547 }
548 return added;
549}
550
551Incidence::List ResourceCached::changedIncidences() const
552{
553 Incidence::List changed;
554 TQMap<Incidence *,bool>::ConstIterator it;
555 for( it = mChangedIncidences.begin(); it != mChangedIncidences.end(); ++it ) {
556 changed.append( it.key() );
557 }
558 return changed;
559}
560
561Incidence::List ResourceCached::deletedIncidences() const
562{
563 Incidence::List deleted;
564 TQMap<Incidence *,bool>::ConstIterator it;
565 for( it = mDeletedIncidences.begin(); it != mDeletedIncidences.end(); ++it ) {
566 deleted.append( it.key() );
567 }
568 return deleted;
569}
570
571Incidence::List ResourceCached::allChanges() const
572{
573 Incidence::List changes;
574 TQMap<Incidence *,bool>::ConstIterator it;
575 for( it = mAddedIncidences.begin(); it != mAddedIncidences.end(); ++it ) {
576 changes.append( it.key() );
577 }
578 for( it = mChangedIncidences.begin(); it != mChangedIncidences.end(); ++it ) {
579 changes.append( it.key() );
580 }
581 for( it = mDeletedIncidences.begin(); it != mDeletedIncidences.end(); ++it ) {
582 changes.append( it.key() );
583 }
584 return changes;
585}
586
587bool ResourceCached::hasChanges() const
588{
589 return !( mAddedIncidences.isEmpty() && mChangedIncidences.isEmpty() &&
590 mDeletedIncidences.isEmpty() );
591}
592
593void ResourceCached::clearChange( Incidence *incidence )
594{
595 clearChange( incidence->uid() );
596}
597
598void ResourceCached::clearChange( const TQString &uid )
599{
600 TQMap<Incidence*, bool>::Iterator it;
601
602 for ( it = mAddedIncidences.begin(); it != mAddedIncidences.end(); ++it )
603 if ( it.key()->uid() == uid ) {
604 mAddedIncidences.remove( it );
605 break;
606 }
607
608 for ( it = mChangedIncidences.begin(); it != mChangedIncidences.end(); ++it )
609 if ( it.key()->uid() == uid ) {
610 mChangedIncidences.remove( it );
611 break;
612 }
613
614 for ( it = mDeletedIncidences.begin(); it != mDeletedIncidences.end(); ++it )
615 if ( it.key()->uid() == uid ) {
616 mDeletedIncidences.remove( it );
617 break;
618 }
619}
620
621void ResourceCached::enableChangeNotification()
622{
623 mCalendar.registerObserver( this );
624}
625
626void ResourceCached::disableChangeNotification()
627{
628 mCalendar.unregisterObserver( this );
629}
630
631bool ResourceCached::editorWindowOpen()
632{
633 return m_editoropen;
634}
635
636void ResourceCached::setEditorWindowOpen(bool open)
637{
638 m_editoropen = open;
639}
640
641void ResourceCached::slotReload()
642{
643 if ( !isActive() ) return;
644
645 // Make sure no editor windows are open
646 if (editorWindowOpen() == true) return;
647
648 kdDebug(5800) << "ResourceCached::slotReload()" << endl;
649
650 load();
651}
652
653void ResourceCached::slotSave()
654{
655 if ( !isActive() ) return;
656
657 kdDebug(5800) << "ResourceCached::slotSave()" << endl;
658
659 save();
660}
661
662void ResourceCached::checkForAutomaticSave()
663{
664 if ( mSavePolicy == SaveAlways ) {
665 kdDebug(5800) << "ResourceCached::checkForAutomaticSave(): save now" << endl;
666 mSaveTimer.start( 1 * 1000, true ); // 1 second
667 } else if ( mSavePolicy == SaveDelayed ) {
668 kdDebug(5800) << "ResourceCached::checkForAutomaticSave(): save delayed"
669 << endl;
670 mSaveTimer.start( 15 * 1000, true ); // 15 seconds
671 }
672}
673
675{
676 if ( mReloadPolicy == ReloadNever ) return false;
677 if ( mReloadPolicy == ReloadOnStartup ) return !mReloaded;
678 return true;
679}
680
682{
683 if ( mSavePolicy == SaveNever ) return false;
684 return true;
685}
686
687void ResourceCached::addInfoText( TQString &txt ) const
688{
689 if ( mLastLoad.isValid() ) {
690 txt += "<br>";
691 txt += i18n("Last loaded: %1")
692 .arg( TDEGlobal::locale()->formatDateTime( mLastLoad ) );
693 }
694 if ( mLastSave.isValid() ) {
695 txt += "<br>";
696 txt += i18n("Last saved: %1")
697 .arg( TDEGlobal::locale()->formatDateTime( mLastSave ) );
698 }
699}
700
702{
703 mCalendar.close();
704}
705
707{
708 kdDebug(5800) << "Opening resource " << resourceName() << endl;
709 return true;
710}
711
713{
714 mCalendar.setOwner( owner );
715}
716
718{
719 return mCalendar.getOwner();
720}
721
722#include "resourcecached.moc"
This class provides a calendar stored as a local file.
Definition: calendarlocal.h:37
bool addTodo(Todo *todo)
Add a todo to the todolist.
Event::List rawEvents(EventSortField sortField=EventSortUnsorted, SortDirection sortDirection=SortDirectionAscending)
Return unfiltered list of all events in calendar.
bool deleteJournal(Journal *)
Remove a Journal from the calendar.
Journal::List rawJournalsForDate(const TQDate &date)
Get unfiltered journals for a given date.
bool deleteEvent(Event *event)
Deletes an event from this calendar.
bool deleteTodo(Todo *)
Remove a todo from the todolist.
Journal * journal(const TQString &uid)
Return Journal with given UID.
void closeJournals()
Clears out the current calendar, freeing all used memory etc.
Todo::List rawTodos(TodoSortField sortField=TodoSortUnsorted, SortDirection sortDirection=SortDirectionAscending)
Return list of all todos.
Alarm::List alarmsTo(const TQDateTime &to)
Return all alarms, which ocur before given date.
bool addEvent(Event *event)
Add Event to calendar.
bool addJournal(Journal *)
Add a Journal entry to calendar.
void close()
Clears out the current calendar, freeing all used memory etc.
void closeTodos()
Clears out the current calendar, freeing all used memory etc.
Event * event(const TQString &uid)
Retrieves an event on the basis of the unique string ID.
bool load(const TQString &fileName, CalFormat *format=0)
Loads a calendar on disk in vCalendar or iCalendar format into the current calendar.
Todo * todo(const TQString &uid)
Searches todolist for an event with this unique string identifier, returns a pointer or null.
Journal::List rawJournals(JournalSortField sortField=JournalSortUnsorted, SortDirection sortDirection=SortDirectionAscending)
Return list of all journals.
bool save(const TQString &fileName, CalFormat *format=0)
Writes out the calendar to disk in the specified format.
Event::List rawEventsForDate(const TQDate &date, EventSortField sortField=EventSortUnsorted, SortDirection sortDirection=SortDirectionAscending)
Builds and then returns a list of all events that match for the date specified.
void closeEvents()
Clears out the current calendar, freeing all used memory etc.
Alarm::List alarms(const TQDateTime &from, const TQDateTime &to)
Return all alarms, which ocur in the given time interval.
Todo::List rawTodosForDate(const TQDate &date)
Returns list of todos due on the specified date.
void setTimeZoneId(const TQString &timeZoneId)
Set the Time Zone Id for the Calendar.
Definition: calendar.cpp:103
void registerObserver(Observer *observer)
Register an Observer for this Calendar.
Definition: calendar.cpp:938
void unregisterObserver(Observer *observer)
Unregister an Observer for this Calendar.
Definition: calendar.cpp:945
TQString timeZoneId() const
Get the Time Zone ID for the Calendar.
Definition: calendar.cpp:112
This class provides an Event in the sense of RFC2445.
Definition: event.h:33
TQString uid() const
Return the unique id for the event.
This class provides the base class common to all calendar components.
Definition: incidence.h:48
IncidenceList childIncidences() const
Returns an EventList of all child incidences.
Definition: incidence.cpp:934
bool hasRecurrenceID() const
Returns true if the incidence has recurrenceID, otherwise return false.
Definition: incidence.cpp:893
This class provides a Journal in the sense of RFC2445.
Definition: journal.h:34
This class represents a person.
Definition: person.h:35
void setSavePolicy(int policy)
Set save policy.
void clearTodosCache()
Clear todos cache.
void loadCache()
Loads the cache, this method should be called on load.
Alarm::List alarms(const TQDateTime &from, const TQDateTime &to)
Return all alarms, which ocur in the given time interval.
virtual bool doOpen()
Opens the resource.
virtual TQString cacheFile() const
This method is used by loadCache() and saveCache(), reimplement it to change the location of the cach...
bool deleteJournal(Journal *)
Remove a Journal from the calendar.
int reloadInterval() const
Return reload interval in minutes.
int reloadPolicy() const
Return reload policy.
void setSaveInterval(int minutes)
Set save interval in minutes which is used when save policy is SaveInterval.
void clearJournalsCache()
Clear journals cache.
Event::List rawEventsForDate(const TQDate &date, EventSortField sortField=EventSortUnsorted, SortDirection sortDirection=SortDirectionAscending)
Builds and then returns a list of all events that match for the date specified.
int savePolicy() const
Return save policy.
KPIM::IdMapper & idMapper()
Returns a reference to the id mapper.
virtual TQString changesCacheFile(const TQString &) const
Functions for keeping the changes persistent.
void calendarIncidenceChanged(KCal::Incidence *incidence)
Notify the Observer that an Incidence has been modified.
Todo::List rawTodosForDate(const TQDate &date)
Returns list of todos due on the specified date.
void addInfoText(TQString &) const
Add info text for concrete resources.
void setOwner(const Person &owner)
Set the owner of the calendar.
void calendarIncidenceAdded(KCal::Incidence *incidence)
Notify the Observer that an Incidence has been inserted.
const Person & getOwner() const
Return the owner of the calendar's full name.
void saveCache()
Saves the cache back.
void setTimeZoneId(const TQString &timeZoneId)
Set id of timezone, e.g.
Event::List rawEvents(EventSortField sortField=EventSortUnsorted, SortDirection sortDirection=SortDirectionAscending)
Return unfiltered list of all events in calendar.
Journal * journal(const TQString &uid)
Return Journal with given unique id.
Journal::List rawJournals(JournalSortField sortField=JournalSortUnsorted, SortDirection sortDirection=SortDirectionAscending)
Return list of all journals.
void setReloadInterval(int minutes)
Set reload interval in minutes which is used when reload policy is ReloadInterval.
virtual void doClose()
Virtual method from KRES::Resource, called when the last instace of the resource is closed.
bool deleteEvent(Event *)
Deletes an event from this calendar.
Journal::List rawJournalsForDate(const TQDate &date)
Return list of journals for the given date.
bool deleteTodo(Todo *)
Remove a todo from the todolist.
void calendarIncidenceDeleted(KCal::Incidence *incidence)
Notify the Observer that an Incidence has been removed.
Todo * todo(const TQString &uid)
Searches todolist for an event with this unique string identifier, returns a pointer or null.
void setReloadPolicy(int policy)
Set reload policy.
TDE_DEPRECATED bool addJournal(Journal *journal)
Add a Journal entry to calendar.
Alarm::List alarmsTo(const TQDateTime &to)
Return all alarms, which ocur before given date.
TDE_DEPRECATED bool addEvent(Event *event)
Add event to calendar.
void clearEventsCache()
Clear events cache.
bool checkForSave()
Check if save required according to save policy.
bool checkForReload()
Check if reload required according to reload policy.
int saveInterval() const
Return save interval in minutes.
TDE_DEPRECATED bool addTodo(Todo *todo)
Add a todo to the todolist.
Todo::List rawTodos(TodoSortField sortField=TodoSortUnsorted, SortDirection sortDirection=SortDirectionAscending)
Return list of all todos.
Event * event(const TQString &UniqueStr)
Retrieves an event on the basis of the unique string ID.
void clearCache()
Clear cache.
This class provides the interfaces for a calendar resource.
bool save(Incidence *incidence=0)
Save resource data.
bool load()
Load resource data.
Incidence * incidence(const TQString &uid)
Return incidence with given unique id.
Incidence::List rawIncidences()
Returns a list of all incideces.
This class provides a Todo in the sense of RFC2445.
Definition: todo.h:32
Namespace KCal is for global classes, objects and/or functions in libkcal.
Definition: alarm.h:38
TodoSortField
How Todos are to be sorted.
Definition: calendar.h:91
JournalSortField
How Journals are to be sorted.
Definition: calendar.h:111
EventSortField
How Events are to be sorted.
Definition: calendar.h:75
SortDirection
Sort direction.
Definition: calendar.h:63