summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/qtopia/resourceqtopia.cpp2
-rw-r--r--kaddressbook/xxport/qtopia_xxport.cpp16
-rw-r--r--kaddressbook/xxportobject.cpp85
3 files changed, 57 insertions, 46 deletions
diff --git a/kabc/plugins/qtopia/resourceqtopia.cpp b/kabc/plugins/qtopia/resourceqtopia.cpp
index d6df981..cf6b11a 100644
--- a/kabc/plugins/qtopia/resourceqtopia.cpp
+++ b/kabc/plugins/qtopia/resourceqtopia.cpp
@@ -1,336 +1,336 @@
/*
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>
#ifndef _WIN32_
#include <unistd.h>
#endif
#include <qdir.h>
#include <qfile.h>
#include <qtextstream.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 "resourceqtopiaconfig.h"
#include "stdaddressbook.h"
#include "qtopiaconverter.h"
#include "resourceqtopia.h"
using namespace KABC;
extern "C"
#ifdef _WIN32_
__declspec(dllexport)
#else
{
#endif
void *init_microkabc_qtopia()
{
return new KRES::PluginFactory<ResourceQtopia,ResourceQtopiaConfig>();
}
#ifndef _WIN32_
}
#endif
ResourceQtopia::ResourceQtopia( const KConfig *config )
: Resource( config ), 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 )
: Resource( 0 )
{
init( fileName );
}
void ResourceQtopia::init( const QString &fileName )
{
#ifdef _USE_DIRWATCH_
connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
#endif
setFileName( fileName );
}
ResourceQtopia::~ResourceQtopia()
{
if (mConverter != 0)
delete mConverter;
}
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());
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);
return false;
}
}
return true;
}
void ResourceQtopia::doClose()
{
qDebug("ResourceQtopia::doClose: %s", fileName().latin1());
// it seems so, that deletion of access deletes backend as well
//delete backend;
return;
}
bool ResourceQtopia::load()
{
QFile file( fileName() );
if ( !file.open(IO_ReadOnly ) ) {
return false;
}
QDomDocument doc("mydocument" );
if ( !doc.setContent( &file ) ) {
file.close();
- return false;
+ return true;
}
bool res;
QDomElement docElem = doc.documentElement( );
QDomNode n = docElem.firstChild();
while ( !n.isNull() ) {
QDomElement e = n.toElement();
if ( !e.isNull() ) {
if ( e.tagName() == QString::fromLatin1( "Contacts" ) ) {
QDomNode no = e.firstChild();
while ( !no.isNull() ) {
QDomElement el = no.toElement();
if ( !el.isNull() ) {
KABC::Addressee addressee;
res = mConverter->qtopiaToAddressee( el, addressee );
if ( !addressee.isEmpty() && res )
{
addressee.setResource( this );
addressBook()->insertAddressee( addressee );
}
}
no = no.nextSibling();
}
}
}
n = n.nextSibling();
}
return true;
}
bool ResourceQtopia::save( Ticket *ticket )
{
#ifdef _USE_DIRWATCH_
mDirWatch.stopScan();
#endif
KABC::AddressBook::Iterator it;
bool res;
QFile file( fileName() );
if (!file.open( IO_WriteOnly ) ) {
return false;
}
QTextStream ts( &file );
QTextStream *stream = &ts;
stream->setEncoding( QTextStream::UnicodeUTF8 );
*stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Addressbook ><AddressBook>" << endl;
*stream << " <Groups>" << endl;
*stream << " </Groups>" << endl;
*stream << " <Contacts> " << endl;
// for all entries
KABC::Addressee ab;
for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
KABC::Addressee addressee = (*it);
res = mConverter->addresseeToQtopia( addressee, stream );
if (!res == true)
{
qDebug("Unable to convert Addressee %s", addressee.formattedName().latin1());
}
}
*stream << "</Contacts>" << endl;
*stream << "</AddressBook>" << endl;
file.close();
#ifdef _USE_DIRWATCH_
mDirWatch.startScan();
#endif
delete ticket;
unlock( fileName() );
return true;
}
bool ResourceQtopia::lock( const QString &lockfileName )
{
//disabled
return true;
qDebug("ResourceQtopia::lock: %s", fileName().latin1());
QString fn = lockfileName;
KURL url(fn);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
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 ResourceQtopia::unlock( const QString &fileName )
{
//disabled
return;
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 )
{
#ifdef _USE_DIRWATCH_
mDirWatch.stopScan();
#endif
mDirWatch.removeFile( fileName() );
Resource::setFileName( newFileName );
mDirWatch.addFile( fileName() );
#ifdef _USE_DIRWATCH_
mDirWatch.startScan();
#endif
}
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() );
}
//US #include "resourceqtopia.moc"
diff --git a/kaddressbook/xxport/qtopia_xxport.cpp b/kaddressbook/xxport/qtopia_xxport.cpp
index 0cf6546..fc4abbb 100644
--- a/kaddressbook/xxport/qtopia_xxport.cpp
+++ b/kaddressbook/xxport/qtopia_xxport.cpp
@@ -1,78 +1,86 @@
/*
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 "addressee.h"
#include "xxportmanager.h"
#include "qtopia_xxport.h"
+#include <kfiledialog.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";
if ( mFactory && !mFactory->typeName( "qtopia" ).isEmpty() )
{
- createImportAction( i18n( "Import Qtopia..." ) );
- createExportAction( i18n( "Export Qtopia..." ) );
+ createImportAction( i18n( "Import xml (Qtopia)..." ) );
+ createExportAction( i18n( "Export xml (Qtopia)..." ) );
}
}
bool QtopiaXXPort::exportContacts( const KABC::AddresseeList &list, const QString &identifier )
{
- return _exportContacts( list, identifier, defaultFileName );
+ QString fn =KFileDialog::getSaveFileName( defaultFileName, i18n("Import xml file"), 0 );
+ if ( fn == "" )
+ return false;
+
+ return _exportContacts( list, identifier, fn );
}
KABC::AddresseeList QtopiaXXPort::importContacts( const QString &identifier ) const
{
- return _importContacts( identifier, defaultFileName );
+ QString fn =KFileDialog::getOpenFileName( defaultFileName, i18n("Import xml file"), 0 );
+ if ( fn == "" )
+ return KABC::AddresseeList() ;
+ return _importContacts( identifier, fn );
}
diff --git a/kaddressbook/xxportobject.cpp b/kaddressbook/xxportobject.cpp
index 67e8406..bd9d986 100644
--- a/kaddressbook/xxportobject.cpp
+++ b/kaddressbook/xxportobject.cpp
@@ -1,273 +1,276 @@
/*
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 <qfile.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 ), mFactory(0)
{
mFactory = KRES::Factory::self( "tmpcontact" );
}
XXPortResourceObject::~XXPortResourceObject()
{
//do not delete the factory. It is a singleton, and selfcontained
}
bool XXPortResourceObject::isAvailable()
{
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 ));
-
- 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::Resource* mResource = (KABC::Resource*)(mFactory->resource( this->identifier(), 0 ));
+
+ if (mResource == 0)
+ return false;
+
+ if (fileName != QString::null) {
+ mResource->setFileName( fileName );
+ } else
+ return false;
+
+
+ KABC::TmpAddressBook tmpAB;
+
+ bool res = tmpAB.addResource( mResource );
+ if (res == false)
+ {
+ delete mResource;
+ return false;
+ }
+ if ( QFile::exists ( fileName ) ) {
+ 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::Addressee::List::ConstIterator it;
- for ( it = list.begin(); it != list.end(); ++it ) {
- tmpAB.insertAddressee(*it);
- }
-
- KABC::Ticket * ticket = tmpAB.requestSaveTicket(mResource);
+ 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 ));
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