summaryrefslogtreecommitdiffabout
path: root/korganizer/calendarview.cpp
Side-by-side diff
Diffstat (limited to 'korganizer/calendarview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp76
1 files changed, 51 insertions, 25 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index cfc6b10..9160e1d 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -841,88 +841,114 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b
break;
default:
// SYNC_PREF_TAKE_BOTH not implemented
break;
}
return 0;
}
Event* CalendarView::getLastSyncEvent()
{
Event* lse;
//qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
- lse = mCalendar->event( "last-syncEvent-device-"+mCurrentSyncDevice );
+ lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
if (!lse) {
lse = new Event();
- lse->setUid( "last-syncEvent-device-"+mCurrentSyncDevice );
- lse->setSummary(mCurrentSyncDevice + i18n(" - sync event"));
+ lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
+ QString sum = "";
+ if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
+ sum = "E: ";
+ lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
lse->setDtStart( mLastCalendarSync );
lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
lse->setCategories( i18n("SyncEvent") );
lse->setReadOnly( true );
mCalendar->addEvent( lse );
}
return lse;
}
-void CalendarView::checkSharpEvent( Event* lastSync, Incidence* toDelete )
+void CalendarView::setupExternSyncProfiles()
{
- if ( ! lastSync )
- return;
- if ( toDelete->zaurusId() < 0 )
+ Event* lse;
+ mExternLastSyncEvent.clear();
+ int i;
+ for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) {
+ lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] );
+ if ( lse )
+ mExternLastSyncEvent.append( lse );
+ else
+ qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1());
+ }
+
+}
+// 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;
- QString des = lastSync->description();
- QString pref = "e";
- if ( toDelete->type() == "Todo" )
- pref = "t";
- des += pref+ QString::number ( toDelete->zaurusId() ) + ",";
- lastSync->setReadOnly( false );
- lastSync->setDescription( des );
- lastSync->setReadOnly( true );
+
+ Event* eve = lastSync.first();
+
+ while ( eve ) {
+ int id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
+ if ( id >= 0 ) {
+ QString des = eve->description();
+ QString pref = "e";
+ if ( toDelete->type() == "Todo" )
+ pref = "t";
+ des += pref+ QString::number ( id ) + ",";
+ eve->setReadOnly( false );
+ eve->setDescription( des );
+ eve->setReadOnly( true );
+ }
+ eve = lastSync.next();
+ }
}
bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
{
bool syncOK = true;
int addedEvent = 0;
int addedEventR = 0;
int deletedEventR = 0;
int deletedEventL = 0;
int changedLocal = 0;
int changedRemote = 0;
//QPtrList<Event> el = local->rawEvents();
Event* eventR;
QString uid;
int take;
Event* eventL;
Event* eventRSync;
Event* eventLSync;
- Event* eventRSyncSharp = remote->event( "last-syncEvent-device-Sharp-DTM");
- Event* eventLSyncSharp = local->event( "last-syncEvent-device-Sharp-DTM");
+ QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
+ QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
bool fullDateRange = false;
mLastCalendarSync = QDateTime::currentDateTime();
QDateTime modifiedCalendar = mLastCalendarSync;;
- eventR = remote->event("last-syncEvent-device-"+mCurrentSyncName );
+ eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
if ( eventR ) {
eventRSync = (Event*) eventR->clone();
remote->deleteEvent(eventR );
} else {
fullDateRange = true;
eventRSync = new Event();
eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
- eventRSync->setUid("last-syncEvent-device-"+mCurrentSyncName );
+ eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
eventRSync->setDtStart( mLastCalendarSync );
eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
eventRSync->setCategories( i18n("SyncEvent") );
}
eventLSync = getLastSyncEvent();
if ( eventLSync->dtStart() == mLastCalendarSync )
fullDateRange = true;
if ( ! fullDateRange ) {
if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
// qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
@@ -956,25 +982,25 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int
bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
bar.show();
int modulo = (er.count()/10)+1;
int incCounter = 0;
while ( inR ) {
if ( ! bar.isVisible() )
return false;
if ( incCounter % modulo == 0 )
bar.setProgress( incCounter );
++incCounter;
uid = inR->uid();
bool skipIncidence = false;
- if ( uid.left(21) == QString("last-syncEvent-device") )
+ if ( uid.left(15) == QString("last-syncEvent-") )
skipIncidence = true;
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 )
@@ -1006,25 +1032,25 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int
++deletedEventR;
} else {
inR->setLastModified( modifiedCalendar );
local->addIncidence( inR->clone() );
++addedEvent;
}
} else {
if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
inR->setLastModified( modifiedCalendar );
local->addIncidence( inR->clone() );
++addedEvent;
} else {
- checkSharpEvent(eventRSyncSharp, inR);
+ checkExternSyncEvent(eventRSyncSharp, inR);
remote->deleteIncidence( inR );
++deletedEventR;
}
}
}
}
inR = er.next();
}
QPtrList<Incidence> el = local->rawIncidences();
inL = el.first();
modulo = (el.count()/10)+1;
bar.setCaption (i18n("Add / remove events") );
@@ -1033,46 +1059,46 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int
incCounter = 0;
while ( inL ) {
qApp->processEvents();
if ( ! bar.isVisible() )
return false;
if ( incCounter % modulo == 0 )
bar.setProgress( incCounter );
++incCounter;
uid = inL->uid();
bool skipIncidence = false;
- if ( uid.left(21) == QString("last-syncEvent-device") )
+ 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->zaurusId() >= 0 && mode != 4 ) {
local->deleteIncidence( inL );
++deletedEventL;
} else {
if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
inL->setZaurusId( -1 );
++addedEventR;
inL->setLastModified( modifiedCalendar );
remote->addIncidence( inL->clone() );
}
}
} else {
if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
- checkSharpEvent(eventLSyncSharp, inL);
+ checkExternSyncEvent(eventLSyncSharp, inL);
local->deleteIncidence( inL );
++deletedEventL;
} else {
if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
++addedEventR;
inL->setLastModified( modifiedCalendar );
remote->addIncidence( inL->clone() );
}
}
}
}
}
@@ -1333,25 +1359,25 @@ bool CalendarView::importQtopia( const QString &categories,
#endif
}
void CalendarView::setSyncEventsReadOnly()
{
Event * ev;
QPtrList<Event> eL = mCalendar->rawEvents();
ev = eL.first();
while ( ev ) {
- if ( ev->uid().left(21) == QString("last-syncEvent-device") )
+ if ( ev->uid().left(15) == QString("last-syncEvent-") )
ev->setReadOnly( true );
ev = eL.next();
}
}
bool CalendarView::openCalendar(QString filename, bool merge)
{
if (filename.isEmpty()) {
return false;
}
if (!QFile::exists(filename)) {
@@ -1797,25 +1823,25 @@ void CalendarView::eventToBeDeleted(Event *)
void CalendarView::eventDeleted()
{
changeEventDisplay(0,KOGlobals::EVENTDELETED);
}
void CalendarView::changeTodoDisplay(Todo *which, int action)
{
changeIncidenceDisplay((Incidence *)which, action);
}
void CalendarView::checkZaurusId( int id, bool todo )
{
if ( id >= 0 ) {
- Incidence* lse = mCalendar->event( "last-syncEvent-device-Sharp-DTM");
+ Incidence* lse = mCalendar->event( "last-syncEvent-Sharp-DTM");
if ( lse ) {
QString des = lse->description();
QString pref = "e";
if ( todo )
pref = "t";
des += pref+ QString::number ( id ) + ",";
lse->setReadOnly( false );
lse->setDescription( des );
lse->setReadOnly( true );
}
}
}