summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-09-18 13:13:58 (UTC)
committer zautrix <zautrix>2004-09-18 13:13:58 (UTC)
commitbb16660f29fc709791aa0ee4cb63a40710a994a8 (patch) (side-by-side diff)
tree5d7387987848039bb3594a624b819d136a38b0cd
parent4ec7c78ebd2c5a79ff224e9b07d9a3164f7fe602 (diff)
downloadkdepimpi-bb16660f29fc709791aa0ee4cb63a40710a994a8.zip
kdepimpi-bb16660f29fc709791aa0ee4cb63a40710a994a8.tar.gz
kdepimpi-bb16660f29fc709791aa0ee4cb63a40710a994a8.tar.bz2
more AB syncing
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp27
-rw-r--r--kabc/addressbook.h5
-rw-r--r--kabc/addressee.cpp54
-rw-r--r--kabc/addressee.h12
-rw-r--r--kaddressbook/kabcore.cpp93
-rw-r--r--kaddressbook/kabcore.h2
6 files changed, 156 insertions, 37 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 70eda1b..9332e21 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -39,12 +39,13 @@ $Id$
*/
#include <qptrlist.h>
#include <kglobal.h>
#include <klocale.h>
#include <kdebug.h>
+#include <libkcal/syncdefines.h>
#include "addressbook.h"
#include "resource.h"
//US #include "addressbook.moc"
using namespace KABC;
@@ -509,12 +510,38 @@ Addressee AddressBook::findByUid( const QString &uid )
if ( uid == (*it).uid() ) {
return *it;
}
}
return Addressee();
}
+Addressee::List AddressBook::getExternLastSyncAddressees()
+{
+ Addressee::List results;
+
+ Iterator it;
+ for ( it = begin(); it != end(); ++it ) {
+ if ( (*it).uid().left( 20 ) == "last-syncAddressee-" ) {
+ if ( (*it).familyName().left(3) == "E: " )
+ results.append( *it );
+ }
+ }
+
+ return results;
+}
+void AddressBook::resetTempSyncStat()
+{
+
+
+ Iterator it;
+ for ( it = begin(); it != end(); ++it ) {
+ (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL );
+ }
+
+}
+
+
Addressee::List AddressBook::allAddressees()
{
return d->mAddressees;
}
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index e43de31..05225f9 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -285,12 +285,17 @@ class AddressBook : public QObject
/**
Query all resources to clean up their lock files
*/
void cleanUp();
+ // sync stuff
+ Addressee::List getExternLastSyncAddressees();
+ void resetTempSyncStat();
+
+
signals:
/**
Emitted, when the address book has changed on disk.
*/
void addressBookChanged( AddressBook * );
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 4cdd5e5..fb32f6e 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -29,14 +29,16 @@ $Id$
#include <kconfig.h>
#include <ksharedptr.h>
#include <kdebug.h>
#include <kapplication.h>
#include <klocale.h>
+#include <kidmanager.h>
//US
#include <kstandarddirs.h>
+#include <libkcal/syncdefines.h>
//US #include "resource.h"
#include "addressee.h"
using namespace KABC;
@@ -67,13 +69,13 @@ struct Addressee::AddresseeData : public KShared
KURL url;
Secrecy secrecy;
Picture logo;
Picture photo;
Sound sound;
Agent agent;
-
+ QString mExternalId;
PhoneNumber::List phoneNumbers;
Address::List addresses;
Key::List keys;
QStringList emails;
QStringList categories;
QStringList custom;
@@ -87,21 +89,24 @@ struct Addressee::AddresseeData : public KShared
Addressee::Addressee()
{
mData = new AddresseeData;
mData->empty = true;
mData->changed = false;
mData->resource = 0;
+ mData->mExternalId = ":";
+ mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
}
Addressee::~Addressee()
{
}
Addressee::Addressee( const Addressee &a )
{
mData = a.mData;
+ mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
}
Addressee &Addressee::operator=( const Addressee &a )
{
mData = a.mData;
return (*this);
@@ -165,12 +170,59 @@ bool Addressee::operator!=( const Addressee &a ) const
}
bool Addressee::isEmpty() const
{
return mData->empty;
}
+void Addressee::removeID(const QString &prof)
+{
+ detach();
+ mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof);
+
+}
+void Addressee::setID( const QString & prof , const QString & id )
+{
+ detach();
+ mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id );
+}
+void Addressee::setTempSyncStat( int id )
+{
+ mTempSyncStat = id;
+}
+int Addressee::tempSyncStat() const
+{
+ return mTempSyncStat;
+}
+
+QString Addressee::getID( const QString & prof)
+{
+ return KIdManager::getId ( mData->mExternalId, prof );
+}
+
+void Addressee::setCsum( const QString & prof , const QString & id )
+{
+ detach();
+ mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id );
+}
+
+QString Addressee::getCsum( const QString & prof)
+{
+ return KIdManager::getCsum ( mData->mExternalId, prof );
+}
+
+void Addressee::setIDStr( const QString & s )
+{
+ detach();
+ mData->mExternalId = s;
+}
+
+QString Addressee::IDStr() const
+{
+ return mData->mExternalId;
+}
+
void Addressee::setUid( const QString &id )
{
if ( id == mData->uid ) return;
detach();
mData->empty = false;
diff --git a/kabc/addressee.h b/kabc/addressee.h
index 27782f9..f098371 100644
--- a/kabc/addressee.h
+++ b/kabc/addressee.h
@@ -93,13 +93,22 @@ class Addressee
Addressee( const Addressee & );
Addressee &operator=( const Addressee & );
bool operator==( const Addressee & ) const;
bool operator!=( const Addressee & ) const;
-
+ // sync stuff
+ void setTempSyncStat(int id);
+ int tempSyncStat() const;
+ void setIDStr( const QString & );
+ QString IDStr() const;
+ void setID( const QString &, const QString & );
+ QString getID( const QString & );
+ void setCsum( const QString &, const QString & );
+ QString getCsum( const QString & );
+ void removeID(const QString &);
/**
Return, if the address book entry is empty.
*/
bool isEmpty() const;
/**
@@ -812,12 +821,13 @@ class Addressee
*/
bool changed() const;
private:
Addressee copy();
void detach();
+ int mTempSyncStat;
struct AddresseeData;
mutable KSharedPtr<AddresseeData> mData;
};
QDataStream &operator<<( QDataStream &, const Addressee & );
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 1196360..53c63ff 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2510,76 +2510,99 @@ QString KABCore::getPassword( )
retfile = lab.text();
dia.hide();
qApp->processEvents();
return retfile;
}
+#include <libkcal/syncdefines.h>
+
+KABC::Addressee KABCore::getLastSyncAddressee()
+{
+ Addressee lse;
+ //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
+ lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
+ if (lse.isEmpty()) {
+ lse.setUid( "last-syncEvent-"+mCurrentSyncDevice );
+ QString sum = "";
+ if ( KABPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
+ sum = "E: ";
+ lse.setFamilyName(sum+mCurrentSyncDevice + i18n(" - sync event"));
+ lse.setRevision( mLastAddressbookSync );
+ lse.setCategories( i18n("SyncEvent") );
+ mAddressBook->insertAddressee( lse );
+ }
+ return lse;
+}
+
bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
{
-#if 0
bool syncOK = true;
int addedAddressee = 0;
int addedAddresseeR = 0;
int deletedAddresseeR = 0;
int deletedAddresseeL = 0;
int changedLocal = 0;
int changedRemote = 0;
//QPtrList<Addressee> el = local->rawAddressees();
- Addressee* addresseeR;
+ Addressee addresseeR;
QString uid;
int take;
- Addressee* addresseeL;
- Addressee* addresseeRSync;
- Addressee* addresseeLSync;
- QPtrList<Addressee> addresseeRSyncSharp = remote->getExternLastSyncAddressees();
- QPtrList<Addressee> addresseeLSyncSharp = local->getExternLastSyncAddressees();
+ Addressee addresseeL;
+ Addressee addresseeRSync;
+ Addressee addresseeLSync;
+ KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
+ KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
bool fullDateRange = false;
local->resetTempSyncStat();
- mLastCalendarSync = QDateTime::currentDateTime();
- QDateTime modifiedCalendar = mLastCalendarSync;;
+ mLastAddressbookSync = QDateTime::currentDateTime();
+ QDateTime modifiedCalendar = mLastAddressbookSync;;
addresseeLSync = getLastSyncAddressee();
- addresseeR = remote->addressee("last-syncAddressee-"+mCurrentSyncName );
- if ( addresseeR ) {
- addresseeRSync = (Addressee*) addresseeR->clone();
- remote->deleteAddressee(addresseeR );
+ addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
+ if ( !addresseeR.isEmpty() ) {
+ addresseeRSync = addresseeR;
+ remote->removeAddressee(addresseeR );
} else {
if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
- addresseeRSync = (Addressee*)addresseeLSync->clone();
+ addresseeRSync = addresseeLSync ;
} else {
fullDateRange = true;
- addresseeRSync = new Addressee();
- addresseeRSync->setSummary(mCurrentSyncName + i18n(" - sync addressee"));
- addresseeRSync->setUid("last-syncAddressee-"+mCurrentSyncName );
- addresseeRSync->setDtStart( mLastCalendarSync );
- addresseeRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
- addresseeRSync->setCategories( i18n("SyncAddressee") );
+ Addressee newAdd;
+ addresseeRSync = newAdd;
+ addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
+ addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
+ addresseeRSync.setRevision( mLastAddressbookSync );
+ addresseeRSync.setCategories( i18n("SyncAddressee") );
}
}
- if ( addresseeLSync->dtStart() == mLastCalendarSync )
+ if ( addresseeLSync.revision() == mLastAddressbookSync )
fullDateRange = true;
-
if ( ! fullDateRange ) {
- if ( addresseeLSync->dtStart() != addresseeRSync->dtStart() ) {
+ if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
// qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
//qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
fullDateRange = true;
}
}
if ( fullDateRange )
- mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
+ mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
else
- mLastCalendarSync = addresseeLSync->dtStart();
+ mLastAddressbookSync = addresseeLSync.revision();
// for resyncing if own file has changed
+ // PENDING fixme later when implemented
+#if 0
if ( mCurrentSyncDevice == "deleteaftersync" ) {
- mLastCalendarSync = loadedFileVersion;
- qDebug("setting mLastCalendarSync ");
+ mLastAddressbookSync = loadedFileVersion;
+ qDebug("setting mLastAddressbookSync ");
}
+#endif
+
+ #if 0
//qDebug("*************************** ");
- qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() );
+ qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
QPtrList<Incidence> er = remote->rawIncidences();
Incidence* inR = er.first();
Incidence* inL;
QProgressBar bar( er.count(),0 );
bar.setCaption (i18n("Syncing - close to abort!") );
@@ -2654,13 +2677,13 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
inR->setLastModified( modifiedCalendar );
inL = inR->clone();
local->addIncidence( inL );
++addedAddressee;
}
} else {
- if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
+ if ( inR->lastModified() > mLastAddressbookSync || mode == 5 ) {
inR->setLastModified( modifiedCalendar );
local->addIncidence( inR->clone() );
++addedAddressee;
} else {
checkExternSyncAddressee(addresseeRSyncSharp, inR);
remote->deleteIncidence( inR );
@@ -2710,13 +2733,13 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
inR = inL->clone();
inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
remote->addIncidence( inR );
}
}
} else {
- if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
+ if ( inL->lastModified() < mLastAddressbookSync && mode != 4 ) {
checkExternSyncAddressee(addresseeLSyncSharp, inL);
local->deleteIncidence( inL );
++deletedAddresseeL;
} else {
if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
++addedAddresseeR;
@@ -2757,18 +2780,18 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
++delFut;
}
inR = er.next();
}
}
bar.hide();
- mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
+ mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
addresseeLSync->setReadOnly( false );
- addresseeLSync->setDtStart( mLastCalendarSync );
- addresseeRSync->setDtStart( mLastCalendarSync );
- addresseeLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
- addresseeRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
+ addresseeLSync->setDtStart( mLastAddressbookSync );
+ addresseeRSync->setDtStart( mLastAddressbookSync );
+ addresseeLSync->setDtEnd( mLastAddressbookSync.addSecs( 3600 ) );
+ addresseeRSync->setDtEnd( mLastAddressbookSync.addSecs( 3600 ) );
addresseeRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
addresseeLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
addresseeLSync->setReadOnly( true );
if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
remote->addAddressee( addresseeRSync );
QString mes;
diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h
index 4487a8a..c67cee6 100644
--- a/kaddressbook/kabcore.h
+++ b/kaddressbook/kabcore.h
@@ -469,12 +469,14 @@ class KABCore : public QWidget
void edit_sync_options();
bool syncAB(QString filename, int mode);
int ringSync();
QString getPassword( );
int mGlobalSyncMode;
bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode);
+ KABC::Addressee getLastSyncAddressee();
+ QDateTime mLastAddressbookSync;
public slots:
void confSync();
// *********************
};