-rw-r--r-- | korganizer/calendarview.cpp | 20 | ||||
-rw-r--r-- | libkcal/incidencebase.cpp | 96 | ||||
-rw-r--r-- | libkcal/incidencebase.h | 13 | ||||
-rw-r--r-- | libkcal/sharpformat.cpp | 20 |
4 files changed, 45 insertions, 104 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index fab4540..5150455 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -718,25 +718,25 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b // int zaurusId() const; // void setZaurusUid(int id); // int zaurusUid() const; // void setZaurusStat(int id); // 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() ); lastSync = local->lastModified().addDays( -1 ); if ( !remCh ) remote->setLastModified( lastSync.addDays( -1 ) ); } else { @@ -764,25 +764,25 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b if ( full ) { bool equ = false; if ( local->type() == "Event" ) { equ = (*((Event*) local) == *((Event*) remote)); } 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; bool localIsNew; if ( full && mode < SYNC_PREF_NEWEST ) mode = SYNC_PREF_ASK; @@ -886,31 +886,31 @@ void CalendarView::setupExternSyncProfiles() // we check, if the to delete event has a id for a profile // if yes, we set this id in the profile to delete void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) { 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(); } } void CalendarView::checkExternalId( Incidence * inc ) { QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; checkExternSyncEvent( lastSync, inc ); @@ -1004,45 +1004,45 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int qApp->processEvents(); if ( !skipIncidence ) { inL = local->incidence( uid ); if ( inL ) { // maybe conflict - same uid in both calendars 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 ); local->deleteIncidence( inL ); local->addIncidence( inR->clone() ); ++changedLocal; } } } 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; } } else { if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { inR->setLastModified( modifiedCalendar ); local->addIncidence( inR->clone() ); @@ -1074,30 +1074,30 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int bar.setProgress( incCounter ); ++incCounter; uid = inL->uid(); bool skipIncidence = false; 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); local->deleteIncidence( inL ); ++deletedEventL; } else { if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { @@ -1199,25 +1199,25 @@ void CalendarView::syncSharp() } */ // pending: clean last sync event description sharpFormat.save(calendar); 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( "" ); lse->setReadOnly( true ); } } } diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index 5d8785b..15c4fa8 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp @@ -12,65 +12,64 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. 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. */ #include <kglobal.h> #include <klocale.h> #include <kdebug.h> +#include <kidmanager.h> #include "calformat.h" #include "incidencebase.h" using namespace KCal; IncidenceBase::IncidenceBase() : mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), mPilotId(0), mSyncStatus(SYNCMOD) { setUid(CalFormat::createUniqueId()); mOrganizer = ""; mFloats = false; mDuration = 0; mHasDuration = false; - mPilotId = 0; - mZaurusUid = 0; + mPilotId = 0; mExternalId = ":"; mTempSyncStat = 0; mSyncStatus = 0; mAttendees.setAutoDelete( true ); } IncidenceBase::IncidenceBase(const IncidenceBase &i) : CustomProperties( i ) { mReadOnly = i.mReadOnly; mDtStart = i.mDtStart; mDuration = i.mDuration; mHasDuration = i.mHasDuration; mOrganizer = i.mOrganizer; 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 ); } IncidenceBase::~IncidenceBase() { @@ -332,112 +331,57 @@ int IncidenceBase::syncStatus() const void IncidenceBase::setPilotId( int id ) { if (mReadOnly) return; 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() ); -} -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) - ret = -1; - } - } - qDebug("getID*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() ); - return ret; + mExternalId = KIdManager::removeId ( mExternalId, prof); + +} +void IncidenceBase::setID( const QString & prof , const QString & id ) +{ + mExternalId = KIdManager::setId ( mExternalId, prof, id ); +} +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; } QString IncidenceBase::IDStr() const { return mExternalId ; } diff --git a/libkcal/incidencebase.h b/libkcal/incidencebase.h index e2950d3..e02d03a 100644 --- a/libkcal/incidencebase.h +++ b/libkcal/incidencebase.h @@ -117,58 +117,55 @@ class IncidenceBase : public CustomProperties /** pilot syncronization states */ enum { SYNCNONE = 0, SYNCMOD = 1, SYNCDEL = 3 }; /** Set synchronisation satus. */ void setSyncStatus(int stat); /** 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 ); private: // base components QDateTime mDtStart; QString mOrganizer; QString mUid; 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; }; bool operator==( const IncidenceBase&, const IncidenceBase& ); } diff --git a/libkcal/sharpformat.cpp b/libkcal/sharpformat.cpp index 605a54d..e8934bf 100644 --- a/libkcal/sharpformat.cpp +++ b/libkcal/sharpformat.cpp @@ -81,26 +81,26 @@ class SharpParser : public QObject } if ( skip ) return false; ulong cSum = SharpFormat::getCsum(attList ); 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 ))); event->setFloats( true ); } else { event->setFloats( false ); event->setDtStart( fromString( attList[5] ) ); @@ -192,26 +192,26 @@ class SharpParser : public QObject todo = existingCalendar->todo( "Sharp_DTM", attList[0].toInt() ); if (todo ) todo = (Todo*)todo->clone(); else 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 ); QString categoryList = attList[1]; todo->setCategories( lookupCategories( categoryList ) ); @@ -457,26 +457,26 @@ int SharpFormat::getNumFromRecord( QString answer, Incidence* inc ) if ( tempString.right(1) =="\n" ) tempString = tempString.left( tempString.length()-1); templist.append( tempString ); } ++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) { QLabel status ( i18n("Processing/adding events ..."), 0 ); int w = status.sizeHint().width()+20 ; @@ -511,25 +511,25 @@ bool SharpFormat::save( Calendar *calendar) status.setText ( message + QString::number ( ++procCount ) ); qApp->processEvents(); QString eString = getEventString( ev ); if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete // 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 ); ts.setCodec( QTextCodec::codecForName("utf8") ); answer = ts.read(); file.close(); //qDebug("answer \n%s ", answer.latin1()); @@ -597,25 +597,25 @@ bool SharpFormat::save( Calendar *calendar) status.setText ( message + QString::number ( ++procCount ) ); qApp->processEvents(); QString eString = getTodoString( to ); if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete // 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 ); ts.setCodec( QTextCodec::codecForName("utf8") ); answer = ts.read(); file.close(); //qDebug("answer \n%s ", answer.latin1()); @@ -687,25 +687,25 @@ QString SharpFormat::dtToString( const QDateTime& dti, bool useTZ ) date.year(), date.month(), date.day()); } if(dt.time().isValid()){ const QTime& time = dt.time(); 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 list.append("" ); if ( !event->description().isEmpty() ) list.append( event->description() ); else @@ -851,25 +851,25 @@ QString SharpFormat::getEventString( Event* event ) s.append('\"'); } else if(s.isEmpty() && !s.isNull()){ s = "\"\""; } } 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() ) { QTime tim; if ( todo->doesFloat()) { list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ; } else { |