resourceevo.cpp00001 #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 }
|