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"