summaryrefslogtreecommitdiffabout
authorulf69 <ulf69>2004-08-02 18:33:07 (UTC)
committer ulf69 <ulf69>2004-08-02 18:33:07 (UTC)
commit60a6886f06be31ec690df34dc8e3b8931c2d3bd7 (patch) (side-by-side diff)
treec4c7c15cfd3753a3342806a11fb8f5c20bb4f923
parent863c4c3678e59ef125c08c00e9532ded5b540f67 (diff)
downloadkdepimpi-60a6886f06be31ec690df34dc8e3b8931c2d3bd7.zip
kdepimpi-60a6886f06be31ec690df34dc8e3b8931c2d3bd7.tar.gz
kdepimpi-60a6886f06be31ec690df34dc8e3b8931c2d3bd7.tar.bz2
added support for syncable resources
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp35
-rw-r--r--kabc/addressbook.h30
-rw-r--r--kabc/kabc.pro4
-rw-r--r--kabc/kabcE.pro7
-rw-r--r--kabc/resource.cpp63
-rw-r--r--kabc/resource.h66
6 files changed, 161 insertions, 44 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 0838157..20310a0 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -207,60 +207,67 @@ bool AddressBook::ConstIterator::operator==( const ConstIterator &it )
{
return ( d->mIt == it.d->mIt );
}
bool AddressBook::ConstIterator::operator!=( const ConstIterator &it )
{
return ( d->mIt != it.d->mIt );
}
AddressBook::AddressBook()
{
- init(0);
+ init(0, "contact");
}
AddressBook::AddressBook( const QString &config )
{
- init(config);
+ init(config, "contact");
}
-void AddressBook::init(const QString &config)
+AddressBook::AddressBook( const QString &config, const QString &family )
+{
+ init(config, family);
+
+}
+
+// the default family is "contact"
+void AddressBook::init(const QString &config, const QString &family )
{
d = new AddressBookData;
if (config != 0) {
d->mConfig = new KConfig( config );
// qDebug("AddressBook::init 1 config=%s",config.latin1() );
}
else {
d->mConfig = 0;
// qDebug("AddressBook::init 1 config=0");
}
-
+
//US d->mErrorHandler = 0;
- d->mManager = new KRES::Manager<Resource>( "contact" );
+ d->mManager = new KRES::Manager<Resource>( family, false );
d->mManager->readConfig( d->mConfig );
}
AddressBook::~AddressBook()
{
delete d->mConfig; d->mConfig = 0;
delete d->mManager; d->mManager = 0;
//US delete d->mErrorHandler; d->mErrorHandler = 0;
delete d; d = 0;
}
bool AddressBook::load()
{
-
+
clear();
KRES::Manager<Resource>::ActiveIterator it;
bool ok = true;
for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
if ( !(*it)->load() ) {
error( i18n("Unable to load resource '%1'").arg( (*it)->resourceName() ) );
ok = false;
}
// mark all addressees as unchanged
@@ -268,25 +275,25 @@ bool AddressBook::load()
for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt )
(*addrIt).setChanged( false );
return ok;
}
bool AddressBook::save( Ticket *ticket )
{
kdDebug(5700) << "AddressBook::save()"<< endl;
if ( ticket->resource() ) {
deleteRemovedAddressees();
-
+
return ticket->resource()->save( ticket );
}
return false;
}
AddressBook::Iterator AddressBook::begin()
{
Iterator it = Iterator();
it.d->mIt = d->mAddressees.begin();
return it;
}
@@ -347,25 +354,25 @@ void AddressBook::insertAddressee( const Addressee &a )
if ( a.uid() == (*it).uid() ) {
bool changed = false;
Addressee addr = a;
if ( addr != (*it) )
changed = true;
(*it) = a;
if ( (*it).resource() == 0 )
(*it).setResource( standardResource() );
if ( changed ) {
(*it).setRevision( QDateTime::currentDateTime() );
- (*it).setChanged( true );
+ (*it).setChanged( true );
}
return;
}
}
d->mAddressees.append( a );
Addressee& addr = d->mAddressees.last();
if ( addr.resource() == 0 )
addr.setResource( standardResource() );
addr.setChanged( true );
}
@@ -426,25 +433,25 @@ Addressee::List AddressBook::findByName( const QString &name )
}
return results;
}
Addressee::List AddressBook::findByEmail( const QString &email )
{
Addressee::List results;
QStringList mailList;
Iterator it;
for ( it = begin(); it != end(); ++it ) {
- mailList = (*it).emails();
+ mailList = (*it).emails();
for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) {
if ( email == (*ite) ) {
results.append( *it );
}
}
}
return results;
}
Addressee::List AddressBook::findByCategory( const QString &category )
{
@@ -482,33 +489,33 @@ QString AddressBook::identifier()
if ( !(*it)->identifier().isEmpty() )
identifier.append( (*it)->identifier() );
}
return identifier.join( ":" );
}
Field::List AddressBook::fields( int category )
{
if ( d->mAllFields.isEmpty() ) {
d->mAllFields = Field::allFields();
}
-
+
if ( category == Field::All ) return d->mAllFields;
-
+
Field::List result;
Field::List::ConstIterator it;
for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) {
if ( (*it)->category() & category ) result.append( *it );
}
-
+
return result;
}
bool AddressBook::addCustomField( const QString &label, int category,
const QString &key, const QString &app )
{
if ( d->mAllFields.isEmpty() ) {
d->mAllFields = Field::allFields();
}
//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app;
QString a = app.isNull() ? KGlobal::getAppName() : app;
@@ -532,26 +539,24 @@ QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab )
QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab )
{
if (!ab.d) return s;
s >> ab.d->mAddressees;
return s;
}
bool AddressBook::addResource( Resource *resource )
{
- qDebug("AddressBook::addResource 1");
-
if ( !resource->open() ) {
kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl;
return false;
}
resource->setAddressBook( this );
d->mManager->add( resource );
return true;
}
bool AddressBook::removeResource( Resource *resource )
@@ -563,25 +568,25 @@ bool AddressBook::removeResource( Resource *resource )
resource->setAddressBook( 0 );
d->mManager->remove( resource );
return true;
}
QPtrList<Resource> AddressBook::resources()
{
QPtrList<Resource> list;
// qDebug("AddressBook::resources() 1");
-
+
KRES::Manager<Resource>::ActiveIterator it;
for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
list.append( *it );
return list;
}
/*US
void AddressBook::setErrorHandler( ErrorHandler *handler )
{
delete d->mErrorHandler;
d->mErrorHandler = handler;
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index 3a8e028..f89d7da 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -35,39 +35,39 @@ $Id$
#include "addressee.h"
#include "field.h"
namespace KABC {
class ErrorHandler;
class Resource;
class Ticket;
/**
@short Address Book
-
+
This class provides access to a collection of address book entries.
*/
class AddressBook : public QObject
{
Q_OBJECT
friend QDataStream &operator<<( QDataStream &, const AddressBook & );
friend QDataStream &operator>>( QDataStream &, AddressBook & );
friend class StdAddressBook;
public:
/**
@short Address Book Iterator
-
+
This class provides an iterator for address book entries.
*/
class Iterator
{
public:
Iterator();
Iterator( const Iterator & );
~Iterator();
Iterator &operator=( const Iterator & );
const Addressee &operator*() const;
Addressee &operator*();
@@ -76,76 +76,77 @@ class AddressBook : public QObject
Iterator &operator++(int);
Iterator &operator--();
Iterator &operator--(int);
bool operator==( const Iterator &it );
bool operator!=( const Iterator &it );
struct IteratorData;
IteratorData *d;
};
/**
@short Address Book Const Iterator
-
+
This class provides a const iterator for address book entries.
*/
class ConstIterator
{
public:
ConstIterator();
ConstIterator( const ConstIterator & );
~ConstIterator();
-
+
ConstIterator &operator=( const ConstIterator & );
const Addressee &operator*() const;
const Addressee* operator->() const;
ConstIterator &operator++();
ConstIterator &operator++(int);
ConstIterator &operator--();
ConstIterator &operator--(int);
bool operator==( const ConstIterator &it );
bool operator!=( const ConstIterator &it );
struct ConstIteratorData;
ConstIteratorData *d;
};
-
+
/**
Constructs a address book object.
-
+
@param format File format class.
*/
AddressBook();
AddressBook( const QString &config );
+ AddressBook( const QString &config, const QString &family );
virtual ~AddressBook();
/**
Requests a ticket for saving the addressbook. Calling this function locks
the addressbook for all other processes. If the address book is already
locked the function returns 0. You need the returned @ref Ticket object
for calling the @ref save() function.
-
+
@see save()
*/
Ticket *requestSaveTicket( Resource *resource=0 );
-
+
/**
Load address book from file.
*/
bool load();
/**
Save address book. The address book is saved to the file, the Ticket
object has been requested for by @ref requestSaveTicket().
-
+
@param ticket a ticket object returned by @ref requestSaveTicket()
*/
bool save( Ticket *ticket );
/**
Returns a iterator for first entry of address book.
*/
Iterator begin();
/**
Returns a const iterator for first entry of address book.
*/
@@ -156,25 +157,25 @@ class AddressBook : public QObject
*/
Iterator end();
/**
Returns a const iterator for first entry of address book.
*/
ConstIterator end() const;
/**
Removes all entries from address book.
*/
void clear();
-
+
/**
Insert an Addressee object into address book. If an object with the same
unique id already exists in the address book it it replaced by the new
one. If not the new object is appended to the address book.
*/
void insertAddressee( const Addressee & );
/**
Removes entry from the address book.
*/
void removeAddressee( const Addressee & );
@@ -234,36 +235,36 @@ class AddressBook : public QObject
void emitAddressBookLocked() { emit addressBookLocked( this ); }
void emitAddressBookUnlocked() { emit addressBookUnlocked( this ); }
void emitAddressBookChanged() { emit addressBookChanged( this ); }
/**
Return list of all Fields known to the address book which are associated
with the given field category.
*/
Field::List fields( int category = Field::All );
/**
Add custom field to address book.
-
+
@param label User visible label of the field.
@param category Ored list of field categories.
@param key Identifier used as key for reading and writing the field.
@param app String used as application key for reading and writing
the field.
*/
bool addCustomField( const QString &label, int category = Field::All,
const QString &key = QString::null,
const QString &app = QString::null );
-
+
/**
Add address book resource.
*/
bool addResource( Resource * );
/**
Remove address book resource.
*/
bool removeResource( Resource * );
/**
Return pointer list of all resources.
@@ -299,29 +300,28 @@ class AddressBook : public QObject
/**
Emitted, when the address book has been unlocked.
*/
void addressBookUnlocked( AddressBook * );
protected:
void deleteRemovedAddressees();
void setStandardResource( Resource * );
Resource *standardResource();
KRES::Manager<Resource> *resourceManager();
+ void init(const QString &config, const QString &family);
+
private:
//US QPtrList<Resource> mDummy; // Remove in KDE 4
-//US optimization
- void init(const QString &config);
-
struct AddressBookData;
AddressBookData *d;
};
QDataStream &operator<<( QDataStream &, const AddressBook & );
QDataStream &operator>>( QDataStream &, AddressBook & );
}
#endif
diff --git a/kabc/kabc.pro b/kabc/kabc.pro
index a8cd695..10b092c 100644
--- a/kabc/kabc.pro
+++ b/kabc/kabc.pro
@@ -1,22 +1,22 @@
TEMPLATE = lib
CONFIG += qt warn_on
#release debug
DESTDIR=../bin
TARGET = microkabc
include( ../variables.pri )
-INCLUDEPATH += . ./vcard/include ./vcard/include/generated ../microkde ../microkde/kdecore ../microkde/kio/kfile ../microkde/kio/kio ../qtcompat ../microkde/kdeui
+INCLUDEPATH += . ./vcard/include ./vcard/include/generated ../microkde ../microkde/kdecore ../microkde/kio/kfile ../microkde/kio/kio ../libkdepim ../qtcompat ../microkde/kdeui
#LIBS += -lmicrokde -lldap
LIBS += -L$(QPEDIR)/lib
DEFINES += KAB_EMBEDDED DESKTOP_VERSION
unix : {
OBJECTS_DIR = obj/unix
MOC_DIR = moc/unix
}
win32: {
DEFINES += _WIN32_
OBJECTS_DIR = obj/win
@@ -39,24 +39,25 @@ formatfactory.h \
formatplugin.h \
phonenumber.h \
distributionlist.h \
distributionlistdialog.h \
distributionlisteditor.h \
vcardformatplugin.h \
formats/vcardformatplugin2.h \
picture.h \
secrecy.h \
sound.h \
addressbook.h \
timezone.h \
+ tmpaddressbook.h \
addressee.h \
addresseedialog.h \
vcardconverter.h \
vcard21parser.h \
vcardformatimpl.h \
plugins/file/resourcefile.h \
plugins/file/resourcefileconfig.h \
plugins/dir/resourcedir.h \
plugins/dir/resourcedirconfig.h \
vcardparser/vcardline.h \
vcardparser/vcard.h \
vcardparser/vcardtool.h \
@@ -148,24 +149,25 @@ formatfactory.cpp \
plugin.cpp \
agent.cpp \
geo.cpp \
key.cpp \
field.cpp \
address.cpp \
phonenumber.cpp \
picture.cpp \
secrecy.cpp \
sound.cpp \
addressbook.cpp \
timezone.cpp \
+ tmpaddressbook.cpp \
addressee.cpp \
addresseelist.cpp \
addresseedialog.cpp \
vcardconverter.cpp \
vcard21parser.cpp \
vcardformatimpl.cpp \
plugins/file/resourcefile.cpp \
plugins/file/resourcefileconfig.cpp \
plugins/dir/resourcedir.cpp \
plugins/dir/resourcedirconfig.cpp \
vcardparser/vcardline.cpp \
vcardparser/vcard.cpp \
diff --git a/kabc/kabcE.pro b/kabc/kabcE.pro
index bc1c0ed..598d4fc 100644
--- a/kabc/kabcE.pro
+++ b/kabc/kabcE.pro
@@ -1,22 +1,23 @@
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 ../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 \
@@ -27,25 +28,27 @@ HEADERS = \
field.h \
formatfactory.h \
formatplugin.h \
geo.h \
key.h \
phonenumber.h \
picture.h \
plugin.h \
resource.h \
secrecy.h \
sound.h \
stdaddressbook.h \
+ syncprefwidget.h \
timezone.h \
+ tmpaddressbook.h \
vcardconverter.h \
vcard21parser.h \
vcardformatimpl.h \
vcardformatplugin.h \
vcardparser/vcardline.h \
vcardparser/vcard.h \
vcardparser/vcardtool.h \
vcardparser/vcardparser.h \
vcard/include/VCardAdrParam.h \
vcard/include/VCardAdrValue.h \
vcard/include/VCardAgentParam.h \
vcard/include/VCardContentLine.h \
@@ -129,25 +132,27 @@ SOURCES = \
distributionlisteditor.cpp \
field.cpp \
formatfactory.cpp \
geo.cpp \
key.cpp \
phonenumber.cpp \
picture.cpp \
plugin.cpp \
resource.cpp \
secrecy.cpp \
sound.cpp \
stdaddressbook.cpp \
+ syncprefwidget.cpp \
timezone.cpp \
+ tmpaddressbook.cpp \
vcardconverter.cpp \
vcard21parser.cpp \
vcardformatimpl.cpp \
vcardformatplugin.cpp \
vcardparser/vcardline.cpp \
vcardparser/vcard.cpp \
vcardparser/vcardtool.cpp \
vcardparser/vcardparser.cpp \
vcard/AdrParam.cpp \
vcard/AdrValue.cpp \
vcard/AgentParam.cpp \
vcard/ContentLine.cpp \
diff --git a/kabc/resource.cpp b/kabc/resource.cpp
index 9a1a5f8..9632a3f 100644
--- a/kabc/resource.cpp
+++ b/kabc/resource.cpp
@@ -18,42 +18,56 @@
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 )
- : KRES::Resource( config ), mAddressBook( 0 )
+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()
{
@@ -84,12 +98,57 @@ 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 c363125..db806a6 100644
--- a/kabc/resource.h
+++ b/kabc/resource.h
@@ -21,56 +21,65 @@
/*
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:
+ 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 );
+ Resource( const KConfig *config, bool syncable );
/**
* Destructor.
*/
virtual ~Resource();
/**
* Sets the address book of the resource.
*/
void setAddressBook( AddressBook* );
/**
@@ -79,56 +88,93 @@ public:
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();
- /**
- * Close the resource and returns if it was successfully
- */
- virtual void doClose();
-
+
/**
* 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