summaryrefslogtreecommitdiffstats
path: root/kabc/plugins/evolution/resourceevo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kabc/plugins/evolution/resourceevo.cpp')
-rw-r--r--kabc/plugins/evolution/resourceevo.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/kabc/plugins/evolution/resourceevo.cpp b/kabc/plugins/evolution/resourceevo.cpp
new file mode 100644
index 000000000..a1858bf83
--- /dev/null
+++ b/kabc/plugins/evolution/resourceevo.cpp
@@ -0,0 +1,132 @@
+#include <qdir.h>
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include <stdio.h>
+
+#include <kabc/vcardparser/vcardtool.h>
+
+#include "dbwrapper.h"
+#include "resourceevo.h"
+
+using namespace Evolution;
+using namespace KABC;
+
+class EvolutionFactory : public KRES::PluginFactoryBase
+{
+ public:
+ KRES::Resource *resource( const KConfig *config )
+ {
+ return new ResourceEvolution( config );
+ }
+
+ KRES::ConfigWidget *configWidget( QWidget * )
+ {
+ return 0;
+ }
+};
+
+extern "C"
+{
+ KDE_EXPORT void *init_kabc_evo()
+ {
+ return ( new EvolutionFactory() );
+ }
+}
+
+ResourceEvolution::ResourceEvolution( const KConfig* conf )
+ : Resource( conf ), mWrap(0l)
+{
+ m_isOpen = false;
+}
+ResourceEvolution::~ResourceEvolution() {
+ delete mWrap;
+}
+bool ResourceEvolution::doOpen() {
+ mWrap = new DBWrapper;
+ if (!mWrap->open( QDir::homeDirPath() + "/evolution/local/Contacts/addressbook.db" ) ) {
+ return false;
+ }
+
+ QString val;
+ if (!mWrap->find( "PAS-DB-VERSION", val ) )
+ return false;
+
+ if (!val.startsWith("0.2") )
+ return false;
+
+ m_isOpen = true;
+
+ return true;
+}
+void ResourceEvolution::doClose() {
+ delete mWrap;
+ mWrap = 0l;
+ m_isOpen = false;
+}
+Ticket* ResourceEvolution::requestSaveTicket() {
+ if ( !addressBook() ) return 0;
+ return createTicket( this );
+}
+/*
+ * skip the first key
+ */
+
+bool ResourceEvolution::load() {
+ /* doOpen never get's called :( */
+ if (!doOpen()) return false;
+ if (!mWrap ) return false; // open first!
+
+ DBIterator it = mWrap->begin();
+ // skip the "PAS-DB-VERSION"
+
+ for ( ; it != mWrap->end(); ++it ) {
+ if ( it.key().startsWith("PAS-DB-VERSION") )
+ continue;
+
+ qWarning( "val:%s", it.value().latin1() );
+ VCardTool tool;
+ QString str = it.value().stripWhiteSpace();
+ Addressee::List list = tool.parseVCards( str );
+ if (!list.first().isEmpty() ) {
+ Addressee adr = list.first();
+ adr.setResource(this);
+ addressBook()->insertAddressee( adr );
+ }
+ }
+ return true;
+}
+bool ResourceEvolution::save( Ticket* ticket ) {
+ delete ticket;
+ if (!m_isOpen ) return false;
+
+ // just delete the summary so evolution will regenerate it
+ // on next start up
+ (void)QFile::remove( QDir::homeDirPath() + "/evolution/local/Contacts/addressbook.db.summary" );
+
+
+ AddressBook::Iterator it;
+ Addressee::List list;
+ for ( it = addressBook()->begin(); it !=addressBook()->end(); ++it ) {
+ if ( (*it).resource() != this || !(*it).changed() )
+ continue;
+
+ // remove, convert add set unchanged false
+ list.clear();
+ mWrap->remove( (*it).uid() );
+ VCardTool tool;
+ list.append( (*it) );
+ mWrap->add( (*it).uid(), tool.createVCards( list, VCard::v2_1) );
+
+ (*it).setChanged( false );
+ }
+
+ return true;
+}
+void ResourceEvolution::removeAddressee( const Addressee& rem) {
+ if (!m_isOpen) return;
+
+ mWrap->remove( rem.uid() );
+}