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.
tdepim/kresources/lib/addressbookadaptor.cpp

135 lines
3.9 KiB

/*
This file is part of kdepim.
Copyright (c) 2004 Cornelius Schumacher <schumacher@kde.org>
Copyright (c) 2004 Till Adam <adam@kde.org>
Copyright (c) 2005 Reinhold Kainhofer <reinhold@kainhofer.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "addressbookadaptor.h"
#include <kabc/addressee.h>
#include <kabc/vcardconverter.h>
#include <libtdepim/kabcresourcecached.h>
#include <kio/job.h>
using namespace KABC;
AddressBookUploadItem::AddressBookUploadItem(
KPIM::GroupwareDataAdaptor *adaptor,
KABC::Addressee addr,
GroupwareUploadItem::UploadType type )
: GroupwareUploadItem( type )
{
mItemType = KPIM::FolderLister::Contact;
setUrl( addr.custom( adaptor->identifier(), "storagelocation" ) );
setUid( addr.uid() );
KABC::VCardConverter vcard;
#if defined(KABC_VCARD_ENCODING_FIX)
setData( vcard.createVCardRaw( addr ) );
#else
setData( vcard.createVCard( addr ) );
#endif
}
AddressBookAdaptor::AddressBookAdaptor()
{
}
TQString AddressBookAdaptor::mimeType() const
{
return "text/x-vcard";
}
bool AddressBookAdaptor::localItemExists( const TQString &localId )
{
KABC::Addressee a = mResource->findByUid( localId );
return !a.isEmpty();
}
bool AddressBookAdaptor::localItemHasChanged( const TQString &localId )
{
KABC::Addressee::List addressees = mResource->deletedAddressees();
KABC::Addressee::List::ConstIterator it;
for( it = addressees.begin(); it != addressees.end(); ++it ) {
if ( (*it).uid() == localId ) return true;
}
addressees = mResource->changedAddressees();
for( it = addressees.begin(); it != addressees.end(); ++it ) {
if ( (*it).uid() == localId ) return true;
}
return false;
}
void AddressBookAdaptor::deleteItem( const TQString &localId )
{
KABC::Addressee a = mResource->findByUid( localId );
if ( !a.isEmpty() ) {
mResource->removeAddressee( a );
mResource->clearChange( a.uid() );
}
}
void AddressBookAdaptor::addItem( KABC::Addressee addr )
{
if ( !addr.isEmpty() ) {
addr.setResource( mResource );
mResource->insertAddressee( addr );
clearChange( addr.uid() );
}
}
void AddressBookAdaptor::addressbookItemDownloaded( KABC::Addressee addr,
const TQString &newLocalId, const KURL &remoteId, const TQString &fingerprint,
const TQString &storagelocation )
{
// remove the currently existing item from the cache
deleteItem( newLocalId );
TQString localId = idMapper()->localId( remoteId.path() );
if ( !localId.isEmpty() ) deleteItem( localId );
// add the new item
addr.insertCustom( identifier(), "storagelocation", storagelocation );
if ( !localId.isEmpty() ) addr.setUid( localId );
addItem( addr );
// update the fingerprint and the ids in the idMapper
idMapper()->removeRemoteId( localId );
idMapper()->removeRemoteId( newLocalId );
emit itemDownloaded( addr.uid(), remoteId, fingerprint );
}
void AddressBookAdaptor::clearChange( const TQString &uid )
{
mResource->clearChange( uid );
}
KPIM::GroupwareUploadItem *AddressBookAdaptor::newUploadItem(
KABC::Addressee addr, KPIM::GroupwareUploadItem::UploadType type )
{
return new AddressBookUploadItem( this, addr, type );
}