kabc Library: resourceevo.cpp Source File (kabc Library)

| # kabc Library API Documentation
Overview | Class Hierarchy | Classes | Classes (annotated) | Members | Namespaces | Source Files

# resourceevo.cpp

    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  * skip the first key
    00075  */
    00076
    00077 bool ResourceEvolution::load() {
    00078     /* doOpen never get's called :( */
    00079     if (!doOpen()) return false;
    00080     if (!mWrap ) return false; // open first!
    00081
    00082     DBIterator it = mWrap->begin();
    00083     // skip the "PAS-DB-VERSION"
    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     // just delete the summary so evolution will regenerate it
    00106     // on next start up
    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     // remove, convert add set unchanged false
    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 }

This file is part of the documentation for kabc Library Version 3.4.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat Jun 11 20:31:30 2005 by doxygen 1.4.1 written by Dimitri van Heesch, © 1997-2003