summaryrefslogtreecommitdiffabout
authorulf69 <ulf69>2004-08-02 23:23:36 (UTC)
committer ulf69 <ulf69>2004-08-02 23:23:36 (UTC)
commitd5358380edce9a2c39f3eea4df741a148338880c (patch) (side-by-side diff)
tree8f514a5e200ecfa3c5f4256d85606ade7c6b3093
parent464ed9d13592965a63b614a1f2902000eb26f1ae (diff)
downloadkdepimpi-d5358380edce9a2c39f3eea4df741a148338880c.zip
kdepimpi-d5358380edce9a2c39f3eea4df741a148338880c.tar.gz
kdepimpi-d5358380edce9a2c39f3eea4df741a148338880c.tar.bz2
changes that resources support writing and syncing
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/kabcE.pro2
-rw-r--r--kabc/plugins/dir/resourcedir.cpp4
-rw-r--r--kabc/plugins/file/resourcefile.cpp4
-rw-r--r--kabc/plugins/ldap/resourceldap.cpp4
-rw-r--r--kabc/plugins/opie/resourceopie.cpp20
-rw-r--r--kabc/plugins/qtopia/resourceqtopia.cpp95
-rw-r--r--kabc/plugins/sharpdtm/resourcesharpdtm.cpp225
-rw-r--r--kabc/plugins/sharpdtm/resourcesharpdtm.h3
8 files changed, 146 insertions, 211 deletions
diff --git a/kabc/kabcE.pro b/kabc/kabcE.pro
index 598d4fc..62a66eb 100644
--- a/kabc/kabcE.pro
+++ b/kabc/kabcE.pro
@@ -1,30 +1,30 @@
TEMPLATE = lib
CONFIG += qt warn_on
TARGET = microkabc
-INCLUDEPATH += . ./vcard/include ./vcard/include/generated ../microkde ../microkde/kdecore ../microkde/kdeui ../microkde/kio/kfile ../microkde/kio/kio ../libkdepim ../qtcompat $(QPEDIR)/include
+INCLUDEPATH += . .. ./vcard/include ./vcard/include/generated ../microkde ../microkde/kdecore ../microkde/kdeui ../microkde/kio/kfile ../microkde/kio/kio ../libkdepim ../qtcompat $(QPEDIR)/include
OBJECTS_DIR = obj/$(PLATFORM)
MOC_DIR = moc/$(PLATFORM)
DESTDIR = $(QPEDIR)/lib
LIBS += -lmicrokde
LIBS += -lmicrokdepim
#LIBS += -lldap
LIBS += -L$(QPEDIR)/lib
DEFINES += KAB_EMBEDDED
INTERFACES = \
HEADERS = \
address.h \
addressbook.h \
addressee.h \
addresseedialog.h \
addresseelist.h \
agent.h \
distributionlist.h \
distributionlistdialog.h \
distributionlisteditor.h \
field.h \
formatfactory.h \
formatplugin.h \
diff --git a/kabc/plugins/dir/resourcedir.cpp b/kabc/plugins/dir/resourcedir.cpp
index d978e61..29f1e3a 100644
--- a/kabc/plugins/dir/resourcedir.cpp
+++ b/kabc/plugins/dir/resourcedir.cpp
@@ -36,63 +36,63 @@ $Id$
#include <qtimer.h>
#include <qwidget.h>
#include <kapplication.h>
#include <kconfig.h>
#include <kdebug.h>
//US #include <kgenericfactory.h>
#include <kglobal.h>
#include <klocale.h>
#include <kstandarddirs.h>
#include <kurlrequester.h>
#include <kmessagebox.h>
#include "addressbook.h"
#include "formatfactory.h"
#include "resourcedirconfig.h"
#include "stdaddressbook.h"
//US
#include <qdir.h>
#include "resourcedir.h"
-#include "syncwidget.h"
+#include "syncprefwidget.h"
using namespace KABC;
extern "C"
#ifdef _WIN32_
__declspec(dllexport)
#else
{
#endif
//US void *init_kabc_dir()
void *init_microkabc_dir()
{
- return new KRES::PluginFactory<ResourceDir,ResourceDirConfig, KRES::SyncWidget>();
+ return new KRES::PluginFactory<ResourceDir,ResourceDirConfig, SyncPrefWidget>();
}
#ifndef _WIN32_
}
#endif
ResourceDir::ResourceDir( const KConfig *config, bool syncable )
: Resource( config, syncable )
{
QString path;
KConfig *cfg = (KConfig *)config;
if ( cfg ) {
//US path = config->readEntry( "FilePath" );
path = cfg->readEntry( "FilePath", StdAddressBook::directoryName() );
//US mFormatName = config->readEntry( "FileFormat" );
mFormatName = cfg->readEntry( "FileFormat", "vcard" );
} else {
path = StdAddressBook::directoryName();
mFormatName = "vcard";
}
FormatFactory *factory = FormatFactory::self();
mFormat = factory->format( mFormatName );
diff --git a/kabc/plugins/file/resourcefile.cpp b/kabc/plugins/file/resourcefile.cpp
index 361b36b..d98efc8 100644
--- a/kabc/plugins/file/resourcefile.cpp
+++ b/kabc/plugins/file/resourcefile.cpp
@@ -30,64 +30,64 @@ $Id$
#ifndef _WIN32_
#include <unistd.h>
#endif
#include <qfile.h>
#include <qfileinfo.h>
#include <qregexp.h>
#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 "formatfactory.h"
#include "resource.h"
#include "resourcefileconfig.h"
#include "stdaddressbook.h"
#include "resourcefile.h"
-#include "syncwidget.h"
+#include "syncprefwidget.h"
using namespace KABC;
extern "C"
#ifdef _WIN32_
__declspec(dllexport)
#else
{
#endif
//US void *init_kabc_file()
void *init_microkabc_file()
{
- return new KRES::PluginFactory<ResourceFile,ResourceFileConfig, KRES::SyncWidget>();
+ return new KRES::PluginFactory<ResourceFile,ResourceFileConfig, SyncPrefWidget>();
}
#ifndef _WIN32_
}
#endif
ResourceFile::ResourceFile( const KConfig *config, bool syncable )
: Resource( config, syncable ) , mFormat( 0 )
{
QString fileName, formatName;
KConfig *cfg = (KConfig *)config;
if ( cfg ) {
fileName = cfg->readEntry( "FileName", StdAddressBook::fileName() );
formatName = cfg->readEntry( "FileFormat", "vcard" );
// qDebug("ResourceFile::ResourceFile : 1 %s, %s", fileName.latin1(), formatName.latin1() );
} else {
fileName = StdAddressBook::fileName();
formatName = "vcard";
// qDebug("ResourceFile::ResourceFile : 2 %s, %s", fileName.latin1(), formatName.latin1() );
}
init( fileName, formatName );
}
diff --git a/kabc/plugins/ldap/resourceldap.cpp b/kabc/plugins/ldap/resourceldap.cpp
index 4b9dede..198e80a 100644
--- a/kabc/plugins/ldap/resourceldap.cpp
+++ b/kabc/plugins/ldap/resourceldap.cpp
@@ -15,58 +15,58 @@
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 <kglobal.h>
#include <klineedit.h>
#include <klocale.h>
#include <kconfig.h>
#include <kstringhandler.h>
#include <stdlib.h>
#include "resourceldap.h"
#include "resourceldapconfig.h"
-#include "syncwidget.h"
+#include "syncprefwidget.h"
using namespace KABC;
extern "C"
{
//US void *init_kabc_ldap()
void *init_microkabc_ldap()
{
- return new KRES::PluginFactory<ResourceLDAP,ResourceLDAPConfig, KRES::SyncWidget>();
+ return new KRES::PluginFactory<ResourceLDAP,ResourceLDAPConfig, SyncPrefWidget>();
}
}
void addModOp( LDAPMod ***pmods, const QString &attr, const QString &value );
ResourceLDAP::ResourceLDAP( const KConfig *config, bool syncable )
: Resource( config, syncable ), mPort( 389 ), mLdap( 0 )
{
KConfig *cfg = (KConfig *)config;
if ( cfg ) {
mUser = cfg->readEntry( "LdapUser" );
mPassword = KStringHandler::obscure( cfg->readEntry( "LdapPassword" ) );
mDn = cfg->readEntry( "LdapDn" );
mHost = cfg->readEntry( "LdapHost" );
mPort = cfg->readNumEntry( "LdapPort", 389 );
mFilter = cfg->readEntry( "LdapFilter" );
mAnonymous = cfg->readBoolEntry( "LdapAnonymous" );
QStringList attributes = cfg->readListEntry( "LdapAttributes" );
for ( uint pos = 0; pos < attributes.count(); pos += 2 )
mAttributes.insert( attributes[ pos ], attributes[ pos + 1 ] );
}
diff --git a/kabc/plugins/opie/resourceopie.cpp b/kabc/plugins/opie/resourceopie.cpp
index 1222242..5559827 100644
--- a/kabc/plugins/opie/resourceopie.cpp
+++ b/kabc/plugins/opie/resourceopie.cpp
@@ -29,106 +29,100 @@ $Id$
#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 "syncprefwidget.h"
#include "opieconverter.h"
#include "resourceopie.h"
using namespace KABC;
extern "C"
{
void *init_microkabc_opie()
{
- return new KRES::PluginFactory<ResourceOpie,ResourceOpieConfig, KRES::SyncWidget>();
+ 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 );
}
-// qDebug("ResourceOpie::ResourceOpie : %s", fileName.latin1() );
-
init( fileName );
}
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", 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 );
}
@@ -230,103 +224,93 @@ bool ResourceOpie::save( Ticket *ticket )
{
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());
-
-// qDebug("ResourceOpie::lock() %s", fileName.latin1());
kdDebug(5700) << "ResourceOpie::lock()" << endl;
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);
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;
//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;
-//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);
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
diff --git a/kabc/plugins/qtopia/resourceqtopia.cpp b/kabc/plugins/qtopia/resourceqtopia.cpp
index dc88272..4a35f19 100644
--- a/kabc/plugins/qtopia/resourceqtopia.cpp
+++ b/kabc/plugins/qtopia/resourceqtopia.cpp
@@ -28,132 +28,132 @@ $Id$
#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 "syncwidget.h"
+#include "syncprefwidget.h"
#include "resourceqtopia.h"
using namespace KABC;
extern "C"
{
void *init_microkabc_qtopia()
{
- return new KRES::PluginFactory<ResourceQtopia,ResourceQtopiaConfig, KRES::SyncWidget>();
+ 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 )
{
-// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1());
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;
}
- bool res = false;
+
if (mConverter == 0)
{
mConverter = new QtopiaConverter();
- res = mConverter->init();
+ 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;
@@ -168,153 +168,128 @@ bool ResourceQtopia::load()
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 )
{
-/*US
-// qDebug("ResourceFile::save format %s, %s", mFileName.latin1(), mFormatName.latin1());
- kdDebug(5700) << "ResourceQtopia::save()" << endl;
-
- // create backup file
- QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() );
+ qDebug("ResourceQtopia::save: %s", fileName().latin1());
-/*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 );
+ KABC::AddressBook::Iterator it;
+ bool res;
- info.close();
- ok = true;
- }
- else {
+ 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());
+ }
}
- if ( !ok )
- addressBook()->error( i18n( "Unable to save file '%1'." ).arg( mFileName ) );
+// mAccess->addressBookUpdated();
delete ticket;
- unlock( mFileName );
-
- return ok;
-
- qDebug("ResourceQtopia::save has to be changed");
-
-
- access->save();
-
-*/
+ unlock( fileName() );
return true;
}
-bool ResourceQtopia::lock( const QString &fileName )
+bool ResourceQtopia::lock( const QString &lockfileName )
{
- kdDebug(5700) << "ResourceQtopia::lock()" << endl;
+ qDebug("ResourceQtopia::lock: %s", fileName().latin1());
- QString fn = fileName;
+ kdDebug(5700) << "ResourceQtopia::lock()" << endl;
-//US change the implementation how the lockfilename is getting created
-//US fn.replace( QRegExp("/"), "_" );
-//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
+ 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;
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 = ::link( QFile::encodeName( mLockUniqueName ),
+ 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;
-//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);
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
diff --git a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
index 7b909de..14f272d 100644
--- a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
+++ b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
@@ -28,352 +28,325 @@ $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>();
+ 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 )
{
-// qDebug("ResourceFile::ResourceSharpDTM : 3 %s, %s", fileName.latin1(), formatName.latin1());
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 (mConverter != 0)
+ delete mConverter;
+ if(mAccess != 0)
+ delete mAccess;
}
void ResourceSharpDTM::writeConfig( KConfig *config )
{
Resource::writeConfig( config );
}
Ticket *ResourceSharpDTM::requestSaveTicket()
{
- kdDebug(5700) << "ResourceQtopia::requestSaveTicket()" << endl;
+ kdDebug(5700) << "ResourceSharpDTM::requestSaveTicket()" << endl;
+
+ qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1());
if ( !addressBook() ) return 0;
- if ( !lock( mFileName ) ) {
- kdDebug(5700) << "ResourceQtopia::requestSaveTicket(): Unable to lock file '"
- << mFileName << "'" << endl;
+ if ( !lock( fileName() ) ) {
+ kdDebug(5700) << "ResourceSharpDTM::requestSaveTicket(): Unable to lock file '"
+ << fileName() << "'" << endl;
return 0;
}
return createTicket( this );
}
bool ResourceSharpDTM::doOpen()
{
-/*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;
- }
-
-//US bool ok = mFormat->checkFormat( &file );
- bool ok = true;
-
- file.close();
-
- return ok;
- }
-*/
- return true;
-}
-
-void ResourceSharpDTM::doClose()
-{
-}
-
-bool ResourceSharpDTM::load()
-{
- kdDebug(5700) << "ResourcSharpDTM::load(): '" << mFileName << "'" << endl;
-
-// qDebug("ResourceSharpDTM::load: Try to load file() %s", mFileName.latin1());
+ qDebug("ResourceSharpDTM::doOpen: %s", fileName().latin1());
// the last parameter in the SlZDataBase constructor means "readonly"
- SlZDataBase* access = new SlZDataBase(mFileName,
+ mAccess = new SlZDataBase(fileName(),
SlZDataBase::addressbookItems(),
NULL, true);
- if ( !access ) {
- qDebug("Unable to load file() %s", mFileName.latin1());
- addressBook()->error( i18n( "Unable to load file '%1'." ).arg( mFileName ) );
+
+ if ( !mAccess ) {
+ qDebug("Unable to load file() %s", fileName().latin1());
return false;
}
- bool res = false;
if (mConverter == 0)
{
mConverter = new SharpDTMConverter();
- res = mConverter->init();
+ bool res = mConverter->init();
if ( !res )
{
QString msg("Unable to initialize sharp converter. Most likely a problem with the category file");
qDebug(msg);
- addressBook()->error( i18n( msg ) );
- delete access;
+ delete mAccess;
+ mAccess = 0;
return false;
}
}
- { //create a new scope
- CardId id;
+ return true;
+}
+
+void ResourceSharpDTM::doClose()
+{
+ qDebug("ResourceSharpDTM::doClose: %s", fileName().latin1());
- for (bool res=access->first(); res == true; res=access->next()) {
- id = access->cardId();
+ if(mAccess)
+ {
+ delete mAccess;
+ mAccess = 0;
+ }
+ // it seems so, that deletion of access deletes backend as well
+ //delete backend;
- KABC::Addressee addressee;
+ return;
+}
- res = mConverter->sharpToAddressee( id, access, addressee );
+bool ResourceSharpDTM::load()
+{
+ qDebug("ResourceSharpDTM::load: %s", fileName().latin1());
- if ( !addressee.isEmpty() && res )
- {
- addressee.setResource( this );
- addressBook()->insertAddressee( addressee );
- }
+ 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 );
}
}
- delete access;
return true;
}
bool ResourceSharpDTM::save( Ticket *ticket )
{
-/*US
-// qDebug("ResourceFile::save format %s, %s", mFileName.latin1(), mFormatName.latin1());
- kdDebug(5700) << "ResourceQtopia::save()" << endl;
+ qDebug("ResourceSharpDTM::save: %s", fileName().latin1());
- // create backup file
- QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() );
-/*US we use a simpler method to create a backupfile
+ KABC::AddressBook::Iterator it;
+ bool res;
- (void) KSaveFile::backupFile( mFileName, QString::null
- ,extension );
+ for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
+ CardId id = 0; // 0 means new card
+ KABC::Addressee addressee = (*it);
- 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 {
+ 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());
+ }
}
- if ( !ok )
- addressBook()->error( i18n( "Unable to save file '%1'." ).arg( mFileName ) );
+//US mAccess->save();
delete ticket;
- unlock( mFileName );
+ unlock( fileName() );
- return ok;
-
- qDebug("ResourceQtopia::save has to be changed");
-*/
return true;
}
-bool ResourceSharpDTM::lock( const QString &fileName )
+bool ResourceSharpDTM::lock( const QString &lockfileName )
{
- kdDebug(5700) << "ResourceSharpDTM::lock()" << endl;
+ qDebug("ResourceSharpDTM::lock: %s", fileName().latin1());
- QString fn = fileName;
+ kdDebug(5700) << "ResourceSharpDTM::lock()" << endl;
-//US change the implementation how the lockfilename is getting created
-//US fn.replace( QRegExp("/"), "_" );
-//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
+ 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;
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 = ::link( QFile::encodeName( mLockUniqueName ),
+ 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;
-//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);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
QFile::remove( lockName );
QFile::remove( mLockUniqueName );
addressBook()->emitAddressBookUnlocked();
}
-void ResourceSharpDTM::setFileName( const QString &fileName )
+void ResourceSharpDTM::setFileName( const QString &newFileName )
{
mDirWatch.stopScan();
- mDirWatch.removeFile( mFileName );
+ mDirWatch.removeFile( fileName() );
- mFileName = fileName;
+ Resource::setFileName( newFileName );
- mDirWatch.addFile( mFileName );
+ mDirWatch.addFile( fileName() );
mDirWatch.startScan();
}
-QString ResourceSharpDTM::fileName() const
-{
- return mFileName;
-}
-
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( mFileName ) );
+ 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( mFileName );
+ 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 f495e9d..60d38a1 100644
--- a/kabc/plugins/sharpdtm/resourcesharpdtm.h
+++ b/kabc/plugins/sharpdtm/resourcesharpdtm.h
@@ -16,48 +16,50 @@
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.
*/
@@ -120,34 +122,35 @@ public:
*/
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