summaryrefslogtreecommitdiffabout
authorulf69 <ulf69>2004-08-03 20:49:15 (UTC)
committer ulf69 <ulf69>2004-08-03 20:49:15 (UTC)
commitbe52d7d03e57620919b23cb0cbb33ac22d0920e0 (patch) (side-by-side diff)
tree34e8e29a221c828424126694f865d702c7635f97
parentd5358380edce9a2c39f3eea4df741a148338880c (diff)
downloadkdepimpi-be52d7d03e57620919b23cb0cbb33ac22d0920e0.zip
kdepimpi-be52d7d03e57620919b23cb0cbb33ac22d0920e0.tar.gz
kdepimpi-be52d7d03e57620919b23cb0cbb33ac22d0920e0.tar.bz2
hopefully last modifications of resource based export/import functionality
for opie, qtopia and sharpdtm
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--kabc/plugins/opie/resourceopie.cpp39
-rw-r--r--kabc/plugins/opie/resourceopie.h10
-rw-r--r--kabc/plugins/qtopia/resourceqtopia.cpp49
-rw-r--r--kabc/plugins/qtopia/resourceqtopia.h10
-rw-r--r--kabc/plugins/sharpdtm/resourcesharpdtm.cpp30
-rw-r--r--kabc/plugins/sharpdtm/resourcesharpdtm.h10
-rw-r--r--kabc/resource.cpp15
-rw-r--r--kabc/resource.h11
-rw-r--r--kabc/tmpaddressbook.cpp14
-rw-r--r--kaddressbook/xxport/opie_xxport.cpp116
-rw-r--r--kaddressbook/xxport/opie_xxport.h4
-rw-r--r--kaddressbook/xxport/qtopia_xxport.cpp221
-rw-r--r--kaddressbook/xxport/sharpdtm_xxport.cpp224
-rw-r--r--kaddressbook/xxport/sharpdtm_xxport.h2
-rw-r--r--kaddressbook/xxportobject.cpp106
-rw-r--r--kaddressbook/xxportobject.h9
16 files changed, 161 insertions, 709 deletions
diff --git a/kabc/plugins/opie/resourceopie.cpp b/kabc/plugins/opie/resourceopie.cpp
index 5559827..9dfd473 100644
--- a/kabc/plugins/opie/resourceopie.cpp
+++ b/kabc/plugins/opie/resourceopie.cpp
@@ -1,375 +1,348 @@
/*
This file is part of libkabc.
Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <qdir.h>
#include <qfile.h>
#include <qfileinfo.h>
#include <qregexp.h>
#include <kapplication.h>
#include <kconfig.h>
#include <kdebug.h>
#include <klocale.h>
//US #include <ksavefile.h>
#include <kstandarddirs.h>
#include <kmessagebox.h>
//US #include "formatfactory.h"
//US #include <qpe/qpeapplication.h>
#include <opie/ocontactaccess.h>
#include <opie/ocontactaccessbackend_xml.h>
#include "resourceopieconfig.h"
#include "stdaddressbook.h"
#include "syncprefwidget.h"
#include "opieconverter.h"
#include "resourceopie.h"
using namespace KABC;
extern "C"
{
void *init_microkabc_opie()
{
return new KRES::PluginFactory<ResourceOpie,ResourceOpieConfig, SyncPrefWidget>();
}
}
ResourceOpie::ResourceOpie( const KConfig *config, bool syncable )
: Resource( config, syncable ), mAccess(0), mConverter (0)
{
QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml";
KConfig *cfg = (KConfig *)config;
if ( cfg ) {
fileName = cfg->readEntry( "FileName", fileName );
}
init( fileName );
}
ResourceOpie::ResourceOpie( const QString &fileName, bool syncable )
: Resource( 0, syncable )
{
init( fileName );
}
void ResourceOpie::init( const QString &fileName )
{
+ qDebug("ResourceOpie::init()");
connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
setFileName( fileName );
}
ResourceOpie::~ResourceOpie()
{
if (mConverter != 0)
delete mConverter;
if(mAccess != 0)
delete mAccess;
}
void ResourceOpie::writeConfig( KConfig *config )
{
Resource::writeConfig( config );
config->writeEntry( "FileName", fileName() );
}
Ticket *ResourceOpie::requestSaveTicket()
{
kdDebug(5700) << "ResourceOpie::requestSaveTicket()" << endl;
qDebug("ResourceOpie::requestSaveTicket: %s", fileName().latin1());
if ( !addressBook() ) return 0;
if ( !lock( fileName() ) ) {
kdDebug(5700) << "ResourceOpie::requestSaveTicket(): Unable to lock file '"
<< fileName() << "'" << endl;
return 0;
}
return createTicket( this );
}
bool ResourceOpie::doOpen()
{
qDebug("ResourceOpie::doOpen: %s", fileName().latin1());
OContactAccessBackend_XML* backend = new OContactAccessBackend_XML( "KDEPim/Pi", fileName() );
mAccess = new OContactAccess("KDEPim/Pi", 0l, backend, false);
if ( !mAccess ) {
qDebug("Unable to load file() %s", fileName().latin1());
return false;
}
mAccess->setReadAhead( 32 ); // Use ReadAhead-Cache if available
if (mConverter == 0)
{
mConverter = new OpieConverter();
bool res = mConverter->init();
if ( !res )
{
qDebug("Unable to initialize opie converter. Most likely a problem with the category file");
delete mAccess;
mAccess = 0;
return false;
}
}
return true;
}
void ResourceOpie::doClose()
{
qDebug("ResourceOpie::doClose: %s", fileName().latin1());
if(mAccess)
{
delete mAccess;
mAccess = 0;
}
// it seems so, that deletion of access deletes backend as well
//delete backend;
return;
}
bool ResourceOpie::load()
{
qDebug("ResourceOpie::load: %s", fileName().latin1());
bool res = false;
OContactAccess::List::Iterator it;
OContactAccess::List allList = mAccess->allRecords();
for ( it = allList.begin(); it != allList.end(); ++it )
{
const OContact c = (*it);
KABC::Addressee addressee;
res = mConverter->opieToAddressee( c, addressee );
if ( !addressee.isEmpty() && res )
{
addressee.setResource( this );
addressBook()->insertAddressee( addressee );
}
}
return true;
}
bool ResourceOpie::save( Ticket *ticket )
{
qDebug("ResourceOpie::save: %s", fileName().latin1());
KABC::AddressBook::Iterator it;
bool res;
for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
OContact c;
KABC::Addressee addressee = (*it);
res = mConverter->addresseeToOpie( *it, c );
if (res == true)
{
res = mAccess->add(c);
if (res == false)
qDebug("Unable to append Contact %s", c.fullName().latin1());
}
else
{
qDebug("Unable to convert Addressee %s", addressee.formattedName().latin1());
}
}
mAccess->save();
delete ticket;
unlock( fileName() );
return true;
}
bool ResourceOpie::lock( const QString &lockfileName )
{
qDebug("ResourceOpie::lock: %s", fileName().latin1());
kdDebug(5700) << "ResourceOpie::lock()" << endl;
QString fn = lockfileName;
KURL url(fn);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
kdDebug(5700) << "-- lock name: " << lockName << endl;
- if (QFile::exists( lockName )) return false;
+ if (QFile::exists( lockName ))
+ {
+ qDebug("ResourceOpie::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName().latin1());
+ return false;
+ }
QString lockUniqueName;
lockUniqueName = fn + KApplication::randomString( 8 );
url = lockUniqueName;
//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
// Create unique file
QFile file( mLockUniqueName );
file.open( IO_WriteOnly );
file.close();
// Create lock file
int result = 0;
#ifndef _WIN32_
result = ::link( QFile::encodeName( mLockUniqueName ),
QFile::encodeName( lockName ) );
#endif
if ( result == 0 ) {
addressBook()->emitAddressBookLocked();
return true;
}
// TODO: check stat
return false;
}
void ResourceOpie::unlock( const QString &fileName )
{
qDebug("ResourceOpie::unlock() %s", fileName.latin1());
QString fn = fileName;
KURL url(fn);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
QFile::remove( lockName );
QFile::remove( mLockUniqueName );
addressBook()->emitAddressBookUnlocked();
}
void ResourceOpie::setFileName( const QString &newFileName )
{
mDirWatch.stopScan();
mDirWatch.removeFile( fileName() );
Resource::setFileName( newFileName );
mDirWatch.addFile( fileName() );
mDirWatch.startScan();
}
void ResourceOpie::fileChanged()
{
// There is a small theoretical chance that KDirWatch calls us before
// we are fully constructed
if (!addressBook())
return;
QString text( i18n( "Opie resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) );
if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
load();
addressBook()->emitAddressBookChanged();
}
load();
addressBook()->emitAddressBookChanged();
}
void ResourceOpie::removeAddressee( const Addressee &addr )
{
}
void ResourceOpie::cleanUp()
{
// qDebug("ResourceOpie::cleanup() %s", mFileName.latin1());
unlock( fileName() );
}
-/**
- * This method returns the number of elements that are currently in the resource.
- */
-int ResourceOpie::count() const
-{
- qDebug("ResourceOpie::count: %x", mAccess);
-
- if (mAccess != 0)
- {
- OContactAccess::List contactList = mAccess->allRecords();
- return contactList.count();
- }
- else
- return 0;
-}
-
-
-/**
- * This method removes all elements from the resource!! (Not from the addressbook)
- */
-bool ResourceOpie::clear()
-{
- if (mAccess != 0) {
- mAccess->clear();
- return true;
- }
- else
- return false;
-}
-
-
-
//US #include "resourceopie.moc"
diff --git a/kabc/plugins/opie/resourceopie.h b/kabc/plugins/opie/resourceopie.h
index ca30fee..d5b4ebd 100644
--- a/kabc/plugins/opie/resourceopie.h
+++ b/kabc/plugins/opie/resourceopie.h
@@ -1,156 +1,146 @@
/*
This file is part of libkabc.
Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#ifndef KABC_RESOURCEOPIE_H
#define KABC_RESOURCEOPIE_H
#include <kconfig.h>
#include <kdirwatch.h>
#include <sys/types.h>
#include "resource.h"
class OContactAccess;
namespace KABC {
class ResourceConfigWidget;
class OpieConverter;
/**
@internal
*/
class ResourceOpie : public Resource
{
Q_OBJECT
public:
/**
Constructor.
@param cfg The config object where custom resource settings are stored.
*/
ResourceOpie( const KConfig *cfg, bool syncable );
/**
Construct file resource on file @arg fileName using format @arg formatName.
*/
ResourceOpie( const QString &fileName, bool syncable );
/**
* Destructor.
*/
~ResourceOpie();
/**
Writes the config back.
*/
virtual void writeConfig( KConfig *cfg );
/**
* Tries to open the file and checks for the proper format.
* This method should be called before @ref load().
*/
virtual bool doOpen();
/**
* Closes the file again.
*/
virtual void doClose();
/**
* Requests a save ticket, that is used by @ref save()
*/
virtual Ticket *requestSaveTicket();
/**
* Loads all addressees from file to the address book.
* Returns true if all addressees could be loaded otherwise false.
*/
virtual bool load();
/**
* Saves all addresses from address book to file.
* Returns true if all addressees could be saved otherwise false.
*
* @param ticket The ticket returned by @ref requestSaveTicket()
*/
virtual bool save( Ticket *ticket );
/**
* Remove a addressee from its source.
* This method is mainly called by KABC::AddressBook.
*/
virtual void removeAddressee( const Addressee& addr );
/**
* Set name of file to be used for saving.
*/
virtual void setFileName( const QString & );
/**
* This method is called by an error handler if the application
* crashed
*/
virtual void cleanUp();
- /**
- * This method returns the number of elements that are currently in the resource.
- */
- virtual int count() const;
-
- /**
- * This method removes all elements from the resource!! (Not from the addressbook)
- */
- virtual bool clear();
-
protected slots:
void fileChanged();
protected:
void init( const QString &fileName );
bool lock( const QString &fileName );
void unlock( const QString &fileName );
private:
OContactAccess* mAccess;
OpieConverter* mConverter;
QString mLockUniqueName;
KDirWatch mDirWatch;
};
}
#endif
diff --git a/kabc/plugins/qtopia/resourceqtopia.cpp b/kabc/plugins/qtopia/resourceqtopia.cpp
index 4a35f19..242e0c6 100644
--- a/kabc/plugins/qtopia/resourceqtopia.cpp
+++ b/kabc/plugins/qtopia/resourceqtopia.cpp
@@ -1,358 +1,319 @@
/*
This file is part of libkabc.
Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <qdir.h>
#include <qfile.h>
#include <qfileinfo.h>
#include <qregexp.h>
//US #include <qtimer.h>
#include <kapplication.h>
#include <kconfig.h>
#include <kdebug.h>
#include <klocale.h>
//US #include <ksavefile.h>
#include <kstandarddirs.h>
#include <kmessagebox.h>
#include <qpe/pim/addressbookaccess.h>
#include "resourceqtopiaconfig.h"
#include "stdaddressbook.h"
#include "qtopiaconverter.h"
#include "syncprefwidget.h"
#include "resourceqtopia.h"
using namespace KABC;
extern "C"
{
void *init_microkabc_qtopia()
{
return new KRES::PluginFactory<ResourceQtopia,ResourceQtopiaConfig, SyncPrefWidget>();
}
}
ResourceQtopia::ResourceQtopia( const KConfig *config, bool syncable )
: Resource( config, syncable ), mConverter (0)
{
// we can not choose the filename. Therefore use the default to display
QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml";
init( fileName );
}
ResourceQtopia::ResourceQtopia( const QString &fileName, bool syncable )
: Resource( 0, syncable )
{
init( fileName );
}
void ResourceQtopia::init( const QString &fileName )
{
connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
setFileName( fileName );
}
ResourceQtopia::~ResourceQtopia()
{
if (mConverter != 0)
delete mConverter;
if(mAccess != 0)
delete mAccess;
}
void ResourceQtopia::writeConfig( KConfig *config )
{
Resource::writeConfig( config );
}
Ticket *ResourceQtopia::requestSaveTicket()
{
kdDebug(5700) << "ResourceQtopia::requestSaveTicket()" << endl;
qDebug("ResourceQtopia::requestSaveTicket: %s", fileName().latin1());
if ( !addressBook() ) return 0;
if ( !lock( fileName() ) ) {
kdDebug(5700) << "ResourceQtopia::requestSaveTicket(): Unable to lock file '"
<< fileName() << "'" << endl;
return 0;
}
return createTicket( this );
}
bool ResourceQtopia::doOpen()
{
qDebug("ResourceQtopia::doOpen(): %s", fileName().latin1());
mAccess = new AddressBookAccess();
if ( !mAccess ) {
qDebug("Unable to load file() %s", fileName().latin1());
return false;
}
if (mConverter == 0)
{
mConverter = new QtopiaConverter();
bool res = mConverter->init();
if ( !res )
{
QString msg("Unable to initialize qtopia converter. Most likely a problem with the category file");
qDebug(msg);
delete mAccess;
mAccess = 0;
return false;
}
}
return true;
}
void ResourceQtopia::doClose()
{
qDebug("ResourceQtopia::doClose: %s", fileName().latin1());
if(mAccess)
{
delete mAccess;
mAccess = 0;
}
// it seems so, that deletion of access deletes backend as well
//delete backend;
return;
}
bool ResourceQtopia::load()
{
qDebug("ResourceQtopia::load: %s", fileName().latin1());
AddressBookIterator it(*mAccess);
const PimContact* contact;
bool res;
for (contact=it.toFirst(); it.current(); ++it)
{
contact = it.current();
KABC::Addressee addressee;
res = mConverter->qtopiaToAddressee( (*contact), addressee );
if ( !addressee.isEmpty() && res )
{
addressee.setResource( this );
addressBook()->insertAddressee( addressee );
}
}
return true;
}
bool ResourceQtopia::save( Ticket *ticket )
{
qDebug("ResourceQtopia::save: %s", fileName().latin1());
KABC::AddressBook::Iterator it;
bool res;
for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
PimContact c;
KABC::Addressee addressee = (*it);
res = mConverter->addresseeToQtopia( *it, c );
if (res == true)
{
mAccess->addContact(c);
// if (res == false)
// qDebug("Unable to append Contact %s", c.fullName().latin1());
}
else
{
qDebug("Unable to convert Addressee %s", addressee.formattedName().latin1());
}
}
// mAccess->addressBookUpdated();
delete ticket;
unlock( fileName() );
return true;
}
bool ResourceQtopia::lock( const QString &lockfileName )
{
qDebug("ResourceQtopia::lock: %s", fileName().latin1());
kdDebug(5700) << "ResourceQtopia::lock()" << endl;
QString fn = lockfileName;
KURL url(fn);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
kdDebug(5700) << "-- lock name: " << lockName << endl;
- if (QFile::exists( lockName )) return false;
+ if (QFile::exists( lockName ))
+ {
+ qDebug("ResourceOpie::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName());
+ return false;
+ }
QString lockUniqueName;
lockUniqueName = fn + KApplication::randomString( 8 );
url = lockUniqueName;
//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
// Create unique file
QFile file( mLockUniqueName );
file.open( IO_WriteOnly );
file.close();
// Create lock file
int result = 0;
#ifndef _WIN32_
result = ::link( QFile::encodeName( mLockUniqueName ),
QFile::encodeName( lockName ) );
#endif
if ( result == 0 ) {
addressBook()->emitAddressBookLocked();
return true;
}
// TODO: check stat
return false;
}
void ResourceQtopia::unlock( const QString &fileName )
{
qDebug("ResourceQtopia::unlock() %s", fileName.latin1());
QString fn = fileName;
KURL url(fn);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
QFile::remove( lockName );
QFile::remove( mLockUniqueName );
addressBook()->emitAddressBookUnlocked();
}
void ResourceQtopia::setFileName( const QString &newFileName )
{
mDirWatch.stopScan();
mDirWatch.removeFile( fileName() );
Resource::setFileName( newFileName );
mDirWatch.addFile( fileName() );
mDirWatch.startScan();
}
void ResourceQtopia::fileChanged()
{
// There is a small theoretical chance that KDirWatch calls us before
// we are fully constructed
if (!addressBook())
return;
QString text( i18n( "Qtopia resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) );
if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
load();
addressBook()->emitAddressBookChanged();
}
}
void ResourceQtopia::removeAddressee( const Addressee &addr )
{
}
void ResourceQtopia::cleanUp()
{
unlock( fileName() );
}
-
-
-/**
- * This method returns the number of elements that are currently in the resource.
- */
-int ResourceQtopia::count() const
-{
- if (mAccess != 0)
- {
- int counter = 0;
- AddressBookIterator it2(*mAccess);
- for (it2.toFirst(); it2.current(); ++it2) {
- counter++;
- }
-
- return counter;
- }
- else
- return 0;
-}
-
-
-/**
- * This method removes all elements from the resource!! (Not from the addressbook)
- */
-bool ResourceQtopia::clear()
-{
- if (mAccess != 0)
- {
- AddressBookIterator it2(*mAccess);
- for (it2.toFirst(); it2.current(); ++it2) {
- mAccess->removeContact(*it2.current());
- }
- return true;
- }
- else
- return false;
-}
-
-
-
-
-
//US #include "resourceqtopia.moc"
diff --git a/kabc/plugins/qtopia/resourceqtopia.h b/kabc/plugins/qtopia/resourceqtopia.h
index 90ab1f4..eace280 100644
--- a/kabc/plugins/qtopia/resourceqtopia.h
+++ b/kabc/plugins/qtopia/resourceqtopia.h
@@ -1,155 +1,145 @@
/*
This file is part of libkabc.
Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#ifndef KABC_RESOURCEOPIE_H
#define KABC_RESOURCEOPIE_H
#include <kconfig.h>
#include <kdirwatch.h>
#include <sys/types.h>
#include "resource.h"
class AddressBookAccess;
namespace KABC {
//US class FormatPlugin;
class ResourceConfigWidget;
class QtopiaConverter;
/**
@internal
*/
class ResourceQtopia : public Resource
{
Q_OBJECT
public:
/**
Constructor.
@param cfg The config object where custom resource settings are stored.
*/
ResourceQtopia( const KConfig *cfg, bool syncable );
/**
Construct file resource on file @arg fileName using format @arg formatName.
*/
ResourceQtopia( const QString &fileName, bool syncable );
/**
* Destructor.
*/
~ResourceQtopia();
/**
Writes the config back.
*/
virtual void writeConfig( KConfig *cfg );
/**
* Tries to open the file and checks for the proper format.
* This method should be called before @ref load().
*/
virtual bool doOpen();
/**
* Closes the file again.
*/
virtual void doClose();
/**
* Requests a save ticket, that is used by @ref save()
*/
virtual Ticket *requestSaveTicket();
/**
* Loads all addressees from file to the address book.
* Returns true if all addressees could be loaded otherwise false.
*/
virtual bool load();
/**
* Saves all addresses from address book to file.
* Returns true if all addressees could be saved otherwise false.
*
* @param ticket The ticket returned by @ref requestSaveTicket()
*/
virtual bool save( Ticket *ticket );
/**
* Remove a addressee from its source.
* This method is mainly called by KABC::AddressBook.
*/
virtual void removeAddressee( const Addressee& addr );
/**
* Set name of file to be used for saving.
*/
virtual void setFileName( const QString & );
/**
* This method is called by an error handler if the application
* crashed
*/
virtual void cleanUp();
- /**
- * This method returns the number of elements that are currently in the resource.
- */
- virtual int count() const;
-
- /**
- * This method removes all elements from the resource!! (Not from the addressbook)
- */
- virtual bool clear();
-
protected slots:
void fileChanged();
protected:
void init( const QString &fileName );
bool lock( const QString &fileName );
void unlock( const QString &fileName );
private:
AddressBookAccess* mAccess;
QtopiaConverter* mConverter;
QString mLockUniqueName;
KDirWatch mDirWatch;
};
}
#endif
diff --git a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
index 14f272d..70c3718 100644
--- a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
+++ b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
@@ -1,355 +1,337 @@
/*
This file is part of libkabc.
Copyright (c) 2004 Ulf Schenk
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <qdir.h>
#include <qfile.h>
#include <qfileinfo.h>
#include <qregexp.h>
//US #include <qtimer.h>
#include <kapplication.h>
#include <kconfig.h>
#include <kdebug.h>
#include <klocale.h>
//US #include <ksavefile.h>
#include <kstandarddirs.h>
#include <kmessagebox.h>
#include <sl/slzdb.h>
#include "resourcesharpdtmconfig.h"
#include "resourcesharpdtm.h"
#include "syncprefwidget.h"
#include "stdaddressbook.h"
#include "sharpdtmconverter.h"
using namespace KABC;
extern "C"
{
void *init_microkabc_sharpdtm()
{
return new KRES::PluginFactory<ResourceSharpDTM,ResourceSharpDTMConfig,SyncPrefWidget>();
}
}
ResourceSharpDTM::ResourceSharpDTM( const KConfig *config, bool syncable )
: Resource( config, syncable ), mConverter (0)
{
// we can not choose the filename. Therefore use the default to display
QString fileName = SlZDataBase::addressbookFileName();
init( fileName );
}
ResourceSharpDTM::ResourceSharpDTM( const QString &fileName, bool syncable )
: Resource( 0, syncable )
{
init( fileName );
}
void ResourceSharpDTM::init( const QString &fileName )
{
connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
setFileName( fileName );
}
ResourceSharpDTM::~ResourceSharpDTM()
{
if (mConverter != 0)
delete mConverter;
if(mAccess != 0)
delete mAccess;
}
void ResourceSharpDTM::writeConfig( KConfig *config )
{
Resource::writeConfig( config );
}
Ticket *ResourceSharpDTM::requestSaveTicket()
{
kdDebug(5700) << "ResourceSharpDTM::requestSaveTicket()" << endl;
qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1());
if ( !addressBook() ) return 0;
if ( !lock( fileName() ) ) {
kdDebug(5700) << "ResourceSharpDTM::requestSaveTicket(): Unable to lock file '"
<< fileName() << "'" << endl;
return 0;
}
return createTicket( this );
}
bool ResourceSharpDTM::doOpen()
{
qDebug("ResourceSharpDTM::doOpen: %s", fileName().latin1());
// the last parameter in the SlZDataBase constructor means "readonly"
mAccess = new SlZDataBase(fileName(),
SlZDataBase::addressbookItems(),
NULL, true);
if ( !mAccess ) {
qDebug("Unable to load file() %s", fileName().latin1());
return false;
}
if (mConverter == 0)
{
mConverter = new SharpDTMConverter();
bool res = mConverter->init();
if ( !res )
{
QString msg("Unable to initialize sharp converter. Most likely a problem with the category file");
qDebug(msg);
delete mAccess;
mAccess = 0;
return false;
}
}
return true;
}
void ResourceSharpDTM::doClose()
{
qDebug("ResourceSharpDTM::doClose: %s", fileName().latin1());
if(mAccess)
{
delete mAccess;
mAccess = 0;
}
// it seems so, that deletion of access deletes backend as well
//delete backend;
return;
}
bool ResourceSharpDTM::load()
{
qDebug("ResourceSharpDTM::load: %s", fileName().latin1());
bool res = false;
CardId id;
for (bool res=mAccess->first(); res == true; res=mAccess->next())
{
id = mAccess->cardId();
KABC::Addressee addressee;
res = mConverter->sharpToAddressee( id, mAccess, addressee );
if ( !addressee.isEmpty() && res )
{
addressee.setResource( this );
addressBook()->insertAddressee( addressee );
}
}
return true;
}
bool ResourceSharpDTM::save( Ticket *ticket )
{
qDebug("ResourceSharpDTM::save: %s", fileName().latin1());
KABC::AddressBook::Iterator it;
bool res;
for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
CardId id = 0; // 0 means new card
KABC::Addressee addressee = (*it);
res = mAccess->startEditCard(id);
if (res == true)
{
res = mConverter->addresseeToSharp( *it, mAccess, id );
if (res == true)
{
res = mAccess->finishEditCard(&id);
if (res == false)
qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
}
else
{
qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
mAccess->cancelEditCard();
}
}
else
{
qDebug("Unable to add new card. Addressee: %s", addressee.formattedName().latin1());
}
}
//US mAccess->save();
delete ticket;
unlock( fileName() );
return true;
}
bool ResourceSharpDTM::lock( const QString &lockfileName )
{
qDebug("ResourceSharpDTM::lock: %s", fileName().latin1());
kdDebug(5700) << "ResourceSharpDTM::lock()" << endl;
QString fn = lockfileName;
KURL url(fn);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
kdDebug(5700) << "-- lock name: " << lockName << endl;
- if (QFile::exists( lockName )) return false;
+ if (QFile::exists( lockName ))
+ {
+ qDebug("ResourceSharpDTM::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName());
+ return false;
+ }
+
QString lockUniqueName;
lockUniqueName = fn + KApplication::randomString( 8 );
url = lockUniqueName;
//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
// Create unique file
QFile file( mLockUniqueName );
file.open( IO_WriteOnly );
file.close();
// Create lock file
int result = 0;
#ifndef _WIN32_
result = ::link( QFile::encodeName( mLockUniqueName ),
QFile::encodeName( lockName ) );
#endif
if ( result == 0 ) {
addressBook()->emitAddressBookLocked();
return true;
}
// TODO: check stat
return false;
}
void ResourceSharpDTM::unlock( const QString &fileName )
{
qDebug("ResourceSharpDTM::unlock() %s", fileName.latin1());
QString fn = fileName;
KURL url(fn);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
QFile::remove( lockName );
QFile::remove( mLockUniqueName );
addressBook()->emitAddressBookUnlocked();
}
void ResourceSharpDTM::setFileName( const QString &newFileName )
{
mDirWatch.stopScan();
mDirWatch.removeFile( fileName() );
Resource::setFileName( newFileName );
mDirWatch.addFile( fileName() );
mDirWatch.startScan();
}
void ResourceSharpDTM::fileChanged()
{
// There is a small theoretical chance that KDirWatch calls us before
// we are fully constructed
if (!addressBook())
return;
QString text( i18n( "Sharp DTM resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) );
if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
load();
addressBook()->emitAddressBookChanged();
}
}
void ResourceSharpDTM::removeAddressee( const Addressee &addr )
{
}
void ResourceSharpDTM::cleanUp()
{
unlock( fileName() );
}
-/**
- * This method returns the number of elements that are currently in the resource.
- */
-int ResourceSharpDTM::count() const
-{
- if (mAccess != 0)
- return mAccess->count();
- else
- return 0;
-}
-
-
-/**
- * This method removes all elements from the resource!! (Not from the addressbook)
- */
-bool ResourceSharpDTM::clear()
-{
- if (mAccess != 0)
- return mAccess->deleteCard(0, SlZDataBase::AllCard );
- else
- return false;
-}
-
diff --git a/kabc/plugins/sharpdtm/resourcesharpdtm.h b/kabc/plugins/sharpdtm/resourcesharpdtm.h
index 60d38a1..f386e69 100644
--- a/kabc/plugins/sharpdtm/resourcesharpdtm.h
+++ b/kabc/plugins/sharpdtm/resourcesharpdtm.h
@@ -1,156 +1,146 @@
/*
This file is part of libkabc.
Copyright (c) 2004 Ulf Schenk
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#ifndef KABC_RESOURCESHARPDTM_H
#define KABC_RESOURCESHARPDTM_H
#include <kconfig.h>
#include <kdirwatch.h>
#include <sys/types.h>
#include "resource.h"
class SlZDataBase;
namespace KABC {
class ResourceConfigWidget;
class SharpDTMConverter;
/**
@internal
*/
class ResourceSharpDTM : public Resource
{
Q_OBJECT
public:
/**
Constructor.
@param cfg The config object where custom resource settings are stored.
*/
ResourceSharpDTM( const KConfig *cfg, bool syncable );
/**
Construct file resource on file @arg fileName using format @arg formatName.
*/
ResourceSharpDTM( const QString &fileName, bool syncable );
/**
* Destructor.
*/
~ResourceSharpDTM();
/**
Writes the config back.
*/
virtual void writeConfig( KConfig *cfg );
/**
* Tries to open the file and checks for the proper format.
* This method should be called before @ref load().
*/
virtual bool doOpen();
/**
* Closes the file again.
*/
virtual void doClose();
/**
* Requests a save ticket, that is used by @ref save()
*/
virtual Ticket *requestSaveTicket();
/**
* Loads all addressees from file to the address book.
* Returns true if all addressees could be loaded otherwise false.
*/
virtual bool load();
/**
* Saves all addresses from address book to file.
* Returns true if all addressees could be saved otherwise false.
*
* @param ticket The ticket returned by @ref requestSaveTicket()
*/
virtual bool save( Ticket *ticket );
/**
* Remove a addressee from its source.
* This method is mainly called by KABC::AddressBook.
*/
virtual void removeAddressee( const Addressee& addr );
/**
* Set name of file to be used for saving.
*/
virtual void setFileName( const QString & );
/**
* This method is called by an error handler if the application
* crashed
*/
virtual void cleanUp();
- /**
- * This method returns the number of elements that are currently in the resource.
- */
- virtual int count() const;
-
- /**
- * This method removes all elements from the resource!! (Not from the addressbook)
- */
- virtual bool clear();
-
protected slots:
void fileChanged();
protected:
void init( const QString &fileName );
bool lock( const QString &fileName );
void unlock( const QString &fileName );
private:
SlZDataBase* mAccess;
SharpDTMConverter* mConverter;
QString mLockUniqueName;
KDirWatch mDirWatch;
};
}
#endif
diff --git a/kabc/resource.cpp b/kabc/resource.cpp
index 9632a3f..2f03927 100644
--- a/kabc/resource.cpp
+++ b/kabc/resource.cpp
@@ -1,154 +1,139 @@
/*
This file is part of libkabc.
Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#include <kdebug.h>
#include <ksyncprofile.h>
#include "resource.h"
using namespace KABC;
Resource::Resource( const KConfig *config, bool syncable )
: KRES::Resource( config ), mAddressBook( 0 ), mSyncProfile( 0 )
{
if(syncable == true) {
mSyncProfile = new KSyncProfile( identifier() );
mSyncProfile->setName(resourceName());
mSyncProfile->readConfig( (KConfig *)config );
}
}
Resource::~Resource()
{
if (mSyncProfile != 0) {
delete mSyncProfile;
}
}
void Resource::writeConfig( KConfig *config )
{
KRES::Resource::writeConfig( config );
if(mSyncProfile != 0)
mSyncProfile->writeConfig( config );
}
void Resource::setAddressBook( AddressBook *ab )
{
mAddressBook = ab;
}
AddressBook *Resource::addressBook()
{
return mAddressBook;
}
bool Resource::doOpen()
{
return true;
}
void Resource::doClose()
{
}
Ticket *Resource::requestSaveTicket()
{
return 0;
}
bool Resource::load()
{
return true;
}
bool Resource::save( Ticket * )
{
return false;
}
Ticket *Resource::createTicket( Resource *resource )
{
return new Ticket( resource );
}
void Resource::removeAddressee( const Addressee& )
{
// do nothing
}
void Resource::cleanUp()
{
// do nothing
}
bool Resource::isSyncable() const
{
return (mSyncProfile != 0);
}
-/**
- * This method returns the number of elements that are currently in the resource.
- */
-int Resource::count() const
-{
- return 0;
-}
-
-/**
- * This method removes all elements from the resource!! (Not from the addressbook)
- */
-bool Resource::clear()
-{
- return false;
-}
QString Resource::fileName() const
{
return mFileName;
}
void Resource::setFileName( const QString &fileName )
{
mFileName = fileName;
}
/**
* Set the name of resource.You can override this method,
* but also remember to call Resource::setResourceName().
*/
void Resource::setResourceName( const QString &name )
{
KRES::Resource::setResourceName(name);
if(mSyncProfile != 0) {
mSyncProfile->setName( name );
}
}
diff --git a/kabc/resource.h b/kabc/resource.h
index db806a6..7d42f81 100644
--- a/kabc/resource.h
+++ b/kabc/resource.h
@@ -1,180 +1,169 @@
/*
This file is part of libkabc.
Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#ifndef KABC_RESOURCE_H
#define KABC_RESOURCE_H
#include <kresources/resource.h>
#include "addressbook.h"
class KSyncProfile;
namespace KABC {
/**
* @short Helper class for handling coordinated save of address books.
*
* This class is used as helper class for saving address book.
* @see requestSaveTicket(), save().
*/
class Ticket
{
friend class Resource;
public:
Resource *resource() { return mResource; }
private:
Ticket( Resource *resource ) : mResource( resource ) {}
Resource *mResource;
};
/**
* @internal
*/
class Resource : public KRES::Resource
{
private:
/**
* make this constructor private to force everybody to use the other one
*/
Resource( const KConfig *config);
public:
/**
* Constructor
*/
Resource( const KConfig *config, bool syncable );
/**
* Destructor.
*/
virtual ~Resource();
/**
* Sets the address book of the resource.
*/
void setAddressBook( AddressBook* );
/**
* Returns a pointer to the addressbook.
*/
AddressBook *addressBook();
/**
* Writes the resource specific config to file.
*/
virtual void writeConfig( KConfig *config );
/**
* Open the resource and returns if it was successfully
*/
virtual bool doOpen();
/**
* Request a ticket, you have to pass through @ref save() to
* allow locking.
*/
virtual Ticket *requestSaveTicket();
/**
* Load all addressees to the addressbook
*/
virtual bool load();
/**
* Save all addressees to the addressbook.
*
* @param ticket The ticket you get by @ref requestSaveTicket()
*/
virtual bool save( Ticket *ticket );
/**
* Removes a addressee from resource. This method is mainly
* used by record-based resources like LDAP or SQL.
*/
virtual void removeAddressee( const Addressee& addr );
/**
* This method is called by an error handler if the application
* crashed
*/
virtual void cleanUp();
-
- /**
- * This method returns the number of elements that are currently in the resource.
- */
- virtual int count() const;
-
- /**
- * This method removes all elements from the resource!! (Not from the addressbook)
- */
- virtual bool clear();
-
/**
* Set name of file to be used for saving.
*/
virtual void setFileName( const QString & );
/**
* Return name of file used for loading and saving the address book.
*/
virtual QString fileName() const;
virtual bool isSyncable() const;
/**
* Set the name of resource.You can override this method,
* but also remember to call Resource::setResourceName().
*/
virtual void setResourceName( const QString &name );
protected:
Ticket *createTicket( Resource * );
virtual void doClose();
private:
AddressBook *mAddressBook;
KSyncProfile *mSyncProfile;
QString mFileName;
};
}
#endif
diff --git a/kabc/tmpaddressbook.cpp b/kabc/tmpaddressbook.cpp
index e6699df..ca47ca4 100644
--- a/kabc/tmpaddressbook.cpp
+++ b/kabc/tmpaddressbook.cpp
@@ -1,44 +1,56 @@
/*
This file is part of libkabc.
Copyright (c) 2004 Ulf Schenk
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
+#include <qptrlist.h>
#include "tmpaddressbook.h"
using namespace KABC;
+#include "resource.h"
+
TmpAddressBook::TmpAddressBook()
: AddressBook(0, "tmpcontact")
{
}
TmpAddressBook::TmpAddressBook( const QString &config )
- : AddressBook( config, "tmpcontact" )
+ : AddressBook( config, "tmpcontract" )
{
}
TmpAddressBook::~TmpAddressBook()
{
+ //remove all possible resources. This should cleanup the configfile.
+ QPtrList<KABC::Resource> mResources = resources();
+
+ QPtrListIterator<KABC::Resource> it(mResources);
+ for ( ; it.current(); ++it ) {
+ KABC::Resource *res = it.current();
+ removeResource(res);
}
+}
+
diff --git a/kaddressbook/xxport/opie_xxport.cpp b/kaddressbook/xxport/opie_xxport.cpp
index 192b803..7b29b0a 100644
--- a/kaddressbook/xxport/opie_xxport.cpp
+++ b/kaddressbook/xxport/opie_xxport.cpp
@@ -1,195 +1,91 @@
/*
This file is part of KAddressbook.
Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#include <qdir.h>
#include <kfiledialog.h>
-#include <kmessagebox.h>
-
-//US #include <opie/ocontactaccess.h>
-//US #include <opie/ocontactaccessbackend_xml.h>
-
-//US #include "stdaddressbook.h"
-#include "resource.h"
-#include "tmpaddressbook.h"
-
-/*US
-#include <qfile.h>
-#include <qtextstream.h>
-
-#include <kabc/vcardconverter.h>
-#ifndef KAB_EMBEDDED
-#include <kio/netaccess.h>
-#endif //KAB_EMBEDDED
-
-#include <klocale.h>
-#include <kmessagebox.h>
-#include <ktempfile.h>
-#include <kurl.h>
-*/
-
-#include <factory.h>
-
+#include "addressee.h"
#include "xxportmanager.h"
-
#include "opie_xxport.h"
/*US
class OpieXXPortFactory : public XXPortFactory
{
public:
XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent, const char *name )
{
return new OpieXXPort( ab, parent, name );
}
};
*/
extern "C"
{
void *init_microkaddrbk_opie_xxport()
{
return ( new OpieXXPortFactory() );
}
}
OpieXXPort::OpieXXPort( KABC::AddressBook *ab, QWidget *parent, const char *name )
: XXPortResourceObject( ab, parent, name )
{
defaultFileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml";
- KRES::Factory* mFactory = KRES::Factory::self( "contact" );
-
- if ( mFactory )
- {
- mResource = (KABC::Resource*)(mFactory->resource( "opie", 0, false ));
-
- if ( mResource )
+ if ( mFactory && !mFactory->typeName( "opie" ).isEmpty() )
{
createImportAction( i18n( "Import Opie..." ) );
createExportAction( i18n( "Export Opie..." ) );
}
}
-}
-bool OpieXXPort::exportContacts( const KABC::AddresseeList &list, const QString &data )
+bool OpieXXPort::exportContacts( const KABC::AddresseeList &list, const QString &identifier )
{
- if (mResource == 0)
- return false;
-
QString fileName = KFileDialog::getSaveFileName( defaultFileName, i18n("Save file"), parentWidget() );
if ( fileName.isEmpty() )
return false;
- mResource->setFileName( fileName );
-
-
- KABC::TmpAddressBook tmpAB;
-
- tmpAB.addResource( mResource );
-
- qDebug("11111");
-
- //Now check if the file has already entries, and ask the user if he wants to delete them first.
- KABC::AddressBook::Iterator it2 = tmpAB.begin();
- for ( it2 = tmpAB.begin(); it2 != tmpAB.end(); ++it2 ) {
- KABC::Addressee addressee = (*it2);
- qDebug("found %s", addressee.formattedName().latin1());
+ return _exportContacts( list, identifier, fileName );
}
- if (it2 != tmpAB.end())
- {
- QString text( i18n( "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?" ) );
- if ( KMessageBox::questionYesNo( parentWidget(), text.arg( fileName ) ) == KMessageBox::Yes ) {
- // Clean the database..
- tmpAB.clear();
- }
- }
- qDebug("22222");
-
-//US debug
- QPtrList<KABC::Resource> kabcResources = tmpAB.resources();
- QPtrListIterator<KABC::Resource> resIt( kabcResources );
- KABC::Resource *resource;
- while ( ( resource = resIt.current() ) != 0 ) {
- ++resIt;
- qDebug("tmpAB has resource: %s", resource->identifier().latin1());
- }
-
-
- KABC::Addressee::List::ConstIterator it;
- for ( it = list.begin(); it != list.end(); ++it ) {
- tmpAB.insertAddressee(*it);
- }
-
- bool res = false;
- KABC::Ticket * ticket = tmpAB.requestSaveTicket(mResource);
-
- if (ticket != 0)
- res = tmpAB.save( ticket );
- tmpAB.removeResource( mResource );
-
- return res;
-}
-
-
-KABC::AddresseeList OpieXXPort::importContacts( const QString& ) const
+KABC::AddresseeList OpieXXPort::importContacts( const QString &identifier ) const
{
- if (mResource == 0)
- return KABC::AddresseeList();
-
- KABC::AddresseeList adrlst;
-
QString fileName = KFileDialog::getOpenFileName( defaultFileName, i18n("Load file"), parentWidget() );
if ( fileName.isEmpty() )
return KABC::AddresseeList();
- mResource->setFileName( fileName );
-
-
- KABC::TmpAddressBook tmpAB;
-
- tmpAB.addResource( mResource );
-
- bool res = tmpAB.load();
-
- adrlst = tmpAB.allAddressees();
-
- tmpAB.removeResource( mResource );
-
- return adrlst;
-
+ return _importContacts( identifier, fileName );
}
diff --git a/kaddressbook/xxport/opie_xxport.h b/kaddressbook/xxport/opie_xxport.h
index 106f38b..d2b55cd 100644
--- a/kaddressbook/xxport/opie_xxport.h
+++ b/kaddressbook/xxport/opie_xxport.h
@@ -1,68 +1,68 @@
/*
This file is part of KAddressbook.
Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#ifndef OPIE_XXPORT_H
#define OPIE_XXPORT_H
#include <xxportobject.h>
class KABC::Resource;
class OpieXXPort : public XXPortResourceObject
{
Q_OBJECT
public:
OpieXXPort( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 );
QString identifier() const { return "opie"; }
public slots:
- bool exportContacts( const KABC::AddresseeList &list, const QString &data );
- KABC::AddresseeList importContacts( const QString &data ) const;
+ bool exportContacts( const KABC::AddresseeList &list, const QString &identifier );
+ KABC::AddresseeList importContacts( const QString &identifier ) const;
private:
QString defaultFileName;
};
class OpieXXPortFactory : public XXPortFactory
{
public:
XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent, const char *name )
{
return new OpieXXPort( ab, parent, name );
}
};
#endif
diff --git a/kaddressbook/xxport/qtopia_xxport.cpp b/kaddressbook/xxport/qtopia_xxport.cpp
index 8377cd5..0cf6546 100644
--- a/kaddressbook/xxport/qtopia_xxport.cpp
+++ b/kaddressbook/xxport/qtopia_xxport.cpp
@@ -1,287 +1,78 @@
/*
This file is part of KAddressbook.
Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#include <qdir.h>
-#include <kfiledialog.h>
-#include <kmessagebox.h>
-
-//US #include <qpe/pim/addressbookaccess.h>
-
-#include "addressbook.h"
-
-/*US
-#include <qfile.h>
-#include <qtextstream.h>
-
-#include <kabc/vcardconverter.h>
-#ifndef KAB_EMBEDDED
-#include <kio/netaccess.h>
-#endif //KAB_EMBEDDED
-
-#include <klocale.h>
-#include <kmessagebox.h>
-#include <ktempfile.h>
-#include <kurl.h>
-*/
-
+#include "addressee.h"
#include "xxportmanager.h"
-//US #include "qtopiaconverter.h"
-
#include "qtopia_xxport.h"
/*US
class QtopiaXXPortFactory : public XXPortFactory
{
public:
XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent, const char *name )
{
return new QtopiaXXPort( ab, parent, name );
}
};
*/
extern "C"
{
void *init_microkaddrbk_qtopia_xxport()
{
return ( new QtopiaXXPortFactory() );
}
}
QtopiaXXPort::QtopiaXXPort( KABC::AddressBook *ab, QWidget *parent, const char *name )
: XXPortResourceObject( ab, parent, name )
{
defaultFileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml";
- KRES::Factory* mFactory = KRES::Factory::self( "contact" );
-
- if ( mFactory )
- {
- mResource = (KABC::Resource*)(mFactory->resource( "qtopia", 0, false ));
-
- if ( mResource )
+ if ( mFactory && !mFactory->typeName( "qtopia" ).isEmpty() )
{
createImportAction( i18n( "Import Qtopia..." ) );
createExportAction( i18n( "Export Qtopia..." ) );
}
}
-}
-
-bool QtopiaXXPort::exportContacts( const KABC::AddresseeList &list, const QString &data )
-{
-/*US
- // we can not choose the filename. Therefore use the default to display
- QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml";
-
- AddressBookAccess* access = new AddressBookAccess();
-
- if ( !access ) {
- QString text( i18n( "Unable to access file '%1'." ).arg( fileName ) );
- qDebug(text.latin1());
- KMessageBox::error( parentWidget(), text );
- addressBook()->error( text );
- return false;
- }
-
- KABC::QtopiaConverter mConverter;
-
- bool res = mConverter.init();
- if (!res)
- {
- QString text( i18n( "Unable to initialize qtopia converter.<br>Most likely a problem with the category file." ) );
- qDebug(text);
- KMessageBox::error( parentWidget(), text );
- delete access;
- return false;
- }
-
- //Now check if the file has already entries, and ask the user if he wants to delete them first.
- { //create a new scope
- AddressBookIterator it(*access);
- const PimContact* firstcontact = it.toFirst();
- if (firstcontact)
- {
- QString text( i18n( "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?" ) );
- if ( KMessageBox::questionYesNo( parentWidget(), text.arg( fileName ) ) == KMessageBox::Yes ) {
- // Clean the database..
-
- AddressBookIterator it2(*access);
- for (it2.toFirst(); it2.current(); ++it2) {
- access->removeContact(*it2.current());
- }
- }
- }
- }
-
- KABC::Addressee::List::ConstIterator it;
- for ( it = list.begin(); it != list.end(); ++it ) {
- PimContact c;
-
- res = mConverter.addresseeToQtopia( *it, c );
- if (res == true)
- {
- access->addContact(c);
- }
- }
-
- delete access;
-
- return true;
-*/
-
- if (mResource == 0)
- return false;
-
- QString fileName = defaultFileName;
-
-
- mResource->setFileName( fileName );
-
- //Now check if the file has already entries, and ask the user if he wants to delete them first.
- if (mResource->count() > 0)
- {
- QString text( i18n( "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?" ) );
- if ( KMessageBox::questionYesNo( parentWidget(), text.arg( fileName ) ) == KMessageBox::Yes ) {
- // Clean the database.
- mResource->clear();
- }
- }
-
- KABC::AddressBook tmpAB;
-
- tmpAB.addResource( mResource );
-
-//US debug
- QPtrList<KABC::Resource> kabcResources = tmpAB.resources();
- QPtrListIterator<KABC::Resource> resIt( kabcResources );
- KABC::Resource *resource;
- while ( ( resource = resIt.current() ) != 0 ) {
- ++resIt;
- qDebug("tmpAB has resource: %s", resource->identifier().latin1());
- }
-
-
- KABC::Addressee::List::ConstIterator it;
- for ( it = list.begin(); it != list.end(); ++it ) {
- tmpAB.insertAddressee(*it);
- }
-
- KABC::Ticket * ticket = mResource->requestSaveTicket();
- return tmpAB.save( ticket );
-
-
-}
-
-KABC::AddresseeList QtopiaXXPort::importContacts( const QString& ) const
+bool QtopiaXXPort::exportContacts( const KABC::AddresseeList &list, const QString &identifier )
{
-/*US
- KABC::AddresseeList adrlst;
-
- QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml";
-
- AddressBookAccess* access = new AddressBookAccess();
-
- if ( !access ) {
- QString text( i18n( "Unable to access file '%1'." ).arg( fileName ) );
- qDebug(text.latin1());
- addressBook()->error( text );
- KMessageBox::error( parentWidget(), text );
- return KABC::AddresseeList();
+ return _exportContacts( list, identifier, defaultFileName );
}
- KABC::QtopiaConverter mConverter;
-
- bool res = mConverter.init();
- if (!res)
+KABC::AddresseeList QtopiaXXPort::importContacts( const QString &identifier ) const
{
- QString text( i18n( "Unable to initialize qtopia converter.<br>Most likely a problem with the category file." ) );
- qDebug(text);
- KMessageBox::error( parentWidget(), text );
- delete access;
- return KABC::AddresseeList();
- }
-
-
-
- { //create a new scope
- AddressBookIterator it(*access);
-
- for (it.toFirst(); it.current(); ++it) {
- const PimContact*contact = it.current();
-
- KABC::Addressee addressee;
-
- res = mConverter.qtopiaToAddressee( (*contact), addressee );
-
- if ( !addressee.isEmpty() && res )
- {
- adrlst.append( addressee );
- }
- }
- }
-
- delete access;
-//US the deletion of the access object deletes the backend object as well.
-
- return adrlst;
-*/
-
- if (mResource == 0)
- return KABC::AddresseeList();
-
- KABC::AddresseeList adrlst;
-
- QString fileName = defaultFileName;
-
- mResource->setFileName( fileName );
-
-
- KABC::AddressBook tmpAB;
-
- tmpAB.addResource( mResource );
-
-//US debug
- QPtrList<KABC::Resource> kabcResources = tmpAB.resources();
- QPtrListIterator<KABC::Resource> resIt( kabcResources );
- KABC::Resource *resource;
- while ( ( resource = resIt.current() ) != 0 ) {
- ++resIt;
- qDebug("tmpAB has resource: %s", resource->identifier().latin1());
- }
-
- bool res = tmpAB.load();
-
- return tmpAB.allAddressees();
-
+ return _importContacts( identifier, defaultFileName );
}
diff --git a/kaddressbook/xxport/sharpdtm_xxport.cpp b/kaddressbook/xxport/sharpdtm_xxport.cpp
index 8c2e07a..130bc00 100644
--- a/kaddressbook/xxport/sharpdtm_xxport.cpp
+++ b/kaddressbook/xxport/sharpdtm_xxport.cpp
@@ -1,284 +1,72 @@
/*
This file is part of KAddressbook.
Copyright (c) 2004 Ulf Schenk
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
-#include <qdir.h>
-
-#include <kfiledialog.h>
-#include <kmessagebox.h>
-
-//US #include <sl/slzdb.h>
-
-#include "addressbook.h"
-
-/*US
-#include <qfile.h>
-#include <qtextstream.h>
-
-#include <kabc/vcardconverter.h>
-#ifndef KAB_EMBEDDED
-#include <kio/netaccess.h>
-#endif //KAB_EMBEDDED
-
-#include <klocale.h>
-#include <kmessagebox.h>
-#include <ktempfile.h>
-#include <kurl.h>
-*/
-
+#include "addressee.h"
#include "xxportmanager.h"
-
#include "sharpdtm_xxport.h"
/*US
class SharpDTMXXPortFactory : public XXPortFactory
{
public:
XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent, const char *name )
{
return new SharpDTMXXPort( ab, parent, name );
}
};
*/
extern "C"
{
void *init_microkaddrbk_sharpdtm_xxport()
{
return ( new SharpDTMXXPortFactory() );
}
}
SharpDTMXXPort::SharpDTMXXPort( KABC::AddressBook *ab, QWidget *parent, const char *name )
: XXPortResourceObject( ab, parent, name )
{
- KRES::Factory* mFactory = KRES::Factory::self( "contact" );
-
- if ( mFactory )
- {
- mResource = (KABC::Resource*)(mFactory->resource( "sharpdtm", 0, false ));
- if ( mResource )
+ if ( mFactory && !mFactory->typeName( "sharpdtm" ).isEmpty() )
{
createImportAction( i18n( "Import Sharp..." ) );
createExportAction( i18n( "Export Sharp..." ) );
}
}
-}
-
-bool SharpDTMXXPort::exportContacts( const KABC::AddresseeList &list, const QString &data )
-{
-/*US
- // we can not choose the filename. Therefore use the default to display
- QString fileName = SlZDataBase::addressbookFileName();
-
- SlZDataBase* access = new SlZDataBase(fileName,
- SlZDataBase::addressbookItems());
-
- if ( !access ) {
- QString text( i18n( "Unable to access file '%1'." ).arg( fileName ) );
- qDebug(text.latin1());
- KMessageBox::error( parentWidget(), text );
- addressBook()->error( text );
- return false;
- }
-
- KABC::SharpDTMConverter mConverter;
-
- bool res = mConverter.init();
- if (!res)
- {
- QString text( i18n( "Unable to initialize sharpdtm converter.<br>Most likely a problem with the category file." ) );
- qDebug(text);
- KMessageBox::error( parentWidget(), text );
- delete access;
- return false;
- }
-
- //Now check if the file has already entries, and ask the user if he wants to delete them first.
- if (access->count() > 0)
- {
- QString text( i18n( "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?" ) );
- if ( KMessageBox::questionYesNo( parentWidget(), text.arg( fileName ) ) == KMessageBox::Yes ) {
- // Clean the database..
- access->deleteCard(0, SlZDataBase::AllCard );
- }
- }
-
- KABC::Addressee::List::ConstIterator it;
- for ( it = list.begin(); it != list.end(); ++it ) {
- CardId c;
- res = access->editNewCard();
-
- if (res == true)
- {
- res = mConverter.addresseeToSharp( *it, access, c );
-
- if (res == true)
- access->finishEditCard(&c);
- else
- access->cancelEditCard();
- }
- }
-
- delete access;
-
- return true;
-*/
-
- if (mResource == 0)
- return false;
-
- // we can not choose the filename. Therefore use the default to display
- QString fileName = mResource->fileName();
-
- if ( fileName.isEmpty() )
- return false;
-
- //Now check if the file has already entries, and ask the user if he wants to delete them first.
- if (mResource->count() > 0)
- {
- QString text( i18n( "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?" ) );
- if ( KMessageBox::questionYesNo( parentWidget(), text.arg( fileName ) ) == KMessageBox::Yes ) {
- // Clean the database..
- mResource->clear();
- }
- }
-
- KABC::AddressBook tmpAB;
-
- tmpAB.addResource( mResource );
-
-//US debug
- QPtrList<KABC::Resource> kabcResources = tmpAB.resources();
- QPtrListIterator<KABC::Resource> resIt( kabcResources );
- KABC::Resource *resource;
- while ( ( resource = resIt.current() ) != 0 ) {
- ++resIt;
- qDebug("tmpAB has resource: %s", resource->identifier().latin1());
- }
-
-
- KABC::Addressee::List::ConstIterator it;
- for ( it = list.begin(); it != list.end(); ++it ) {
- tmpAB.insertAddressee(*it);
- }
-
- KABC::Ticket * ticket = mResource->requestSaveTicket();
- return tmpAB.save( ticket );
-
-
-}
-
-KABC::AddresseeList SharpDTMXXPort::importContacts( const QString& ) const
-{
-/*US
- KABC::AddresseeList adrlst;
-
- QString fileName = SlZDataBase::addressbookFileName();
-
- // the last parameter in the SlZDataBase constructor means "readonly"
- SlZDataBase* access = new SlZDataBase(fileName,
- SlZDataBase::addressbookItems(), NULL, true);
-
-
- if ( !access ) {
- QString text( i18n( "Unable to access file '%1'." ).arg( fileName ) );
- qDebug(text.latin1());
- addressBook()->error( text );
- KMessageBox::error( parentWidget(), text );
- return KABC::AddresseeList();
- }
-
- KABC::SharpDTMConverter mConverter;
- bool res = mConverter.init();
- if (!res)
+bool SharpDTMXXPort::exportContacts( const KABC::AddresseeList &list, const QString &identifier )
{
- QString text( i18n( "Unable to initialize sharp converter.<br>Most likely a problem with the category file." ) );
- qDebug(text);
- KMessageBox::error( parentWidget(), text );
- delete access;
- return KABC::AddresseeList();
+ return _exportContacts( list, identifier, QString::null );
}
-
- { //create a new scope
- CardId id;
-
- for (bool res=access->first(); res == true; res=access->next()) {
- id = access->cardId();
-
- KABC::Addressee addressee;
-
- res = mConverter.sharpToAddressee( id, access, addressee );
-
- if ( !addressee.isEmpty() && res )
+KABC::AddresseeList SharpDTMXXPort::importContacts( const QString &identifier ) const
{
- adrlst.append( addressee );
- }
- }
- }
-
- delete access;
-
- return adrlst;
-*/
-
- if (mResource == 0)
- return KABC::AddresseeList();
-
- KABC::AddresseeList adrlst;
-
- QString fileName = mResource->fileName();
-
- if ( fileName.isEmpty() )
- return KABC::AddresseeList();
-
- mResource->setFileName( fileName );
-
-
- KABC::AddressBook tmpAB;
-
- tmpAB.addResource( mResource );
-
-//US debug
- QPtrList<KABC::Resource> kabcResources = tmpAB.resources();
- QPtrListIterator<KABC::Resource> resIt( kabcResources );
- KABC::Resource *resource;
- while ( ( resource = resIt.current() ) != 0 ) {
- ++resIt;
- qDebug("tmpAB has resource: %s", resource->identifier().latin1());
- }
-
- bool res = tmpAB.load();
-
- return tmpAB.allAddressees();
-
-
+ return _importContacts( identifier, QString::null );
}
diff --git a/kaddressbook/xxport/sharpdtm_xxport.h b/kaddressbook/xxport/sharpdtm_xxport.h
index 43fd434..0797b01 100644
--- a/kaddressbook/xxport/sharpdtm_xxport.h
+++ b/kaddressbook/xxport/sharpdtm_xxport.h
@@ -1,60 +1,60 @@
/*
This file is part of KAddressbook.
Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#ifndef SHARPDTM_XXPORT_H
#define SHARPDTM_XXPORT_H
#include <xxportobject.h>
class SharpDTMXXPort : public XXPortResourceObject
{
Q_OBJECT
public:
SharpDTMXXPort( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 );
- QString identifier() const { return "qtopia"; }
+ QString identifier() const { return "sharpdtm"; }
public slots:
bool exportContacts( const KABC::AddresseeList &list, const QString &data );
KABC::AddresseeList importContacts( const QString &data ) const;
};
class SharpDTMXXPortFactory : public XXPortFactory
{
public:
XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent, const char *name )
{
return new SharpDTMXXPort( ab, parent, name );
}
};
#endif
diff --git a/kaddressbook/xxportobject.cpp b/kaddressbook/xxportobject.cpp
index bb985a6..4351753 100644
--- a/kaddressbook/xxportobject.cpp
+++ b/kaddressbook/xxportobject.cpp
@@ -1,173 +1,273 @@
/*
This file is part of KAddressbook.
Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#include <qmap.h>
#include <qsignalmapper.h>
#include <kaction.h>
#include <kmessagebox.h>
+#include <factory.h>
#include "kabcore.h"
-
+#include "addressee.h"
+#include "tmpaddressbook.h"
#include "xxportobject.h"
+
class XXPortObject::XXPortObjectPrivate
{
public:
QSignalMapper *mExportMapper;
QSignalMapper *mImportMapper;
};
XXPortObject::XXPortObject( KABC::AddressBook *ab, QWidget *parent,
const char *name )
: QObject( parent, name ), mAddressBook( ab ), mParentWidget( parent ),
d( new XXPortObjectPrivate )
{
d->mExportMapper = new QSignalMapper( this );
d->mImportMapper = new QSignalMapper( this );
connect( d->mExportMapper, SIGNAL( mapped( const QString& ) ),
SLOT( slotExportActivated( const QString& ) ) );
connect( d->mImportMapper, SIGNAL( mapped( const QString& ) ),
SLOT( slotImportActivated( const QString& ) ) );
}
XXPortObject::~XXPortObject()
{
delete d;
d = 0;
}
bool XXPortObject::exportContacts( const KABC::AddresseeList&, const QString& )
{
// do nothing
return false;
}
KABC::AddresseeList XXPortObject::importContacts( const QString& ) const
{
// do nothing
return KABC::AddresseeList();
}
void XXPortObject::createImportAction( const QString &label, const QString &data )
{
#ifdef KAB_EMBEDDED
KABCore* kabcore = (KABCore*)mParentWidget;
#endif //KAB_EMBEDDED
QString id = "file_import_" + identifier() + ( data.isEmpty() ? QString( "" ) : "_" + data );
#ifndef KAB_EMBEDDED
KAction *action = new KAction( label, 0, d->mImportMapper, SLOT( map() ), actionCollection(), id.latin1() );
#else //KAB_EMBEDDED
KAction *action = new KAction( label, 0, d->mImportMapper, SLOT( map() ), kabcore->actionCollection(), id.latin1() );
#endif //KAB_EMBEDDED
d->mImportMapper->setMapping( action, ( data.isEmpty() ? QString( "<empty>" ) : data ) );
#ifndef KAB_EMBEDDED
setXMLFile( identifier() + "_xxportui.rc" );
#endif //KAB_EMBEDDED
#ifdef KAB_EMBEDDED
action->plug((QWidget*)kabcore->getImportMenu());
#endif //KAB_EMBEDDED
}
void XXPortObject::createExportAction( const QString &label, const QString &data )
{
#ifdef KAB_EMBEDDED
KABCore* kabcore = (KABCore*)mParentWidget;
#endif //KAB_EMBEDDED
QString id = "file_export_" + identifier() + ( data.isEmpty() ? QString( "" ) : "_" + data );
#ifndef KAB_EMBEDDED
KAction *action = new KAction( label, 0, d->mExportMapper, SLOT( map() ), actionCollection(), id.latin1() );
#else //KAB_EMBEDDED
KAction *action = new KAction( label, 0, d->mExportMapper, SLOT( map() ), kabcore->actionCollection(), id.latin1() );
#endif //KAB_EMBEDDED
d->mExportMapper->setMapping( action, ( data.isEmpty() ? QString( "<empty>" ) : data ) );
#ifndef KAB_EMBEDDED
setXMLFile( identifier() + "_xxportui.rc" );
#endif //KAB_EMBEDDED
#ifdef KAB_EMBEDDED
action->plug((QWidget*)kabcore->getExportMenu());
#endif //KAB_EMBEDDED
}
KABC::AddressBook *XXPortObject::addressBook() const
{
return mAddressBook;
}
QWidget *XXPortObject::parentWidget() const
{
return mParentWidget;
}
void XXPortObject::slotExportActivated( const QString &data )
{
emit exportActivated( identifier(), ( data == "<empty>" ? QString::null : data ) );
}
void XXPortObject::slotImportActivated( const QString &data )
{
emit importActivated( identifier(), ( data == "<empty>" ? QString::null : data ) );
}
/********************************************************************
*
*******************************************************************/
XXPortResourceObject::XXPortResourceObject( KABC::AddressBook *ab, QWidget *parent,
const char *name )
- : XXPortObject( ab, parent, name ), mResource(0)
+ : XXPortObject( ab, parent, name ), mFactory(0)
{
+ mFactory = KRES::Factory::self( "tmpcontact" );
}
XXPortResourceObject::~XXPortResourceObject()
{
+ //do not delete the factory. It is a singleton, and selfcontained
}
bool XXPortResourceObject::isAvailable()
{
- return (mResource != 0);
+ return (mFactory != 0);
+}
+
+
+bool XXPortResourceObject::_exportContacts( const KABC::AddresseeList &list, const QString& identifier, const QString& fileName )
+{
+ //create new resource
+ KABC::Resource* mResource = (KABC::Resource*)(mFactory->resource( this->identifier(), 0, false ));
+
+ if (mResource == 0)
+ return false;
+
+ if (fileName != QString::null)
+ mResource->setFileName( fileName );
+
+
+ KABC::TmpAddressBook tmpAB;
+
+ bool res = tmpAB.addResource( mResource );
+ if (res == false)
+ {
+ delete mResource;
+ return false;
+ }
+
+ res = tmpAB.load();
+ if (res == false)
+ {
+ //removeResource deletes also the resource object, if the linkcount is 0
+ tmpAB.removeResource( mResource );
+ return false;
+ }
+
+
+ //Now check if the file has already entries, and ask the user if he wants to delete them first.
+ if (tmpAB.begin() != tmpAB.end())
+ {
+ QString text( i18n( "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?" ) );
+ if ( KMessageBox::questionYesNo( parentWidget(), text.arg( fileName ) ) == KMessageBox::Yes ) {
+ // Clean the database..
+ tmpAB.clear();
+ }
+ }
+
+
+ KABC::Addressee::List::ConstIterator it;
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ tmpAB.insertAddressee(*it);
+ }
+
+ KABC::Ticket * ticket = tmpAB.requestSaveTicket(mResource);
+
+ res = false;
+ if (ticket != 0)
+ res = tmpAB.save( ticket );
+
+ //removeResource deletes also the resource object, if the linkcount is 0
+ tmpAB.removeResource( mResource );
+
+ return res;
+}
+
+
+KABC::AddresseeList XXPortResourceObject::_importContacts( const QString& identifier, const QString& fileName ) const
+{
+
+
+ KABC::Resource* mResource = (KABC::Resource*)(mFactory->resource( this->identifier(), 0, false ));
+
+ if (mResource == 0)
+ return KABC::AddresseeList();
+
+ KABC::AddresseeList adrlst;
+
+ if (fileName != QString::null)
+ mResource->setFileName( fileName );
+
+
+ KABC::TmpAddressBook tmpAB;
+
+ bool res = tmpAB.addResource( mResource );
+ if (res == false)
+ {
+ delete mResource;
+ return KABC::AddresseeList();
}
+ res = tmpAB.load();
+
+ adrlst = tmpAB.allAddressees();
+
+ //remove resource deletes also the Resourceobject, if the linkcount is 0
+ tmpAB.removeResource( mResource );
+
+ return adrlst;
+}
+
+
#ifndef KAB_EMBEDDED
#include "xxportobject.moc"
#endif //KAB_EMBEDDED
diff --git a/kaddressbook/xxportobject.h b/kaddressbook/xxportobject.h
index d547855..de39b9f 100644
--- a/kaddressbook/xxportobject.h
+++ b/kaddressbook/xxportobject.h
@@ -1,170 +1,175 @@
/*
This file is part of KAddressbook.
Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
/*
Enhanced Version of the file for platform independent KDE tools.
Copyright (c) 2004 Ulf Schenk
$Id$
*/
#ifndef XXPORTOBJECT_H
#define XXPORTOBJECT_H
#include <qobject.h>
#include <kabc/addressbook.h>
#include <kabc/addresseelist.h>
#include <kabc/resource.h>
#include <kxmlguiclient.h>
#include <klibloader.h>
-
+class KRES::Factory;
class XXPortObject : public QObject, virtual public KXMLGUIClient
{
Q_OBJECT
public:
XXPortObject( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 );
~XXPortObject();
/**
Returns the unique identifier of this xxport modul, it should
be the lowercase name of the import/export format e.g. 'vcard'
*/
virtual QString identifier() const = 0;
/**
Reimplement this method if the XXPortManager shall
pass a sorted list to @ref exportContacts().
*/
virtual bool requiresSorting() const { return false; }
/**
Returns true if the XXPortObject can be used.
One case it can not be used is for example if a needed lib could not be loaded.
*/
virtual bool isAvailable() const { return true; };
public slots:
/**
Reimplement this method for exporting the contacts.
*/
virtual bool exportContacts( const KABC::AddresseeList &list, const QString& identifier );
/**
Reimplement this method for importing the contacts.
*/
virtual KABC::AddresseeList importContacts( const QString& identifier ) const;
signals:
/**
Emitted whenever the export action is activated.
The parameter contains the @ref identifier() for
unique identification.
*/
void exportActivated( const QString&, const QString& );
/**
Emitted whenever the import action is activated.
The parameter contains the @ref identifier() for
unique identification.
*/
void importActivated( const QString&, const QString& );
protected:
/**
Create the import action. The identifier is passed in the import slot.
*/
void createImportAction( const QString &label, const QString &identifier = QString::null );
/**
Create the export action. The identifier is passed in the export slot.
*/
void createExportAction( const QString &label, const QString &identifier = QString::null );
/**
Returns a pointer to the address book object.
*/
KABC::AddressBook *addressBook() const;
/**
Returns a pointer to the parent widget. It can be used as parent for
message boxes.
*/
QWidget *parentWidget() const;
private slots:
void slotImportActivated( const QString& );
void slotExportActivated( const QString& );
private:
KABC::AddressBook *mAddressBook;
QWidget *mParentWidget;
class XXPortObjectPrivate;
XXPortObjectPrivate *d;
};
class XXPortResourceObject : public XXPortObject
{
Q_OBJECT
public:
XXPortResourceObject( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 );
~XXPortResourceObject();
/**
Returns true if the XXPortObject can be used.
One case it can not be used is for example if a needed lib could not be loaded.
*/
virtual bool isAvailable();
+
+ protected:
+ bool _exportContacts( const KABC::AddresseeList &list, const QString& identifier, const QString& fileName );
+ KABC::AddresseeList _importContacts( const QString& identifier, const QString& fileName ) const;
+
protected:
- KABC::Resource* mResource;
+ KRES::Factory* mFactory;
};
class XXPortFactory : public KLibFactory
{
public:
virtual XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent,
const char *name = 0 ) = 0;
protected:
virtual QObject* createObject( QObject*, const char*, const char*,
const QStringList & )
{
return 0;
}
};
#endif