-rw-r--r-- | libkcal/icalformatimpl.cpp | 16 | ||||
-rw-r--r-- | libkcal/incidencebase.cpp | 81 | ||||
-rw-r--r-- | libkcal/incidencebase.h | 8 |
3 files changed, 92 insertions, 13 deletions
diff --git a/libkcal/icalformatimpl.cpp b/libkcal/icalformatimpl.cpp index df05ab3..c23978d 100644 --- a/libkcal/icalformatimpl.cpp +++ b/libkcal/icalformatimpl.cpp @@ -267,13 +267,10 @@ void ICalFormatImpl::writeIncidence(icalcomponent *parent,Incidence *incidence) incidence->setNonKDECustomProperty("X-PILOTID", QString::number(incidence->pilotId())); incidence->setNonKDECustomProperty("X-PILOTSTAT", QString::number(incidence->syncStatus())); } - if (incidence->zaurusId() >= 0) { - incidence->setNonKDECustomProperty("X-ZAURUSID", QString::number(incidence->zaurusId())); + if ( !incidence->IDStr().isEmpty()) { + incidence->setNonKDECustomProperty("X-KOPIEXTID",incidence->IDStr() ); } - if (incidence->zaurusUid() > 0) { - incidence->setNonKDECustomProperty("X-ZAURUSUID", QString::number(incidence->zaurusUid())); - } writeIncidenceBase(parent,incidence); if (incidence->cancelled()) { @@ -1280,14 +1277,11 @@ void ICalFormatImpl::readIncidence(icalcomponent *parent,Incidence *incidence) if (!kp.isNull()) { incidence->setSyncStatus(kp.toInt()); } - kp = incidence->nonKDECustomProperty("X-ZAURUSID"); - if (!kp.isNull()) { - incidence->setZaurusId(kp.toInt()); - } - kp = incidence->nonKDECustomProperty("X-ZAURUSUID"); + + kp = incidence->nonKDECustomProperty("X-KOPIEXTID"); if (!kp.isNull()) { - incidence->setZaurusUid(kp.toInt()); + incidence->setIDStr(kp); } // Cancel backwards compatibility mode for subsequent changes by the application diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index 707d666..d7c4595 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp @@ -40,6 +40,7 @@ IncidenceBase::IncidenceBase() : mPilotId = 0; mZaurusId = -1; mZaurusUid = 0; + mExternalId = ":"; mTempSyncStat = 0; mSyncStatus = 0; mAttendees.setAutoDelete( true ); @@ -65,7 +66,7 @@ IncidenceBase::IncidenceBase(const IncidenceBase &i) : mZaurusUid = i.mZaurusUid; mTempSyncStat = i.mTempSyncStat; mSyncStatus = i.mSyncStatus; - + mExternalId = i.mExternalId; // The copied object is a new one, so it isn't observed by the observer // of the original object. mObservers.clear(); @@ -80,7 +81,7 @@ IncidenceBase::~IncidenceBase() bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) { - + // do not compare mSyncStatus and mExternalId if( i1.attendees().count() != i2.attendees().count() ) { return false; // no need to check further } @@ -372,6 +373,82 @@ void IncidenceBase::setTempSyncStat( int id ) mTempSyncStat = id; } +void IncidenceBase::setID( const QString & prof , int id ) +{ + int num = mExternalId.find( ":"+prof+";" ); + if ( num >= 0 ) { + int len = prof.length()+2; + int end = mExternalId.find( ";", num+len ); + if ( end > 0 ) { + mExternalId = mExternalId.left( num+len ) +QString::number( id)+mExternalId.mid( end ); + } else + qDebug("Error in IncidenceBase::setID "); + } else { + mExternalId += prof+";"+QString::number( id) +";0:"; + } +} +int IncidenceBase::getID( const QString & prof) +{ + int ret = -1; + int num = mExternalId.find(":"+ prof+";" ); + if ( num >= 0 ) { + int len = prof.length()+2; + int end = mExternalId.find( ";", num+len ); + if ( end > 0 ) { + bool ok; + ret = mExternalId.mid ( num + len,end-len-num).toInt( &ok ); + if (!ok) + return -1; + } + } + return ret; +} + +// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0: +// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0 +void IncidenceBase::setCsum( const QString & prof , int id ) +{ + int num = mExternalId.find( ":"+prof+";"); + if ( num >= 0 ) { + int len = prof.length()+2; + num = mExternalId.find( ";", num+len ); + int end = mExternalId.find( ":", num+1 ); + if ( end > 0 ) { + mExternalId = mExternalId.left( num ) +QString::number(id)+mExternalId.mid( end ); + } else + qDebug("Error in IncidenceBase::setCsum "); + } else { + mExternalId += prof+";-1;"+QString::number( id) +":"; + } +} +int IncidenceBase::getCsum( const QString & prof) +{ + int ret = -1; + int num = mExternalId.find( ":"+prof+";" ); + if ( num >= 0 ) { + int len = prof.length()+2; + num = mExternalId.find( ";", num+len ); + int end = mExternalId.find( ":", num+1 ); + if ( end > 0 ) { + bool ok; + ret = mExternalId.mid ( num ,end-num).toInt( &ok ); + if (!ok) + return -1; + } + } + return ret; +} + +void IncidenceBase::setIDStr( const QString & s ) +{ + if (mReadOnly) return; + mExternalId = s; +} + +QString IncidenceBase::IDStr() const +{ + return mExternalId ; +} void IncidenceBase::registerObserver( IncidenceBase::Observer *observer ) { if( !mObservers.contains(observer) ) mObservers.append( observer ); diff --git a/libkcal/incidencebase.h b/libkcal/incidencebase.h index ce6e254..2f85df6 100644 --- a/libkcal/incidencebase.h +++ b/libkcal/incidencebase.h @@ -132,6 +132,13 @@ class IncidenceBase : public CustomProperties int zaurusUid() const; void setTempSyncStat(int id); int tempSyncStat() const; + void setIDStr( const QString & ); + QString IDStr() const; + void setID( const QString &, int ); + int getID( const QString & ); + void setCsum( const QString &, int ); + int getCsum( const QString & ); + void registerObserver( Observer * ); void unRegisterObserver( Observer * ); @@ -153,6 +160,7 @@ class IncidenceBase : public CustomProperties int mDuration; bool mHasDuration; + QString mExternalId; int mZaurusId; int mZaurusUid; int mTempSyncStat; |