-rw-r--r-- | kaddressbook/kabcore.cpp | 93 | ||||
-rw-r--r-- | kaddressbook/kabcore.h | 2 |
2 files changed, 60 insertions, 35 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp index 1196360..53c63ff 100644 --- a/kaddressbook/kabcore.cpp +++ b/kaddressbook/kabcore.cpp | |||
@@ -2468,349 +2468,372 @@ void KABCore::edit_sync_options() | |||
2468 | case 2: | 2468 | case 2: |
2469 | newest.setChecked( true); | 2469 | newest.setChecked( true); |
2470 | break; | 2470 | break; |
2471 | case 3: | 2471 | case 3: |
2472 | ask.setChecked( true); | 2472 | ask.setChecked( true); |
2473 | break; | 2473 | break; |
2474 | case 4: | 2474 | case 4: |
2475 | f_loc.setChecked( true); | 2475 | f_loc.setChecked( true); |
2476 | break; | 2476 | break; |
2477 | case 5: | 2477 | case 5: |
2478 | f_rem.setChecked( true); | 2478 | f_rem.setChecked( true); |
2479 | break; | 2479 | break; |
2480 | case 6: | 2480 | case 6: |
2481 | // both.setChecked( true); | 2481 | // both.setChecked( true); |
2482 | break; | 2482 | break; |
2483 | default: | 2483 | default: |
2484 | break; | 2484 | break; |
2485 | } | 2485 | } |
2486 | if ( dia.exec() ) { | 2486 | if ( dia.exec() ) { |
2487 | KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; | 2487 | KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; |
2488 | } | 2488 | } |
2489 | 2489 | ||
2490 | 2490 | ||
2491 | } | 2491 | } |
2492 | QString KABCore::getPassword( ) | 2492 | QString KABCore::getPassword( ) |
2493 | { | 2493 | { |
2494 | QString retfile = ""; | 2494 | QString retfile = ""; |
2495 | QDialog dia ( this, "input-dialog", true ); | 2495 | QDialog dia ( this, "input-dialog", true ); |
2496 | QLineEdit lab ( &dia ); | 2496 | QLineEdit lab ( &dia ); |
2497 | lab.setEchoMode( QLineEdit::Password ); | 2497 | lab.setEchoMode( QLineEdit::Password ); |
2498 | QVBoxLayout lay( &dia ); | 2498 | QVBoxLayout lay( &dia ); |
2499 | lay.setMargin(7); | 2499 | lay.setMargin(7); |
2500 | lay.setSpacing(7); | 2500 | lay.setSpacing(7); |
2501 | lay.addWidget( &lab); | 2501 | lay.addWidget( &lab); |
2502 | dia.setFixedSize( 230,50 ); | 2502 | dia.setFixedSize( 230,50 ); |
2503 | dia.setCaption( i18n("Enter password") ); | 2503 | dia.setCaption( i18n("Enter password") ); |
2504 | QPushButton pb ( "OK", &dia); | 2504 | QPushButton pb ( "OK", &dia); |
2505 | lay.addWidget( &pb ); | 2505 | lay.addWidget( &pb ); |
2506 | connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); | 2506 | connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); |
2507 | dia.show(); | 2507 | dia.show(); |
2508 | int res = dia.exec(); | 2508 | int res = dia.exec(); |
2509 | if ( res ) | 2509 | if ( res ) |
2510 | retfile = lab.text(); | 2510 | retfile = lab.text(); |
2511 | dia.hide(); | 2511 | dia.hide(); |
2512 | qApp->processEvents(); | 2512 | qApp->processEvents(); |
2513 | return retfile; | 2513 | return retfile; |
2514 | 2514 | ||
2515 | } | 2515 | } |
2516 | #include <libkcal/syncdefines.h> | ||
2517 | |||
2518 | KABC::Addressee KABCore::getLastSyncAddressee() | ||
2519 | { | ||
2520 | Addressee lse; | ||
2521 | //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); | ||
2522 | lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); | ||
2523 | if (lse.isEmpty()) { | ||
2524 | lse.setUid( "last-syncEvent-"+mCurrentSyncDevice ); | ||
2525 | QString sum = ""; | ||
2526 | if ( KABPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) | ||
2527 | sum = "E: "; | ||
2528 | lse.setFamilyName(sum+mCurrentSyncDevice + i18n(" - sync event")); | ||
2529 | lse.setRevision( mLastAddressbookSync ); | ||
2530 | lse.setCategories( i18n("SyncEvent") ); | ||
2531 | mAddressBook->insertAddressee( lse ); | ||
2532 | } | ||
2533 | return lse; | ||
2534 | } | ||
2535 | |||
2516 | bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) | 2536 | bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) |
2517 | { | 2537 | { |
2518 | #if 0 | ||
2519 | bool syncOK = true; | 2538 | bool syncOK = true; |
2520 | int addedAddressee = 0; | 2539 | int addedAddressee = 0; |
2521 | int addedAddresseeR = 0; | 2540 | int addedAddresseeR = 0; |
2522 | int deletedAddresseeR = 0; | 2541 | int deletedAddresseeR = 0; |
2523 | int deletedAddresseeL = 0; | 2542 | int deletedAddresseeL = 0; |
2524 | int changedLocal = 0; | 2543 | int changedLocal = 0; |
2525 | int changedRemote = 0; | 2544 | int changedRemote = 0; |
2526 | //QPtrList<Addressee> el = local->rawAddressees(); | 2545 | //QPtrList<Addressee> el = local->rawAddressees(); |
2527 | Addressee* addresseeR; | 2546 | Addressee addresseeR; |
2528 | QString uid; | 2547 | QString uid; |
2529 | int take; | 2548 | int take; |
2530 | Addressee* addresseeL; | 2549 | Addressee addresseeL; |
2531 | Addressee* addresseeRSync; | 2550 | Addressee addresseeRSync; |
2532 | Addressee* addresseeLSync; | 2551 | Addressee addresseeLSync; |
2533 | QPtrList<Addressee> addresseeRSyncSharp = remote->getExternLastSyncAddressees(); | 2552 | KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); |
2534 | QPtrList<Addressee> addresseeLSyncSharp = local->getExternLastSyncAddressees(); | 2553 | KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); |
2535 | bool fullDateRange = false; | 2554 | bool fullDateRange = false; |
2536 | local->resetTempSyncStat(); | 2555 | local->resetTempSyncStat(); |
2537 | mLastCalendarSync = QDateTime::currentDateTime(); | 2556 | mLastAddressbookSync = QDateTime::currentDateTime(); |
2538 | QDateTime modifiedCalendar = mLastCalendarSync;; | 2557 | QDateTime modifiedCalendar = mLastAddressbookSync;; |
2539 | addresseeLSync = getLastSyncAddressee(); | 2558 | addresseeLSync = getLastSyncAddressee(); |
2540 | addresseeR = remote->addressee("last-syncAddressee-"+mCurrentSyncName ); | 2559 | addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); |
2541 | if ( addresseeR ) { | 2560 | if ( !addresseeR.isEmpty() ) { |
2542 | addresseeRSync = (Addressee*) addresseeR->clone(); | 2561 | addresseeRSync = addresseeR; |
2543 | remote->deleteAddressee(addresseeR ); | 2562 | remote->removeAddressee(addresseeR ); |
2544 | 2563 | ||
2545 | } else { | 2564 | } else { |
2546 | if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { | 2565 | if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { |
2547 | addresseeRSync = (Addressee*)addresseeLSync->clone(); | 2566 | addresseeRSync = addresseeLSync ; |
2548 | } else { | 2567 | } else { |
2549 | fullDateRange = true; | 2568 | fullDateRange = true; |
2550 | addresseeRSync = new Addressee(); | 2569 | Addressee newAdd; |
2551 | addresseeRSync->setSummary(mCurrentSyncName + i18n(" - sync addressee")); | 2570 | addresseeRSync = newAdd; |
2552 | addresseeRSync->setUid("last-syncAddressee-"+mCurrentSyncName ); | 2571 | addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); |
2553 | addresseeRSync->setDtStart( mLastCalendarSync ); | 2572 | addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); |
2554 | addresseeRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); | 2573 | addresseeRSync.setRevision( mLastAddressbookSync ); |
2555 | addresseeRSync->setCategories( i18n("SyncAddressee") ); | 2574 | addresseeRSync.setCategories( i18n("SyncAddressee") ); |
2556 | } | 2575 | } |
2557 | } | 2576 | } |
2558 | if ( addresseeLSync->dtStart() == mLastCalendarSync ) | 2577 | if ( addresseeLSync.revision() == mLastAddressbookSync ) |
2559 | fullDateRange = true; | 2578 | fullDateRange = true; |
2560 | |||
2561 | if ( ! fullDateRange ) { | 2579 | if ( ! fullDateRange ) { |
2562 | if ( addresseeLSync->dtStart() != addresseeRSync->dtStart() ) { | 2580 | if ( addresseeLSync.revision() != addresseeRSync.revision() ) { |
2563 | 2581 | ||
2564 | // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); | 2582 | // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); |
2565 | //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); | 2583 | //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); |
2566 | fullDateRange = true; | 2584 | fullDateRange = true; |
2567 | } | 2585 | } |
2568 | } | 2586 | } |
2569 | if ( fullDateRange ) | 2587 | if ( fullDateRange ) |
2570 | mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); | 2588 | mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); |
2571 | else | 2589 | else |
2572 | mLastCalendarSync = addresseeLSync->dtStart(); | 2590 | mLastAddressbookSync = addresseeLSync.revision(); |
2573 | // for resyncing if own file has changed | 2591 | // for resyncing if own file has changed |
2592 | // PENDING fixme later when implemented | ||
2593 | #if 0 | ||
2574 | if ( mCurrentSyncDevice == "deleteaftersync" ) { | 2594 | if ( mCurrentSyncDevice == "deleteaftersync" ) { |
2575 | mLastCalendarSync = loadedFileVersion; | 2595 | mLastAddressbookSync = loadedFileVersion; |
2576 | qDebug("setting mLastCalendarSync "); | 2596 | qDebug("setting mLastAddressbookSync "); |
2577 | } | 2597 | } |
2598 | #endif | ||
2599 | |||
2600 | #if 0 | ||
2578 | //qDebug("*************************** "); | 2601 | //qDebug("*************************** "); |
2579 | qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() ); | 2602 | qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); |
2580 | QPtrList<Incidence> er = remote->rawIncidences(); | 2603 | QPtrList<Incidence> er = remote->rawIncidences(); |
2581 | Incidence* inR = er.first(); | 2604 | Incidence* inR = er.first(); |
2582 | Incidence* inL; | 2605 | Incidence* inL; |
2583 | QProgressBar bar( er.count(),0 ); | 2606 | QProgressBar bar( er.count(),0 ); |
2584 | bar.setCaption (i18n("Syncing - close to abort!") ); | 2607 | bar.setCaption (i18n("Syncing - close to abort!") ); |
2585 | 2608 | ||
2586 | int w = 300; | 2609 | int w = 300; |
2587 | if ( QApplication::desktop()->width() < 320 ) | 2610 | if ( QApplication::desktop()->width() < 320 ) |
2588 | w = 220; | 2611 | w = 220; |
2589 | int h = bar.sizeHint().height() ; | 2612 | int h = bar.sizeHint().height() ; |
2590 | int dw = QApplication::desktop()->width(); | 2613 | int dw = QApplication::desktop()->width(); |
2591 | int dh = QApplication::desktop()->height(); | 2614 | int dh = QApplication::desktop()->height(); |
2592 | bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); | 2615 | bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); |
2593 | bar.show(); | 2616 | bar.show(); |
2594 | int modulo = (er.count()/10)+1; | 2617 | int modulo = (er.count()/10)+1; |
2595 | int incCounter = 0; | 2618 | int incCounter = 0; |
2596 | while ( inR ) { | 2619 | while ( inR ) { |
2597 | if ( ! bar.isVisible() ) | 2620 | if ( ! bar.isVisible() ) |
2598 | return false; | 2621 | return false; |
2599 | if ( incCounter % modulo == 0 ) | 2622 | if ( incCounter % modulo == 0 ) |
2600 | bar.setProgress( incCounter ); | 2623 | bar.setProgress( incCounter ); |
2601 | ++incCounter; | 2624 | ++incCounter; |
2602 | uid = inR->uid(); | 2625 | uid = inR->uid(); |
2603 | bool skipIncidence = false; | 2626 | bool skipIncidence = false; |
2604 | if ( uid.left(15) == QString("last-syncAddressee-") ) | 2627 | if ( uid.left(15) == QString("last-syncAddressee-") ) |
2605 | skipIncidence = true; | 2628 | skipIncidence = true; |
2606 | QString idS; | 2629 | QString idS; |
2607 | qApp->processAddressees(); | 2630 | qApp->processAddressees(); |
2608 | if ( !skipIncidence ) { | 2631 | if ( !skipIncidence ) { |
2609 | inL = local->incidence( uid ); | 2632 | inL = local->incidence( uid ); |
2610 | if ( inL ) { // maybe conflict - same uid in both calendars | 2633 | if ( inL ) { // maybe conflict - same uid in both calendars |
2611 | int maxrev = inL->revision(); | 2634 | int maxrev = inL->revision(); |
2612 | if ( maxrev < inR->revision() ) | 2635 | if ( maxrev < inR->revision() ) |
2613 | maxrev = inR->revision(); | 2636 | maxrev = inR->revision(); |
2614 | if ( (take = takeAddressee( inL, inR, mode, fullDateRange )) > 0 ) { | 2637 | if ( (take = takeAddressee( inL, inR, mode, fullDateRange )) > 0 ) { |
2615 | //qDebug("take %d %s ", take, inL->summary().latin1()); | 2638 | //qDebug("take %d %s ", take, inL->summary().latin1()); |
2616 | if ( take == 3 ) | 2639 | if ( take == 3 ) |
2617 | return false; | 2640 | return false; |
2618 | if ( take == 1 ) {// take local | 2641 | if ( take == 1 ) {// take local |
2619 | if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) | 2642 | if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) |
2620 | inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); | 2643 | inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); |
2621 | else | 2644 | else |
2622 | idS = inR->IDStr(); | 2645 | idS = inR->IDStr(); |
2623 | remote->deleteIncidence( inR ); | 2646 | remote->deleteIncidence( inR ); |
2624 | if ( inL->revision() < maxrev ) | 2647 | if ( inL->revision() < maxrev ) |
2625 | inL->setRevision( maxrev ); | 2648 | inL->setRevision( maxrev ); |
2626 | inR = inL->clone(); | 2649 | inR = inL->clone(); |
2627 | inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); | 2650 | inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); |
2628 | if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) | 2651 | if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) |
2629 | inR->setIDStr( idS ); | 2652 | inR->setIDStr( idS ); |
2630 | remote->addIncidence( inR ); | 2653 | remote->addIncidence( inR ); |
2631 | ++changedRemote; | 2654 | ++changedRemote; |
2632 | } else { | 2655 | } else { |
2633 | if ( inR->revision() < maxrev ) | 2656 | if ( inR->revision() < maxrev ) |
2634 | inR->setRevision( maxrev ); | 2657 | inR->setRevision( maxrev ); |
2635 | idS = inL->IDStr(); | 2658 | idS = inL->IDStr(); |
2636 | local->deleteIncidence( inL ); | 2659 | local->deleteIncidence( inL ); |
2637 | inL = inR->clone(); | 2660 | inL = inR->clone(); |
2638 | inL->setIDStr( idS ); | 2661 | inL->setIDStr( idS ); |
2639 | local->addIncidence( inL ); | 2662 | local->addIncidence( inL ); |
2640 | ++changedLocal; | 2663 | ++changedLocal; |
2641 | } | 2664 | } |
2642 | } | 2665 | } |
2643 | } else { // no conflict | 2666 | } else { // no conflict |
2644 | if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { | 2667 | if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { |
2645 | QString des = addresseeLSync->description(); | 2668 | QString des = addresseeLSync->description(); |
2646 | QString pref = "e"; | 2669 | QString pref = "e"; |
2647 | if ( inR->type() == "Todo" ) | 2670 | if ( inR->type() == "Todo" ) |
2648 | pref = "t"; | 2671 | pref = "t"; |
2649 | if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it | 2672 | if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it |
2650 | inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); | 2673 | inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); |
2651 | //remote->deleteIncidence( inR ); | 2674 | //remote->deleteIncidence( inR ); |
2652 | ++deletedAddresseeR; | 2675 | ++deletedAddresseeR; |
2653 | } else { | 2676 | } else { |
2654 | inR->setLastModified( modifiedCalendar ); | 2677 | inR->setLastModified( modifiedCalendar ); |
2655 | inL = inR->clone(); | 2678 | inL = inR->clone(); |
2656 | local->addIncidence( inL ); | 2679 | local->addIncidence( inL ); |
2657 | ++addedAddressee; | 2680 | ++addedAddressee; |
2658 | } | 2681 | } |
2659 | } else { | 2682 | } else { |
2660 | if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { | 2683 | if ( inR->lastModified() > mLastAddressbookSync || mode == 5 ) { |
2661 | inR->setLastModified( modifiedCalendar ); | 2684 | inR->setLastModified( modifiedCalendar ); |
2662 | local->addIncidence( inR->clone() ); | 2685 | local->addIncidence( inR->clone() ); |
2663 | ++addedAddressee; | 2686 | ++addedAddressee; |
2664 | } else { | 2687 | } else { |
2665 | checkExternSyncAddressee(addresseeRSyncSharp, inR); | 2688 | checkExternSyncAddressee(addresseeRSyncSharp, inR); |
2666 | remote->deleteIncidence( inR ); | 2689 | remote->deleteIncidence( inR ); |
2667 | ++deletedAddresseeR; | 2690 | ++deletedAddresseeR; |
2668 | } | 2691 | } |
2669 | } | 2692 | } |
2670 | } | 2693 | } |
2671 | } | 2694 | } |
2672 | inR = er.next(); | 2695 | inR = er.next(); |
2673 | } | 2696 | } |
2674 | QPtrList<Incidence> el = local->rawIncidences(); | 2697 | QPtrList<Incidence> el = local->rawIncidences(); |
2675 | inL = el.first(); | 2698 | inL = el.first(); |
2676 | modulo = (el.count()/10)+1; | 2699 | modulo = (el.count()/10)+1; |
2677 | bar.setCaption (i18n("Add / remove addressees") ); | 2700 | bar.setCaption (i18n("Add / remove addressees") ); |
2678 | bar.setTotalSteps ( el.count() ) ; | 2701 | bar.setTotalSteps ( el.count() ) ; |
2679 | bar.show(); | 2702 | bar.show(); |
2680 | incCounter = 0; | 2703 | incCounter = 0; |
2681 | 2704 | ||
2682 | while ( inL ) { | 2705 | while ( inL ) { |
2683 | 2706 | ||
2684 | qApp->processAddressees(); | 2707 | qApp->processAddressees(); |
2685 | if ( ! bar.isVisible() ) | 2708 | if ( ! bar.isVisible() ) |
2686 | return false; | 2709 | return false; |
2687 | if ( incCounter % modulo == 0 ) | 2710 | if ( incCounter % modulo == 0 ) |
2688 | bar.setProgress( incCounter ); | 2711 | bar.setProgress( incCounter ); |
2689 | ++incCounter; | 2712 | ++incCounter; |
2690 | uid = inL->uid(); | 2713 | uid = inL->uid(); |
2691 | bool skipIncidence = false; | 2714 | bool skipIncidence = false; |
2692 | if ( uid.left(15) == QString("last-syncAddressee-") ) | 2715 | if ( uid.left(15) == QString("last-syncAddressee-") ) |
2693 | skipIncidence = true; | 2716 | skipIncidence = true; |
2694 | if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) | 2717 | if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) |
2695 | skipIncidence = true; | 2718 | skipIncidence = true; |
2696 | if ( !skipIncidence ) { | 2719 | if ( !skipIncidence ) { |
2697 | inR = remote->incidence( uid ); | 2720 | inR = remote->incidence( uid ); |
2698 | if ( ! inR ) { | 2721 | if ( ! inR ) { |
2699 | if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { | 2722 | if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { |
2700 | if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { | 2723 | if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { |
2701 | checkExternSyncAddressee(addresseeLSyncSharp, inL); | 2724 | checkExternSyncAddressee(addresseeLSyncSharp, inL); |
2702 | local->deleteIncidence( inL ); | 2725 | local->deleteIncidence( inL ); |
2703 | ++deletedAddresseeL; | 2726 | ++deletedAddresseeL; |
2704 | } else { | 2727 | } else { |
2705 | if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { | 2728 | if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { |
2706 | inL->removeID(mCurrentSyncDevice ); | 2729 | inL->removeID(mCurrentSyncDevice ); |
2707 | ++addedAddresseeR; | 2730 | ++addedAddresseeR; |
2708 | //qDebug("remote added Incidence %s ", inL->summary().latin1()); | 2731 | //qDebug("remote added Incidence %s ", inL->summary().latin1()); |
2709 | inL->setLastModified( modifiedCalendar ); | 2732 | inL->setLastModified( modifiedCalendar ); |
2710 | inR = inL->clone(); | 2733 | inR = inL->clone(); |
2711 | inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); | 2734 | inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); |
2712 | remote->addIncidence( inR ); | 2735 | remote->addIncidence( inR ); |
2713 | } | 2736 | } |
2714 | } | 2737 | } |
2715 | } else { | 2738 | } else { |
2716 | if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { | 2739 | if ( inL->lastModified() < mLastAddressbookSync && mode != 4 ) { |
2717 | checkExternSyncAddressee(addresseeLSyncSharp, inL); | 2740 | checkExternSyncAddressee(addresseeLSyncSharp, inL); |
2718 | local->deleteIncidence( inL ); | 2741 | local->deleteIncidence( inL ); |
2719 | ++deletedAddresseeL; | 2742 | ++deletedAddresseeL; |
2720 | } else { | 2743 | } else { |
2721 | if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { | 2744 | if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { |
2722 | ++addedAddresseeR; | 2745 | ++addedAddresseeR; |
2723 | inL->setLastModified( modifiedCalendar ); | 2746 | inL->setLastModified( modifiedCalendar ); |
2724 | remote->addIncidence( inL->clone() ); | 2747 | remote->addIncidence( inL->clone() ); |
2725 | } | 2748 | } |
2726 | } | 2749 | } |
2727 | } | 2750 | } |
2728 | } | 2751 | } |
2729 | } | 2752 | } |
2730 | inL = el.next(); | 2753 | inL = el.next(); |
2731 | } | 2754 | } |
2732 | int delFut = 0; | 2755 | int delFut = 0; |
2733 | if ( KOPrefs::instance()->mWriteBackInFuture ) { | 2756 | if ( KOPrefs::instance()->mWriteBackInFuture ) { |
2734 | er = remote->rawIncidences(); | 2757 | er = remote->rawIncidences(); |
2735 | inR = er.first(); | 2758 | inR = er.first(); |
2736 | QDateTime dt; | 2759 | QDateTime dt; |
2737 | QDateTime cur = QDateTime::currentDateTime(); | 2760 | QDateTime cur = QDateTime::currentDateTime(); |
2738 | QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 ); | 2761 | QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 ); |
2739 | while ( inR ) { | 2762 | while ( inR ) { |
2740 | if ( inR->type() == "Todo" ) { | 2763 | if ( inR->type() == "Todo" ) { |
2741 | Todo * t = (Todo*)inR; | 2764 | Todo * t = (Todo*)inR; |
2742 | if ( t->hasDueDate() ) | 2765 | if ( t->hasDueDate() ) |
2743 | dt = t->dtDue(); | 2766 | dt = t->dtDue(); |
2744 | else | 2767 | else |
2745 | dt = cur.addSecs( 62 ); | 2768 | dt = cur.addSecs( 62 ); |
2746 | } | 2769 | } |
2747 | else if (inR->type() == "Addressee" ) { | 2770 | else if (inR->type() == "Addressee" ) { |
2748 | bool ok; | 2771 | bool ok; |
2749 | dt = inR->getNextOccurence( cur, &ok ); | 2772 | dt = inR->getNextOccurence( cur, &ok ); |
2750 | if ( !ok ) | 2773 | if ( !ok ) |
2751 | dt = cur.addSecs( -62 ); | 2774 | dt = cur.addSecs( -62 ); |
2752 | } | 2775 | } |
2753 | else | 2776 | else |
2754 | dt = inR->dtStart(); | 2777 | dt = inR->dtStart(); |
2755 | if ( dt < cur || dt > end ) { | 2778 | if ( dt < cur || dt > end ) { |
2756 | remote->deleteIncidence( inR ); | 2779 | remote->deleteIncidence( inR ); |
2757 | ++delFut; | 2780 | ++delFut; |
2758 | } | 2781 | } |
2759 | inR = er.next(); | 2782 | inR = er.next(); |
2760 | } | 2783 | } |
2761 | } | 2784 | } |
2762 | bar.hide(); | 2785 | bar.hide(); |
2763 | mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); | 2786 | mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); |
2764 | addresseeLSync->setReadOnly( false ); | 2787 | addresseeLSync->setReadOnly( false ); |
2765 | addresseeLSync->setDtStart( mLastCalendarSync ); | 2788 | addresseeLSync->setDtStart( mLastAddressbookSync ); |
2766 | addresseeRSync->setDtStart( mLastCalendarSync ); | 2789 | addresseeRSync->setDtStart( mLastAddressbookSync ); |
2767 | addresseeLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); | 2790 | addresseeLSync->setDtEnd( mLastAddressbookSync.addSecs( 3600 ) ); |
2768 | addresseeRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); | 2791 | addresseeRSync->setDtEnd( mLastAddressbookSync.addSecs( 3600 ) ); |
2769 | addresseeRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; | 2792 | addresseeRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; |
2770 | addresseeLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); | 2793 | addresseeLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); |
2771 | addresseeLSync->setReadOnly( true ); | 2794 | addresseeLSync->setReadOnly( true ); |
2772 | if ( mGlobalSyncMode == SYNC_MODE_NORMAL) | 2795 | if ( mGlobalSyncMode == SYNC_MODE_NORMAL) |
2773 | remote->addAddressee( addresseeRSync ); | 2796 | remote->addAddressee( addresseeRSync ); |
2774 | QString mes; | 2797 | QString mes; |
2775 | mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR ); | 2798 | mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR ); |
2776 | QString delmess; | 2799 | QString delmess; |
2777 | if ( delFut ) { | 2800 | if ( delFut ) { |
2778 | delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture ); | 2801 | delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture ); |
2779 | mes += delmess; | 2802 | mes += delmess; |
2780 | } | 2803 | } |
2781 | if ( KOPrefs::instance()->mShowSyncSummary ) { | 2804 | if ( KOPrefs::instance()->mShowSyncSummary ) { |
2782 | KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); | 2805 | KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); |
2783 | } | 2806 | } |
2784 | qDebug( mes ); | 2807 | qDebug( mes ); |
2785 | mCalendar->checkAlarmForIncidence( 0, true ); | 2808 | mCalendar->checkAlarmForIncidence( 0, true ); |
2786 | return syncOK; | 2809 | return syncOK; |
2787 | #endif | 2810 | #endif |
2788 | return false; | 2811 | return false; |
2789 | } | 2812 | } |
2790 | bool KABCore::syncAB(QString filename, int mode) | 2813 | bool KABCore::syncAB(QString filename, int mode) |
2791 | { | 2814 | { |
2792 | 2815 | ||
2793 | //pending prepare addresseeview for output | 2816 | //pending prepare addresseeview for output |
2794 | //pending detect, if remote file has REV field. if not switch to external sync | 2817 | //pending detect, if remote file has REV field. if not switch to external sync |
2795 | mGlobalSyncMode = SYNC_MODE_NORMAL; | 2818 | mGlobalSyncMode = SYNC_MODE_NORMAL; |
2796 | AddressBook abLocal(filename,"syncContact"); | 2819 | AddressBook abLocal(filename,"syncContact"); |
2797 | bool syncOK = false; | 2820 | bool syncOK = false; |
2798 | if ( abLocal.load() ) { | 2821 | if ( abLocal.load() ) { |
2799 | qDebug("AB loaded %s mode %d",filename.latin1(), mode ); | 2822 | qDebug("AB loaded %s mode %d",filename.latin1(), mode ); |
2800 | AddressBook::Iterator it; | 2823 | AddressBook::Iterator it; |
2801 | QStringList vcards; | 2824 | QStringList vcards; |
2802 | for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { | 2825 | for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { |
2803 | qDebug("Name %s ", (*it).familyName().latin1()); | 2826 | qDebug("Name %s ", (*it).familyName().latin1()); |
2804 | } | 2827 | } |
2805 | syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); | 2828 | syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); |
2806 | if ( syncOK ) { | 2829 | if ( syncOK ) { |
2807 | if ( KABPrefs::instance()->mWriteBackFile ) | 2830 | if ( KABPrefs::instance()->mWriteBackFile ) |
2808 | { | 2831 | { |
2809 | qDebug("saving remote AB "); | 2832 | qDebug("saving remote AB "); |
2810 | abLocal.saveAB(); | 2833 | abLocal.saveAB(); |
2811 | } | 2834 | } |
2812 | } | 2835 | } |
2813 | setModified(); | 2836 | setModified(); |
2814 | 2837 | ||
2815 | } | 2838 | } |
2816 | if ( syncOK ) | 2839 | if ( syncOK ) |
diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h index 4487a8a..c67cee6 100644 --- a/kaddressbook/kabcore.h +++ b/kaddressbook/kabcore.h | |||
@@ -427,55 +427,57 @@ class KABCore : public QWidget | |||
427 | KAction *mActionAboutKAddressbook; | 427 | KAction *mActionAboutKAddressbook; |
428 | KAction *mActionLicence; | 428 | KAction *mActionLicence; |
429 | KAction *mActionFaq; | 429 | KAction *mActionFaq; |
430 | 430 | ||
431 | KAction *mActionDeleteView; | 431 | KAction *mActionDeleteView; |
432 | 432 | ||
433 | QPopupMenu *viewMenu; | 433 | QPopupMenu *viewMenu; |
434 | QPopupMenu *filterMenu; | 434 | QPopupMenu *filterMenu; |
435 | QPopupMenu *settingsMenu; | 435 | QPopupMenu *settingsMenu; |
436 | QPopupMenu *changeMenu; | 436 | QPopupMenu *changeMenu; |
437 | //US QAction *mActionSave; | 437 | //US QAction *mActionSave; |
438 | QPopupMenu *ImportMenu; | 438 | QPopupMenu *ImportMenu; |
439 | QPopupMenu *ExportMenu; | 439 | QPopupMenu *ExportMenu; |
440 | //LR additional methods | 440 | //LR additional methods |
441 | KAction *mActionRemoveVoice; | 441 | KAction *mActionRemoveVoice; |
442 | KAction * mActionImportOL; | 442 | KAction * mActionImportOL; |
443 | 443 | ||
444 | #ifndef KAB_EMBEDDED | 444 | #ifndef KAB_EMBEDDED |
445 | KAddressBookService *mAddressBookService; | 445 | KAddressBookService *mAddressBookService; |
446 | #endif //KAB_EMBEDDED | 446 | #endif //KAB_EMBEDDED |
447 | 447 | ||
448 | class KABCorePrivate; | 448 | class KABCorePrivate; |
449 | KABCorePrivate *d; | 449 | KABCorePrivate *d; |
450 | bool mBlockSaveFlag; | 450 | bool mBlockSaveFlag; |
451 | 451 | ||
452 | #ifdef KAB_EMBEDDED | 452 | #ifdef KAB_EMBEDDED |
453 | KAddressBookMain *mMainWindow; // should be the same like mGUIClient | 453 | KAddressBookMain *mMainWindow; // should be the same like mGUIClient |
454 | #endif //KAB_EMBEDDED | 454 | #endif //KAB_EMBEDDED |
455 | // LR ******************************* | 455 | // LR ******************************* |
456 | // sync stuff! | 456 | // sync stuff! |
457 | QPopupMenu *syncMenu; | 457 | QPopupMenu *syncMenu; |
458 | void fillSyncMenu(); | 458 | void fillSyncMenu(); |
459 | QString mCurrentSyncDevice; | 459 | QString mCurrentSyncDevice; |
460 | QString mCurrentSyncName; | 460 | QString mCurrentSyncName; |
461 | void quickSyncLocalFile(); | 461 | void quickSyncLocalFile(); |
462 | bool syncWithFile( QString fn , bool quick ); | 462 | bool syncWithFile( QString fn , bool quick ); |
463 | void KABCore::syncLocalFile(); | 463 | void KABCore::syncLocalFile(); |
464 | void KABCore::syncPhone(); | 464 | void KABCore::syncPhone(); |
465 | void KABCore::syncSharp(); | 465 | void KABCore::syncSharp(); |
466 | void multiSync( bool askforPrefs ); | 466 | void multiSync( bool askforPrefs ); |
467 | int mCurrentSyncProfile ; | 467 | int mCurrentSyncProfile ; |
468 | void syncRemote( KSyncProfile* prof, bool ask = true); | 468 | void syncRemote( KSyncProfile* prof, bool ask = true); |
469 | void edit_sync_options(); | 469 | void edit_sync_options(); |
470 | bool syncAB(QString filename, int mode); | 470 | bool syncAB(QString filename, int mode); |
471 | int ringSync(); | 471 | int ringSync(); |
472 | QString getPassword( ); | 472 | QString getPassword( ); |
473 | int mGlobalSyncMode; | 473 | int mGlobalSyncMode; |
474 | bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode); | 474 | bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode); |
475 | KABC::Addressee getLastSyncAddressee(); | ||
476 | QDateTime mLastAddressbookSync; | ||
475 | public slots: | 477 | public slots: |
476 | void confSync(); | 478 | void confSync(); |
477 | // ********************* | 479 | // ********************* |
478 | 480 | ||
479 | }; | 481 | }; |
480 | 482 | ||
481 | #endif | 483 | #endif |