00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#include <stdlib.h>
00022
00023
#include <qdatetime.h>
00024
#include <qstring.h>
00025
#include <qptrlist.h>
00026
00027
#include <kdebug.h>
00028
00029
#include <libkcal/calendarlocal.h>
00030
#include <libkcal/calendar.h>
00031
#include <libkcal/journal.h>
00032
00033
#include "dateset.h"
00034
#include "exchangeaccount.h"
00035
#include "exchangeclient.h"
00036
00037
#include "exchangecalendar.h"
00038
00039
using namespace KCal;
00040
using namespace KPIM;
00041
00042 ExchangeCalendar::ExchangeCalendar( KPIM::ExchangeAccount* account )
00043 : Calendar()
00044 {
00045 init( account );
00046 mCache =
new CalendarLocal();
00047 }
00048
00049 ExchangeCalendar::ExchangeCalendar( KPIM::ExchangeAccount* account,
const QString &timeZoneId)
00050 : Calendar(timeZoneId)
00051 {
00052 init( account );
00053 mCache =
new CalendarLocal( timeZoneId );
00054 }
00055
00056
void ExchangeCalendar::init( KPIM::ExchangeAccount* account )
00057 {
00058 kdDebug() <<
"ExchangeCalendar::init()" << endl;
00059 mAccount = account;
00060 mClient =
new ExchangeClient( account );
00061 mDates =
new DateSet();
00062
00063 mEventDates =
new QMap<Event,QDateTime>();
00064 mCacheDates =
new QMap<QDate, QDateTime>();
00065
00066 mCachedSeconds = 600;
00067
00068
00069 }
00070
00071
00072 ExchangeCalendar::~ExchangeCalendar()
00073 {
00074 kdDebug() <<
"Destructing ExchangeCalendar" << endl;
00075
close();
00076
00077
00078
delete mDates;
00079
delete mClient;
00080
delete mEventDates;
00081
delete mCacheDates;
00082
delete mCache;
00083 }
00084
00085
00086 bool ExchangeCalendar::load(
const QString &fileName )
00087 {
00088
00089
return true;
00090 }
00091
00092 bool ExchangeCalendar::save(
const QString &fileName, CalFormat *format )
00093 {
00094
return mCache->save( fileName, format );
00095 }
00096
00097 void ExchangeCalendar::close()
00098 {
00099 mCache->close();
00100 setModified(
false );
00101 }
00102
00103
00104 void ExchangeCalendar::addEvent(Event *anEvent)
00105 {
00106 kdDebug() <<
"ExchangeCalendar::addEvent" << endl;
00107 mCache->addEvent( anEvent );
00108
insertEvent(anEvent);
00109
00110 anEvent->registerObserver(
this );
00111
00112 setModified(
true );
00113 }
00114
00115
00116 void ExchangeCalendar::deleteEvent(Event *event)
00117 {
00118 kdDebug(5800) <<
"ExchangeCalendar::deleteEvent" << endl;
00119 mCache->deleteEvent( event );
00120 setModified(
true );
00121 }
00122
00123
00124 Event *ExchangeCalendar::event(
const QString &uid )
00125 {
00126 kdDebug(5800) <<
"ExchangeCalendar::event(): " << uid << endl;
00127
00128
return mCache->event( uid );
00129 }
00130
00131 void ExchangeCalendar::addTodo(Todo *todo)
00132 {
00133 mCache->addTodo( todo );
00134
00135 todo->registerObserver(
this );
00136
00137 setModified(
true );
00138 }
00139
00140 void ExchangeCalendar::deleteTodo(Todo *todo)
00141 {
00142 mCache->deleteTodo( todo );
00143
00144 setModified(
true );
00145 }
00146
00147 QPtrList<Todo>
ExchangeCalendar::rawTodos()
const
00148
{
00149
return mCache->rawTodos();
00150 }
00151
00152 Todo *ExchangeCalendar::todo(
const QString &uid )
00153 {
00154
return mCache->todo( uid );
00155 }
00156
00157 QPtrList<Todo>
ExchangeCalendar::todos(
const QDate &date )
00158 {
00159
return mCache->todos( date );
00160 }
00161
00162 Alarm::List ExchangeCalendar::alarmsTo(
const QDateTime &to )
00163 {
00164
return mCache->alarmsTo( to );
00165 }
00166
00167 Alarm::List ExchangeCalendar::alarms(
const QDateTime &from,
const QDateTime &to )
00168 {
00169 kdDebug(5800) <<
"ExchangeCalendar::alarms(" << from.toString() <<
" - " << to.toString() <<
")\n";
00170
return mCache->alarms( from, to );
00171 }
00172
00173
00174
00175
00176 void ExchangeCalendar::update(IncidenceBase *incidence)
00177 {
00178 setModified(
true );
00179 }
00180
00181
00182
00183
00184 void ExchangeCalendar::insertEvent(
const Event *anEvent)
00185 {
00186 kdDebug() <<
"ExchangeCalendar::insertEvent" << endl;
00187
00188 }
00189
00190
00191
00192 QPtrList<Event> ExchangeCalendar::rawEventsForDate(
const QDate &qd,
bool sorted)
00193 {
00194 kdDebug() <<
"ExchangeCalendar::rawEventsForDate(" << qd.toString() <<
"," << sorted <<
")" << endl;
00195
00196
00197
00198 QDateTime now = QDateTime::currentDateTime();
00199
00200
00201
00202 QDate start = QDate( qd.year(), qd.month(), 1 );
00203
if ( !mDates->contains( start ) || (*mCacheDates)[start].secsTo( now ) > mCachedSeconds ) {
00204 kdDebug() <<
"Reading events for month of " << start.toString() << endl;
00205 QDate end = start.addMonths( 1 ).addDays( -1 );
00206 mClient->downloadSynchronous( mCache, start, end,
true );
00207 mDates->add( start );
00208 mCacheDates->insert( start, now );
00209 }
00210
00211
00212 QPtrList<Event> events = mCache->rawEventsForDate( qd, sorted );
00213 kdDebug() <<
"Found " << events.count() <<
" events." << endl;
00214
return events;
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243 }
00244
00245
00246 QPtrList<Event>
ExchangeCalendar::rawEvents(
const QDate &start,
const QDate &end,
00247
bool inclusive )
00248 {
00249 kdDebug() <<
"ExchangeCalendar::rawEvents(start,end,inclusive)" << endl;
00250
return mCache->rawEvents( start, end, inclusive );
00251 }
00252
00253 QPtrList<Event> ExchangeCalendar::rawEventsForDate(
const QDateTime &qdt)
00254 {
00255 kdDebug() <<
"ExchangeCalendar::rawEventsForDate(qdt)" << endl;
00256
return rawEventsForDate( qdt.date() );
00257 }
00258
00259 QPtrList<Event>
ExchangeCalendar::rawEvents()
00260 {
00261 kdDebug() <<
"ExchangeCalendar::rawEvents()" << endl;
00262
return mCache->rawEvents();
00263 }
00264
00265 void ExchangeCalendar::addJournal(Journal *journal)
00266 {
00267 kdDebug(5800) <<
"Adding Journal on " << journal->dtStart().toString() << endl;
00268 mCache->addJournal( journal );
00269
00270 journal->registerObserver(
this );
00271
00272 setModified(
true );
00273 }
00274
00275 Journal *ExchangeCalendar::journal(
const QDate &date)
00276 {
00277
00278
return mCache->journal( date );
00279 }
00280
00281 Journal *ExchangeCalendar::journal(
const QString &uid)
00282 {
00283
return mCache->journal( uid );
00284 }
00285
00286 QPtrList<Journal>
ExchangeCalendar::journals()
00287 {
00288
return mCache->journals();
00289 }