resourcekabc.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <typeinfo>
00023 #include <stdlib.h>
00024
00025 #include <qdatetime.h>
00026 #include <qstring.h>
00027 #include <qptrlist.h>
00028
00029 #include <klocale.h>
00030 #include <kdebug.h>
00031 #include <kurl.h>
00032 #include <kio/job.h>
00033 #include <kstandarddirs.h>
00034
00035 #include <kabc/stdaddressbook.h>
00036 #include <kabc/locknull.h>
00037
00038 #include "vcaldrag.h"
00039 #include "vcalformat.h"
00040 #include "icalformat.h"
00041 #include "exceptions.h"
00042 #include "incidence.h"
00043 #include "event.h"
00044 #include "todo.h"
00045 #include "journal.h"
00046 #include "filestorage.h"
00047 #include "libkcal/alarm.h"
00048
00049 #include <kresources/configwidget.h>
00050
00051 #include "resourcekabcconfig.h"
00052
00053 #include "resourcekabc.h"
00054
00055 using namespace KCal;
00056
00057 extern "C"
00058 {
00059 void *init_kcal_kabc()
00060 {
00061 return new KRES::PluginFactory<ResourceKABC,ResourceKABCConfig>();
00062 }
00063 }
00064
00065
00066 ResourceKABC::ResourceKABC( const KConfig* config )
00067 : ResourceCalendar( config )
00068 {
00069 if ( config ) {
00070 readConfig( config );
00071 }
00072
00073 init();
00074 }
00075
00076 ResourceKABC::ResourceKABC( )
00077 : ResourceCalendar( 0 )
00078 {
00079 mAlarmDays = 1;
00080 mAlarm = false;
00081
00082 init();
00083 }
00084
00085 ResourceKABC::~ResourceKABC()
00086 {
00087 delete mLock;
00088 }
00089
00090 void ResourceKABC::init()
00091 {
00092 setType( "birthdays" );
00093
00094 mOpen = false;
00095 setReadOnly( true );
00096
00097 mLock = new KABC::LockNull( false );
00098
00099 mAddressbook = KABC::StdAddressBook::self();
00100 connect( mAddressbook, SIGNAL(addressBookChanged(AddressBook*)), SLOT( reload() ) );
00101 }
00102
00103 void ResourceKABC::readConfig( const KConfig *config )
00104 {
00105 mAlarmDays = config->readNumEntry( "AlarmDays", 1 );
00106 mAlarm = config->readBoolEntry( "Alarm", false );
00107 }
00108
00109 void ResourceKABC::writeConfig( KConfig *config )
00110 {
00111 ResourceCalendar::writeConfig( config );
00112 config->writeEntry( "AlarmDays", mAlarmDays );
00113 config->writeEntry( "Alarm", mAlarm );
00114 load();
00115 }
00116
00117
00118 bool ResourceKABC::doOpen()
00119 {
00120 kdDebug(5800) << "ResourceKABC::doOpen()" << endl;
00121
00122 mOpen = true;
00123
00124 return true;
00125 }
00126
00127 bool ResourceKABC::load()
00128 {
00129 kdDebug() << "ResourceKABC::load()" << endl;
00130
00131 if ( !mOpen ) return true;
00132
00133 mCalendar.close();
00134
00135
00136 QString summary;
00137
00138 KABC::AddressBook::Iterator it;
00139 for ( it = mAddressbook->begin(); it != mAddressbook->end(); ++it ) {
00140
00141 QDateTime birthdate = (*it).birthday().date();
00142 if ( birthdate.isValid() ) {
00143 kdDebug() << "found a birthday " << birthdate.toString() << endl;
00144
00145 QString name = (*it).nickName();
00146 if (name.isEmpty()) name = (*it).realName();
00147 summary = i18n("%1's birthday").arg( name );
00148
00149 Event *ev = new Event();
00150
00151 ev->setDtStart(birthdate);
00152 ev->setDtEnd(birthdate);
00153 ev->setHasEndDate(true);
00154 ev->setFloats(true);
00155
00156 ev->setSummary(summary);
00157
00158
00159 Recurrence *vRecurrence = ev->recurrence();
00160 vRecurrence->setRecurStart(birthdate);
00161 vRecurrence->setYearly(Recurrence::rYearlyMonth,1,-1);
00162 vRecurrence->addYearlyNum(birthdate.date().month());
00163
00164 ev->clearAlarms();
00165
00166 if ( mAlarm ) {
00167
00168 Alarm* vAlarm = ev->newAlarm();
00169 vAlarm->setText(summary);
00170 vAlarm->setTime(birthdate);
00171
00172 vAlarm->setStartOffset( -1440 * mAlarmDays );
00173 vAlarm->setEnabled(true);
00174 }
00175
00176
00177 ev->setCategories(i18n("Birthday"));
00178
00179 ev->setReadOnly( true );
00180 mCalendar.addEvent(ev);
00181 kdDebug() << "imported " << birthdate.toString() << endl;
00182 }
00183
00184 QDateTime anniversary = QDate::fromString( (*it).custom( "KADDRESSBOOK", "X-Anniversary" ), Qt::ISODate );
00185 if ( anniversary.isValid() ) {
00186 kdDebug() << "found a anniversary " << anniversary.toString() << endl;
00187
00188 QString name = (*it).nickName();
00189 if (name.isEmpty()) name = (*it).realName();
00190 summary = i18n("%1's anniversary").arg( name );
00191
00192 Event *ev = new Event();
00193
00194 ev->setDtStart(anniversary);
00195 ev->setDtEnd(anniversary);
00196 ev->setHasEndDate(true);
00197 ev->setFloats(true);
00198
00199 ev->setSummary(summary);
00200
00201
00202 Recurrence *vRecurrence = ev->recurrence();
00203 vRecurrence->setRecurStart(anniversary);
00204 vRecurrence->setYearly(Recurrence::rYearlyMonth,1,-1);
00205 vRecurrence->addYearlyNum(anniversary.date().month());
00206
00207 ev->clearAlarms();
00208
00209 if ( mAlarm ) {
00210
00211 Alarm* vAlarm = ev->newAlarm();
00212 vAlarm->setText(summary);
00213 vAlarm->setTime(anniversary);
00214
00215 vAlarm->setStartOffset( -1440 * mAlarmDays );
00216 vAlarm->setEnabled(true);
00217 }
00218
00219
00220 ev->setCategories(i18n("Anniversary"));
00221
00222 ev->setReadOnly( true );
00223 mCalendar.addEvent(ev);
00224 kdDebug() << "imported " << anniversary.toString() << endl;
00225 }
00226 }
00227
00228 emit resourceChanged( this );
00229
00230 return true;
00231 }
00232
00233 void ResourceKABC::setAlarm( bool a )
00234 {
00235 mAlarm = a;
00236 }
00237
00238 bool ResourceKABC::alarm()
00239 {
00240 return mAlarm;
00241 }
00242
00243 void ResourceKABC::setAlarmDays( int ad )
00244 {
00245 mAlarmDays = ad;
00246 }
00247
00248 int ResourceKABC::alarmDays()
00249 {
00250 return mAlarmDays;
00251 }
00252
00253 bool ResourceKABC::save()
00254 {
00255
00256 return true;
00257 }
00258
00259 bool ResourceKABC::isSaving()
00260 {
00261 return false;
00262 }
00263
00264 KABC::Lock *ResourceKABC::lock()
00265 {
00266 return mLock;
00267 }
00268
00269 void ResourceKABC::doClose()
00270 {
00271 if ( !mOpen ) return;
00272
00273 mCalendar.close();
00274 mOpen = false;
00275 }
00276
00277
00278 bool ResourceKABC::addEvent(Event*)
00279 {
00280 return false;
00281 }
00282
00283 void ResourceKABC::deleteEvent(Event*)
00284 {
00285 }
00286
00287
00288 Event *ResourceKABC::event( const QString &uid )
00289 {
00290 return mCalendar.event( uid );
00291 }
00292
00293 Event::List ResourceKABC::rawEventsForDate(const QDate &qd, bool sorted)
00294 {
00295 return mCalendar.rawEventsForDate( qd, sorted );
00296 }
00297
00298
00299 Event::List ResourceKABC::rawEvents( const QDate &start, const QDate &end,
00300 bool inclusive )
00301 {
00302 return mCalendar.rawEvents( start, end, inclusive );
00303 }
00304
00305 Event::List ResourceKABC::rawEventsForDate(const QDateTime &qdt)
00306 {
00307 return mCalendar.rawEventsForDate( qdt.date() );
00308 }
00309
00310 Event::List ResourceKABC::rawEvents()
00311 {
00312 return mCalendar.rawEvents();
00313 }
00314
00315 bool ResourceKABC::addTodo(Todo*)
00316 {
00317 return false;
00318 }
00319
00320 void ResourceKABC::deleteTodo(Todo*)
00321 {
00322 }
00323
00324
00325 Todo::List ResourceKABC::rawTodos()
00326 {
00327 return mCalendar.rawTodos();
00328 }
00329
00330 Todo *ResourceKABC::todo( const QString &uid )
00331 {
00332 return mCalendar.todo( uid );
00333 }
00334
00335 Todo::List ResourceKABC::todos( const QDate &date )
00336 {
00337 return mCalendar.todos( date );
00338 }
00339
00340
00341 bool ResourceKABC::addJournal(Journal*)
00342 {
00343 return false;
00344 }
00345
00346 void ResourceKABC::deleteJournal(Journal*)
00347 {
00348 }
00349
00350 Journal *ResourceKABC::journal(const QDate &date)
00351 {
00352
00353
00354 return mCalendar.journal( date );
00355 }
00356
00357 Journal *ResourceKABC::journal(const QString &uid)
00358 {
00359 return mCalendar.journal( uid );
00360 }
00361
00362 Journal::List ResourceKABC::journals()
00363 {
00364 return mCalendar.journals();
00365 }
00366
00367
00368 Alarm::List ResourceKABC::alarmsTo( const QDateTime &to )
00369 {
00370 return mCalendar.alarmsTo( to );
00371 }
00372
00373 Alarm::List ResourceKABC::alarms( const QDateTime &from, const QDateTime &to )
00374 {
00375
00376
00377 return mCalendar.alarms( from, to );
00378 }
00379
00380 void ResourceKABC::update(IncidenceBase *)
00381 {
00382 }
00383
00384 void ResourceKABC::dump() const
00385 {
00386 ResourceCalendar::dump();
00387 }
00388
00389 void ResourceKABC::reload()
00390 {
00391 load();
00392 }
00393
00394 void ResourceKABC::setTimeZoneId( const QString& tzid )
00395 {
00396 mCalendar.setTimeZoneId( tzid );
00397 }
00398
00399 #include "resourcekabc.moc"
This file is part of the documentation for libkcal Library Version 3.2.2.