summaryrefslogtreecommitdiffabout
path: root/kabc/plugins/opie
Side-by-side diff
Diffstat (limited to 'kabc/plugins/opie') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/opie/opieE.pro2
-rw-r--r--kabc/plugins/opie/resourceopie.cpp302
-rw-r--r--kabc/plugins/opie/resourceopie.h40
3 files changed, 172 insertions, 172 deletions
diff --git a/kabc/plugins/opie/opieE.pro b/kabc/plugins/opie/opieE.pro
index 8d45c3d..912e596 100644
--- a/kabc/plugins/opie/opieE.pro
+++ b/kabc/plugins/opie/opieE.pro
@@ -1,31 +1,31 @@
TEMPLATE = lib
CONFIG += qt warn_on
#release debug
TARGET = microkabc_opie
-INCLUDEPATH += ../.. ../../../microkde ../../../microkde/kdecore ../../../microkde/kio/kfile ../../../microkde/kio/kio ../../../qtcompat $(QPEDIR)/include $(OPIEDIR)/include
+INCLUDEPATH += ../.. ../../../microkde ../../../microkde/kdecore ../../../microkde/kio/kfile ../../../microkde/kio/kio ../../../microkde/kresources ../../../qtcompat $(QPEDIR)/include $(OPIEDIR)/include
OBJECTS_DIR = obj/$(PLATFORM)
MOC_DIR = moc/$(PLATFORM)
DESTDIR = $(QPEDIR)/lib
LIBS += -lmicrokde
LIBS += -lmicrokabc
LIBS += -L$(QPEDIR)/lib
LIBS += -L$(OPIEDIR)/lib
LIBS += -lopie
LIBS += -lqpe
LIBS += -lqte
INTERFACES = \
HEADERS = \
resourceopie.h \
resourceopieconfig.h \
opieconverter.h \
SOURCES = \
resourceopie.cpp \
resourceopieconfig.cpp \
opieconverter.cpp \
diff --git a/kabc/plugins/opie/resourceopie.cpp b/kabc/plugins/opie/resourceopie.cpp
index aaee801..1222242 100644
--- a/kabc/plugins/opie/resourceopie.cpp
+++ b/kabc/plugins/opie/resourceopie.cpp
@@ -1,395 +1,391 @@
/*
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 "syncwidget.h"
#include "opieconverter.h"
#include "resourceopie.h"
using namespace KABC;
extern "C"
{
void *init_microkabc_opie()
{
- return new KRES::PluginFactory<ResourceOpie,ResourceOpieConfig>();
+ return new KRES::PluginFactory<ResourceOpie,ResourceOpieConfig, KRES::SyncWidget>();
}
}
-ResourceOpie::ResourceOpie( const KConfig *config )
- : Resource( config ), mConverter (0)
+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 );
-
+
}
// qDebug("ResourceOpie::ResourceOpie : %s", fileName.latin1() );
-
+
init( fileName );
}
-ResourceOpie::ResourceOpie( const QString &fileName )
- : Resource( 0 )
+ResourceOpie::ResourceOpie( const QString &fileName, bool syncable )
+ : Resource( 0, syncable )
{
// qDebug("ResourceOpie::ResourceOpie : 3 %s", fileName.latin1());
init( fileName );
}
void ResourceOpie::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 );
-
+
}
ResourceOpie::~ResourceOpie()
{
if (mConverter != 0)
delete mConverter;
+
+ if(mAccess != 0)
+ delete mAccess;
+
}
void ResourceOpie::writeConfig( KConfig *config )
{
Resource::writeConfig( config );
- config->writeEntry( "FileName", mFileName );
-
-// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1());
-
+ config->writeEntry( "FileName", fileName() );
}
Ticket *ResourceOpie::requestSaveTicket()
{
kdDebug(5700) << "ResourceOpie::requestSaveTicket()" << endl;
+ qDebug("ResourceOpie::requestSaveTicket: %s", fileName().latin1());
+
if ( !addressBook() ) return 0;
- if ( !lock( mFileName ) ) {
+ if ( !lock( fileName() ) ) {
kdDebug(5700) << "ResourceOpie::requestSaveTicket(): Unable to lock file '"
- << mFileName << "'" << endl;
+ << fileName() << "'" << endl;
return 0;
}
return createTicket( this );
}
bool ResourceOpie::doOpen()
{
-// qDebug("ResourceOpie::doOpen() %s", mFileName.latin1());
-/*US
- QFile file( mFileName );
-
- if ( !file.exists() ) {
- // try to create the file
- bool ok = file.open( IO_WriteOnly );
- if ( ok )
- file.close();
-
- return ok;
- } else {
- if ( !file.open( IO_ReadWrite ) )
- return false;
-
- if ( file.size() == 0 ) {
- file.close();
- return true;
- }
+ qDebug("ResourceOpie::doOpen: %s", fileName().latin1());
-//US bool ok = mFormat->checkFormat( &file );
- bool ok = true;
-
- file.close();
+ OContactAccessBackend_XML* backend = new OContactAccessBackend_XML( "KDEPim/Pi", fileName() );
+ mAccess = new OContactAccess("KDEPim/Pi", 0l, backend, false);
- return ok;
+ if ( !mAccess ) {
+ qDebug("Unable to load file() %s", fileName().latin1());
+ return false;
}
-*/
- qDebug("ResourceOpie::doOpen() has to be fixed - %s", mFileName.latin1());
- return true;
-}
-void ResourceOpie::doClose()
-{
-// qDebug("ResourceOpie::doClose() %s", mFileName.latin1());
-}
+ mAccess->setReadAhead( 32 ); // Use ReadAhead-Cache if available
-bool ResourceOpie::load()
-{
-// qDebug("ResourceOpie::load() %s", mFileName.latin1());
- kdDebug(5700) << "ResourceOpie::load(): '" << mFileName << "'" << endl;
-
- qDebug("ResourceOpie::load: Try to load file() %s", mFileName.latin1());
-
- OContactAccessBackend_XML* backend = new OContactAccessBackend_XML( "KDEPim/Pi", mFileName );
- OContactAccess* access = new OContactAccess("KDEPim/Pi", 0l, backend, false);
-
- if ( !access ) {
- qDebug("Unable to load file() %s", mFileName.latin1());
- addressBook()->error( i18n( "Unable to load file '%1'." ).arg( mFileName ) );
- return false;
- }
-
- access -> setReadAhead( 32 ); // Use ReadAhead-Cache if available
- bool res = false;
if (mConverter == 0)
{
mConverter = new OpieConverter();
- res = mConverter->init();
+ bool res = mConverter->init();
if ( !res )
{
qDebug("Unable to initialize opie converter. Most likely a problem with the category file");
- addressBook()->error( i18n( "Unable to initialize opie converter. Most likely a problem with the category file" ) );
- delete access;
+ delete mAccess;
+ mAccess = 0;
return false;
}
}
- OContactAccess::List::Iterator it;
- OContactAccess::List allList = access->allRecords();
+
+ 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 );
-
+
+ res = mConverter->opieToAddressee( c, addressee );
+
if ( !addressee.isEmpty() && res )
{
addressee.setResource( this );
addressBook()->insertAddressee( addressee );
}
-
-// qDebug("found %s", c.fullName().latin1());
+
}
-
- delete access;
- // it seems so, that deletion of access deletes backend as well
- //delete backend;
-
+
+
return true;
}
bool ResourceOpie::save( Ticket *ticket )
{
- qDebug("ResourceOpie::save() has to be fixed - %s", mFileName.latin1());
-/*US
-
- qDebug("ResourceOpie::save %s", mFileName.latin1());
- kdDebug(5700) << "ResourceOpie::save()" << endl;
-
- // create backup file
- QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() );
-*/
-/*US we use a simpler method to create a backupfile
-
- (void) KSaveFile::backupFile( mFileName, QString::null
- ,extension );
-
- KSaveFile saveFile( mFileName );
- bool ok = false;
- if ( saveFile.status() == 0 && saveFile.file() )
- {
- mFormat->saveAll( addressBook(), this, saveFile.file() );
- ok = saveFile.close();
- }
-*/
-/*US
-//US ToDo: write backupfile
- QFile info;
- info.setName( mFileName );
- bool ok = info.open( IO_WriteOnly );
- if ( ok ) {
-//US mFormat->saveAll( addressBook(), this, &info );
-
- info.close();
- ok = true;
- }
- else {
-
+ 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());
+ }
}
-
- if ( !ok )
- addressBook()->error( i18n( "Unable to save file '%1'." ).arg( mFileName ) );
-
+
+ mAccess->save();
+
delete ticket;
- unlock( mFileName );
-
- return ok;
+ unlock( fileName() );
- qDebug("ResourceOpie::save has to be changed");
-*/
return true;
-
+
}
-bool ResourceOpie::lock( const QString &fileName )
+bool ResourceOpie::lock( const QString &lockfileName )
{
+ qDebug("ResourceOpie::lock: %s", fileName().latin1());
+
+
// qDebug("ResourceOpie::lock() %s", fileName.latin1());
kdDebug(5700) << "ResourceOpie::lock()" << endl;
- QString fn = fileName;
+ QString fn = lockfileName;
//US change the implementation how the lockfilename is getting created
//US fn.replace( QRegExp("/"), "_" );
//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
-
- KURL url(fn);
+
+ KURL url(fn);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
-
+
kdDebug(5700) << "-- lock name: " << lockName << endl;
if (QFile::exists( lockName )) return false;
QString lockUniqueName;
lockUniqueName = fn + KApplication::randomString( 8 );
-
- url = lockUniqueName;
+
+ 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());
-
+ qDebug("ResourceOpie::unlock() %s", fileName.latin1());
+
QString fn = fileName;
//US change the implementation how the lockfilename is getting created
//US fn.replace( QRegExp( "/" ), "_" );
//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
//US QString lockName = fn + ".lock";
- KURL url(fn);
+ 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 &fileName )
+void ResourceOpie::setFileName( const QString &newFileName )
{
mDirWatch.stopScan();
- mDirWatch.removeFile( mFileName );
-
- mFileName = fileName;
-
- mDirWatch.addFile( mFileName );
+ mDirWatch.removeFile( fileName() );
+
+ Resource::setFileName( newFileName );
+
+ mDirWatch.addFile( fileName() );
mDirWatch.startScan();
-//US simulate KDirWatch event
-//US fileChanged();
}
-QString ResourceOpie::fileName() const
-{
- return mFileName;
-}
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( mFileName ) );
+
+ 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( mFileName );
+ 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 9db9485..ca30fee 100644
--- a/kabc/plugins/opie/resourceopie.h
+++ b/kabc/plugins/opie/resourceopie.h
@@ -1,152 +1,156 @@
/*
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 QTimer;
-//class FormatPlugin;
+class OContactAccess;
namespace KABC {
-//US class FormatPlugin;
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 );
+ ResourceOpie( const KConfig *cfg, bool syncable );
/**
Construct file resource on file @arg fileName using format @arg formatName.
*/
- ResourceOpie( const QString &fileName );
+ 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 );
- /**
- * Set name of file to be used for saving.
- */
- void setFileName( const QString & );
-
- /**
- * Return name of file used for loading and saving the address book.
- */
- QString fileName() const;
/**
* 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 mFileName;
QString mLockUniqueName;
-
+
KDirWatch mDirWatch;
};
}
#endif