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 <kapplication.h>
00024
#include <kcrash.h>
00025
#include <kdebug.h>
00026
#include <klocale.h>
00027
#include <kresources/manager.h>
00028
#include <ksimpleconfig.h>
00029
#include <kstandarddirs.h>
00030
#include <kstaticdeleter.h>
00031
00032
#include "resource.h"
00033
00034
#include "stdaddressbook.h"
00035
00036
using namespace KABC;
00037
00038
StdAddressBook *StdAddressBook::mSelf = 0;
00039
bool StdAddressBook::mAutomaticSave =
true;
00040
00041
static KStaticDeleter<StdAddressBook> addressBookDeleter;
00042
00043 QString StdAddressBook::fileName()
00044 {
00045
return locateLocal(
"data",
"kabc/std.vcf" );
00046 }
00047
00048 QString StdAddressBook::directoryName()
00049 {
00050
return locateLocal(
"data",
"kabc/stdvcf" );
00051 }
00052
00053 void StdAddressBook::handleCrash()
00054 {
00055 }
00056
00057 StdAddressBook *
StdAddressBook::self()
00058 {
00059
kdDebug(5700) <<
"StdAddressBook::self()" <<
endl;
00060
00061
if ( !mSelf )
00062 addressBookDeleter.setObject( mSelf,
new StdAddressBook );
00063
00064
return mSelf;
00065 }
00066
00067 StdAddressBook *
StdAddressBook::self(
bool asynchronous )
00068 {
00069
kdDebug(5700) <<
"StdAddressBook::self()" <<
endl;
00070
00071
if ( !mSelf )
00072 addressBookDeleter.setObject( mSelf,
new StdAddressBook( asynchronous ) );
00073
00074
return mSelf;
00075 }
00076
00077 StdAddressBook::StdAddressBook()
00078 :
AddressBook( "" )
00079 {
00080
kdDebug(5700) <<
"StdAddressBook::StdAddressBook()" <<
endl;
00081
00082 init(
false );
00083 }
00084
00085 StdAddressBook::StdAddressBook(
bool asynchronous )
00086 : AddressBook( "" )
00087 {
00088
kdDebug(5700) <<
"StdAddressBook::StdAddressBook( bool )" <<
endl;
00089
00090 init( asynchronous );
00091 }
00092
00093 StdAddressBook::~StdAddressBook()
00094 {
00095
if ( mAutomaticSave )
00096 saveAll();
00097 }
00098
00099
void StdAddressBook::init(
bool asynchronous )
00100 {
00101 KRES::Manager<Resource> *manager = resourceManager();
00102
00103 KRES::Manager<Resource>::ActiveIterator it;
00104
for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
00105 (*it)->setAddressBook(
this );
00106
if ( !(*it)->open() ) {
00107 error(
QString(
"Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) );
00108
continue;
00109 }
00110 connect( *it, SIGNAL( loadingFinished( Resource* ) ),
00111
this, SLOT( resourceLoadingFinished( Resource* ) ) );
00112 connect( *it, SIGNAL( savingFinished( Resource* ) ),
00113
this, SLOT( resourceSavingFinished( Resource* ) ) );
00114
00115 connect( *it, SIGNAL( loadingError( Resource*,
const QString& ) ),
00116
this, SLOT( resourceLoadingError( Resource*,
const QString& ) ) );
00117 connect( *it, SIGNAL( savingError( Resource*,
const QString& ) ),
00118
this, SLOT( resourceSavingError( Resource*,
const QString& ) ) );
00119 }
00120
00121 Resource *res = standardResource();
00122
if ( !res ) {
00123 res = manager->createResource(
"file" );
00124
if ( res )
00125
addResource( res );
00126
else
00127
kdDebug(5700) <<
"No resource available!!!" <<
endl;
00128 }
00129
00130 setStandardResource( res );
00131 manager->writeConfig();
00132
00133
if ( asynchronous )
00134
asyncLoad();
00135
else
00136
load();
00137 }
00138
00139
bool StdAddressBook::saveAll()
00140 {
00141
kdDebug(5700) <<
"StdAddressBook::saveAll()" <<
endl;
00142
bool ok =
true;
00143
00144 deleteRemovedAddressees();
00145
00146 KRES::Manager<Resource>::ActiveIterator it;
00147 KRES::Manager<Resource> *manager = resourceManager();
00148
for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
00149
if ( !(*it)->readOnly() && (*it)->isOpen() ) {
00150
Ticket *ticket =
requestSaveTicket( *it );
00151
if ( !ticket ) {
00152
error( i18n(
"Unable to save to resource '%1'. It is locked." )
00153 .arg( (*it)->resourceName() ) );
00154
return false;
00155 }
00156
00157
if ( !AddressBook::save( ticket ) ) {
00158 ok =
false;
00159
releaseSaveTicket( ticket );
00160 }
00161 }
00162 }
00163
00164
return ok;
00165 }
00166
00167 bool StdAddressBook::save()
00168 {
00169
kdDebug(5700) <<
"StdAddressBook::save()" <<
endl;
00170
00171
if ( mSelf )
00172
return mSelf->
saveAll();
00173
else
00174
return true;
00175 }
00176
00177 void StdAddressBook::close()
00178 {
00179 addressBookDeleter.destructObject();
00180 }
00181
00182 void StdAddressBook::setAutomaticSave(
bool enable )
00183 {
00184 mAutomaticSave = enable;
00185 }
00186
00187 bool StdAddressBook::automaticSave()
00188 {
00189
return mAutomaticSave;
00190 }
00191
00192
00193 Addressee StdAddressBook::whoAmI()
00194 {
00195
KConfig config(
"kabcrc" );
00196 config.
setGroup(
"General" );
00197
00198
return findByUid( config.
readEntry(
"WhoAmI" ) );
00199 }
00200
00201 void StdAddressBook::setWhoAmI(
const Addressee &addr )
00202 {
00203
KConfig config(
"kabcrc" );
00204 config.
setGroup(
"General" );
00205
00206 config.
writeEntry(
"WhoAmI", addr.
uid() );
00207 }