You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.0 KiB
133 lines
3.0 KiB
15 years ago
|
#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() );
|
||
|
}
|