00001
#include <qdir.h>
00002
00003
#include <kglobal.h>
00004
#include <klocale.h>
00005
#include <kdebug.h>
00006
00007
#include <stdio.h>
00008
00009
#include <kabc/vcardparser/vcardtool.h>
00010
00011
#include "dbwrapper.h"
00012
#include "resourceevo.h"
00013
00014
using namespace Evolution;
00015
using namespace KABC;
00016
00017
class EvolutionFactory :
public KRES::PluginFactoryBase
00018 {
00019
public:
00020 KRES::Resource *resource(
const KConfig *config )
00021 {
00022
return new ResourceEvolution( config );
00023 }
00024
00025 KRES::ConfigWidget *configWidget(
QWidget * )
00026 {
00027
return 0;
00028 }
00029 };
00030
00031
extern "C"
00032 {
00033 KDE_EXPORT
void *init_kabc_evo()
00034 {
00035
return (
new EvolutionFactory() );
00036 }
00037 }
00038
00039 ResourceEvolution::ResourceEvolution(
const KConfig* conf )
00040 : Resource( conf ), mWrap(0l)
00041 {
00042 m_isOpen =
false;
00043 }
00044 ResourceEvolution::~ResourceEvolution() {
00045
delete mWrap;
00046 }
00047
bool ResourceEvolution::doOpen() {
00048 mWrap =
new DBWrapper;
00049
if (!mWrap->open( QDir::homeDirPath() +
"/evolution/local/Contacts/addressbook.db" ) ) {
00050
return false;
00051 }
00052
00053
QString val;
00054
if (!mWrap->find(
"PAS-DB-VERSION", val ) )
00055
return false;
00056
00057
if (!val.startsWith(
"0.2") )
00058
return false;
00059
00060 m_isOpen =
true;
00061
00062
return true;
00063 }
00064
void ResourceEvolution::doClose() {
00065
delete mWrap;
00066 mWrap = 0l;
00067 m_isOpen =
false;
00068 }
00069
Ticket* ResourceEvolution::requestSaveTicket() {
00070
if ( !addressBook() )
return 0;
00071
return createTicket(
this );
00072 }
00073
00074
00075
00076
00077
bool ResourceEvolution::load() {
00078
00079
if (!doOpen())
return false;
00080
if (!mWrap )
return false;
00081
00082 DBIterator it = mWrap->begin();
00083
00084
00085
for ( ; it != mWrap->end(); ++it ) {
00086
if ( it.key().startsWith(
"PAS-DB-VERSION") )
00087
continue;
00088
00089 qWarning(
"val:%s", it.value().latin1() );
00090 VCardTool tool;
00091
QString str = it.value().stripWhiteSpace();
00092 Addressee::List list = tool.parseVCards( str );
00093
if (!list.first().isEmpty() ) {
00094
Addressee adr = list.first();
00095 adr.
setResource(
this);
00096 addressBook()->insertAddressee( adr );
00097 }
00098 }
00099
return true;
00100 }
00101
bool ResourceEvolution::save(
Ticket* ticket ) {
00102
delete ticket;
00103
if (!m_isOpen )
return false;
00104
00105
00106
00107 (
void)QFile::remove( QDir::homeDirPath() +
"/evolution/local/Contacts/addressbook.db.summary" );
00108
00109
00110 AddressBook::Iterator it;
00111 Addressee::List list;
00112
for ( it = addressBook()->begin(); it !=addressBook()->end(); ++it ) {
00113
if ( (*it).resource() !=
this || !(*it).changed() )
00114
continue;
00115
00116
00117 list.clear();
00118 mWrap->remove( (*it).uid() );
00119 VCardTool tool;
00120 list.append( (*it) );
00121 mWrap->add( (*it).uid(), tool.createVCards( list, VCard::v2_1) );
00122
00123 (*it).setChanged(
false );
00124 }
00125
00126
return true;
00127 }
00128
void ResourceEvolution::removeAddressee(
const Addressee& rem) {
00129
if (!m_isOpen)
return;
00130
00131 mWrap->remove( rem.
uid() );
00132 }