-rw-r--r-- | korganizer/calendarview.cpp | 20 | ||||
-rw-r--r-- | libkcal/incidencebase.cpp | 88 | ||||
-rw-r--r-- | libkcal/incidencebase.h | 13 | ||||
-rw-r--r-- | libkcal/sharpformat.cpp | 20 |
4 files changed, 41 insertions, 100 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index fab4540..5150455 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -722,17 +722,17 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b // int zaurusStat() const; // 0 equal // 1 take local // 2 take remote // 3 cancel QDateTime lastSync = mLastCalendarSync; if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { bool remCh, locCh; - remCh = ( remote->zaurusUid() != local->zaurusUid() ); + remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); locCh = ( local->lastModified() > mLastCalendarSync ); //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() ); if ( !remCh && ! locCh ) { //qDebug("both not changed "); lastSync = local->lastModified().addDays(1); } else { if ( locCh ) { //qDebug("loc changed %d %d", local->zaurusStat(), local->revision() ); @@ -768,17 +768,17 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b } else if ( local->type() =="Todo" ) equ = (*((Todo*) local) == (*(Todo*) remote)); else if ( local->type() =="Journal" ) equ = (*((Journal*) local) == *((Journal*) remote)); if ( equ ) { //qDebug("equal "); if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { - local->setZaurusUid( remote->zaurusUid() ); + local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); } if ( mode < SYNC_PREF_FORCE_LOCAL ) return 0; }//else //debug only //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); } int result; @@ -890,23 +890,23 @@ void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* t if ( ! lastSync.count() == 0 ) return; if ( toDelete->type() == "Journal" ) return; Event* eve = lastSync.first(); while ( eve ) { - int id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name - if ( id >= 0 ) { + QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name + if ( !id.isEmpty() ) { QString des = eve->description(); QString pref = "e"; if ( toDelete->type() == "Todo" ) pref = "t"; - des += pref+ QString::number ( id ) + ","; + des += pref+ id + ","; eve->setReadOnly( false ); eve->setDescription( des ); eve->setReadOnly( true ); } eve = lastSync.next(); } } @@ -1008,17 +1008,17 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int int maxrev = inL->revision(); if ( maxrev < inR->revision() ) maxrev = inR->revision(); if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { //qDebug("take %d %s ", take, inL->summary().latin1()); if ( take == 3 ) return false; if ( take == 1 ) {// take local - inL->setZaurusUid( inR->zaurusUid() ); + inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); remote->deleteIncidence( inR ); if ( inL->revision() < maxrev ) inL->setRevision( maxrev ); remote->addIncidence( inL->clone() ); ++changedRemote; } else { if ( inR->revision() < maxrev ) inR->setRevision( maxrev ); @@ -1028,17 +1028,17 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int } } } else { // no conflict if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { QString des = eventLSync->description(); QString pref = "e"; if ( inR->type() == "Todo" ) pref = "t"; - if ( des.find(pref+QString::number( inR->getID(mCurrentSyncDevice) ) +"," ) >= 0 && mode != 5) { // delete it + if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); //remote->deleteIncidence( inR ); ++deletedEventR; } else { inR->setLastModified( modifiedCalendar ); local->addIncidence( inR->clone() ); ++addedEvent; } @@ -1078,22 +1078,22 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int if ( uid.left(15) == QString("last-syncEvent-") ) skipIncidence = true; if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) skipIncidence = true; if ( !skipIncidence ) { inR = remote->incidence( uid ); if ( ! inR ) { if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { - if ( inL->getID(mCurrentSyncDevice) >= 0 && mode != 4 ) { + if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { local->deleteIncidence( inL ); ++deletedEventL; } else { if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { - inL->setID(mCurrentSyncDevice, -1 ); + inL->removeID(mCurrentSyncDevice ); ++addedEventR; inL->setLastModified( modifiedCalendar ); remote->addIncidence( inL->clone() ); } } } else { if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { checkExternSyncEvent(eventLSyncSharp, inL); @@ -1203,17 +1203,17 @@ void CalendarView::syncSharp() iL = calendar->rawIncidences(); inc = iL.first(); Incidence* loc; while ( inc ) { if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { loc = mCalendar->incidence(inc->uid() ); if ( loc ) { loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); - loc->setZaurusUid( inc->zaurusUid() ); + loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); } } inc = iL.next(); } Incidence* lse = getLastSyncEvent(); if ( lse ) { lse->setReadOnly( false ); lse->setDescription( "" ); diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index 5d8785b..15c4fa8 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp @@ -16,16 +16,17 @@ 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. */ #include <kglobal.h> #include <klocale.h> #include <kdebug.h> +#include <kidmanager.h> #include "calformat.h" #include "incidencebase.h" using namespace KCal; IncidenceBase::IncidenceBase() : @@ -33,17 +34,16 @@ IncidenceBase::IncidenceBase() : mPilotId(0), mSyncStatus(SYNCMOD) { setUid(CalFormat::createUniqueId()); mOrganizer = ""; mFloats = false; mDuration = 0; mHasDuration = false; mPilotId = 0; - mZaurusUid = 0; mExternalId = ":"; mTempSyncStat = 0; mSyncStatus = 0; mAttendees.setAutoDelete( true ); } IncidenceBase::IncidenceBase(const IncidenceBase &i) : CustomProperties( i ) @@ -56,17 +56,16 @@ IncidenceBase::IncidenceBase(const IncidenceBase &i) : mUid = i.mUid; QPtrList<Attendee> attendees = i.attendees(); for( Attendee *a = attendees.first(); a; a = attendees.next() ) { mAttendees.append( new Attendee( *a ) ); } mFloats = i.mFloats; mLastModified = i.mLastModified; mPilotId = i.mPilotId; - 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(); mAttendees.setAutoDelete( true ); @@ -336,104 +335,49 @@ void IncidenceBase::setPilotId( int id ) mPilotId = id; } int IncidenceBase::pilotId() const { return mPilotId; } -int IncidenceBase::zaurusUid() const -{ - return mZaurusUid; -} -void IncidenceBase::setZaurusUid( int id ) -{ - if (mReadOnly) return; - mZaurusUid = id; -} - int IncidenceBase::tempSyncStat() const { return mTempSyncStat; } void IncidenceBase::setTempSyncStat( int id ) { if (mReadOnly) return; mTempSyncStat = id; } -void IncidenceBase::setID( const QString & prof , int id ) +void IncidenceBase::removeID(const QString &prof) { - 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:"; - } - qDebug("setID*%s*%d*%s* ", prof.latin1(), id,mExternalId.latin1() ); + mExternalId = KIdManager::removeId ( mExternalId, prof); + } -int IncidenceBase::getID( const QString & prof) +void IncidenceBase::setID( const QString & prof , const QString & id ) { - 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) - ret = -1; - } + mExternalId = KIdManager::setId ( mExternalId, prof, id ); } - qDebug("getID*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() ); - return ret; +QString IncidenceBase::getID( const QString & prof) +{ + return KIdManager::getId ( mExternalId, prof ); } // 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) +":"; - } - qDebug("setCsum*%s*%d*%s* ", prof.latin1(), id,mExternalId.latin1() ); -} -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) - ret = -1; - } - } - qDebug("getCsum*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() ); - return ret; +void IncidenceBase::setCsum( const QString & prof , const QString & id ) +{ + mExternalId = KIdManager::setCsum ( mExternalId, prof, id ); +} +QString IncidenceBase::getCsum( const QString & prof) +{ + return KIdManager::getCsum ( mExternalId, prof ); } void IncidenceBase::setIDStr( const QString & s ) { if (mReadOnly) return; mExternalId = s; } diff --git a/libkcal/incidencebase.h b/libkcal/incidencebase.h index e2950d3..e02d03a 100644 --- a/libkcal/incidencebase.h +++ b/libkcal/incidencebase.h @@ -121,27 +121,25 @@ class IncidenceBase : public CustomProperties /** Return synchronisation status. */ int syncStatus() const; /** Set Pilot Id. */ void setPilotId(int id); /** Return Pilot Id. */ int pilotId() const; - void setZaurusUid(int id); - 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 setID( const QString &, const QString & ); + QString getID( const QString & ); + void setCsum( const QString &, const QString & ); + QString getCsum( const QString & ); + void removeID(const QString &); void registerObserver( Observer * ); void unRegisterObserver( Observer * ); void updated(); protected: bool mReadOnly; QDateTime getEvenTime( QDateTime ); @@ -154,17 +152,16 @@ class IncidenceBase : public CustomProperties QDateTime mLastModified; QPtrList<Attendee> mAttendees; bool mFloats; int mDuration; bool mHasDuration; QString mExternalId; - int mZaurusUid; int mTempSyncStat; // PILOT SYNCHRONIZATION STUFF int mPilotId; // unique id for pilot sync int mSyncStatus; // status (for sync) QPtrList<Observer> mObservers; }; diff --git a/libkcal/sharpformat.cpp b/libkcal/sharpformat.cpp index 605a54d..e8934bf 100644 --- a/libkcal/sharpformat.cpp +++ b/libkcal/sharpformat.cpp @@ -85,18 +85,18 @@ class SharpParser : public QObject if ( qName == "Event" ) { Event *event; event = existingCalendar->event( "Sharp_DTM",attList[0].toInt() ); if ( event ) event = (Event*)event->clone(); else event = new Event; - event->setID("Sharp_DTM", attList[0].toInt() ); - event->setZaurusUid( cSum ); + event->setID("Sharp_DTM", attList[0] ); + event->setCsum( "Sharp_DTM", QString::number( cSum )); event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL ); event->setSummary( attList[2] ); event->setLocation( attList[3] ); event->setDescription( attList[4] ); if ( attList[7] == "1" ) { event->setDtStart( QDateTime(fromString( attList[17]+"000000", false ).date(),QTime(0,0,0 ) )); event->setDtEnd( QDateTime(fromString( attList[18]+"000000", false ).date(),QTime(0,0,0 ))); @@ -196,18 +196,18 @@ class SharpParser : public QObject todo = new Todo; //CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1 // 0 1 2 3 4 5 6 7 8 //1,,,,,1,4,Loch zumachen,"" //3,Privat,20040317T000000,20040318T000000,20040319T000000,0,5,Call bbb,"notes123 bbb gggg ""bb "" " //2,"Familie,Freunde,Holiday",20040318T000000,20040324T000000,20040317T000000,1,2,tod2,notes - todo->setID( "Sharp_DTM", attList[0].toInt() ); - todo->setZaurusUid( cSum ); + todo->setID( "Sharp_DTM", attList[0]); + todo->setCsum( "Sharp_DTM", QString::number( cSum )); todo->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); todo->setSummary( attList[7] ); todo->setDescription( attList[8]); int priority = attList[6].toInt(); if ( priority == 0 ) priority = 3; todo->setPriority( priority ); @@ -461,18 +461,18 @@ int SharpFormat::getNumFromRecord( QString answer, Incidence* inc ) } ++ccc; if ( ccc == 2 && loopCount < 25 ) { start = 0; bool ok; int newnum = templist[0].toInt( &ok ); if ( ok && newnum > 0) { retval = newnum; - inc->setID( "Sharp_DTM",newnum ); - inc->setZaurusUid( getCsum( templist ) ); + inc->setID( "Sharp_DTM",templist[0] ); + inc->setCsum( "Sharp_DTM", QString::number( getCsum( templist ) )); inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); } } } //qDebug("getNumFromRecord returning : %d ", retval); return retval; } bool SharpFormat::save( Calendar *calendar) @@ -515,17 +515,17 @@ bool SharpFormat::save( Calendar *calendar) // deleting empty strings does not work. // we write first and x and then delete the record with the x eString = eString.replace( QRegExp(",\"\""),",\"x\"" ); changeString += eString + "\n"; deleteString += eString + "\n"; deleteEnt = true; changeEnt = true; } - else if ( ev->getID("Sharp_DTM") == -1 ) { // add new + else if ( ev->getID("Sharp_DTM").isEmpty() ) { // add new command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; system ( command.utf8() ); QFile file( fileName ); if (!file.open( IO_ReadOnly ) ) { return false; } QTextStream ts( &file ); @@ -601,17 +601,17 @@ bool SharpFormat::save( Calendar *calendar) // deleting empty strings does not work. // we write first and x and then delete the record with the x eString = eString.replace( QRegExp(",\"\""),",\"x\"" ); changeString += eString + "\n"; deleteString += eString + "\n"; deleteEnt = true; changeEnt = true; } - else if ( to->getID("Sharp_DTM") == -1 ) { // add new + else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new command = "(echo \"" + tPrefix + eString + "\" ) | db2file todo -w -g -c " + codec+ " > "+ fileName; system ( command.utf8() ); QFile file( fileName ); if (!file.open( IO_ReadOnly ) ) { return false; } QTextStream ts( &file ); @@ -691,17 +691,17 @@ QString SharpFormat::dtToString( const QDateTime& dti, bool useTZ ) timestr.sprintf("T%02d%02d%02d", time.hour(), time.minute(), time.second()); } return datestr + timestr; } QString SharpFormat::getEventString( Event* event ) { QStringList list; - list.append( QString::number(event->getID("Sharp_DTM") ) ); + list.append( event->getID("Sharp_DTM") ); list.append( event->categories().join(",") ); if ( !event->summary().isEmpty() ) list.append( event->summary() ); else list.append("" ); if ( !event->location().isEmpty() ) list.append( event->location() ); else @@ -855,17 +855,17 @@ QString SharpFormat::getEventString( Event* event ) } return list.join(","); } QString SharpFormat::getTodoString( Todo* todo ) { QStringList list; - list.append( QString::number( todo->getID("Sharp_DTM") ) ); + list.append( todo->getID("Sharp_DTM") ); list.append( todo->categories().join(",") ); if ( todo->hasStartDate() ) { list.append( dtToString( todo->dtStart()) ); } else list.append( QString() ); if ( todo->hasDueDate() ) { |