summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp2
-rw-r--r--libkcal/calendar.h1
-rw-r--r--libkcal/calendarlocal.cpp25
-rw-r--r--libkcal/calendarlocal.h1
-rw-r--r--libkdepim/ksyncmanager.cpp5
5 files changed, 29 insertions, 5 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 307027a..e45240a 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -635,2049 +635,2049 @@ void CalendarView::init()
635 mAlarmTimer = new QTimer( this ); 635 mAlarmTimer = new QTimer( this );
636 mRecheckAlarmTimer = new QTimer( this ); 636 mRecheckAlarmTimer = new QTimer( this );
637 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 637 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
638 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 638 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
639 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 639 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
640 mAlarmDialog = new AlarmDialog( this ); 640 mAlarmDialog = new AlarmDialog( this );
641 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 641 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
642 mAlarmDialog->setServerNotification( false ); 642 mAlarmDialog->setServerNotification( false );
643 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 643 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
644 644
645 645
646#ifndef DESKTOP_VERSION 646#ifndef DESKTOP_VERSION
647//US listen for arriving address resultsets 647//US listen for arriving address resultsets
648 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 648 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
649 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 649 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
650#endif 650#endif
651 mDateNavigator->setCalendar( mCalendar ); 651 mDateNavigator->setCalendar( mCalendar );
652} 652}
653 653
654 654
655CalendarView::~CalendarView() 655CalendarView::~CalendarView()
656{ 656{
657 // kdDebug() << "~CalendarView()" << endl; 657 // kdDebug() << "~CalendarView()" << endl;
658 //qDebug("CalendarView::~CalendarView() "); 658 //qDebug("CalendarView::~CalendarView() ");
659 delete mDialogManager; 659 delete mDialogManager;
660 delete mViewManager; 660 delete mViewManager;
661 delete mStorage; 661 delete mStorage;
662 delete mDateFrame ; 662 delete mDateFrame ;
663 delete mEventViewerDialog; 663 delete mEventViewerDialog;
664 //kdDebug() << "~CalendarView() done" << endl; 664 //kdDebug() << "~CalendarView() done" << endl;
665} 665}
666 666
667 667
668void CalendarView::nextConflict( bool all, bool allday ) 668void CalendarView::nextConflict( bool all, bool allday )
669{ 669{
670 if ( flag_blockConflict ) return; 670 if ( flag_blockConflict ) return;
671 flag_blockConflict = true; 671 flag_blockConflict = true;
672 QPtrList<Event> testlist = mCalendar->events(); 672 QPtrList<Event> testlist = mCalendar->events();
673 Event * test = testlist.first(); 673 Event * test = testlist.first();
674 while ( test ) { 674 while ( test ) {
675 test->setTagged( false ); 675 test->setTagged( false );
676 test = testlist.next(); 676 test = testlist.next();
677 } 677 }
678 QTime st ( 0,0,0); 678 QTime st ( 0,0,0);
679 if ( mViewManager->currentView() == mViewManager->agendaView() ) 679 if ( mViewManager->currentView() == mViewManager->agendaView() )
680 st = mViewManager->agendaView()->agenda()->getEndTime(); 680 st = mViewManager->agendaView()->agenda()->getEndTime();
681 //qDebug("time %s ", st.toString().latin1()); 681 //qDebug("time %s ", st.toString().latin1());
682 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 682 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
683 QDateTime conflict; 683 QDateTime conflict;
684 QDateTime retVal; 684 QDateTime retVal;
685 bool found = false; 685 bool found = false;
686 Event * cE = 0; 686 Event * cE = 0;
687 Event * cE2 = 0; 687 Event * cE2 = 0;
688 QPtrList<Event> testlist2 = testlist; 688 QPtrList<Event> testlist2 = testlist;
689 test = testlist.first(); 689 test = testlist.first();
690 bool skip = false; 690 bool skip = false;
691 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 691 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
692 //QTime tm; 692 //QTime tm;
693 //tm.start(); 693 //tm.start();
694 while ( test ) { 694 while ( test ) {
695 qApp->processEvents(); 695 qApp->processEvents();
696 skip = false; 696 skip = false;
697 if ( !all ) skip = ( allday != test->doesFloat() ); 697 if ( !all ) skip = ( allday != test->doesFloat() );
698 if ( !skip ) { 698 if ( !skip ) {
699 if ( found ) 699 if ( found )
700 skip = !test->matchTime( &startDT, &conflict ); 700 skip = !test->matchTime( &startDT, &conflict );
701 else 701 else
702 skip = !test->matchTime( &startDT, 0 ); 702 skip = !test->matchTime( &startDT, 0 );
703 } 703 }
704 if ( !skip ) { 704 if ( !skip ) {
705 Event * test2 = testlist2.first(); 705 Event * test2 = testlist2.first();
706 while ( test2 ) { 706 while ( test2 ) {
707 skip = test2->isTagged(); 707 skip = test2->isTagged();
708 if ( !skip && !all ) skip = ( allday != test2->doesFloat() ); 708 if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
709 if ( !skip ) { 709 if ( !skip ) {
710 if ( found ) 710 if ( found )
711 skip = !test2->matchTime( &startDT, &conflict ); 711 skip = !test2->matchTime( &startDT, &conflict );
712 else 712 else
713 skip = !test2->matchTime( &startDT, 0 ); 713 skip = !test2->matchTime( &startDT, 0 );
714 } 714 }
715 if ( !skip ) { 715 if ( !skip ) {
716 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 716 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
717 //qDebug("overlap "); 717 //qDebug("overlap ");
718 if ( ! found ) { 718 if ( ! found ) {
719 if ( retVal >= startDT ) { 719 if ( retVal >= startDT ) {
720 conflict = retVal; 720 conflict = retVal;
721 cE = test; 721 cE = test;
722 cE2 = test2; 722 cE2 = test2;
723 found = true; 723 found = true;
724 } 724 }
725 } else { 725 } else {
726 if ( retVal >= startDT && retVal < conflict ) { 726 if ( retVal >= startDT && retVal < conflict ) {
727 conflict = retVal; 727 conflict = retVal;
728 cE = test; 728 cE = test;
729 cE2 = test2; 729 cE2 = test2;
730 } 730 }
731 } 731 }
732 } 732 }
733 } 733 }
734 test2 = testlist2.next(); 734 test2 = testlist2.next();
735 } 735 }
736 } 736 }
737 test->setTagged( true ); 737 test->setTagged( true );
738 test = testlist.next(); 738 test = testlist.next();
739 } 739 }
740 //qDebug("Search time : %d", tm.elapsed()); 740 //qDebug("Search time : %d", tm.elapsed());
741 if ( found ) { 741 if ( found ) {
742 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 742 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
743 mViewManager->showDayView(); 743 mViewManager->showDayView();
744 mNavigator->slotDaySelect( conflict.date() ); 744 mNavigator->slotDaySelect( conflict.date() );
745 int hour = conflict.time().hour(); 745 int hour = conflict.time().hour();
746 mViewManager->agendaView()->setStartHour( hour ); 746 mViewManager->agendaView()->setStartHour( hour );
747 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 747 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
748 flag_blockConflict = false; 748 flag_blockConflict = false;
749 return; 749 return;
750 } 750 }
751 751
752 topLevelWidget()->setCaption( i18n("No conflict found") ); 752 topLevelWidget()->setCaption( i18n("No conflict found") );
753 //qDebug("No conflict found "); 753 //qDebug("No conflict found ");
754 flag_blockConflict = false; 754 flag_blockConflict = false;
755 return; 755 return;
756} 756}
757 757
758void CalendarView::conflictAll() 758void CalendarView::conflictAll()
759{ 759{
760 nextConflict ( true, true ); 760 nextConflict ( true, true );
761} 761}
762void CalendarView::conflictAllday() 762void CalendarView::conflictAllday()
763{ 763{
764 nextConflict ( false, true ); 764 nextConflict ( false, true );
765} 765}
766void CalendarView::conflictNotAll() 766void CalendarView::conflictNotAll()
767{ 767{
768 nextConflict ( false, false ); 768 nextConflict ( false, false );
769} 769}
770 770
771void CalendarView::setCalReadOnly( int id, bool readO ) 771void CalendarView::setCalReadOnly( int id, bool readO )
772{ 772{
773 if ( readO ) { 773 if ( readO ) {
774 emit save(); 774 emit save();
775 } 775 }
776 mCalendar->setReadOnly( id, readO ); 776 mCalendar->setReadOnly( id, readO );
777} 777}
778void CalendarView::setScrollBarStep(int val ) 778void CalendarView::setScrollBarStep(int val )
779{ 779{
780#ifdef DESKTOP_VERSION 780#ifdef DESKTOP_VERSION
781 mDateScrollBar->setLineStep ( val ); 781 mDateScrollBar->setLineStep ( val );
782#endif 782#endif
783} 783}
784void CalendarView::scrollBarValue(int val ) 784void CalendarView::scrollBarValue(int val )
785{ 785{
786#ifdef DESKTOP_VERSION 786#ifdef DESKTOP_VERSION
787 if ( QApplication::desktop()->width() < 800 ) return; 787 if ( QApplication::desktop()->width() < 800 ) return;
788 if ( flag_blockScrollBar ) return; 788 if ( flag_blockScrollBar ) return;
789 flag_blockScrollBar = true; 789 flag_blockScrollBar = true;
790 int count = mNavigator->selectedDates().count(); 790 int count = mNavigator->selectedDates().count();
791 int day = mNavigator->selectedDates().first().dayOfYear(); 791 int day = mNavigator->selectedDates().first().dayOfYear();
792 int stepdays = val; 792 int stepdays = val;
793 if ( mDateScrollBar->lineStep () <= count ) { 793 if ( mDateScrollBar->lineStep () <= count ) {
794 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 794 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
795 //qDebug("VAL %d ",val ); 795 //qDebug("VAL %d ",val );
796 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 796 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
797 stepdays = day+stepdays; 797 stepdays = day+stepdays;
798 if ( stepdays < 0 ) stepdays = 0; 798 if ( stepdays < 0 ) stepdays = 0;
799 } 799 }
800 if ( stepdays == day ) { 800 if ( stepdays == day ) {
801 flag_blockScrollBar = false; 801 flag_blockScrollBar = false;
802 return; 802 return;
803 } 803 }
804 int year = mNavigator->selectedDates().first().year(); 804 int year = mNavigator->selectedDates().first().year();
805 QDate d ( year,1,1 ); 805 QDate d ( year,1,1 );
806 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 806 mNavigator->selectDates( d.addDays( stepdays-1) , count );
807 flag_blockScrollBar = false; 807 flag_blockScrollBar = false;
808#endif 808#endif
809 809
810} 810}
811void CalendarView::updateView(const QDate &start, const QDate &end) 811void CalendarView::updateView(const QDate &start, const QDate &end)
812{ 812{
813#ifdef DESKTOP_VERSION 813#ifdef DESKTOP_VERSION
814 if ( ! mDateScrollBar->draggingSlider () ) { 814 if ( ! mDateScrollBar->draggingSlider () ) {
815 int dof = start.dayOfYear(); 815 int dof = start.dayOfYear();
816 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 816 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
817 if ( dof != mDateScrollBar->value() ) { 817 if ( dof != mDateScrollBar->value() ) {
818 mDateScrollBar->blockSignals( true ); 818 mDateScrollBar->blockSignals( true );
819 mDateScrollBar->setValue( start.dayOfYear()); 819 mDateScrollBar->setValue( start.dayOfYear());
820 mDateScrollBar->blockSignals( false ); 820 mDateScrollBar->blockSignals( false );
821 } 821 }
822 } 822 }
823#endif 823#endif
824 mTodoList->updateView(); 824 mTodoList->updateView();
825 mViewManager->updateView(start, end); 825 mViewManager->updateView(start, end);
826 //mDateNavigator->updateView(); 826 //mDateNavigator->updateView();
827} 827}
828 828
829 829
830 830
831void CalendarView::checkFiles() 831void CalendarView::checkFiles()
832{ 832{
833 QString message; 833 QString message;
834 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 834 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
835 KopiCalendarFile * cal = calendars.first(); 835 KopiCalendarFile * cal = calendars.first();
836 while ( cal ) { 836 while ( cal ) {
837 if ( cal->mErrorOnLoad ) { 837 if ( cal->mErrorOnLoad ) {
838 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 838 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
839 } 839 }
840 cal = calendars.next(); 840 cal = calendars.next();
841 } 841 }
842 if ( !message.isEmpty() ) { 842 if ( !message.isEmpty() ) {
843 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); 843 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0);
844 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed")); 844 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed"));
845 } 845 }
846 if ( flag_checkFileFirsttime ) { 846 if ( flag_checkFileFirsttime ) {
847 flag_checkFileFirsttime = false; 847 flag_checkFileFirsttime = false;
848 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 848 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
849 } 849 }
850} 850}
851void CalendarView::checkAlarms() 851void CalendarView::checkAlarms()
852{ 852{
853 KConfig *config = KOGlobals::config(); 853 KConfig *config = KOGlobals::config();
854 config->setGroup( "AppRun" ); 854 config->setGroup( "AppRun" );
855 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 855 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
856 int daysto = dt.daysTo( QDate::currentDate() ); 856 int daysto = dt.daysTo( QDate::currentDate() );
857 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 857 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
858 dt = dt.addDays( days ); 858 dt = dt.addDays( days );
859 int secto = dt.secsTo( QDateTime::currentDateTime() ); 859 int secto = dt.secsTo( QDateTime::currentDateTime() );
860 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 860 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
861 //qDebug("KO: Reading program stop %d ", secs); 861 //qDebug("KO: Reading program stop %d ", secs);
862 //secs -= ( 3600 * 24*3 ); // debug only 862 //secs -= ( 3600 * 24*3 ); // debug only
863 QDateTime latest = dt.addSecs ( secs ); 863 QDateTime latest = dt.addSecs ( secs );
864 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 864 qDebug("KO: Last termination on %s ", latest.toString().latin1());
865 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 865 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
866 QPtrList<Incidence> el = mCalendar->rawIncidences(); 866 QPtrList<Incidence> el = mCalendar->rawIncidences();
867 QPtrList<Incidence> al; 867 QPtrList<Incidence> al;
868 Incidence* inL = el.first(); 868 Incidence* inL = el.first();
869 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 869 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
870 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 870 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
871 while ( inL ) { 871 while ( inL ) {
872 bool ok = false; 872 bool ok = false;
873 int offset = 0; 873 int offset = 0;
874 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 874 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
875 if ( ok ) { 875 if ( ok ) {
876 //qDebug("OK %s",next.toString().latin1()); 876 //qDebug("OK %s",next.toString().latin1());
877 if ( next < cur ) { 877 if ( next < cur ) {
878 al.append( inL ); 878 al.append( inL );
879 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 879 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
880 } 880 }
881 } 881 }
882 inL = el.next(); 882 inL = el.next();
883 } 883 }
884 if ( al.count() ) { 884 if ( al.count() ) {
885 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 885 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
886 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 886 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
887 QVBoxLayout* lay = new QVBoxLayout( dia ); 887 QVBoxLayout* lay = new QVBoxLayout( dia );
888 lay->setSpacing( 0 ); 888 lay->setSpacing( 0 );
889 lay->setMargin( 0 ); 889 lay->setMargin( 0 );
890 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 890 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
891 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 891 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
892 lay->addWidget( matb ); 892 lay->addWidget( matb );
893 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 893 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
894 int wid = 210; 894 int wid = 210;
895 int x = QApplication::desktop()->width() - wid - 7; 895 int x = QApplication::desktop()->width() - wid - 7;
896 int y = QApplication::desktop()->height() - wid - 70; 896 int y = QApplication::desktop()->height() - wid - 70;
897 dia->setGeometry ( x,y,wid,wid); 897 dia->setGeometry ( x,y,wid,wid);
898 } else { 898 } else {
899 int si = 220; 899 int si = 220;
900 if ( QApplication::desktop()->width() > 470 ) 900 if ( QApplication::desktop()->width() > 470 )
901 si = 400; 901 si = 400;
902 dia->resize(si,si/2); 902 dia->resize(si,si/2);
903 } 903 }
904 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 904 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
905 dia->show(); 905 dia->show();
906 906
907 } 907 }
908#if 0 908#if 0
909 // for creating timetracker test data 909 // for creating timetracker test data
910 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc "); 910 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ");
911 Todo * nt; 911 Todo * nt;
912 mCalendar->close(); 912 mCalendar->close();
913 { 913 {
914 Todo * root1 = new Todo; 914 Todo * root1 = new Todo;
915 mCalendar->addTodo( root1 ); 915 mCalendar->addTodo( root1 );
916 root1->setSummary( "Project1"); 916 root1->setSummary( "Project1");
917 root1->setPriority( 1 ); 917 root1->setPriority( 1 );
918 root1->setCategories( QString( "Cat_Pro1") ); 918 root1->setCategories( QString( "Cat_Pro1") );
919 root1->setDescription( "This is a test description of a root Project" ); 919 root1->setDescription( "This is a test description of a root Project" );
920 root1->setPercentComplete( 20 ); 920 root1->setPercentComplete( 20 );
921 updateView(); 921 updateView();
922 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 922 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
923 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 923 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
924 924
925 nt = new Todo; 925 nt = new Todo;
926 mCalendar->addTodo( nt ); 926 mCalendar->addTodo( nt );
927 nt->setSummary( "Planning Project1"); 927 nt->setSummary( "Planning Project1");
928 nt->setPriority( 1 ); 928 nt->setPriority( 1 );
929 nt->setDescription( "This is a test description of Planning Project1" ); 929 nt->setDescription( "This is a test description of Planning Project1" );
930 nt->setPercentComplete( 20 ); 930 nt->setPercentComplete( 20 );
931 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") ); 931 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") );
932 932
933 933
934 Todo * sub1 = nt; 934 Todo * sub1 = nt;
935 sub1->setRelatedTo( root1 ); 935 sub1->setRelatedTo( root1 );
936 936
937 nt = new Todo; 937 nt = new Todo;
938 mCalendar->addTodo( nt ); 938 mCalendar->addTodo( nt );
939 nt->setSummary( "Planning Project1: Lutz"); 939 nt->setSummary( "Planning Project1: Lutz");
940 nt->setPriority( 1 ); 940 nt->setPriority( 1 );
941 nt->setDescription( "This todo counts the actual work of a person on a project" ); 941 nt->setDescription( "This todo counts the actual work of a person on a project" );
942 nt->setPercentComplete( 20 ); 942 nt->setPercentComplete( 20 );
943 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") ); 943 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") );
944 Todo * workLutz11 = nt; 944 Todo * workLutz11 = nt;
945 workLutz11->setRelatedTo( sub1 ); 945 workLutz11->setRelatedTo( sub1 );
946 946
947 nt = new Todo; 947 nt = new Todo;
948 mCalendar->addTodo( nt ); 948 mCalendar->addTodo( nt );
949 nt->setSummary( "Planning Project1: Norbert"); 949 nt->setSummary( "Planning Project1: Norbert");
950 nt->setPriority( 1 ); 950 nt->setPriority( 1 );
951 nt->setDescription( "This todo counts the actual work of a person on a project" ); 951 nt->setDescription( "This todo counts the actual work of a person on a project" );
952 nt->setPercentComplete( 20 ); 952 nt->setPercentComplete( 20 );
953 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") ); 953 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") );
954 Todo * workNorbert11 = nt; 954 Todo * workNorbert11 = nt;
955 workNorbert11->setRelatedTo( sub1 ); 955 workNorbert11->setRelatedTo( sub1 );
956 956
957 nt = new Todo; 957 nt = new Todo;
958 mCalendar->addTodo( nt ); 958 mCalendar->addTodo( nt );
959 nt->setSummary( "Work on 1"); 959 nt->setSummary( "Work on 1");
960 nt->setPriority( 1 ); 960 nt->setPriority( 1 );
961 nt->setDescription( "This is a test description of Work Project_1" ); 961 nt->setDescription( "This is a test description of Work Project_1" );
962 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") ); 962 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") );
963 nt->setPercentComplete( 20 ); 963 nt->setPercentComplete( 20 );
964 964
965 Todo * sub2 = nt; 965 Todo * sub2 = nt;
966 sub2->setRelatedTo( root1 ); 966 sub2->setRelatedTo( root1 );
967 967
968 968
969 nt = new Todo; 969 nt = new Todo;
970 mCalendar->addTodo( nt ); 970 mCalendar->addTodo( nt );
971 nt->setSummary( "Work on 1: Lutz"); 971 nt->setSummary( "Work on 1: Lutz");
972 nt->setPriority( 1 ); 972 nt->setPriority( 1 );
973 nt->setDescription( "This todo counts the actual work of a person on a project" ); 973 nt->setDescription( "This todo counts the actual work of a person on a project" );
974 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") ); 974 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") );
975 nt->setPercentComplete( 20 ); 975 nt->setPercentComplete( 20 );
976 Todo * workLutz12 = nt; 976 Todo * workLutz12 = nt;
977 workLutz12->setRelatedTo( sub2 ); 977 workLutz12->setRelatedTo( sub2 );
978 978
979 nt = new Todo; 979 nt = new Todo;
980 mCalendar->addTodo( nt ); 980 mCalendar->addTodo( nt );
981 nt->setSummary( "Work on 1: Norbert"); 981 nt->setSummary( "Work on 1: Norbert");
982 nt->setPriority( 1 ); 982 nt->setPriority( 1 );
983 nt->setDescription( "This todo counts the actual work of a person on a project" ); 983 nt->setDescription( "This todo counts the actual work of a person on a project" );
984 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") ); 984 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") );
985 nt->setPercentComplete( 20 ); 985 nt->setPercentComplete( 20 );
986 Todo * workNorbert12 = nt; 986 Todo * workNorbert12 = nt;
987 workNorbert12->setRelatedTo( sub2 ); 987 workNorbert12->setRelatedTo( sub2 );
988 988
989 int secLenRunning = 7200; 989 int secLenRunning = 7200;
990 int secLenPausing = 3600 * 3; 990 int secLenPausing = 3600 * 3;
991 int dayInterval = 1; 991 int dayInterval = 1;
992 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval ); 992 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval );
993 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 ); 993 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 );
994 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1); 994 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1);
995 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3); 995 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3);
996 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0); 996 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0);
997 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1); 997 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1);
998 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3); 998 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3);
999 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0); 999 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0);
1000 1000
1001 } 1001 }
1002 1002
1003 { 1003 {
1004 Todo * root1 = new Todo; 1004 Todo * root1 = new Todo;
1005 mCalendar->addTodo( root1 ); 1005 mCalendar->addTodo( root1 );
1006 root1->setSummary( "Project2"); 1006 root1->setSummary( "Project2");
1007 root1->setPriority( 1 ); 1007 root1->setPriority( 1 );
1008 root1->setDescription( "This is a test description of a root Project 2" ); 1008 root1->setDescription( "This is a test description of a root Project 2" );
1009 root1->setPercentComplete( 20 ); 1009 root1->setPercentComplete( 20 );
1010 root1->setCategories( QString( "Cat_Pro2") ); 1010 root1->setCategories( QString( "Cat_Pro2") );
1011 updateView(); 1011 updateView();
1012 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 1012 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
1013 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 1013 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
1014 int secLenRunning = 7200; 1014 int secLenRunning = 7200;
1015 int secLenPausing = 3600 * 3; 1015 int secLenPausing = 3600 * 3;
1016 int dayInterval = 1; 1016 int dayInterval = 1;
1017 1017
1018 nt = new Todo; 1018 nt = new Todo;
1019 mCalendar->addTodo( nt ); 1019 mCalendar->addTodo( nt );
1020 nt->setSummary( "Planning Project2"); 1020 nt->setSummary( "Planning Project2");
1021 nt->setPriority( 1 ); 1021 nt->setPriority( 1 );
1022 nt->setDescription( "This is a test description of Planning_Project_2" ); 1022 nt->setDescription( "This is a test description of Planning_Project_2" );
1023 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") ); 1023 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") );
1024 nt->setPercentComplete( 20 ); 1024 nt->setPercentComplete( 20 );
1025 1025
1026 1026
1027 Todo * sub1 = nt; 1027 Todo * sub1 = nt;
1028 sub1->setRelatedTo( root1 ); 1028 sub1->setRelatedTo( root1 );
1029 1029
1030 nt = new Todo; 1030 nt = new Todo;
1031 mCalendar->addTodo( nt ); 1031 mCalendar->addTodo( nt );
1032 nt->setSummary( "Planning Project2: Lutz"); 1032 nt->setSummary( "Planning Project2: Lutz");
1033 nt->setPriority( 1 ); 1033 nt->setPriority( 1 );
1034 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1034 nt->setDescription( "This todo counts the actual work of a person on a project" );
1035 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") ); 1035 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") );
1036 nt->setPercentComplete( 20 ); 1036 nt->setPercentComplete( 20 );
1037 Todo * workLutz11 = nt; 1037 Todo * workLutz11 = nt;
1038 workLutz11->setRelatedTo( sub1 ); 1038 workLutz11->setRelatedTo( sub1 );
1039 1039
1040 nt = new Todo; 1040 nt = new Todo;
1041 mCalendar->addTodo( nt ); 1041 mCalendar->addTodo( nt );
1042 nt->setSummary( "Planning Project2: Norbert"); 1042 nt->setSummary( "Planning Project2: Norbert");
1043 nt->setPriority( 1 ); 1043 nt->setPriority( 1 );
1044 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1044 nt->setDescription( "This todo counts the actual work of a person on a project" );
1045 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") ); 1045 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") );
1046 nt->setPercentComplete( 20 ); 1046 nt->setPercentComplete( 20 );
1047 Todo * workNorbert11 = nt; 1047 Todo * workNorbert11 = nt;
1048 workNorbert11->setRelatedTo( sub1 ); 1048 workNorbert11->setRelatedTo( sub1 );
1049 1049
1050 nt = new Todo; 1050 nt = new Todo;
1051 mCalendar->addTodo( nt ); 1051 mCalendar->addTodo( nt );
1052 nt->setSummary( "Work on 2"); 1052 nt->setSummary( "Work on 2");
1053 nt->setPriority( 1 ); 1053 nt->setPriority( 1 );
1054 nt->setDescription( "This is a test description of Work Project_2" ); 1054 nt->setDescription( "This is a test description of Work Project_2" );
1055 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") ); 1055 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") );
1056 nt->setPercentComplete( 20 ); 1056 nt->setPercentComplete( 20 );
1057 1057
1058 Todo * sub2 = nt; 1058 Todo * sub2 = nt;
1059 sub2->setRelatedTo( root1 ); 1059 sub2->setRelatedTo( root1 );
1060 1060
1061 1061
1062 nt = new Todo; 1062 nt = new Todo;
1063 mCalendar->addTodo( nt ); 1063 mCalendar->addTodo( nt );
1064 nt->setSummary( "Work on 2: Lutz"); 1064 nt->setSummary( "Work on 2: Lutz");
1065 nt->setPriority( 1 ); 1065 nt->setPriority( 1 );
1066 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1066 nt->setDescription( "This todo counts the actual work of a person on a project" );
1067 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") ); 1067 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") );
1068 nt->setPercentComplete( 20 ); 1068 nt->setPercentComplete( 20 );
1069 Todo * workLutz12 = nt; 1069 Todo * workLutz12 = nt;
1070 workLutz12->setRelatedTo( sub2 ); 1070 workLutz12->setRelatedTo( sub2 );
1071 1071
1072 nt = new Todo; 1072 nt = new Todo;
1073 mCalendar->addTodo( nt ); 1073 mCalendar->addTodo( nt );
1074 nt->setSummary( "Work on 2: Norbert"); 1074 nt->setSummary( "Work on 2: Norbert");
1075 nt->setPriority( 1 ); 1075 nt->setPriority( 1 );
1076 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1076 nt->setDescription( "This todo counts the actual work of a person on a project" );
1077 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") ); 1077 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") );
1078 nt->setPercentComplete( 20 ); 1078 nt->setPercentComplete( 20 );
1079 Todo * workNorbert12 = nt; 1079 Todo * workNorbert12 = nt;
1080 workNorbert12->setRelatedTo( sub2 ); 1080 workNorbert12->setRelatedTo( sub2 );
1081 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 ); 1081 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 );
1082 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2); 1082 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2);
1083 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7); 1083 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7);
1084 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0); 1084 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0);
1085 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1); 1085 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1);
1086 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0); 1086 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0);
1087 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0); 1087 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0);
1088 } 1088 }
1089 updateView(); 1089 updateView();
1090#endif 1090#endif
1091 1091
1092} 1092}
1093void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ) 1093void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval )
1094{ 1094{
1095 static int ccc = 0; 1095 static int ccc = 0;
1096 ++ccc; 1096 ++ccc;
1097 QDateTime t_start = start; 1097 QDateTime t_start = start;
1098 runT->setPriority( 5 ); 1098 runT->setPriority( 5 );
1099 runT->setPercentComplete( 0 ); 1099 runT->setPercentComplete( 0 );
1100 int count = 0; 1100 int count = 0;
1101 int prio = 5; 1101 int prio = 5;
1102 int complete = 0; 1102 int complete = 0;
1103 while ( t_start < end ) { 1103 while ( t_start < end ) {
1104 ++count; 1104 ++count;
1105 if ( count > ccc ) { 1105 if ( count > ccc ) {
1106 count = 0; 1106 count = 0;
1107 --prio; 1107 --prio;
1108 if ( prio == 0 ) prio = 5; 1108 if ( prio == 0 ) prio = 5;
1109 complete += 20; 1109 complete += 20;
1110 if ( complete > 100 ) complete = 0; 1110 if ( complete > 100 ) complete = 0;
1111 runT->setPriority( prio ); 1111 runT->setPriority( prio );
1112 runT->setPercentComplete( complete ); 1112 runT->setPercentComplete( complete );
1113 } 1113 }
1114 runT->setRunning( true ); 1114 runT->setRunning( true );
1115 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) ); 1115 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) );
1116 if ( dayInterval ) 1116 if ( dayInterval )
1117 t_start = t_start.addDays( dayInterval ); 1117 t_start = t_start.addDays( dayInterval );
1118 else { 1118 else {
1119 t_start = t_start.addSecs( secLenRunning + secLenPausing ); 1119 t_start = t_start.addSecs( secLenRunning + secLenPausing );
1120 } 1120 }
1121 } 1121 }
1122} 1122}
1123 1123
1124void CalendarView::showDay( QDate d ) 1124void CalendarView::showDay( QDate d )
1125{ 1125{
1126 dateNavigator()->blockSignals( true ); 1126 dateNavigator()->blockSignals( true );
1127 dateNavigator()->selectDate( d ); 1127 dateNavigator()->selectDate( d );
1128 dateNavigator()->blockSignals( false ); 1128 dateNavigator()->blockSignals( false );
1129 mViewManager->showDayView(); 1129 mViewManager->showDayView();
1130 //dateNavigator()->selectDate( d ); 1130 //dateNavigator()->selectDate( d );
1131} 1131}
1132void CalendarView::timerAlarm() 1132void CalendarView::timerAlarm()
1133{ 1133{
1134 //qDebug("CalendarView::timerAlarm() "); 1134 //qDebug("CalendarView::timerAlarm() ");
1135 computeAlarm(mAlarmNotification ); 1135 computeAlarm(mAlarmNotification );
1136} 1136}
1137 1137
1138void CalendarView::suspendAlarm() 1138void CalendarView::suspendAlarm()
1139{ 1139{
1140 //qDebug(" CalendarView::suspendAlarm() "); 1140 //qDebug(" CalendarView::suspendAlarm() ");
1141 computeAlarm(mSuspendAlarmNotification ); 1141 computeAlarm(mSuspendAlarmNotification );
1142 1142
1143} 1143}
1144 1144
1145void CalendarView::startAlarm( QString mess , QString filename) 1145void CalendarView::startAlarm( QString mess , QString filename)
1146{ 1146{
1147 1147
1148 topLevelWidget()->showNormal(); 1148 topLevelWidget()->showNormal();
1149 topLevelWidget()->setActiveWindow(); 1149 topLevelWidget()->setActiveWindow();
1150 topLevelWidget()->raise(); 1150 topLevelWidget()->raise();
1151 1151
1152 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 1152 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
1153 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 1153 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
1154 1154
1155} 1155}
1156 1156
1157void CalendarView::checkNextTimerAlarm() 1157void CalendarView::checkNextTimerAlarm()
1158{ 1158{
1159 mCalendar->checkAlarmForIncidence( 0, true ); 1159 mCalendar->checkAlarmForIncidence( 0, true );
1160} 1160}
1161 1161
1162void CalendarView::computeAlarm( QString msg ) 1162void CalendarView::computeAlarm( QString msg )
1163{ 1163{
1164 1164
1165 QString mess = msg; 1165 QString mess = msg;
1166 QString mAlarmMessage = mess.mid( 9 ); 1166 QString mAlarmMessage = mess.mid( 9 );
1167 QString filename = MainWindow::resourcePath(); 1167 QString filename = MainWindow::resourcePath();
1168 filename += "koalarm.wav"; 1168 filename += "koalarm.wav";
1169 QString tempfilename; 1169 QString tempfilename;
1170 if ( mess.left( 13 ) == "suspend_alarm") { 1170 if ( mess.left( 13 ) == "suspend_alarm") {
1171 bool error = false; 1171 bool error = false;
1172 int len = mess.mid( 13 ).find("+++"); 1172 int len = mess.mid( 13 ).find("+++");
1173 if ( len < 2 ) 1173 if ( len < 2 )
1174 error = true; 1174 error = true;
1175 else { 1175 else {
1176 tempfilename = mess.mid( 13, len ); 1176 tempfilename = mess.mid( 13, len );
1177 if ( !QFile::exists( tempfilename ) ) 1177 if ( !QFile::exists( tempfilename ) )
1178 error = true; 1178 error = true;
1179 } 1179 }
1180 if ( ! error ) { 1180 if ( ! error ) {
1181 filename = tempfilename; 1181 filename = tempfilename;
1182 } 1182 }
1183 mAlarmMessage = mess.mid( 13+len+3 ); 1183 mAlarmMessage = mess.mid( 13+len+3 );
1184 //qDebug("suspend file %s ",tempfilename.latin1() ); 1184 //qDebug("suspend file %s ",tempfilename.latin1() );
1185 startAlarm( mAlarmMessage, filename); 1185 startAlarm( mAlarmMessage, filename);
1186 return; 1186 return;
1187 } 1187 }
1188 if ( mess.left( 11 ) == "timer_alarm") { 1188 if ( mess.left( 11 ) == "timer_alarm") {
1189 //mTimerTime = 0; 1189 //mTimerTime = 0;
1190 startAlarm( mess.mid( 11 ), filename ); 1190 startAlarm( mess.mid( 11 ), filename );
1191 return; 1191 return;
1192 } 1192 }
1193 if ( mess.left( 10 ) == "proc_alarm") { 1193 if ( mess.left( 10 ) == "proc_alarm") {
1194 bool error = false; 1194 bool error = false;
1195 int len = mess.mid( 10 ).find("+++"); 1195 int len = mess.mid( 10 ).find("+++");
1196 if ( len < 2 ) 1196 if ( len < 2 )
1197 error = true; 1197 error = true;
1198 else { 1198 else {
1199 tempfilename = mess.mid( 10, len ); 1199 tempfilename = mess.mid( 10, len );
1200 if ( !QFile::exists( tempfilename ) ) 1200 if ( !QFile::exists( tempfilename ) )
1201 error = true; 1201 error = true;
1202 } 1202 }
1203 if ( error ) { 1203 if ( error ) {
1204 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 1204 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
1205 mAlarmMessage += mess.mid( 10+len+3+9 ); 1205 mAlarmMessage += mess.mid( 10+len+3+9 );
1206 } else { 1206 } else {
1207 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 1207 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
1208 //qDebug("-----system command %s ",tempfilename.latin1() ); 1208 //qDebug("-----system command %s ",tempfilename.latin1() );
1209#ifndef _WIN32_ 1209#ifndef _WIN32_
1210 if ( vfork () == 0 ) { 1210 if ( vfork () == 0 ) {
1211 execl ( tempfilename.latin1(), 0 ); 1211 execl ( tempfilename.latin1(), 0 );
1212 return; 1212 return;
1213 } 1213 }
1214#else 1214#else
1215 QProcess* p = new QProcess(); 1215 QProcess* p = new QProcess();
1216 p->addArgument( tempfilename.latin1() ); 1216 p->addArgument( tempfilename.latin1() );
1217 p->start(); 1217 p->start();
1218 return; 1218 return;
1219#endif 1219#endif
1220 1220
1221 return; 1221 return;
1222 } 1222 }
1223 1223
1224 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 1224 //qDebug("+++++++system command %s ",tempfilename.latin1() );
1225 } 1225 }
1226 if ( mess.left( 11 ) == "audio_alarm") { 1226 if ( mess.left( 11 ) == "audio_alarm") {
1227 bool error = false; 1227 bool error = false;
1228 int len = mess.mid( 11 ).find("+++"); 1228 int len = mess.mid( 11 ).find("+++");
1229 if ( len < 2 ) 1229 if ( len < 2 )
1230 error = true; 1230 error = true;
1231 else { 1231 else {
1232 tempfilename = mess.mid( 11, len ); 1232 tempfilename = mess.mid( 11, len );
1233 if ( !QFile::exists( tempfilename ) ) 1233 if ( !QFile::exists( tempfilename ) )
1234 error = true; 1234 error = true;
1235 } 1235 }
1236 if ( ! error ) { 1236 if ( ! error ) {
1237 filename = tempfilename; 1237 filename = tempfilename;
1238 } 1238 }
1239 mAlarmMessage = mess.mid( 11+len+3+9 ); 1239 mAlarmMessage = mess.mid( 11+len+3+9 );
1240 //qDebug("audio file command %s ",tempfilename.latin1() ); 1240 //qDebug("audio file command %s ",tempfilename.latin1() );
1241 } 1241 }
1242 if ( mess.left( 9 ) == "cal_alarm") { 1242 if ( mess.left( 9 ) == "cal_alarm") {
1243 mAlarmMessage = mess.mid( 9 ) ; 1243 mAlarmMessage = mess.mid( 9 ) ;
1244 } 1244 }
1245 1245
1246 startAlarm( mAlarmMessage, filename ); 1246 startAlarm( mAlarmMessage, filename );
1247 1247
1248 1248
1249} 1249}
1250 1250
1251void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1251void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1252{ 1252{
1253 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1253 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1254 1254
1255 mSuspendAlarmNotification = noti; 1255 mSuspendAlarmNotification = noti;
1256 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1256 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1257 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1257 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1258 mSuspendTimer->start( ms , true ); 1258 mSuspendTimer->start( ms , true );
1259#ifdef DESKTOP_VERSION 1259#ifdef DESKTOP_VERSION
1260 if ( QApplication::desktop()->width() < 1024 ) { 1260 if ( QApplication::desktop()->width() < 1024 ) {
1261 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1261 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1262 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() ); 1262 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() );
1263 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm"; 1263 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm";
1264 QFile file( fn ); 1264 QFile file( fn );
1265 if (!file.open( IO_WriteOnly ) ) { 1265 if (!file.open( IO_WriteOnly ) ) {
1266 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1266 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1267 } else { 1267 } else {
1268 QTextStream ts( &file ); 1268 QTextStream ts( &file );
1269 ts << mess; 1269 ts << mess;
1270 file.close(); 1270 file.close();
1271 } 1271 }
1272 } 1272 }
1273#endif 1273#endif
1274 1274
1275} 1275}
1276 1276
1277void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1277void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1278{ 1278{
1279 mNextAlarmDateTime = qdt; 1279 mNextAlarmDateTime = qdt;
1280 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1280 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1281 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1281 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1282#ifndef DESKTOP_VERSION 1282#ifndef DESKTOP_VERSION
1283 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1283 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1284#endif 1284#endif
1285 return; 1285 return;
1286 } 1286 }
1287#ifdef DESKTOP_VERSION 1287#ifdef DESKTOP_VERSION
1288 if ( QApplication::desktop()->width() < 1024 ) { 1288 if ( QApplication::desktop()->width() < 1024 ) {
1289 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1289 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1290 //qDebug("nextalarm = \n%s ",mess.latin1() ); 1290 //qDebug("nextalarm = \n%s ",mess.latin1() );
1291 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm"; 1291 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm";
1292 QFile file( fn ); 1292 QFile file( fn );
1293 if (!file.open( IO_WriteOnly ) ) { 1293 if (!file.open( IO_WriteOnly ) ) {
1294 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1294 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1295 } else { 1295 } else {
1296 QTextStream ts( &file ); 1296 QTextStream ts( &file );
1297 ts << mess; 1297 ts << mess;
1298 file.close(); 1298 file.close();
1299 } 1299 }
1300 } 1300 }
1301#endif 1301#endif
1302 int maxSec; 1302 int maxSec;
1303 //maxSec = 5; //testing only 1303 //maxSec = 5; //testing only
1304 maxSec = 86400+3600; // one day+1hour 1304 maxSec = 86400+3600; // one day+1hour
1305 mAlarmNotification = noti; 1305 mAlarmNotification = noti;
1306 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1306 int sec = QDateTime::currentDateTime().secsTo( qdt );
1307 if ( sec > maxSec ) { 1307 if ( sec > maxSec ) {
1308 mRecheckAlarmTimer->start( maxSec * 1000 ); 1308 mRecheckAlarmTimer->start( maxSec * 1000 );
1309 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1309 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1310 return; 1310 return;
1311 } else { 1311 } else {
1312 mRecheckAlarmTimer->stop(); 1312 mRecheckAlarmTimer->stop();
1313 } 1313 }
1314 //qDebug("Alarm timer started with secs: %d ", sec); 1314 //qDebug("Alarm timer started with secs: %d ", sec);
1315 mAlarmTimer->start( sec * 1000 , true ); 1315 mAlarmTimer->start( sec * 1000 , true );
1316 1316
1317} 1317}
1318// called by mRecheckAlarmTimer to get next alarm 1318// called by mRecheckAlarmTimer to get next alarm
1319// we need this, because a QTimer has only a max range of 25 days 1319// we need this, because a QTimer has only a max range of 25 days
1320void CalendarView::recheckTimerAlarm() 1320void CalendarView::recheckTimerAlarm()
1321{ 1321{
1322 mAlarmTimer->stop(); 1322 mAlarmTimer->stop();
1323 mRecheckAlarmTimer->stop(); 1323 mRecheckAlarmTimer->stop();
1324 mCalendar->checkAlarmForIncidence( 0, true ); 1324 mCalendar->checkAlarmForIncidence( 0, true );
1325} 1325}
1326#ifndef DESKTOP_VERSION 1326#ifndef DESKTOP_VERSION
1327void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1327void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1328#else 1328#else
1329void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1329void CalendarView::removeAlarm(const QDateTime &, const QString & )
1330#endif 1330#endif
1331{ 1331{
1332 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1332 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1333 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1333 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1334#ifndef DESKTOP_VERSION 1334#ifndef DESKTOP_VERSION
1335 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1335 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1336#endif 1336#endif
1337 return; 1337 return;
1338 } 1338 }
1339 mAlarmTimer->stop(); 1339 mAlarmTimer->stop();
1340} 1340}
1341void CalendarView::selectWeekNum ( int num ) 1341void CalendarView::selectWeekNum ( int num )
1342{ 1342{
1343 dateNavigator()->blockSignals( true ); 1343 dateNavigator()->blockSignals( true );
1344 dateNavigator()->selectWeek( num ); 1344 dateNavigator()->selectWeek( num );
1345 dateNavigator()->blockSignals( false ); 1345 dateNavigator()->blockSignals( false );
1346 mViewManager->showWeekView(); 1346 mViewManager->showWeekView();
1347} 1347}
1348KOViewManager *CalendarView::viewManager() 1348KOViewManager *CalendarView::viewManager()
1349{ 1349{
1350 return mViewManager; 1350 return mViewManager;
1351} 1351}
1352 1352
1353KODialogManager *CalendarView::dialogManager() 1353KODialogManager *CalendarView::dialogManager()
1354{ 1354{
1355 return mDialogManager; 1355 return mDialogManager;
1356} 1356}
1357 1357
1358QDate CalendarView::startDate() 1358QDate CalendarView::startDate()
1359{ 1359{
1360 DateList dates = mNavigator->selectedDates(); 1360 DateList dates = mNavigator->selectedDates();
1361 1361
1362 return dates.first(); 1362 return dates.first();
1363} 1363}
1364 1364
1365QDate CalendarView::endDate() 1365QDate CalendarView::endDate()
1366{ 1366{
1367 DateList dates = mNavigator->selectedDates(); 1367 DateList dates = mNavigator->selectedDates();
1368 1368
1369 return dates.last(); 1369 return dates.last();
1370} 1370}
1371 1371
1372 1372
1373void CalendarView::createPrinter() 1373void CalendarView::createPrinter()
1374{ 1374{
1375#ifndef KORG_NOPRINTER 1375#ifndef KORG_NOPRINTER
1376 if (!mCalPrinter) { 1376 if (!mCalPrinter) {
1377 mCalPrinter = new CalPrinter(this, mCalendar); 1377 mCalPrinter = new CalPrinter(this, mCalendar);
1378 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1378 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1379 } 1379 }
1380#endif 1380#endif
1381} 1381}
1382 1382
1383 1383
1384//KOPrefs::instance()->mWriteBackFile 1384//KOPrefs::instance()->mWriteBackFile
1385//KOPrefs::instance()->mWriteBackExistingOnly 1385//KOPrefs::instance()->mWriteBackExistingOnly
1386 1386
1387// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1387// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1388// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1388// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1389// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1389// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1390// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1390// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1391// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1391// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1392// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1392// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1393 1393
1394int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1394int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1395{ 1395{
1396 1396
1397 // 0 equal 1397 // 0 equal
1398 // 1 take local 1398 // 1 take local
1399 // 2 take remote 1399 // 2 take remote
1400 // 3 cancel 1400 // 3 cancel
1401 QDateTime lastSync = mLastCalendarSync; 1401 QDateTime lastSync = mLastCalendarSync;
1402 QDateTime localMod = local->lastModified(); 1402 QDateTime localMod = local->lastModified();
1403 QDateTime remoteMod = remote->lastModified(); 1403 QDateTime remoteMod = remote->lastModified();
1404 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1404 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1405 bool remCh, locCh; 1405 bool remCh, locCh;
1406 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1406 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1407 //if ( remCh ) 1407 //if ( remCh )
1408 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1408 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1409 locCh = ( localMod > mLastCalendarSync ); 1409 locCh = ( localMod > mLastCalendarSync );
1410 if ( !remCh && ! locCh ) { 1410 if ( !remCh && ! locCh ) {
1411 //qDebug("both not changed "); 1411 //qDebug("both not changed ");
1412 lastSync = localMod.addDays(1); 1412 lastSync = localMod.addDays(1);
1413 if ( mode <= SYNC_PREF_ASK ) 1413 if ( mode <= SYNC_PREF_ASK )
1414 return 0; 1414 return 0;
1415 } else { 1415 } else {
1416 if ( locCh ) { 1416 if ( locCh ) {
1417 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1417 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1418 lastSync = localMod.addDays( -1 ); 1418 lastSync = localMod.addDays( -1 );
1419 if ( !remCh ) 1419 if ( !remCh )
1420 remoteMod = ( lastSync.addDays( -1 ) ); 1420 remoteMod = ( lastSync.addDays( -1 ) );
1421 } else { 1421 } else {
1422 //qDebug(" not loc changed "); 1422 //qDebug(" not loc changed ");
1423 lastSync = localMod.addDays( 1 ); 1423 lastSync = localMod.addDays( 1 );
1424 if ( remCh ) 1424 if ( remCh )
1425 remoteMod =( lastSync.addDays( 1 ) ); 1425 remoteMod =( lastSync.addDays( 1 ) );
1426 1426
1427 } 1427 }
1428 } 1428 }
1429 full = true; 1429 full = true;
1430 if ( mode < SYNC_PREF_ASK ) 1430 if ( mode < SYNC_PREF_ASK )
1431 mode = SYNC_PREF_ASK; 1431 mode = SYNC_PREF_ASK;
1432 } else { 1432 } else {
1433 if ( localMod == remoteMod ) 1433 if ( localMod == remoteMod )
1434 // if ( local->revision() == remote->revision() ) 1434 // if ( local->revision() == remote->revision() )
1435 return 0; 1435 return 0;
1436 1436
1437 } 1437 }
1438 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1438 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1439 1439
1440 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1440 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
1441 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 1441 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1442 //full = true; //debug only 1442 //full = true; //debug only
1443 if ( full ) { 1443 if ( full ) {
1444 bool equ = false; 1444 bool equ = false;
1445 if ( local->typeID() == eventID ) { 1445 if ( local->typeID() == eventID ) {
1446 equ = (*((Event*) local) == *((Event*) remote)); 1446 equ = (*((Event*) local) == *((Event*) remote));
1447 } 1447 }
1448 else if ( local->typeID() == todoID ) 1448 else if ( local->typeID() == todoID )
1449 equ = (*((Todo*) local) == (*(Todo*) remote)); 1449 equ = (*((Todo*) local) == (*(Todo*) remote));
1450 else if ( local->typeID() == journalID ) 1450 else if ( local->typeID() == journalID )
1451 equ = (*((Journal*) local) == *((Journal*) remote)); 1451 equ = (*((Journal*) local) == *((Journal*) remote));
1452 if ( equ ) { 1452 if ( equ ) {
1453 //qDebug("equal "); 1453 //qDebug("equal ");
1454 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1454 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1455 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1455 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1456 } 1456 }
1457 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1457 if ( mode < SYNC_PREF_FORCE_LOCAL )
1458 return 0; 1458 return 0;
1459 1459
1460 }//else //debug only 1460 }//else //debug only
1461 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1461 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1462 } 1462 }
1463 int result; 1463 int result;
1464 bool localIsNew; 1464 bool localIsNew;
1465 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 1465 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
1466 1466
1467 1467
1468 // ************************************************ 1468 // ************************************************
1469 // ************************************************ 1469 // ************************************************
1470 // ************************************************ 1470 // ************************************************
1471 // We may have that lastSync > remoteMod AND lastSync > localMod 1471 // We may have that lastSync > remoteMod AND lastSync > localMod
1472 // BUT remoteMod != localMod 1472 // BUT remoteMod != localMod
1473 1473
1474 1474
1475 if ( full && mode < SYNC_PREF_NEWEST ) 1475 if ( full && mode < SYNC_PREF_NEWEST )
1476 mode = SYNC_PREF_ASK; 1476 mode = SYNC_PREF_ASK;
1477 1477
1478 switch( mode ) { 1478 switch( mode ) {
1479 case SYNC_PREF_LOCAL: 1479 case SYNC_PREF_LOCAL:
1480 if ( lastSync > remoteMod ) 1480 if ( lastSync > remoteMod )
1481 return 1; 1481 return 1;
1482 if ( lastSync > localMod ) 1482 if ( lastSync > localMod )
1483 return 2; 1483 return 2;
1484 return 1; 1484 return 1;
1485 break; 1485 break;
1486 case SYNC_PREF_REMOTE: 1486 case SYNC_PREF_REMOTE:
1487 if ( lastSync > localMod ) 1487 if ( lastSync > localMod )
1488 return 2; 1488 return 2;
1489 if ( lastSync > remoteMod ) 1489 if ( lastSync > remoteMod )
1490 return 1; 1490 return 1;
1491 return 2; 1491 return 2;
1492 break; 1492 break;
1493 case SYNC_PREF_NEWEST: 1493 case SYNC_PREF_NEWEST:
1494 if ( localMod >= remoteMod ) 1494 if ( localMod >= remoteMod )
1495 return 1; 1495 return 1;
1496 else 1496 else
1497 return 2; 1497 return 2;
1498 break; 1498 break;
1499 case SYNC_PREF_ASK: 1499 case SYNC_PREF_ASK:
1500 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1500 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1501 if ( lastSync > remoteMod && lastSync > localMod) 1501 if ( lastSync > remoteMod && lastSync > localMod)
1502 return 0; 1502 return 0;
1503 if ( lastSync > remoteMod ) 1503 if ( lastSync > remoteMod )
1504 return 1; 1504 return 1;
1505 if ( lastSync > localMod ) 1505 if ( lastSync > localMod )
1506 return 2; 1506 return 2;
1507 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1507 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1508 localIsNew = localMod >= remoteMod; 1508 localIsNew = localMod >= remoteMod;
1509 if ( localIsNew ) 1509 if ( localIsNew )
1510 getEventViewerDialog()->setColorMode( 1 ); 1510 getEventViewerDialog()->setColorMode( 1 );
1511 else 1511 else
1512 getEventViewerDialog()->setColorMode( 2 ); 1512 getEventViewerDialog()->setColorMode( 2 );
1513 getEventViewerDialog()->setIncidence(local); 1513 getEventViewerDialog()->setIncidence(local);
1514 if ( localIsNew ) 1514 if ( localIsNew )
1515 getEventViewerDialog()->setColorMode( 2 ); 1515 getEventViewerDialog()->setColorMode( 2 );
1516 else 1516 else
1517 getEventViewerDialog()->setColorMode( 1 ); 1517 getEventViewerDialog()->setColorMode( 1 );
1518 getEventViewerDialog()->addIncidence(remote); 1518 getEventViewerDialog()->addIncidence(remote);
1519 getEventViewerDialog()->setColorMode( 0 ); 1519 getEventViewerDialog()->setColorMode( 0 );
1520 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1520 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1521 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1521 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1522 getEventViewerDialog()->showMe(); 1522 getEventViewerDialog()->showMe();
1523 result = getEventViewerDialog()->executeS( localIsNew ); 1523 result = getEventViewerDialog()->executeS( localIsNew );
1524 return result; 1524 return result;
1525 1525
1526 break; 1526 break;
1527 case SYNC_PREF_FORCE_LOCAL: 1527 case SYNC_PREF_FORCE_LOCAL:
1528 return 1; 1528 return 1;
1529 break; 1529 break;
1530 case SYNC_PREF_FORCE_REMOTE: 1530 case SYNC_PREF_FORCE_REMOTE:
1531 return 2; 1531 return 2;
1532 break; 1532 break;
1533 1533
1534 default: 1534 default:
1535 // SYNC_PREF_TAKE_BOTH not implemented 1535 // SYNC_PREF_TAKE_BOTH not implemented
1536 break; 1536 break;
1537 } 1537 }
1538 return 0; 1538 return 0;
1539} 1539}
1540Event* CalendarView::getLastSyncEvent() 1540Event* CalendarView::getLastSyncEvent()
1541{ 1541{
1542 Event* lse; 1542 Event* lse;
1543 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1543 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1544 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1544 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1545 if (!lse) { 1545 if (!lse) {
1546 lse = new Event(); 1546 lse = new Event();
1547 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1547 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1548 QString sum = ""; 1548 QString sum = "";
1549 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1549 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1550 sum = "E: "; 1550 sum = "E: ";
1551 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1551 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1552 lse->setDtStart( mLastCalendarSync ); 1552 lse->setDtStart( mLastCalendarSync );
1553 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1553 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1554 lse->setCategories( i18n("SyncEvent") ); 1554 lse->setCategories( i18n("SyncEvent") );
1555 lse->setReadOnly( true ); 1555 lse->setReadOnly( true );
1556 lse->setCalID( 1 ); 1556 lse->setCalID( 1 );
1557 mCalendar->addEvent( lse ); 1557 mCalendar->addEvent( lse );
1558 } 1558 }
1559 1559
1560 return lse; 1560 return lse;
1561 1561
1562} 1562}
1563 1563
1564// we check, if the to delete event has a id for a profile 1564// we check, if the to delete event has a id for a profile
1565// if yes, we set this id in the profile to delete 1565// if yes, we set this id in the profile to delete
1566void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1566void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1567{ 1567{
1568 if ( lastSync.count() == 0 ) { 1568 if ( lastSync.count() == 0 ) {
1569 //qDebug(" lastSync.count() == 0"); 1569 //qDebug(" lastSync.count() == 0");
1570 return; 1570 return;
1571 } 1571 }
1572 if ( toDelete->typeID() == journalID ) 1572 if ( toDelete->typeID() == journalID )
1573 return; 1573 return;
1574 1574
1575 Event* eve = lastSync.first(); 1575 Event* eve = lastSync.first();
1576 1576
1577 while ( eve ) { 1577 while ( eve ) {
1578 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1578 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1579 if ( !id.isEmpty() ) { 1579 if ( !id.isEmpty() ) {
1580 QString des = eve->description(); 1580 QString des = eve->description();
1581 QString pref = "e"; 1581 QString pref = "e";
1582 if ( toDelete->typeID() == todoID ) 1582 if ( toDelete->typeID() == todoID )
1583 pref = "t"; 1583 pref = "t";
1584 des += pref+ id + ","; 1584 des += pref+ id + ",";
1585 eve->setReadOnly( false ); 1585 eve->setReadOnly( false );
1586 eve->setDescription( des ); 1586 eve->setDescription( des );
1587 //qDebug("setdes %s ", des.latin1()); 1587 //qDebug("setdes %s ", des.latin1());
1588 eve->setReadOnly( true ); 1588 eve->setReadOnly( true );
1589 } 1589 }
1590 eve = lastSync.next(); 1590 eve = lastSync.next();
1591 } 1591 }
1592 1592
1593} 1593}
1594void CalendarView::checkExternalId( Incidence * inc ) 1594void CalendarView::checkExternalId( Incidence * inc )
1595{ 1595{
1596 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1596 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1597 checkExternSyncEvent( lastSync, inc ); 1597 checkExternSyncEvent( lastSync, inc );
1598 1598
1599} 1599}
1600bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1600bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1601{ 1601{
1602 bool syncOK = true; 1602 bool syncOK = true;
1603 int addedEvent = 0; 1603 int addedEvent = 0;
1604 int addedEventR = 0; 1604 int addedEventR = 0;
1605 int deletedEventR = 0; 1605 int deletedEventR = 0;
1606 int deletedEventL = 0; 1606 int deletedEventL = 0;
1607 int changedLocal = 0; 1607 int changedLocal = 0;
1608 int changedRemote = 0; 1608 int changedRemote = 0;
1609 int filteredIN = 0; 1609 int filteredIN = 0;
1610 int filteredOUT = 0; 1610 int filteredOUT = 0;
1611 //QPtrList<Event> el = local->rawEvents(); 1611 //QPtrList<Event> el = local->rawEvents();
1612 Event* eventR; 1612 Event* eventR;
1613 QString uid; 1613 QString uid;
1614 int take; 1614 int take;
1615 Event* eventRSync; 1615 Event* eventRSync;
1616 Event* eventLSync; 1616 Event* eventLSync;
1617 clearAllViews(); 1617 clearAllViews();
1618 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1618 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1619 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1619 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1620 bool fullDateRange = false; 1620 bool fullDateRange = false;
1621 local->resetTempSyncStat(); 1621 local->resetTempSyncStat();
1622 mLastCalendarSync = QDateTime::currentDateTime(); 1622 mLastCalendarSync = QDateTime::currentDateTime();
1623 if ( mSyncManager->syncWithDesktop() ) { 1623 if ( mSyncManager->syncWithDesktop() ) {
1624 remote->resetPilotStat(1); 1624 remote->resetPilotStat(1);
1625 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1625 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1626 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1626 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1627 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1627 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1628 } else { 1628 } else {
1629 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1629 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1630 } 1630 }
1631 } 1631 }
1632 QDateTime modifiedCalendar = mLastCalendarSync; 1632 QDateTime modifiedCalendar = mLastCalendarSync;
1633 eventLSync = getLastSyncEvent(); 1633 eventLSync = getLastSyncEvent();
1634 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1634 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1635 if ( eventR ) { 1635 if ( eventR ) {
1636 qDebug("last-syncEvent on remote found "); 1636 qDebug("last-syncEvent on remote found ");
1637 eventRSync = (Event*) eventR->clone(); 1637 eventRSync = (Event*) eventR->clone();
1638 remote->deleteEvent(eventR ); 1638 remote->deleteEvent(eventR );
1639 1639
1640 } else { 1640 } else {
1641 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1641 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1642 eventRSync = (Event*)eventLSync->clone(); 1642 eventRSync = (Event*)eventLSync->clone();
1643 } else { 1643 } else {
1644 fullDateRange = true; 1644 fullDateRange = true;
1645 eventRSync = new Event(); 1645 eventRSync = new Event();
1646 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1646 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1647 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1647 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1648 eventRSync->setDtStart( mLastCalendarSync ); 1648 eventRSync->setDtStart( mLastCalendarSync );
1649 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1649 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1650 eventRSync->setCategories( i18n("SyncEvent") ); 1650 eventRSync->setCategories( i18n("SyncEvent") );
1651 } 1651 }
1652 } 1652 }
1653 if ( eventLSync->dtStart() == mLastCalendarSync ) 1653 if ( eventLSync->dtStart() == mLastCalendarSync )
1654 fullDateRange = true; 1654 fullDateRange = true;
1655 1655
1656 if ( ! fullDateRange ) { 1656 if ( ! fullDateRange ) {
1657 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1657 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1658 1658
1659 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1659 qDebug("KO: Sync: Set fulldate to true! Local: %s --- Remote: %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1660 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1660 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1661 fullDateRange = true; 1661 fullDateRange = true;
1662 } 1662 }
1663 } 1663 }
1664 if ( mSyncManager->syncWithDesktop() ) { 1664 if ( mSyncManager->syncWithDesktop() ) {
1665 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1665 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1666 } 1666 }
1667 if ( fullDateRange ) 1667 if ( fullDateRange )
1668 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1668 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1669 else 1669 else
1670 mLastCalendarSync = eventLSync->dtStart(); 1670 mLastCalendarSync = eventLSync->dtStart();
1671 // for resyncing if own file has changed 1671 // for resyncing if own file has changed
1672 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1672 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1673 mLastCalendarSync = loadedFileVersion; 1673 mLastCalendarSync = loadedFileVersion;
1674 //qDebug("setting mLastCalendarSync "); 1674 //qDebug("setting mLastCalendarSync ");
1675 } 1675 }
1676 //qDebug("*************************** "); 1676 //qDebug("*************************** ");
1677 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1677 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1678 QPtrList<Incidence> er = remote->rawIncidences(); 1678 QPtrList<Incidence> er = remote->rawIncidences();
1679 Incidence* inR = er.first(); 1679 Incidence* inR = er.first();
1680 Incidence* inL; 1680 Incidence* inL;
1681 QProgressBar bar( er.count(),0 ); 1681 QProgressBar bar( er.count(),0 );
1682 bar.setCaption (i18n("Syncing - close to abort!") ); 1682 bar.setCaption (i18n("Syncing - close to abort!") );
1683 1683
1684 // ************** setting up filter ************* 1684 // ************** setting up filter *************
1685 CalFilter *filterIN = 0; 1685 CalFilter *filterIN = 0;
1686 CalFilter *filterOUT = 0; 1686 CalFilter *filterOUT = 0;
1687 CalFilter *filter = mFilters.first(); 1687 CalFilter *filter = mFilters.first();
1688 while(filter) { 1688 while(filter) {
1689 if ( filter->name() == mSyncManager->mFilterInCal ) 1689 if ( filter->name() == mSyncManager->mFilterInCal )
1690 filterIN = filter; 1690 filterIN = filter;
1691 if ( filter->name() == mSyncManager->mFilterOutCal ) 1691 if ( filter->name() == mSyncManager->mFilterOutCal )
1692 filterOUT = filter; 1692 filterOUT = filter;
1693 filter = mFilters.next(); 1693 filter = mFilters.next();
1694 } 1694 }
1695 int w = 300; 1695 int w = 300;
1696 if ( QApplication::desktop()->width() < 320 ) 1696 if ( QApplication::desktop()->width() < 320 )
1697 w = 220; 1697 w = 220;
1698 int h = bar.sizeHint().height() ; 1698 int h = bar.sizeHint().height() ;
1699 int dw = QApplication::desktop()->width(); 1699 int dw = QApplication::desktop()->width();
1700 int dh = QApplication::desktop()->height(); 1700 int dh = QApplication::desktop()->height();
1701 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1701 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1702 bar.show(); 1702 bar.show();
1703 int modulo = (er.count()/10)+1; 1703 int modulo = (er.count()/10)+1;
1704 int incCounter = 0; 1704 int incCounter = 0;
1705 while ( inR ) { 1705 while ( inR ) {
1706 if ( ! bar.isVisible() ) 1706 if ( ! bar.isVisible() )
1707 return false; 1707 return false;
1708 if ( incCounter % modulo == 0 ) 1708 if ( incCounter % modulo == 0 )
1709 bar.setProgress( incCounter ); 1709 bar.setProgress( incCounter );
1710 ++incCounter; 1710 ++incCounter;
1711 uid = inR->uid(); 1711 uid = inR->uid();
1712 bool skipIncidence = false; 1712 bool skipIncidence = false;
1713 if ( uid.left(15) == QString("last-syncEvent-") ) 1713 if ( uid.left(15) == QString("last-syncEvent-") )
1714 skipIncidence = true; 1714 skipIncidence = true;
1715 QString idS; 1715 QString idS;
1716 qApp->processEvents(); 1716 qApp->processEvents();
1717 if ( !skipIncidence ) { 1717 if ( !skipIncidence ) {
1718 inL = local->incidenceForUid( uid , false ); 1718 inL = local->incidenceForUid( uid , false );
1719 if ( inL ) { // maybe conflict - same uid in both calendars 1719 if ( inL ) { // maybe conflict - same uid in both calendars
1720 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1720 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1721 //qDebug("take %d %s ", take, inL->summary().latin1()); 1721 //qDebug("take %d %s ", take, inL->summary().latin1());
1722 if ( take == 3 ) 1722 if ( take == 3 )
1723 return false; 1723 return false;
1724 if ( take == 1 ) {// take local ********************** 1724 if ( take == 1 ) {// take local **********************
1725 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1725 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1726 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1726 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1727 else 1727 else
1728 idS = inR->IDStr(); 1728 idS = inR->IDStr();
1729 int calID = inR->calID(); 1729 int calID = inR->calID();
1730 remote->deleteIncidence( inR ); 1730 remote->deleteIncidence( inR );
1731 inR = inL->clone(); 1731 inR = inL->clone();
1732 inR->setCalID( calID ); 1732 inR->setCalID( calID );
1733 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1733 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1734 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1734 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1735 inR->setIDStr( idS ); 1735 inR->setIDStr( idS );
1736 remote->addIncidence( inR ); 1736 remote->addIncidence( inR );
1737 if ( mSyncManager->syncWithDesktop() ) 1737 if ( mSyncManager->syncWithDesktop() )
1738 inR->setPilotId( 2 ); 1738 inR->setPilotId( 2 );
1739 ++changedRemote; 1739 ++changedRemote;
1740 } else {// take remote ********************** 1740 } else {// take remote **********************
1741 if ( !inL->isReadOnly() ) { 1741 if ( !inL->isReadOnly() ) {
1742 idS = inL->IDStr(); 1742 idS = inL->IDStr();
1743 int pid = inL->pilotId(); 1743 int pid = inL->pilotId();
1744 int calID = inL->calID(); 1744 int calID = inL->calID();
1745 local->deleteIncidence( inL ); 1745 local->deleteIncidence( inL );
1746 inL = inR->clone(); 1746 inL = inR->clone();
1747 inL->setCalID( calID ); 1747 inL->setCalID( calID );
1748 if ( mSyncManager->syncWithDesktop() ) 1748 if ( mSyncManager->syncWithDesktop() )
1749 inL->setPilotId( pid ); 1749 inL->setPilotId( pid );
1750 inL->setIDStr( idS ); 1750 inL->setIDStr( idS );
1751 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1751 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1752 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1752 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1753 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1753 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1754 } 1754 }
1755 local->addIncidence( inL ); 1755 local->addIncidence( inL );
1756 ++changedLocal; 1756 ++changedLocal;
1757 } 1757 }
1758 } 1758 }
1759 } 1759 }
1760 } else { // no conflict ********** add or delete remote 1760 } else { // no conflict ********** add or delete remote
1761 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1761 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1762 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1762 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1763 QString des = eventLSync->description(); 1763 QString des = eventLSync->description();
1764 QString pref = "e"; 1764 QString pref = "e";
1765 if ( inR->typeID() == todoID ) 1765 if ( inR->typeID() == todoID )
1766 pref = "t"; 1766 pref = "t";
1767 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1767 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1768 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1768 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1769 //remote->deleteIncidence( inR ); 1769 //remote->deleteIncidence( inR );
1770 ++deletedEventR; 1770 ++deletedEventR;
1771 } else { 1771 } else {
1772 inR->setLastModified( modifiedCalendar ); 1772 inR->setLastModified( modifiedCalendar );
1773 inL = inR->clone(); 1773 inL = inR->clone();
1774 inL->setIDStr( ":" ); 1774 inL->setIDStr( ":" );
1775 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1775 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1776 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1776 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1777 1777
1778 inL->setCalID( 0 );// add to default cal 1778 inL->setCalID( 0 );// add to default cal
1779 local->addIncidence( inL ); 1779 local->addIncidence( inL );
1780 ++addedEvent; 1780 ++addedEvent;
1781 1781
1782 } 1782 }
1783 } else { 1783 } else {
1784 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1784 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1785 inR->setLastModified( modifiedCalendar ); 1785 inR->setLastModified( modifiedCalendar );
1786 inL = inR->clone(); 1786 inL = inR->clone();
1787 inL->setIDStr( ":" ); 1787 inL->setIDStr( ":" );
1788 inL->setCalID( 0 );// add to default cal 1788 inL->setCalID( 0 );// add to default cal
1789 local->addIncidence( inL ); 1789 local->addIncidence( inL );
1790 ++addedEvent; 1790 ++addedEvent;
1791 1791
1792 } else { 1792 } else {
1793 checkExternSyncEvent(eventRSyncSharp, inR); 1793 checkExternSyncEvent(eventRSyncSharp, inR);
1794 remote->deleteIncidence( inR ); 1794 remote->deleteIncidence( inR );
1795 ++deletedEventR; 1795 ++deletedEventR;
1796 } 1796 }
1797 } 1797 }
1798 } else { 1798 } else {
1799 ++filteredIN; 1799 ++filteredIN;
1800 } 1800 }
1801 } 1801 }
1802 } 1802 }
1803 inR = er.next(); 1803 inR = er.next();
1804 } 1804 }
1805 QPtrList<Incidence> el = local->rawIncidences(); 1805 QPtrList<Incidence> el = local->rawIncidences();
1806 inL = el.first(); 1806 inL = el.first();
1807 modulo = (el.count()/10)+1; 1807 modulo = (el.count()/10)+1;
1808 bar.setCaption (i18n("Add / remove events") ); 1808 bar.setCaption (i18n("Add / remove events") );
1809 bar.setTotalSteps ( el.count() ) ; 1809 bar.setTotalSteps ( el.count() ) ;
1810 bar.show(); 1810 bar.show();
1811 incCounter = 0; 1811 incCounter = 0;
1812 1812
1813 while ( inL ) { 1813 while ( inL ) {
1814 1814
1815 qApp->processEvents(); 1815 qApp->processEvents();
1816 if ( ! bar.isVisible() ) 1816 if ( ! bar.isVisible() )
1817 return false; 1817 return false;
1818 if ( incCounter % modulo == 0 ) 1818 if ( incCounter % modulo == 0 )
1819 bar.setProgress( incCounter ); 1819 bar.setProgress( incCounter );
1820 ++incCounter; 1820 ++incCounter;
1821 uid = inL->uid(); 1821 uid = inL->uid();
1822 bool skipIncidence = false; 1822 bool skipIncidence = false;
1823 if ( uid.left(15) == QString("last-syncEvent-") ) 1823 if ( uid.left(15) == QString("last-syncEvent-") )
1824 skipIncidence = true; 1824 skipIncidence = true;
1825 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1825 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1826 skipIncidence = true; 1826 skipIncidence = true;
1827 if ( !skipIncidence ) { 1827 if ( !skipIncidence ) {
1828 inR = remote->incidenceForUid( uid , true ); 1828 inR = remote->incidenceForUid( uid , true );
1829 if ( ! inR ) { 1829 if ( ! inR ) {
1830 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1830 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1831 // no conflict ********** add or delete local 1831 // no conflict ********** add or delete local
1832 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1832 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1833 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1833 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1834 checkExternSyncEvent(eventLSyncSharp, inL); 1834 checkExternSyncEvent(eventLSyncSharp, inL);
1835 local->deleteIncidence( inL ); 1835 local->deleteIncidence( inL );
1836 ++deletedEventL; 1836 ++deletedEventL;
1837 } else { 1837 } else {
1838 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1838 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1839 inL->removeID(mCurrentSyncDevice ); 1839 inL->removeID(mCurrentSyncDevice );
1840 ++addedEventR; 1840 ++addedEventR;
1841 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1841 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1842 inL->setLastModified( modifiedCalendar ); 1842 inL->setLastModified( modifiedCalendar );
1843 inR = inL->clone(); 1843 inR = inL->clone();
1844 inR->setIDStr( ":" ); 1844 inR->setIDStr( ":" );
1845 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1845 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1846 inR->setCalID( 0 );// add to default cal 1846 inR->setCalID( 0 );// add to default cal
1847 remote->addIncidence( inR ); 1847 remote->addIncidence( inR );
1848 } 1848 }
1849 } 1849 }
1850 } else { 1850 } else {
1851 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1851 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1852 checkExternSyncEvent(eventLSyncSharp, inL); 1852 checkExternSyncEvent(eventLSyncSharp, inL);
1853 local->deleteIncidence( inL ); 1853 local->deleteIncidence( inL );
1854 ++deletedEventL; 1854 ++deletedEventL;
1855 } else { 1855 } else {
1856 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1856 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1857 ++addedEventR; 1857 ++addedEventR;
1858 inL->setLastModified( modifiedCalendar ); 1858 inL->setLastModified( modifiedCalendar );
1859 inR = inL->clone(); 1859 inR = inL->clone();
1860 inR->setIDStr( ":" ); 1860 inR->setIDStr( ":" );
1861 inR->setCalID( 0 );// add to default cal 1861 inR->setCalID( 0 );// add to default cal
1862 remote->addIncidence( inR ); 1862 remote->addIncidence( inR );
1863 } 1863 }
1864 } 1864 }
1865 } 1865 }
1866 } else { 1866 } else {
1867 ++filteredOUT; 1867 ++filteredOUT;
1868 } 1868 }
1869 } 1869 }
1870 } 1870 }
1871 inL = el.next(); 1871 inL = el.next();
1872 } 1872 }
1873 int delFut = 0; 1873 int delFut = 0;
1874 int remRem = 0; 1874 int remRem = 0;
1875 if ( mSyncManager->mWriteBackInFuture ) { 1875 if ( mSyncManager->mWriteBackInFuture ) {
1876 er = remote->rawIncidences(); 1876 er = remote->rawIncidences();
1877 remRem = er.count(); 1877 remRem = er.count();
1878 inR = er.first(); 1878 inR = er.first();
1879 QDateTime dt; 1879 QDateTime dt;
1880 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1880 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1881 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1881 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1882 while ( inR ) { 1882 while ( inR ) {
1883 if ( inR->typeID() == todoID ) { 1883 if ( inR->typeID() == todoID ) {
1884 Todo * t = (Todo*)inR; 1884 Todo * t = (Todo*)inR;
1885 if ( t->hasDueDate() ) 1885 if ( t->hasDueDate() )
1886 dt = t->dtDue(); 1886 dt = t->dtDue();
1887 else 1887 else
1888 dt = cur.addSecs( 62 ); 1888 dt = cur.addSecs( 62 );
1889 } 1889 }
1890 else if (inR->typeID() == eventID ) { 1890 else if (inR->typeID() == eventID ) {
1891 bool ok; 1891 bool ok;
1892 dt = inR->getNextOccurence( cur, &ok ); 1892 dt = inR->getNextOccurence( cur, &ok );
1893 if ( !ok ) 1893 if ( !ok )
1894 dt = cur.addSecs( -62 ); 1894 dt = cur.addSecs( -62 );
1895 } 1895 }
1896 else 1896 else
1897 dt = inR->dtStart(); 1897 dt = inR->dtStart();
1898 if ( dt < cur || dt > end ) { 1898 if ( dt < cur || dt > end ) {
1899 remote->deleteIncidence( inR ); 1899 remote->deleteIncidence( inR );
1900 ++delFut; 1900 ++delFut;
1901 } 1901 }
1902 inR = er.next(); 1902 inR = er.next();
1903 } 1903 }
1904 } 1904 }
1905 bar.hide(); 1905 bar.hide();
1906 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1906 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1907 if ( mMultiResourceSync ) { 1907 if ( mMultiResourceSync ) {
1908 remote->removeSyncInfo( "" ); //all 1908 remote->removeSyncInfo( "" ); //all
1909 1909
1910 } else { 1910 } else {
1911 eventLSync->setReadOnly( false ); 1911 eventLSync->setReadOnly( false );
1912 eventLSync->setDtStart( mLastCalendarSync ); 1912 eventLSync->setDtStart( mLastCalendarSync );
1913 eventRSync->setDtStart( mLastCalendarSync ); 1913 eventRSync->setDtStart( mLastCalendarSync );
1914 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1914 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1915 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1915 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1916 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1916 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1917 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1917 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1918 eventLSync->setReadOnly( true ); 1918 eventLSync->setReadOnly( true );
1919 } 1919 }
1920 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1920 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1921 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop() && !mMultiResourceSync ) // kde is abnormal... 1921 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop() && !mMultiResourceSync ) // kde is abnormal...
1922 remote->addEvent( eventRSync ); 1922 remote->addEvent( eventRSync );
1923 else 1923 else
1924 delete eventRSync; 1924 delete eventRSync;
1925 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1925 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1926 QString mes; 1926 QString mes;
1927 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 %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT ); 1927 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 %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT );
1928 QString delmess; 1928 QString delmess;
1929 if ( delFut ) { 1929 if ( delFut ) {
1930 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut); 1930 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut);
1931 mes += delmess; 1931 mes += delmess;
1932 } 1932 }
1933 mes = i18n("Local calendar changed!\n") +mes; 1933 mes = i18n("Local calendar changed!\n") +mes;
1934 mCalendar->checkAlarmForIncidence( 0, true ); 1934 mCalendar->checkAlarmForIncidence( 0, true );
1935 qDebug( mes ); 1935 qDebug( mes );
1936 if ( mSyncManager->mShowSyncSummary ) { 1936 if ( mSyncManager->mShowSyncSummary ) {
1937 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1937 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1938 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1938 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1939 qDebug("KO: WB cancelled "); 1939 qDebug("KO: WB cancelled ");
1940 mSyncManager->mWriteBackFile = false; 1940 mSyncManager->mWriteBackFile = false;
1941 return syncOK; 1941 return syncOK;
1942 } 1942 }
1943 } 1943 }
1944 return syncOK; 1944 return syncOK;
1945} 1945}
1946 1946
1947void CalendarView::setSyncDevice( QString s ) 1947void CalendarView::setSyncDevice( QString s )
1948{ 1948{
1949 mCurrentSyncDevice= s; 1949 mCurrentSyncDevice= s;
1950} 1950}
1951void CalendarView::setSyncName( QString s ) 1951void CalendarView::setSyncName( QString s )
1952{ 1952{
1953 mCurrentSyncName= s; 1953 mCurrentSyncName= s;
1954} 1954}
1955bool CalendarView::syncCalendar(QString filename, int mode) 1955bool CalendarView::syncCalendar(QString filename, int mode)
1956{ 1956{
1957 //qDebug("syncCalendar %s ", filename.latin1()); 1957 //qDebug("syncCalendar %s ", filename.latin1());
1958 mGlobalSyncMode = SYNC_MODE_NORMAL; 1958 mGlobalSyncMode = SYNC_MODE_NORMAL;
1959 CalendarLocal* calendar = new CalendarLocal(); 1959 CalendarLocal* calendar = new CalendarLocal();
1960 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1960 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1961 FileStorage* storage = new FileStorage( calendar ); 1961 FileStorage* storage = new FileStorage( calendar );
1962 bool syncOK = false; 1962 bool syncOK = false;
1963 storage->setFileName( filename ); 1963 storage->setFileName( filename );
1964 // qDebug("loading ... "); 1964 // qDebug("loading ... ");
1965 if ( storage->load() ) { 1965 if ( storage->load() ) {
1966 getEventViewerDialog()->setSyncMode( true ); 1966 getEventViewerDialog()->setSyncMode( true );
1967 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1967 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1968 getEventViewerDialog()->setSyncMode( false ); 1968 getEventViewerDialog()->setSyncMode( false );
1969 if ( syncOK ) { 1969 if ( syncOK ) {
1970 if ( mSyncManager->mWriteBackFile ) 1970 if ( mSyncManager->mWriteBackFile )
1971 { 1971 {
1972 storage->setSaveFormat( new ICalFormat() ); 1972 storage->setSaveFormat( new ICalFormat() );
1973 storage->save(); 1973 storage->save();
1974 } 1974 }
1975 } 1975 }
1976 setModified( true ); 1976 setModified( true );
1977 } 1977 }
1978 delete storage; 1978 delete storage;
1979 delete calendar; 1979 delete calendar;
1980 if ( syncOK ) 1980 if ( syncOK )
1981 updateView(); 1981 updateView();
1982 return syncOK; 1982 return syncOK;
1983} 1983}
1984 1984
1985void CalendarView::syncExternal( int mode ) 1985void CalendarView::syncExternal( int mode )
1986{ 1986{
1987 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1987 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1988 qApp->processEvents(); 1988 qApp->processEvents();
1989 CalendarLocal* calendar = new CalendarLocal(); 1989 CalendarLocal* calendar = new CalendarLocal();
1990 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1990 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1991 bool syncOK = false; 1991 bool syncOK = false;
1992 bool loadSuccess = false; 1992 bool loadSuccess = false;
1993 PhoneFormat* phoneFormat = 0; 1993 PhoneFormat* phoneFormat = 0;
1994 emit tempDisableBR(true); 1994 emit tempDisableBR(true);
1995#ifndef DESKTOP_VERSION 1995#ifndef DESKTOP_VERSION
1996 SharpFormat* sharpFormat = 0; 1996 SharpFormat* sharpFormat = 0;
1997 if ( mode == 0 ) { // sharp 1997 if ( mode == 0 ) { // sharp
1998 sharpFormat = new SharpFormat () ; 1998 sharpFormat = new SharpFormat () ;
1999 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1999 loadSuccess = sharpFormat->load( calendar, mCalendar );
2000 2000
2001 } else 2001 } else
2002#endif 2002#endif
2003 if ( mode == 1 ) { // phone 2003 if ( mode == 1 ) { // phone
2004 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 2004 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
2005 mSyncManager->mPhoneDevice, 2005 mSyncManager->mPhoneDevice,
2006 mSyncManager->mPhoneConnection, 2006 mSyncManager->mPhoneConnection,
2007 mSyncManager->mPhoneModel); 2007 mSyncManager->mPhoneModel);
2008 loadSuccess = phoneFormat->load( calendar,mCalendar); 2008 loadSuccess = phoneFormat->load( calendar,mCalendar);
2009 2009
2010 } else { 2010 } else {
2011 emit tempDisableBR(false); 2011 emit tempDisableBR(false);
2012 return; 2012 return;
2013 } 2013 }
2014 if ( loadSuccess ) { 2014 if ( loadSuccess ) {
2015 getEventViewerDialog()->setSyncMode( true ); 2015 getEventViewerDialog()->setSyncMode( true );
2016 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2016 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2017 getEventViewerDialog()->setSyncMode( false ); 2017 getEventViewerDialog()->setSyncMode( false );
2018 qApp->processEvents(); 2018 qApp->processEvents();
2019 if ( syncOK ) { 2019 if ( syncOK ) {
2020 if ( mSyncManager->mWriteBackFile ) 2020 if ( mSyncManager->mWriteBackFile )
2021 { 2021 {
2022 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 2022 QPtrList<Incidence> iL = mCalendar->rawIncidences();
2023 Incidence* inc = iL.first(); 2023 Incidence* inc = iL.first();
2024 if ( phoneFormat ) { 2024 if ( phoneFormat ) {
2025 while ( inc ) { 2025 while ( inc ) {
2026 inc->removeID(mCurrentSyncDevice); 2026 inc->removeID(mCurrentSyncDevice);
2027 inc = iL.next(); 2027 inc = iL.next();
2028 } 2028 }
2029 } 2029 }
2030#ifndef DESKTOP_VERSION 2030#ifndef DESKTOP_VERSION
2031 if ( sharpFormat ) 2031 if ( sharpFormat )
2032 sharpFormat->save(calendar); 2032 sharpFormat->save(calendar);
2033#endif 2033#endif
2034 if ( phoneFormat ) 2034 if ( phoneFormat )
2035 phoneFormat->save(calendar); 2035 phoneFormat->save(calendar);
2036 iL = calendar->rawIncidences(); 2036 iL = calendar->rawIncidences();
2037 inc = iL.first(); 2037 inc = iL.first();
2038 Incidence* loc; 2038 Incidence* loc;
2039 while ( inc ) { 2039 while ( inc ) {
2040 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 2040 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
2041 loc = mCalendar->incidence(inc->uid() ); 2041 loc = mCalendar->incidence(inc->uid() );
2042 if ( loc ) { 2042 if ( loc ) {
2043 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 2043 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
2044 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 2044 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
2045 } 2045 }
2046 } 2046 }
2047 inc = iL.next(); 2047 inc = iL.next();
2048 } 2048 }
2049 Incidence* lse = getLastSyncEvent(); 2049 Incidence* lse = getLastSyncEvent();
2050 if ( lse ) { 2050 if ( lse ) {
2051 lse->setReadOnly( false ); 2051 lse->setReadOnly( false );
2052 lse->setDescription( "" ); 2052 lse->setDescription( "" );
2053 lse->setReadOnly( true ); 2053 lse->setReadOnly( true );
2054 } 2054 }
2055 } 2055 }
2056 } else { 2056 } else {
2057 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 2057 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
2058 } 2058 }
2059 setModified( true ); 2059 setModified( true );
2060 } else { 2060 } else {
2061 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 2061 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
2062 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 2062 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
2063 question, i18n("Ok")) ; 2063 question, i18n("Ok")) ;
2064 2064
2065 } 2065 }
2066 delete calendar; 2066 delete calendar;
2067 updateView(); 2067 updateView();
2068 emit tempDisableBR(false); 2068 emit tempDisableBR(false);
2069 return ;//syncOK; 2069 return ;//syncOK;
2070 2070
2071} 2071}
2072 2072
2073bool CalendarView::importBday() 2073bool CalendarView::importBday()
2074{ 2074{
2075#ifndef KORG_NOKABC 2075#ifndef KORG_NOKABC
2076 2076
2077#ifdef DESKTOP_VERSION 2077#ifdef DESKTOP_VERSION
2078 int curCal = mCalendar->defaultCalendar(); 2078 int curCal = mCalendar->defaultCalendar();
2079 int bd = mCalEditView->getBirtdayID(); 2079 int bd = mCalEditView->getBirtdayID();
2080 if ( bd == 0 ) 2080 if ( bd == 0 )
2081 return false; 2081 return false;
2082 mCalendar->setDefaultCalendar( bd ); 2082 mCalendar->setDefaultCalendar( bd );
2083 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 2083 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
2084 KABC::AddressBook::Iterator it; 2084 KABC::AddressBook::Iterator it;
2085 int count = 0; 2085 int count = 0;
2086 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2086 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2087 ++count; 2087 ++count;
2088 } 2088 }
2089 QProgressBar bar(count,0 ); 2089 QProgressBar bar(count,0 );
2090 int w = 300; 2090 int w = 300;
2091 if ( QApplication::desktop()->width() < 320 ) 2091 if ( QApplication::desktop()->width() < 320 )
2092 w = 220; 2092 w = 220;
2093 int h = bar.sizeHint().height() ; 2093 int h = bar.sizeHint().height() ;
2094 int dw = QApplication::desktop()->width(); 2094 int dw = QApplication::desktop()->width();
2095 int dh = QApplication::desktop()->height(); 2095 int dh = QApplication::desktop()->height();
2096 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2096 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2097 bar.show(); 2097 bar.show();
2098 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 2098 bar.setCaption (i18n("Reading addressbook - close to abort!") );
2099 qApp->processEvents(); 2099 qApp->processEvents();
2100 count = 0; 2100 count = 0;
2101 int addCount = 0; 2101 int addCount = 0;
2102 KCal::Attendee* a = 0; 2102 KCal::Attendee* a = 0;
2103 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2103 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2104 if ( ! bar.isVisible() ) 2104 if ( ! bar.isVisible() )
2105 return false; 2105 return false;
2106 bar.setProgress( count++ ); 2106 bar.setProgress( count++ );
2107 qApp->processEvents(); 2107 qApp->processEvents();
2108 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 2108 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
2109 if ( (*it).birthday().date().isValid() ){ 2109 if ( (*it).birthday().date().isValid() ){
2110 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2110 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2111 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 2111 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
2112 ++addCount; 2112 ++addCount;
2113 } 2113 }
2114 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 2114 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
2115 if ( anni.isValid() ){ 2115 if ( anni.isValid() ){
2116 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2116 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2117 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 2117 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
2118 ++addCount; 2118 ++addCount;
2119 } 2119 }
2120 } 2120 }
2121 mCalendar->setDefaultCalendar( curCal ); 2121 mCalendar->setDefaultCalendar( curCal );
2122 updateView(); 2122 updateView();
2123 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2123 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2124#else //DESKTOP_VERSION 2124#else //DESKTOP_VERSION
2125 2125
2126 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 2126 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
2127 // the result should now arrive through method insertBirthdays 2127 // the result should now arrive through method insertBirthdays
2128 2128
2129#endif //DESKTOP_VERSION 2129#endif //DESKTOP_VERSION
2130 2130
2131#endif //KORG_NOKABC 2131#endif //KORG_NOKABC
2132 2132
2133 2133
2134 return true; 2134 return true;
2135} 2135}
2136 2136
2137// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 2137// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
2138void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 2138void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
2139 const QStringList& anniversaryList, const QStringList& realNameList, 2139 const QStringList& anniversaryList, const QStringList& realNameList,
2140 const QStringList& emailList, const QStringList& assembledNameList, 2140 const QStringList& emailList, const QStringList& assembledNameList,
2141 const QStringList& uidList) 2141 const QStringList& uidList)
2142{ 2142{
2143 2143
2144 //qDebug("KO::CalendarView::insertBirthdays"); 2144 //qDebug("KO::CalendarView::insertBirthdays");
2145 if (uid == this->name()) 2145 if (uid == this->name())
2146 { 2146 {
2147 int curCal = mCalendar->defaultCalendar(); 2147 int curCal = mCalendar->defaultCalendar();
2148 int bd = mCalEditView->getBirtdayID(); 2148 int bd = mCalEditView->getBirtdayID();
2149 if ( bd == 0 ) 2149 if ( bd == 0 )
2150 return; 2150 return;
2151 mCalendar->setDefaultCalendar( bd ); 2151 mCalendar->setDefaultCalendar( bd );
2152 2152
2153 2153
2154 int count = birthdayList.count(); 2154 int count = birthdayList.count();
2155 int addCount = 0; 2155 int addCount = 0;
2156 KCal::Attendee* a = 0; 2156 KCal::Attendee* a = 0;
2157 2157
2158 //qDebug("CalView 1 %i", count); 2158 //qDebug("CalView 1 %i", count);
2159 2159
2160 QProgressBar bar(count,0 ); 2160 QProgressBar bar(count,0 );
2161 int w = 300; 2161 int w = 300;
2162 if ( QApplication::desktop()->width() < 320 ) 2162 if ( QApplication::desktop()->width() < 320 )
2163 w = 220; 2163 w = 220;
2164 int h = bar.sizeHint().height() ; 2164 int h = bar.sizeHint().height() ;
2165 int dw = QApplication::desktop()->width(); 2165 int dw = QApplication::desktop()->width();
2166 int dh = QApplication::desktop()->height(); 2166 int dh = QApplication::desktop()->height();
2167 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2167 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2168 bar.show(); 2168 bar.show();
2169 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 2169 bar.setCaption (i18n("inserting birthdays - close to abort!") );
2170 qApp->processEvents(); 2170 qApp->processEvents();
2171 2171
2172 QDate birthday; 2172 QDate birthday;
2173 QDate anniversary; 2173 QDate anniversary;
2174 QString realName; 2174 QString realName;
2175 QString email; 2175 QString email;
2176 QString assembledName; 2176 QString assembledName;
2177 QString uid; 2177 QString uid;
2178 bool ok = true; 2178 bool ok = true;
2179 for ( int i = 0; i < count; i++) 2179 for ( int i = 0; i < count; i++)
2180 { 2180 {
2181 if ( ! bar.isVisible() ) 2181 if ( ! bar.isVisible() )
2182 return; 2182 return;
2183 bar.setProgress( i ); 2183 bar.setProgress( i );
2184 qApp->processEvents(); 2184 qApp->processEvents();
2185 2185
2186 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 2186 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
2187 if (!ok) { 2187 if (!ok) {
2188 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 2188 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
2189 } 2189 }
2190 2190
2191 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 2191 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
2192 if (!ok) { 2192 if (!ok) {
2193 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 2193 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
2194 } 2194 }
2195 realName = realNameList[i]; 2195 realName = realNameList[i];
2196 email = emailList[i]; 2196 email = emailList[i];
2197 assembledName = assembledNameList[i]; 2197 assembledName = assembledNameList[i];
2198 uid = uidList[i]; 2198 uid = uidList[i];
2199 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() ); 2199 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() );
2200 2200
2201 if ( birthday.isValid() ){ 2201 if ( birthday.isValid() ){
2202 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2202 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2203 KCal::Attendee::ReqParticipant,uid) ; 2203 KCal::Attendee::ReqParticipant,uid) ;
2204 if ( addAnniversary( birthday, assembledName, a, true ) ) 2204 if ( addAnniversary( birthday, assembledName, a, true ) )
2205 ++addCount; 2205 ++addCount;
2206 } 2206 }
2207 2207
2208 if ( anniversary.isValid() ){ 2208 if ( anniversary.isValid() ){
2209 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2209 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2210 KCal::Attendee::ReqParticipant,uid) ; 2210 KCal::Attendee::ReqParticipant,uid) ;
2211 if ( addAnniversary( anniversary, assembledName, a, false ) ) 2211 if ( addAnniversary( anniversary, assembledName, a, false ) )
2212 ++addCount; 2212 ++addCount;
2213 } 2213 }
2214 } 2214 }
2215 2215
2216 mCalendar->setDefaultCalendar( curCal ); 2216 mCalendar->setDefaultCalendar( curCal );
2217 updateView(); 2217 updateView();
2218 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2218 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2219 2219
2220 } 2220 }
2221 2221
2222} 2222}
2223 2223
2224 2224
2225 2225
2226bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 2226bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
2227{ 2227{
2228 //qDebug("addAnni "); 2228 //qDebug("addAnni ");
2229 Event * ev = new Event(); 2229 Event * ev = new Event();
2230 ev->setOrganizer(KOPrefs::instance()->email()); 2230 ev->setOrganizer(KOPrefs::instance()->email());
2231 if ( a ) { 2231 if ( a ) {
2232 ev->addAttendee( a ); 2232 ev->addAttendee( a );
2233 } 2233 }
2234 QString kind; 2234 QString kind;
2235 if ( birthday ) { 2235 if ( birthday ) {
2236 kind = i18n( "Birthday" ); 2236 kind = i18n( "Birthday" );
2237 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 2237 ev->setSummary( name + " (" + QString::number(date.year()) +")");
2238 } 2238 }
2239 else { 2239 else {
2240 kind = i18n( "Anniversary" ); 2240 kind = i18n( "Anniversary" );
2241 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 2241 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
2242 } 2242 }
2243 ev->setCategories( kind ); 2243 ev->setCategories( kind );
2244 ev->setDtStart( QDateTime(date) ); 2244 ev->setDtStart( QDateTime(date) );
2245 ev->setDtEnd( QDateTime(date) ); 2245 ev->setDtEnd( QDateTime(date) );
2246 ev->setFloats( true ); 2246 ev->setFloats( true );
2247 Recurrence * rec = ev->recurrence(); 2247 Recurrence * rec = ev->recurrence();
2248 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 2248 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
2249 rec->addYearlyNum( date.month() ); 2249 rec->addYearlyNum( date.month() );
2250 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 2250 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
2251 delete ev; 2251 delete ev;
2252 return false; 2252 return false;
2253 } 2253 }
2254 return true; 2254 return true;
2255 2255
2256} 2256}
2257bool CalendarView::importQtopia( const QString &categories, 2257bool CalendarView::importQtopia( const QString &categories,
2258 const QString &datebook, 2258 const QString &datebook,
2259 const QString &todolist ) 2259 const QString &todolist )
2260{ 2260{
2261 2261
2262 QtopiaFormat qtopiaFormat; 2262 QtopiaFormat qtopiaFormat;
2263 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2263 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2264 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 2264 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
2265 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 2265 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
2266 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 2266 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
2267 2267
2268 updateView(); 2268 updateView();
2269 return true; 2269 return true;
2270 2270
2271#if 0 2271#if 0
2272 mGlobalSyncMode = SYNC_MODE_QTOPIA; 2272 mGlobalSyncMode = SYNC_MODE_QTOPIA;
2273 mCurrentSyncDevice = "qtopia-XML"; 2273 mCurrentSyncDevice = "qtopia-XML";
2274 if ( mSyncManager->mAskForPreferences ) 2274 if ( mSyncManager->mAskForPreferences )
2275 edit_sync_options(); 2275 edit_sync_options();
2276 qApp->processEvents(); 2276 qApp->processEvents();
2277 CalendarLocal* calendar = new CalendarLocal(); 2277 CalendarLocal* calendar = new CalendarLocal();
2278 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2278 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2279 bool syncOK = false; 2279 bool syncOK = false;
2280 QtopiaFormat qtopiaFormat; 2280 QtopiaFormat qtopiaFormat;
2281 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2281 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2282 bool loadOk = true; 2282 bool loadOk = true;
2283 if ( !categories.isEmpty() ) 2283 if ( !categories.isEmpty() )
2284 loadOk = qtopiaFormat.load( calendar, categories ); 2284 loadOk = qtopiaFormat.load( calendar, categories );
2285 if ( loadOk && !datebook.isEmpty() ) 2285 if ( loadOk && !datebook.isEmpty() )
2286 loadOk = qtopiaFormat.load( calendar, datebook ); 2286 loadOk = qtopiaFormat.load( calendar, datebook );
2287 if ( loadOk && !todolist.isEmpty() ) 2287 if ( loadOk && !todolist.isEmpty() )
2288 loadOk = qtopiaFormat.load( calendar, todolist ); 2288 loadOk = qtopiaFormat.load( calendar, todolist );
2289 2289
2290 if ( loadOk ) { 2290 if ( loadOk ) {
2291 getEventViewerDialog()->setSyncMode( true ); 2291 getEventViewerDialog()->setSyncMode( true );
2292 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2292 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2293 getEventViewerDialog()->setSyncMode( false ); 2293 getEventViewerDialog()->setSyncMode( false );
2294 qApp->processEvents(); 2294 qApp->processEvents();
2295 if ( syncOK ) { 2295 if ( syncOK ) {
2296 if ( mSyncManager->mWriteBackFile ) 2296 if ( mSyncManager->mWriteBackFile )
2297 { 2297 {
2298 // write back XML file 2298 // write back XML file
2299 2299
2300 } 2300 }
2301 setModified( true ); 2301 setModified( true );
2302 } 2302 }
2303 } else { 2303 } else {
2304 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2304 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2305 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2305 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2306 question, i18n("Ok")) ; 2306 question, i18n("Ok")) ;
2307 } 2307 }
2308 delete calendar; 2308 delete calendar;
2309 updateView(); 2309 updateView();
2310 return syncOK; 2310 return syncOK;
2311 2311
2312 2312
2313#endif 2313#endif
2314 2314
2315} 2315}
2316 2316
2317void CalendarView::setSyncEventsReadOnly() 2317void CalendarView::setSyncEventsReadOnly()
2318{ 2318{
2319 mCalendar->setSyncEventsReadOnly(); 2319 mCalendar->setSyncEventsReadOnly();
2320} 2320}
2321 2321
2322bool CalendarView::loadCalendars() 2322bool CalendarView::loadCalendars()
2323{ 2323{
2324 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2324 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2325 KopiCalendarFile * cal = calendars.first(); 2325 KopiCalendarFile * cal = calendars.first();
2326 mCalendar->setDefaultCalendar( 1 ); 2326 mCalendar->setDefaultCalendar( 1 );
2327 openCalendar( MainWindow::defaultFileName(), false ); 2327 openCalendar( MainWindow::defaultFileName(), false );
2328 cal = calendars.next(); 2328 cal = calendars.next();
2329 while ( cal ) { 2329 while ( cal ) {
2330 addCalendar( cal ); 2330 addCalendar( cal );
2331 cal = calendars.next(); 2331 cal = calendars.next();
2332 } 2332 }
2333 restoreCalendarSettings(); 2333 restoreCalendarSettings();
2334 return true; 2334 return true;
2335} 2335}
2336bool CalendarView::restoreCalendarSettings() 2336bool CalendarView::restoreCalendarSettings()
2337{ 2337{
2338 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2338 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2339 KopiCalendarFile * cal = calendars.first(); 2339 KopiCalendarFile * cal = calendars.first();
2340 while ( cal ) { 2340 while ( cal ) {
2341 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2341 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2342 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2342 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2343 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2343 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2344 if ( cal->isStandard ) 2344 if ( cal->isStandard )
2345 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2345 mCalendar->setDefaultCalendar( cal->mCalNumber );
2346 cal = calendars.next(); 2346 cal = calendars.next();
2347 } 2347 }
2348 setSyncEventsReadOnly(); 2348 setSyncEventsReadOnly();
2349 mCalendar->reInitAlarmSettings(); 2349 mCalendar->reInitAlarmSettings();
2350 updateUnmanagedViews(); 2350 updateUnmanagedViews();
2351 updateView(); 2351 updateView();
2352 return true; 2352 return true;
2353} 2353}
2354void CalendarView::addCalendarId( int id ) 2354void CalendarView::addCalendarId( int id )
2355{ 2355{
2356 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2356 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2357 if ( cal ) 2357 if ( cal )
2358 addCalendar( cal ); 2358 addCalendar( cal );
2359} 2359}
2360bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2360bool CalendarView::addCalendar( KopiCalendarFile * cal )
2361{ 2361{
2362 cal->mErrorOnLoad = false; 2362 cal->mErrorOnLoad = false;
2363 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2363 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2364 cal->mLoadDt = QDateTime::currentDateTime(); 2364 cal->mLoadDt = QDateTime::currentDateTime();
2365 return true; 2365 return true;
2366 } 2366 }
2367 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2367 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2368 cal->mErrorOnLoad = true; 2368 cal->mErrorOnLoad = true;
2369 return false; 2369 return false;
2370} 2370}
2371bool CalendarView::openCalendar(QString filename, bool merge) 2371bool CalendarView::openCalendar(QString filename, bool merge)
2372{ 2372{
2373 2373
2374 if (filename.isEmpty()) { 2374 if (filename.isEmpty()) {
2375 return false; 2375 return false;
2376 } 2376 }
2377 2377
2378 if (!QFile::exists(filename)) { 2378 if (!QFile::exists(filename)) {
2379 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2379 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2380 return false; 2380 return false;
2381 } 2381 }
2382 2382
2383 globalFlagBlockAgenda = 1; 2383 globalFlagBlockAgenda = 1;
2384 clearAllViews(); 2384 clearAllViews();
2385 if (!merge) { 2385 if (!merge) {
2386 mViewManager->setDocumentId( filename ); 2386 mViewManager->setDocumentId( filename );
2387 mCalendar->close(); 2387 mCalendar->close();
2388 } 2388 }
2389 mStorage->setFileName( filename ); 2389 mStorage->setFileName( filename );
2390 2390
2391 if ( mStorage->load() ) { 2391 if ( mStorage->load() ) {
2392 if ( merge ) ;//setModified( true ); 2392 if ( merge ) ;//setModified( true );
2393 else { 2393 else {
2394 //setModified( true ); 2394 //setModified( true );
2395 mViewManager->setDocumentId( filename ); 2395 mViewManager->setDocumentId( filename );
2396 mDialogManager->setDocumentId( filename ); 2396 mDialogManager->setDocumentId( filename );
2397 mTodoList->setDocumentId( filename ); 2397 mTodoList->setDocumentId( filename );
2398 } 2398 }
2399 globalFlagBlockAgenda = 2; 2399 globalFlagBlockAgenda = 2;
2400 // if ( getLastSyncEvent() ) 2400 // if ( getLastSyncEvent() )
2401 // getLastSyncEvent()->setReadOnly( true ); 2401 // getLastSyncEvent()->setReadOnly( true );
2402 mCalendar->reInitAlarmSettings(); 2402 mCalendar->reInitAlarmSettings();
2403 setSyncEventsReadOnly(); 2403 setSyncEventsReadOnly();
2404 //updateUnmanagedViews(); 2404 //updateUnmanagedViews();
2405 //updateView(); 2405 //updateView();
2406 if ( filename != MainWindow::defaultFileName() ) { 2406 if ( filename != MainWindow::defaultFileName() ) {
2407 saveCalendar( MainWindow::defaultFileName() ); 2407 saveCalendar( MainWindow::defaultFileName() );
2408 } else { 2408 } else {
2409 QFileInfo finf ( MainWindow::defaultFileName()); 2409 QFileInfo finf ( MainWindow::defaultFileName());
2410 if ( finf.exists() ) { 2410 if ( finf.exists() ) {
2411 setLoadedFileVersion( finf.lastModified () ); 2411 setLoadedFileVersion( finf.lastModified () );
2412 } 2412 }
2413 } 2413 }
2414 return true; 2414 return true;
2415 } else { 2415 } else {
2416 // while failing to load, the calendar object could 2416 // while failing to load, the calendar object could
2417 // have become partially populated. Clear it out. 2417 // have become partially populated. Clear it out.
2418 if ( !merge ) { 2418 if ( !merge ) {
2419 mCalendar->close(); 2419 mCalendar->close();
2420 mViewManager->setDocumentId( filename ); 2420 mViewManager->setDocumentId( filename );
2421 mDialogManager->setDocumentId( filename ); 2421 mDialogManager->setDocumentId( filename );
2422 mTodoList->setDocumentId( filename ); 2422 mTodoList->setDocumentId( filename );
2423 } 2423 }
2424 2424
2425 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2425 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2426 2426
2427 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2427 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2428 globalFlagBlockAgenda = 2; 2428 globalFlagBlockAgenda = 2;
2429 mCalendar->reInitAlarmSettings(); 2429 mCalendar->reInitAlarmSettings();
2430 setSyncEventsReadOnly(); 2430 setSyncEventsReadOnly();
2431 updateUnmanagedViews(); 2431 updateUnmanagedViews();
2432 updateView(); 2432 updateView();
2433 } 2433 }
2434 return false; 2434 return false;
2435} 2435}
2436void CalendarView::mergeFile( QString fn ) 2436void CalendarView::mergeFile( QString fn )
2437{ 2437{
2438 clearAllViews(); 2438 clearAllViews();
2439 mCalendar->mergeCalendarFile( fn ); 2439 mCalendar->mergeCalendarFile( fn );
2440 mCalendar->reInitAlarmSettings(); 2440 mCalendar->reInitAlarmSettings();
2441 setSyncEventsReadOnly(); 2441 setSyncEventsReadOnly();
2442 updateUnmanagedViews(); 2442 updateUnmanagedViews();
2443 updateView(); 2443 updateView();
2444} 2444}
2445void CalendarView::mergeFileResource( QString fn ,QString resource ) 2445void CalendarView::mergeFileResource( QString fn ,QString resource )
2446{ 2446{
2447 2447
2448 if ( resource == "ALL" ) { 2448 if ( resource == "ALL" ) {
2449 mergeFile( fn ); 2449 mergeFile( fn );
2450 return; 2450 return;
2451 } 2451 }
2452 2452
2453 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 2453 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
2454 if ( !exclusiveResource ) { 2454 if ( !exclusiveResource ) {
2455 qDebug("KO: CalendarView::mergeFileResource: resource not found %s", resource.latin1() ); 2455 qDebug("KO: CalendarView::mergeFileResource: resource not found %s", resource.latin1() );
2456 return; 2456 return;
2457 } 2457 }
2458 clearAllViews(); 2458 clearAllViews();
2459 mCalendar->setCalendarRemove( exclusiveResource ); 2459 mCalendar->setCalendarRemove( exclusiveResource );
2460 int def = mCalendar->defaultCalendar(); 2460 int def = mCalendar->defaultCalendar();
2461 mCalendar->setDefaultCalendar(exclusiveResource); 2461 mCalendar->setDefaultCalendar(exclusiveResource);
2462 if ( !mCalendar->addCalendarFile( fn, exclusiveResource )) { 2462 if ( !mCalendar->addCalendarFile( fn, exclusiveResource )) {
2463 qDebug("KO: CalendarView::mergeFileResource: error adding file %s", fn.latin1() ); 2463 qDebug("KO: CalendarView::mergeFileResource: error adding file %s", fn.latin1() );
2464 } 2464 }
2465 mCalendar->setDefaultCalendar( def ); 2465 mCalendar->setDefaultCalendar( def );
2466 mCalendar->reInitAlarmSettings(); 2466 mCalendar->reInitAlarmSettings();
2467 setSyncEventsReadOnly(); 2467 setSyncEventsReadOnly();
2468 updateUnmanagedViews(); 2468 updateUnmanagedViews();
2469 updateView(); 2469 updateView();
2470} 2470}
2471void CalendarView::showOpenError() 2471void CalendarView::showOpenError()
2472{ 2472{
2473 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2473 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2474} 2474}
2475void CalendarView::setLoadedFileVersion(QDateTime dt) 2475void CalendarView::setLoadedFileVersion(QDateTime dt)
2476{ 2476{
2477 loadedFileVersion = dt; 2477 loadedFileVersion = dt;
2478} 2478}
2479bool CalendarView::checkFileChanged(QString fn) 2479bool CalendarView::checkFileChanged(QString fn)
2480{ 2480{
2481 QFileInfo finf ( fn ); 2481 QFileInfo finf ( fn );
2482 if ( !finf.exists() ) 2482 if ( !finf.exists() )
2483 return true; 2483 return true;
2484 QDateTime dt = finf.lastModified (); 2484 QDateTime dt = finf.lastModified ();
2485 if ( dt <= loadedFileVersion ) 2485 if ( dt <= loadedFileVersion )
2486 return false; 2486 return false;
2487 return true; 2487 return true;
2488 2488
2489} 2489}
2490void CalendarView::watchSavedFile() 2490void CalendarView::watchSavedFile()
2491{ 2491{
2492 QFileInfo finf ( MainWindow::defaultFileName()); 2492 QFileInfo finf ( MainWindow::defaultFileName());
2493 if ( !finf.exists() ) 2493 if ( !finf.exists() )
2494 return; 2494 return;
2495 QDateTime dt = finf.lastModified (); 2495 QDateTime dt = finf.lastModified ();
2496 if ( dt < loadedFileVersion ) { 2496 if ( dt < loadedFileVersion ) {
2497 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2497 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2498 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2498 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2499 return; 2499 return;
2500 } 2500 }
2501 loadedFileVersion = dt; 2501 loadedFileVersion = dt;
2502} 2502}
2503bool CalendarView::checkAllFileVersions() 2503bool CalendarView::checkAllFileVersions()
2504{ 2504{
2505 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2505 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2506 KopiCalendarFile * cal = calendars.first(); 2506 KopiCalendarFile * cal = calendars.first();
2507 mCalendar->setDefaultCalendar( 1 ); 2507 mCalendar->setDefaultCalendar( 1 );
2508 mCalendar->setDefaultCalendarEnabledOnly(); 2508 mCalendar->setDefaultCalendarEnabledOnly();
2509 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2509 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2510 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2510 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2511 restoreCalendarSettings(); 2511 restoreCalendarSettings();
2512 return false; 2512 return false;
2513 } 2513 }
2514 } 2514 }
2515 cal = calendars.next(); 2515 cal = calendars.next();
2516 QDateTime storeTemp = loadedFileVersion; 2516 QDateTime storeTemp = loadedFileVersion;
2517 while ( cal ) { 2517 while ( cal ) {
2518 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2518 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2519 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2519 mCalendar->setDefaultCalendar( cal->mCalNumber );
2520 mCalendar->setDefaultCalendarEnabledOnly(); 2520 mCalendar->setDefaultCalendarEnabledOnly();
2521 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2521 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2522 if ( !checkFileVersion(cal->mFileName )) { 2522 if ( !checkFileVersion(cal->mFileName )) {
2523 loadedFileVersion = storeTemp; 2523 loadedFileVersion = storeTemp;
2524 restoreCalendarSettings(); 2524 restoreCalendarSettings();
2525 return false; 2525 return false;
2526 } 2526 }
2527 } 2527 }
2528 cal = calendars.next(); 2528 cal = calendars.next();
2529 } 2529 }
2530 loadedFileVersion = storeTemp; 2530 loadedFileVersion = storeTemp;
2531 return true; 2531 return true;
2532} 2532}
2533bool CalendarView::checkFileVersion(QString fn) 2533bool CalendarView::checkFileVersion(QString fn)
2534{ 2534{
2535 QFileInfo finf ( fn ); 2535 QFileInfo finf ( fn );
2536 if ( !finf.exists() ) 2536 if ( !finf.exists() )
2537 return true; 2537 return true;
2538 QDateTime dt = finf.lastModified (); 2538 QDateTime dt = finf.lastModified ();
2539 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2539 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2540 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2540 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2541 if ( dt <= loadedFileVersion ) 2541 if ( dt <= loadedFileVersion )
2542 return true; 2542 return true;
2543 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 2543 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
2544 i18n("KO/Pi Warning"),i18n("Overwrite"), 2544 i18n("KO/Pi Warning"),i18n("Overwrite"),
2545 i18n("Sync+save")); 2545 i18n("Sync+save"));
2546 2546
2547 if ( km == KMessageBox::Cancel ) 2547 if ( km == KMessageBox::Cancel )
2548 return false; 2548 return false;
2549 if ( km == KMessageBox::Yes ) 2549 if ( km == KMessageBox::Yes )
2550 return true; 2550 return true;
2551 2551
2552 setSyncDevice("deleteaftersync" ); 2552 setSyncDevice("deleteaftersync" );
2553 mSyncManager->mAskForPreferences = true; 2553 mSyncManager->mAskForPreferences = true;
2554 mSyncManager->mSyncAlgoPrefs = 3; 2554 mSyncManager->mSyncAlgoPrefs = 3;
2555 mSyncManager->mWriteBackFile = false; 2555 mSyncManager->mWriteBackFile = false;
2556 mSyncManager->mWriteBackExistingOnly = false; 2556 mSyncManager->mWriteBackExistingOnly = false;
2557 mSyncManager->mShowSyncSummary = false; 2557 mSyncManager->mShowSyncSummary = false;
2558 mMultiResourceSync = false; 2558 mMultiResourceSync = false;
2559 syncCalendar( fn, 3 ); 2559 syncCalendar( fn, 3 );
2560 Event * e = getLastSyncEvent(); 2560 Event * e = getLastSyncEvent();
2561 if ( e ) 2561 if ( e )
2562 mCalendar->deleteEvent( e ); 2562 mCalendar->deleteEvent( e );
2563 return true; 2563 return true;
2564} 2564}
2565bool CalendarView::saveCalendars() 2565bool CalendarView::saveCalendars()
2566{ 2566{
2567 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2567 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2568 KopiCalendarFile * cal = calendars.first(); 2568 KopiCalendarFile * cal = calendars.first();
2569 mCalendar->setDefaultCalendar( 1 ); 2569 mCalendar->setDefaultCalendar( 1 );
2570 mCalendar->setDefaultCalendarEnabledOnly(); 2570 mCalendar->setDefaultCalendarEnabledOnly();
2571 QString saveError; 2571 QString saveError;
2572 if ( !saveCalendar( MainWindow::defaultFileName() ) ) 2572 if ( !saveCalendar( MainWindow::defaultFileName() ) )
2573 saveError = cal->mName +"\n"; 2573 saveError = cal->mName +"\n";
2574 cal = calendars.next(); 2574 cal = calendars.next();
2575 while ( cal ) { 2575 while ( cal ) {
2576 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2576 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2577 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2577 mCalendar->setDefaultCalendar( cal->mCalNumber );
2578 mCalendar->setDefaultCalendarEnabledOnly(); 2578 mCalendar->setDefaultCalendarEnabledOnly();
2579 if ( saveCalendar( cal->mFileName ) ) 2579 if ( saveCalendar( cal->mFileName ) )
2580 cal->mLoadDt = QDateTime::currentDateTime(); 2580 cal->mLoadDt = QDateTime::currentDateTime();
2581 else 2581 else
2582 saveError += cal->mName + "\n"; 2582 saveError += cal->mName + "\n";
2583 } 2583 }
2584 cal = calendars.next(); 2584 cal = calendars.next();
2585 } 2585 }
2586 restoreCalendarSettings(); 2586 restoreCalendarSettings();
2587 //saveError = "test error"; 2587 //saveError = "test error";
2588 if ( !saveError.isEmpty() ) { 2588 if ( !saveError.isEmpty() ) {
2589 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError; 2589 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError;
2590 KMessageBox::error(this, saveError, i18n("Error saving data")); 2590 KMessageBox::error(this, saveError, i18n("Error saving data"));
2591 return false; 2591 return false;
2592 } 2592 }
2593 return true; 2593 return true;
2594} 2594}
2595bool CalendarView::saveCalendarResource(QString filename, QString resource) 2595bool CalendarView::saveCalendarResource(QString filename, QString resource)
2596{ 2596{
2597 if ( resource == "ALL" ) 2597 if ( resource == "ALL" )
2598 return saveCalendar( filename ); 2598 return saveCalendar( filename );
2599 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 2599 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
2600 if ( !exclusiveResource ) { 2600 if ( !exclusiveResource ) {
2601 qDebug("KO: CalendarView::saveCalendarResource: resource not found %s", resource.latin1() ); 2601 qDebug("KO: CalendarView::saveCalendarResource: resource not found %s", resource.latin1() );
2602 return false; 2602 return false;
2603 } 2603 }
2604 mCalendar->setDefaultCalendar( exclusiveResource ); 2604 mCalendar->setDefaultCalendar( exclusiveResource );
2605 mCalendar->setDefaultCalendarEnabledOnly(); 2605 mCalendar->setDefaultCalendarEnabledOnly();
2606 mCalendar->setSyncEventsEnabled(); 2606 mCalendar->setSyncEventsEnabled();
2607 bool res = saveCalendar( filename ); 2607 bool res = saveCalendar( filename );
2608 restoreCalendarSettings(); 2608 restoreCalendarSettings();
2609 return res; 2609 return res;
2610 2610
2611} 2611}
2612bool CalendarView::saveCalendar( QString filename ) 2612bool CalendarView::saveCalendar( QString filename )
2613{ 2613{
2614 2614
2615 // Store back all unsaved data into calendar object 2615 // Store back all unsaved data into calendar object
2616 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2616 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2617 if ( mViewManager->currentView() ) 2617 if ( mViewManager->currentView() )
2618 mViewManager->currentView()->flushView(); 2618 mViewManager->currentView()->flushView();
2619 2619
2620 2620
2621 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2621 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2622 mStorage->setSaveFormat( new ICalFormat() ); 2622 mStorage->setSaveFormat( new ICalFormat() );
2623 mStorage->setFileName( filename ); 2623 mStorage->setFileName( filename );
2624 bool success; 2624 bool success;
2625 success = mStorage->save(); 2625 success = mStorage->save();
2626 if ( !success ) { 2626 if ( !success ) {
2627 return false; 2627 return false;
2628 } 2628 }
2629 if ( filename == MainWindow::defaultFileName() ) { 2629 if ( filename == MainWindow::defaultFileName() ) {
2630 setLoadedFileVersion( lfv ); 2630 setLoadedFileVersion( lfv );
2631 watchSavedFile(); 2631 watchSavedFile();
2632 } 2632 }
2633 return true; 2633 return true;
2634} 2634}
2635 2635
2636void CalendarView::closeCalendar() 2636void CalendarView::closeCalendar()
2637{ 2637{
2638 2638
2639 // child windows no longer valid 2639 // child windows no longer valid
2640 clearAllViews(); 2640 clearAllViews();
2641 emit closingDown(); 2641 emit closingDown();
2642 2642
2643 mCalendar->close(); 2643 mCalendar->close();
2644 setModified(false); 2644 setModified(false);
2645 updateView(); 2645 updateView();
2646} 2646}
2647 2647
2648void CalendarView::archiveCalendar() 2648void CalendarView::archiveCalendar()
2649{ 2649{
2650 mDialogManager->showArchiveDialog(); 2650 mDialogManager->showArchiveDialog();
2651} 2651}
2652 2652
2653 2653
2654void CalendarView::readSettings() 2654void CalendarView::readSettings()
2655{ 2655{
2656 2656
2657 2657
2658 // mViewManager->showAgendaView(); 2658 // mViewManager->showAgendaView();
2659 QString str; 2659 QString str;
2660 //qDebug("CalendarView::readSettings() "); 2660 //qDebug("CalendarView::readSettings() ");
2661 // read settings from the KConfig, supplying reasonable 2661 // read settings from the KConfig, supplying reasonable
2662 // defaults where none are to be found 2662 // defaults where none are to be found
2663 KConfig *config = KOGlobals::config(); 2663 KConfig *config = KOGlobals::config();
2664#ifndef KORG_NOSPLITTER 2664#ifndef KORG_NOSPLITTER
2665 config->setGroup("KOrganizer Geometry"); 2665 config->setGroup("KOrganizer Geometry");
2666 2666
2667 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2667 QValueList<int> sizes = config->readIntListEntry("Separator1");
2668 if (sizes.count() != 2) { 2668 if (sizes.count() != 2) {
2669 sizes << mDateNavigator->minimumSizeHint().width(); 2669 sizes << mDateNavigator->minimumSizeHint().width();
2670 sizes << 300; 2670 sizes << 300;
2671 } 2671 }
2672 mPanner->setSizes(sizes); 2672 mPanner->setSizes(sizes);
2673 2673
2674 sizes = config->readIntListEntry("Separator2"); 2674 sizes = config->readIntListEntry("Separator2");
2675 if ( ( mResourceView && sizes.count() == 4 ) || 2675 if ( ( mResourceView && sizes.count() == 4 ) ||
2676 ( !mResourceView && sizes.count() == 3 ) ) { 2676 ( !mResourceView && sizes.count() == 3 ) ) {
2677 mLeftSplitter->setSizes(sizes); 2677 mLeftSplitter->setSizes(sizes);
2678 } 2678 }
2679#endif 2679#endif
2680 globalFlagBlockAgenda = 1; 2680 globalFlagBlockAgenda = 1;
2681 mViewManager->showAgendaView(); 2681 mViewManager->showAgendaView();
2682 //mViewManager->readSettings( config ); 2682 //mViewManager->readSettings( config );
2683 mTodoList->restoreLayout(config,QString("Todo Layout")); 2683 mTodoList->restoreLayout(config,QString("Todo Layout"));
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index 0a94914..66836a1 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -1,383 +1,384 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#ifndef CALENDAR_H 22#ifndef CALENDAR_H
23#define CALENDAR_H 23#define CALENDAR_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qdatetime.h> 27#include <qdatetime.h>
28#include <qptrlist.h> 28#include <qptrlist.h>
29#include <qdict.h> 29#include <qdict.h>
30 30
31#include "customproperties.h" 31#include "customproperties.h"
32#include "event.h" 32#include "event.h"
33#include "todo.h" 33#include "todo.h"
34#include "journal.h" 34#include "journal.h"
35#include "calfilter.h" 35#include "calfilter.h"
36 36
37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */ 37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */
38 38
39class KConfig; 39class KConfig;
40 40
41namespace KCal { 41namespace KCal {
42 42
43 43
44/** 44/**
45 This is the main "calendar" object class for KOrganizer. It holds 45 This is the main "calendar" object class for KOrganizer. It holds
46 information like all appointments/events, user information, etc. etc. 46 information like all appointments/events, user information, etc. etc.
47 one calendar is associated with each CalendarView (@see calendarview.h). 47 one calendar is associated with each CalendarView (@see calendarview.h).
48 This is an abstract base class defining the interface to a calendar. It is 48 This is an abstract base class defining the interface to a calendar. It is
49 implemented by subclasses like @see CalendarLocal, which use different 49 implemented by subclasses like @see CalendarLocal, which use different
50 methods to store and access the data. 50 methods to store and access the data.
51 51
52 Ownership of events etc. is handled by the following policy: As soon as an 52 Ownership of events etc. is handled by the following policy: As soon as an
53 event (or any other subclass of IncidenceBase) object is added to the 53 event (or any other subclass of IncidenceBase) object is added to the
54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes 54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes
55 care of deleting it. All Events returned by the query functions are returned 55 care of deleting it. All Events returned by the query functions are returned
56 as pointers, that means all changes to the returned events are immediately 56 as pointers, that means all changes to the returned events are immediately
57 visible in the Calendar. You shouldn't delete any Event object you get from 57 visible in the Calendar. You shouldn't delete any Event object you get from
58 Calendar. 58 Calendar.
59*/ 59*/
60class Calendar : public QObject, public CustomProperties, 60class Calendar : public QObject, public CustomProperties,
61 public IncidenceBase::Observer 61 public IncidenceBase::Observer
62{ 62{
63 Q_OBJECT 63 Q_OBJECT
64public: 64public:
65 Calendar(); 65 Calendar();
66 Calendar(const QString &timeZoneId); 66 Calendar(const QString &timeZoneId);
67 virtual ~Calendar(); 67 virtual ~Calendar();
68 Incidence * undoIncidence() { return mUndoIncidence; }; 68 Incidence * undoIncidence() { return mUndoIncidence; };
69 bool undoDeleteIncidence(); 69 bool undoDeleteIncidence();
70 void deleteIncidence(Incidence *in); 70 void deleteIncidence(Incidence *in);
71 void resetTempSyncStat(); 71 void resetTempSyncStat();
72 void resetPilotStat(int id); 72 void resetPilotStat(int id);
73 /** 73 /**
74 Clears out the current calendar, freeing all used memory etc. 74 Clears out the current calendar, freeing all used memory etc.
75 */ 75 */
76 virtual void close() = 0; 76 virtual void close() = 0;
77 virtual void addCalendar( Calendar* ) = 0; 77 virtual void addCalendar( Calendar* ) = 0;
78 virtual bool addCalendarFile( QString name, int id ) = 0; 78 virtual bool addCalendarFile( QString name, int id ) = 0;
79 virtual bool mergeCalendarFile( QString name ) = 0; 79 virtual bool mergeCalendarFile( QString name ) = 0;
80 virtual Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ) = 0; 80 virtual Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ) = 0;
81 virtual void setSyncEventsReadOnly() = 0; 81 virtual void setSyncEventsReadOnly() = 0;
82 virtual void setSyncEventsEnabled() = 0; 82 virtual void setSyncEventsEnabled() = 0;
83 virtual void stopAllTodos() = 0; 83 virtual void stopAllTodos() = 0;
84 virtual void clearUndo( Incidence * newUndo ); 84 virtual void clearUndo( Incidence * newUndo );
85 85
86 /** 86 /**
87 Sync changes in memory to persistant storage. 87 Sync changes in memory to persistant storage.
88 */ 88 */
89 virtual void save() = 0; 89 virtual void save() = 0;
90 virtual QPtrList<Event> getExternLastSyncEvents() = 0; 90 virtual QPtrList<Event> getExternLastSyncEvents() = 0;
91 virtual void removeSyncInfo( QString syncProfile) = 0; 91 virtual void removeSyncInfo( QString syncProfile) = 0;
92 virtual bool isSaving() { return false; } 92 virtual bool isSaving() { return false; }
93 93
94 /** 94 /**
95 Return the owner of the calendar's full name. 95 Return the owner of the calendar's full name.
96 */ 96 */
97 const QString &getOwner() const; 97 const QString &getOwner() const;
98 /** 98 /**
99 Set the owner of the calendar. Should be owner's full name. 99 Set the owner of the calendar. Should be owner's full name.
100 */ 100 */
101 void setOwner( const QString &os ); 101 void setOwner( const QString &os );
102 /** 102 /**
103 Return the email address of the calendar owner. 103 Return the email address of the calendar owner.
104 */ 104 */
105 const QString &getEmail(); 105 const QString &getEmail();
106 /** 106 /**
107 Set the email address of the calendar owner. 107 Set the email address of the calendar owner.
108 */ 108 */
109 void setEmail( const QString & ); 109 void setEmail( const QString & );
110 110
111 /** 111 /**
112 Set time zone from a timezone string (e.g. -2:00) 112 Set time zone from a timezone string (e.g. -2:00)
113 */ 113 */
114 void setTimeZone( const QString &tz ); 114 void setTimeZone( const QString &tz );
115 /** 115 /**
116 Set time zone from a minutes value (e.g. -60) 116 Set time zone from a minutes value (e.g. -60)
117 */ 117 */
118 void setTimeZone( int tz ); 118 void setTimeZone( int tz );
119 /** 119 /**
120 Return time zone as offest in minutes. 120 Return time zone as offest in minutes.
121 */ 121 */
122 int getTimeZone() const; 122 int getTimeZone() const;
123 /** 123 /**
124 Compute an ISO 8601 format string from the time zone. 124 Compute an ISO 8601 format string from the time zone.
125 */ 125 */
126 QString getTimeZoneStr() const; 126 QString getTimeZoneStr() const;
127 /** 127 /**
128 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal 128 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal
129 values). 129 values).
130 */ 130 */
131 void setTimeZoneId( const QString & ); 131 void setTimeZoneId( const QString & );
132 /** 132 /**
133 Return time zone id. 133 Return time zone id.
134 */ 134 */
135 QString timeZoneId() const; 135 QString timeZoneId() const;
136 /** 136 /**
137 Use local time, not UTC or a time zone. 137 Use local time, not UTC or a time zone.
138 */ 138 */
139 void setLocalTime(); 139 void setLocalTime();
140 /** 140 /**
141 Return whether local time is being used. 141 Return whether local time is being used.
142 */ 142 */
143 bool isLocalTime() const; 143 bool isLocalTime() const;
144 144
145 /** 145 /**
146 Add an incidence to calendar. 146 Add an incidence to calendar.
147 147
148 @return true on success, false on error. 148 @return true on success, false on error.
149 */ 149 */
150 virtual bool addIncidence( Incidence * ); 150 virtual bool addIncidence( Incidence * );
151 151
152 // Adds an incidence and all relatedto incidences to the cal 152 // Adds an incidence and all relatedto incidences to the cal
153 void addIncidenceBranch( Incidence * ); 153 void addIncidenceBranch( Incidence * );
154 /** 154 /**
155 Return filtered list of all incidences of this calendar. 155 Return filtered list of all incidences of this calendar.
156 */ 156 */
157 virtual QPtrList<Incidence> incidences(); 157 virtual QPtrList<Incidence> incidences();
158 158
159 /** 159 /**
160 Return unfiltered list of all incidences of this calendar. 160 Return unfiltered list of all incidences of this calendar.
161 */ 161 */
162 virtual QPtrList<Incidence> rawIncidences(); 162 virtual QPtrList<Incidence> rawIncidences();
163 163
164 /** 164 /**
165 Adds a Event to this calendar object. 165 Adds a Event to this calendar object.
166 @param anEvent a pointer to the event to add 166 @param anEvent a pointer to the event to add
167 167
168 @return true on success, false on error. 168 @return true on success, false on error.
169 */ 169 */
170 virtual bool addEventNoDup( Event *event ) = 0; 170 virtual bool addEventNoDup( Event *event ) = 0;
171 virtual bool addAnniversaryNoDup( Event *event ) = 0; 171 virtual bool addAnniversaryNoDup( Event *event ) = 0;
172 virtual bool addEvent( Event *anEvent ) = 0; 172 virtual bool addEvent( Event *anEvent ) = 0;
173 /** 173 /**
174 Delete event from calendar. 174 Delete event from calendar.
175 */ 175 */
176 virtual void deleteEvent( Event * ) = 0; 176 virtual void deleteEvent( Event * ) = 0;
177 /** 177 /**
178 Retrieves an event on the basis of the unique string ID. 178 Retrieves an event on the basis of the unique string ID.
179 */ 179 */
180 virtual Event *event( const QString &UniqueStr ) = 0; 180 virtual Event *event( const QString &UniqueStr ) = 0;
181 virtual Event *event( QString, QString ) = 0; 181 virtual Event *event( QString, QString ) = 0;
182 /** 182 /**
183 Builds and then returns a list of all events that match for the 183 Builds and then returns a list of all events that match for the
184 date specified. useful for dayView, etc. etc. 184 date specified. useful for dayView, etc. etc.
185 The calendar filter is applied. 185 The calendar filter is applied.
186 */ 186 */
187 QPtrList<Event> events( const QDate &date, bool sorted = false); 187 QPtrList<Event> events( const QDate &date, bool sorted = false);
188 /** 188 /**
189 Get events, which occur on the given date. 189 Get events, which occur on the given date.
190 The calendar filter is applied. 190 The calendar filter is applied.
191 */ 191 */
192 QPtrList<Event> events( const QDateTime &qdt ); 192 QPtrList<Event> events( const QDateTime &qdt );
193 /** 193 /**
194 Get events in a range of dates. If inclusive is set to true, only events 194 Get events in a range of dates. If inclusive is set to true, only events
195 are returned, which are completely included in the range. 195 are returned, which are completely included in the range.
196 The calendar filter is applied. 196 The calendar filter is applied.
197 */ 197 */
198 QPtrList<Event> events( const QDate &start, const QDate &end, 198 QPtrList<Event> events( const QDate &start, const QDate &end,
199 bool inclusive = false); 199 bool inclusive = false);
200 /** 200 /**
201 Return filtered list of all events in calendar. 201 Return filtered list of all events in calendar.
202 */ 202 */
203 virtual QPtrList<Event> events(); 203 virtual QPtrList<Event> events();
204 /** 204 /**
205 Return unfiltered list of all events in calendar. 205 Return unfiltered list of all events in calendar.
206 */ 206 */
207 virtual QPtrList<Event> rawEvents() = 0; 207 virtual QPtrList<Event> rawEvents() = 0;
208 208
209 /** 209 /**
210 Add a todo to the todolist. 210 Add a todo to the todolist.
211 211
212 @return true on success, false on error. 212 @return true on success, false on error.
213 */ 213 */
214 virtual bool addTodo( Todo *todo ) = 0; 214 virtual bool addTodo( Todo *todo ) = 0;
215 virtual bool addTodoNoDup( Todo *todo ) = 0; 215 virtual bool addTodoNoDup( Todo *todo ) = 0;
216 /** 216 /**
217 Remove a todo from the todolist. 217 Remove a todo from the todolist.
218 */ 218 */
219 virtual void deleteTodo( Todo * ) = 0; 219 virtual void deleteTodo( Todo * ) = 0;
220 virtual void deleteJournal( Journal * ) = 0; 220 virtual void deleteJournal( Journal * ) = 0;
221 /** 221 /**
222 Return filterd list of todos. 222 Return filterd list of todos.
223 */ 223 */
224 virtual QPtrList<Todo> todos(); 224 virtual QPtrList<Todo> todos();
225 /** 225 /**
226 Searches todolist for an event with this unique string identifier, 226 Searches todolist for an event with this unique string identifier,
227 returns a pointer or null. 227 returns a pointer or null.
228 */ 228 */
229 virtual Todo *todo( const QString &uid ) = 0; 229 virtual Todo *todo( const QString &uid ) = 0;
230 virtual Todo *todo( QString, QString ) = 0; 230 virtual Todo *todo( QString, QString ) = 0;
231 /** 231 /**
232 Returns list of todos due on the specified date. 232 Returns list of todos due on the specified date.
233 */ 233 */
234 virtual QPtrList<Todo> todos( const QDate &date ) = 0; 234 virtual QPtrList<Todo> todos( const QDate &date ) = 0;
235 /** 235 /**
236 Return unfiltered list of todos. 236 Return unfiltered list of todos.
237 */ 237 */
238 virtual QPtrList<Todo> rawTodos() = 0; 238 virtual QPtrList<Todo> rawTodos() = 0;
239 239
240 /** 240 /**
241 Add a Journal entry to calendar. 241 Add a Journal entry to calendar.
242 242
243 @return true on success, false on error. 243 @return true on success, false on error.
244 */ 244 */
245 virtual bool addJournal( Journal * ) = 0; 245 virtual bool addJournal( Journal * ) = 0;
246 /** 246 /**
247 Return Journal for given date. 247 Return Journal for given date.
248 */ 248 */
249 virtual Journal *journal( const QDate & ) = 0; 249 virtual Journal *journal( const QDate & ) = 0;
250 virtual QPtrList<Journal> journals4Date( const QDate & ) = 0; 250 virtual QPtrList<Journal> journals4Date( const QDate & ) = 0;
251 /** 251 /**
252 Return Journal with given UID. 252 Return Journal with given UID.
253 */ 253 */
254 virtual Journal *journal( const QString &UID ) = 0; 254 virtual Journal *journal( const QString &UID ) = 0;
255 /** 255 /**
256 Return list of all Journal entries. 256 Return list of all Journal entries.
257 */ 257 */
258 virtual QPtrList<Journal> journals() = 0; 258 virtual QPtrList<Journal> journals() = 0;
259 259
260 /** 260 /**
261 Searches all incidence types for an incidence with this unique 261 Searches all incidence types for an incidence with this unique
262 string identifier, returns a pointer or null. 262 string identifier, returns a pointer or null.
263 */ 263 */
264 Incidence* incidence( const QString&UID ); 264 Incidence* incidence( const QString&UID );
265 265
266 /** 266 /**
267 Setup relations for an incidence. 267 Setup relations for an incidence.
268 */ 268 */
269 virtual void setupRelations( Incidence * ); 269 virtual void setupRelations( Incidence * );
270 /** 270 /**
271 Remove all relations to an incidence 271 Remove all relations to an incidence
272 */ 272 */
273 virtual void removeRelations( Incidence * ); 273 virtual void removeRelations( Incidence * );
274 274
275 /** 275 /**
276 Set calendar filter, which filters events for the events() functions. 276 Set calendar filter, which filters events for the events() functions.
277 The Filter object is owned by the caller. 277 The Filter object is owned by the caller.
278 */ 278 */
279 void setFilter( CalFilter * ); 279 void setFilter( CalFilter * );
280 /** 280 /**
281 Return calendar filter. 281 Return calendar filter.
282 */ 282 */
283 CalFilter *filter(); 283 CalFilter *filter();
284 virtual QDateTime nextAlarm( int daysTo ) = 0; 284 virtual QDateTime nextAlarm( int daysTo ) = 0;
285 virtual QString nextSummary( ) const = 0; 285 virtual QString nextSummary( ) const = 0;
286 virtual void reInitAlarmSettings() = 0; 286 virtual void reInitAlarmSettings() = 0;
287 virtual QDateTime nextAlarmEventDateTime() const = 0; 287 virtual QDateTime nextAlarmEventDateTime() const = 0;
288 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0; 288 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0;
289 /** 289 /**
290 Return all alarms, which ocur in the given time interval. 290 Return all alarms, which ocur in the given time interval.
291 */ 291 */
292 virtual Alarm::List alarms( const QDateTime &from, 292 virtual Alarm::List alarms( const QDateTime &from,
293 const QDateTime &to ) = 0; 293 const QDateTime &to ) = 0;
294 294
295 class Observer { 295 class Observer {
296 public: 296 public:
297 virtual void calendarModified( bool, Calendar * ) = 0; 297 virtual void calendarModified( bool, Calendar * ) = 0;
298 }; 298 };
299 299
300 void registerObserver( Observer * ); 300 void registerObserver( Observer * );
301 301
302 void setModified( bool ); 302 void setModified( bool );
303 303
304 /** 304 /**
305 Set product id returned by loadedProductId(). This function is only 305 Set product id returned by loadedProductId(). This function is only
306 useful for the calendar loading code. 306 useful for the calendar loading code.
307 */ 307 */
308 void setLoadedProductId( const QString & ); 308 void setLoadedProductId( const QString & );
309 /** 309 /**
310 Return product id taken from file that has been loaded. Returns 310 Return product id taken from file that has been loaded. Returns
311 QString::null, if no calendar has been loaded. 311 QString::null, if no calendar has been loaded.
312 */ 312 */
313 QString loadedProductId(); 313 QString loadedProductId();
314 int defaultCalendar(); 314 int defaultCalendar();
315 void setDontDeleteIncidencesOnClose (); 315 void setDontDeleteIncidencesOnClose ();
316 public slots: 316 public slots:
317 void setDefaultCalendar( int ); 317 void setDefaultCalendar( int );
318 virtual void setCalendarEnabled( int id, bool enable ) = 0; 318 virtual void setCalendarEnabled( int id, bool enable ) = 0;
319 virtual void setAllCalendarEnabled( bool enable ) = 0;
319 virtual void setAlarmEnabled( int id, bool enable ) = 0; 320 virtual void setAlarmEnabled( int id, bool enable ) = 0;
320 virtual void setReadOnly( int id, bool enable ) = 0; 321 virtual void setReadOnly( int id, bool enable ) = 0;
321 virtual void setDefaultCalendarEnabledOnly() = 0; 322 virtual void setDefaultCalendarEnabledOnly() = 0;
322 virtual void setCalendarRemove( int id ) = 0; 323 virtual void setCalendarRemove( int id ) = 0;
323 virtual void getIncidenceCount( int calId, int& events, int & todos, int & journals) = 0; 324 virtual void getIncidenceCount( int calId, int& events, int & todos, int & journals) = 0;
324 325
325 signals: 326 signals:
326 void calendarChanged(); 327 void calendarChanged();
327 void calendarSaved(); 328 void calendarSaved();
328 void calendarLoaded(); 329 void calendarLoaded();
329 void addAlarm(const QDateTime &qdt, const QString &noti ); 330 void addAlarm(const QDateTime &qdt, const QString &noti );
330 void removeAlarm(const QDateTime &qdt, const QString &noti ); 331 void removeAlarm(const QDateTime &qdt, const QString &noti );
331 332
332 protected: 333 protected:
333 /** 334 /**
334 Get unfiltered events, which occur on the given date. 335 Get unfiltered events, which occur on the given date.
335 */ 336 */
336 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0; 337 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0;
337 /** 338 /**
338 Get unfiltered events, which occur on the given date. 339 Get unfiltered events, which occur on the given date.
339 */ 340 */
340 virtual QPtrList<Event> rawEventsForDate( const QDate &date, 341 virtual QPtrList<Event> rawEventsForDate( const QDate &date,
341 bool sorted = false ) = 0; 342 bool sorted = false ) = 0;
342 /** 343 /**
343 Get events in a range of dates. If inclusive is set to true, only events 344 Get events in a range of dates. If inclusive is set to true, only events
344 are returned, which are completely included in the range. 345 are returned, which are completely included in the range.
345 */ 346 */
346 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 347 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
347 bool inclusive = false ) = 0; 348 bool inclusive = false ) = 0;
348 349
349 Incidence *mNextAlarmIncidence; 350 Incidence *mNextAlarmIncidence;
350 Incidence *mUndoIncidence; 351 Incidence *mUndoIncidence;
351 int mDefaultCalendar; 352 int mDefaultCalendar;
352 bool mDeleteIncidencesOnClose; 353 bool mDeleteIncidencesOnClose;
353 354
354private: 355private:
355 void init(); 356 void init();
356 357
357 QString mOwner; // who the calendar belongs to 358 QString mOwner; // who the calendar belongs to
358 QString mOwnerEmail; // email address of the owner 359 QString mOwnerEmail; // email address of the owner
359 int mTimeZone; // timezone OFFSET from GMT (MINUTES) 360 int mTimeZone; // timezone OFFSET from GMT (MINUTES)
360 bool mLocalTime; // use local time, not UTC or a time zone 361 bool mLocalTime; // use local time, not UTC or a time zone
361 362
362 363
363 CalFilter *mFilter; 364 CalFilter *mFilter;
364 CalFilter *mDefaultFilter; 365 CalFilter *mDefaultFilter;
365 366
366 367
367 QString mTimeZoneId; 368 QString mTimeZoneId;
368 369
369 Observer *mObserver; 370 Observer *mObserver;
370 bool mNewObserver; 371 bool mNewObserver;
371 372
372 bool mModified; 373 bool mModified;
373 374
374 QString mLoadedProductId; 375 QString mLoadedProductId;
375 376
376 // This list is used to put together related todos 377 // This list is used to put together related todos
377 QDict<Incidence> mOrphans; 378 QDict<Incidence> mOrphans;
378 QDict<Incidence> mOrphanUids; 379 QDict<Incidence> mOrphanUids;
379}; 380};
380 381
381} 382}
382 383
383#endif 384#endif
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index 45e3128..2a57724 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -1,1056 +1,1079 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26 26
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klocale.h> 30#include <klocale.h>
31 31
32#include "vcaldrag.h" 32#include "vcaldrag.h"
33#include "vcalformat.h" 33#include "vcalformat.h"
34#include "icalformat.h" 34#include "icalformat.h"
35#include "exceptions.h" 35#include "exceptions.h"
36#include "incidence.h" 36#include "incidence.h"
37#include "journal.h" 37#include "journal.h"
38#include "filestorage.h" 38#include "filestorage.h"
39#include "calfilter.h" 39#include "calfilter.h"
40 40
41#include "calendarlocal.h" 41#include "calendarlocal.h"
42 42
43// #ifndef DESKTOP_VERSION 43// #ifndef DESKTOP_VERSION
44// #include <qtopia/alarmserver.h> 44// #include <qtopia/alarmserver.h>
45// #endif 45// #endif
46using namespace KCal; 46using namespace KCal;
47 47
48CalendarLocal::CalendarLocal() 48CalendarLocal::CalendarLocal()
49 : Calendar() 49 : Calendar()
50{ 50{
51 init(); 51 init();
52} 52}
53 53
54CalendarLocal::CalendarLocal(const QString &timeZoneId) 54CalendarLocal::CalendarLocal(const QString &timeZoneId)
55 : Calendar(timeZoneId) 55 : Calendar(timeZoneId)
56{ 56{
57 init(); 57 init();
58} 58}
59 59
60void CalendarLocal::init() 60void CalendarLocal::init()
61{ 61{
62 mNextAlarmIncidence = 0; 62 mNextAlarmIncidence = 0;
63} 63}
64 64
65 65
66CalendarLocal::~CalendarLocal() 66CalendarLocal::~CalendarLocal()
67{ 67{
68 registerObserver( 0 ); 68 registerObserver( 0 );
69 if ( mDeleteIncidencesOnClose ) 69 if ( mDeleteIncidencesOnClose )
70 close(); 70 close();
71} 71}
72bool CalendarLocal::mergeCalendarFile( QString name ) 72bool CalendarLocal::mergeCalendarFile( QString name )
73{ 73{
74 CalendarLocal calendar( timeZoneId() ); 74 CalendarLocal calendar( timeZoneId() );
75 calendar.setDefaultCalendar( 1 ); 75 calendar.setDefaultCalendar( 1 );
76 if ( calendar.load( name ) ) { 76 if ( calendar.load( name ) ) {
77 mergeCalendar( &calendar ); 77 mergeCalendar( &calendar );
78 return true; 78 return true;
79 } 79 }
80 return false; 80 return false;
81} 81}
82 82
83Incidence* CalendarLocal::incidenceForUid( const QString& uid , bool doNotCheckDuplicates) 83Incidence* CalendarLocal::incidenceForUid( const QString& uid , bool doNotCheckDuplicates)
84{ 84{
85 Todo *todo;; 85 Todo *todo;;
86 Incidence *retVal = 0; 86 Incidence *retVal = 0;
87 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 87 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
88 if ( todo->uid() == uid ) { 88 if ( todo->uid() == uid ) {
89 if ( doNotCheckDuplicates ) return todo; 89 if ( doNotCheckDuplicates ) return todo;
90 if ( retVal ) { 90 if ( retVal ) {
91 if ( retVal->calID() > todo->calID() ) { 91 if ( retVal->calID() > todo->calID() ) {
92 retVal = todo; 92 retVal = todo;
93 } 93 }
94 } else { 94 } else {
95 retVal = todo; 95 retVal = todo;
96 } 96 }
97 } 97 }
98 } 98 }
99 if ( retVal ) return retVal; 99 if ( retVal ) return retVal;
100 Event *event; 100 Event *event;
101 for ( event = mEventList.first(); event; event = mEventList.next() ) { 101 for ( event = mEventList.first(); event; event = mEventList.next() ) {
102 if ( event->uid() == uid ) { 102 if ( event->uid() == uid ) {
103 if ( doNotCheckDuplicates ) return event; 103 if ( doNotCheckDuplicates ) return event;
104 if ( retVal ) { 104 if ( retVal ) {
105 if ( retVal->calID() > event->calID() ) { 105 if ( retVal->calID() > event->calID() ) {
106 retVal = event; 106 retVal = event;
107 } 107 }
108 } else { 108 } else {
109 retVal = event; 109 retVal = event;
110 } 110 }
111 } 111 }
112 } 112 }
113 if ( retVal ) return retVal; 113 if ( retVal ) return retVal;
114 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 114 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
115 if ( it->uid() == uid ) { 115 if ( it->uid() == uid ) {
116 if ( doNotCheckDuplicates ) return it; 116 if ( doNotCheckDuplicates ) return it;
117 if ( retVal ) { 117 if ( retVal ) {
118 if ( retVal->calID() > it->calID() ) { 118 if ( retVal->calID() > it->calID() ) {
119 retVal = it; 119 retVal = it;
120 } 120 }
121 } else { 121 } else {
122 retVal = it; 122 retVal = it;
123 } 123 }
124 } 124 }
125 return retVal; 125 return retVal;
126} 126}
127 127
128bool CalendarLocal::mergeCalendar( Calendar* remote ) 128bool CalendarLocal::mergeCalendar( Calendar* remote )
129{ 129{
130 // 1 look for raw inc in local 130 // 1 look for raw inc in local
131 // if inc not in remote, delete in local 131 // if inc not in remote, delete in local
132 // 2 look for raw inc in remote 132 // 2 look for raw inc in remote
133 // if inc in local, replace it 133 // if inc in local, replace it
134 // if not in local, add it to default calendar 134 // if not in local, add it to default calendar
135 QPtrList<Incidence> localInc = rawIncidences(); 135 QPtrList<Incidence> localInc = rawIncidences();
136 Incidence* inL = localInc.first(); 136 Incidence* inL = localInc.first();
137 while ( inL ) { 137 while ( inL ) {
138 if ( ! inL->isReadOnly () ) 138 if ( ! inL->isReadOnly () )
139 if ( !remote->incidenceForUid( inL->uid(), true )) 139 if ( !remote->incidenceForUid( inL->uid(), true ))
140 deleteIncidence( inL ); 140 deleteIncidence( inL );
141 inL = localInc.next(); 141 inL = localInc.next();
142 } 142 }
143 QPtrList<Incidence> er = remote->rawIncidences(); 143 QPtrList<Incidence> er = remote->rawIncidences();
144 Incidence* inR = er.first(); 144 Incidence* inR = er.first();
145 while ( inR ) { 145 while ( inR ) {
146 inL = incidenceForUid( inR->uid(),false ); 146 inL = incidenceForUid( inR->uid(),false );
147 if ( inL ) { 147 if ( inL ) {
148 if ( ! inL->isReadOnly () || inL->uid().left(15) == QString("last-syncEvent-") ) { 148 if ( ! inL->isReadOnly () || inL->uid().left(15) == QString("last-syncEvent-") ) {
149 int calID = inL->calID(); 149 int calID = inL->calID();
150 deleteIncidence( inL ); 150 deleteIncidence( inL );
151 inL = inR->clone(); 151 inL = inR->clone();
152 inL->setCalID( calID ); 152 inL->setCalID( calID );
153 addIncidence( inL ); 153 addIncidence( inL );
154 } 154 }
155 } else { 155 } else {
156 inL = inR->clone(); 156 inL = inR->clone();
157 inL->setCalID( 0 );// add to default cal 157 inL->setCalID( 0 );// add to default cal
158 addIncidence( inL ); 158 addIncidence( inL );
159 } 159 }
160 inR = er.next(); 160 inR = er.next();
161 } 161 }
162 return true; 162 return true;
163} 163}
164 164
165 165
166bool CalendarLocal::addCalendarFile( QString name, int id ) 166bool CalendarLocal::addCalendarFile( QString name, int id )
167{ 167{
168 CalendarLocal calendar( timeZoneId() ); 168 CalendarLocal calendar( timeZoneId() );
169 calendar.setDefaultCalendar( id ); 169 calendar.setDefaultCalendar( id );
170 if ( calendar.load( name ) ) { 170 if ( calendar.load( name ) ) {
171 addCalendar( &calendar ); 171 addCalendar( &calendar );
172 return true; 172 return true;
173 } 173 }
174 return false; 174 return false;
175} 175}
176void CalendarLocal::setSyncEventsEnabled() 176void CalendarLocal::setSyncEventsEnabled()
177{ 177{
178 Event * ev; 178 Event * ev;
179 ev = mEventList.first(); 179 ev = mEventList.first();
180 while ( ev ) { 180 while ( ev ) {
181 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 181 if ( ev->uid().left(15) == QString("last-syncEvent-") )
182 ev->setCalEnabled( true ); 182 ev->setCalEnabled( true );
183 ev = mEventList.next(); 183 ev = mEventList.next();
184 } 184 }
185} 185}
186void CalendarLocal::setSyncEventsReadOnly() 186void CalendarLocal::setSyncEventsReadOnly()
187{ 187{
188 Event * ev; 188 Event * ev;
189 ev = mEventList.first(); 189 ev = mEventList.first();
190 while ( ev ) { 190 while ( ev ) {
191 if ( ev->uid().left(15) == QString("last-syncEvent-") ) { 191 if ( ev->uid().left(15) == QString("last-syncEvent-") ) {
192 ev->setReadOnly( true ); 192 ev->setReadOnly( true );
193 ev->setCalID( 1 );
194 } 193 }
195 ev = mEventList.next(); 194 ev = mEventList.next();
196 } 195 }
197} 196}
197
198void CalendarLocal::addCalendar( Calendar* cal ) 198void CalendarLocal::addCalendar( Calendar* cal )
199{ 199{
200 cal->setDontDeleteIncidencesOnClose(); 200 cal->setDontDeleteIncidencesOnClose();
201 setSyncEventsEnabled();
201 { 202 {
202 QPtrList<Event> EventList = cal->rawEvents(); 203 QPtrList<Event> EventList = cal->rawEvents();
204 QPtrList<Event> el;
203 Event * ev = EventList.first(); 205 Event * ev = EventList.first();
204 while ( ev ) { 206 while ( ev ) {
207 if ( ev->uid().left( 15 ) == QString("last-syncEvent-") ) {
208 Event * se = event( ev->uid() );
209 if ( se )
210 el.append( se );
211 }
205 ev->unRegisterObserver( cal ); 212 ev->unRegisterObserver( cal );
206 ev->registerObserver( this ); 213 ev->registerObserver( this );
207 mEventList.append( ev ); 214 mEventList.append( ev );
208 ev = EventList.next(); 215 ev = EventList.next();
209 } 216 }
217 for ( ev = el.first(); ev; ev = el.next() ) {
218 deleteIncidence ( ev );
219 }
210 } 220 }
211 { 221 {
212 222
213 QPtrList<Todo> TodoList = cal->rawTodos(); 223 QPtrList<Todo> TodoList = cal->rawTodos();
214 Todo * ev = TodoList.first(); 224 Todo * ev = TodoList.first();
215 while ( ev ) { 225 while ( ev ) {
216 QString rel = ev->relatedToUid(); 226 QString rel = ev->relatedToUid();
217 if ( !rel.isEmpty() ){ 227 if ( !rel.isEmpty() ){
218 ev->setRelatedTo ( 0 ); 228 ev->setRelatedTo ( 0 );
219 ev->setRelatedToUid( rel ); 229 ev->setRelatedToUid( rel );
220 } 230 }
221 ev = TodoList.next(); 231 ev = TodoList.next();
222 } 232 }
223 //TodoList = cal->rawTodos(); 233 //TodoList = cal->rawTodos();
224 ev = TodoList.first(); 234 ev = TodoList.first();
225 while ( ev ) { 235 while ( ev ) {
226 ev->unRegisterObserver( cal ); 236 ev->unRegisterObserver( cal );
227 ev->registerObserver( this ); 237 ev->registerObserver( this );
228 mTodoList.append( ev ); 238 mTodoList.append( ev );
229 setupRelations( ev ); 239 setupRelations( ev );
230 ev = TodoList.next(); 240 ev = TodoList.next();
231 } 241 }
232 } 242 }
233 { 243 {
234 QPtrList<Journal> JournalList = cal->journals(); 244 QPtrList<Journal> JournalList = cal->journals();
235 Journal * ev = JournalList.first(); 245 Journal * ev = JournalList.first();
236 while ( ev ) { 246 while ( ev ) {
237 ev->unRegisterObserver( cal ); 247 ev->unRegisterObserver( cal );
238 ev->registerObserver( this ); 248 ev->registerObserver( this );
239 mJournalList.append( ev ); 249 mJournalList.append( ev );
240 ev = JournalList.next(); 250 ev = JournalList.next();
241 } 251 }
242 } 252 }
243 setModified( true ); 253 setModified( true );
244} 254}
245bool CalendarLocal::load( const QString &fileName ) 255bool CalendarLocal::load( const QString &fileName )
246{ 256{
247 FileStorage storage( this, fileName ); 257 FileStorage storage( this, fileName );
248 return storage.load(); 258 return storage.load();
249} 259}
250 260
251bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 261bool CalendarLocal::save( const QString &fileName, CalFormat *format )
252{ 262{
253 FileStorage storage( this, fileName, format ); 263 FileStorage storage( this, fileName, format );
254 return storage.save(); 264 return storage.save();
255} 265}
256 266
257void CalendarLocal::stopAllTodos() 267void CalendarLocal::stopAllTodos()
258{ 268{
259 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 269 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
260 it->setRunning( false ); 270 it->setRunning( false );
261 271
262} 272}
263void CalendarLocal::close() 273void CalendarLocal::close()
264{ 274{
265 275
266 Todo * i; 276 Todo * i;
267 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false); 277 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false);
268 278
269 mEventList.setAutoDelete( true ); 279 mEventList.setAutoDelete( true );
270 mTodoList.setAutoDelete( true ); 280 mTodoList.setAutoDelete( true );
271 mJournalList.setAutoDelete( true ); 281 mJournalList.setAutoDelete( true );
272 282
273 mEventList.clear(); 283 mEventList.clear();
274 mTodoList.clear(); 284 mTodoList.clear();
275 mJournalList.clear(); 285 mJournalList.clear();
276 286
277 mEventList.setAutoDelete( false ); 287 mEventList.setAutoDelete( false );
278 mTodoList.setAutoDelete( false ); 288 mTodoList.setAutoDelete( false );
279 mJournalList.setAutoDelete( false ); 289 mJournalList.setAutoDelete( false );
280 290
281 setModified( false ); 291 setModified( false );
282} 292}
283 293
284bool CalendarLocal::addAnniversaryNoDup( Event *event ) 294bool CalendarLocal::addAnniversaryNoDup( Event *event )
285{ 295{
286 QString cat; 296 QString cat;
287 bool isBirthday = true; 297 bool isBirthday = true;
288 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 298 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
289 isBirthday = false; 299 isBirthday = false;
290 cat = i18n( "Anniversary" ); 300 cat = i18n( "Anniversary" );
291 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 301 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
292 isBirthday = true; 302 isBirthday = true;
293 cat = i18n( "Birthday" ); 303 cat = i18n( "Birthday" );
294 } else { 304 } else {
295 qDebug("addAnniversaryNoDup called without fitting category! "); 305 qDebug("addAnniversaryNoDup called without fitting category! ");
296 return false; 306 return false;
297 } 307 }
298 Event * eve; 308 Event * eve;
299 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 309 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
300 if ( !(eve->categories().contains( cat ) )) 310 if ( !(eve->categories().contains( cat ) ))
301 continue; 311 continue;
302 // now we have an event with fitting category 312 // now we have an event with fitting category
303 if ( eve->dtStart().date() != event->dtStart().date() ) 313 if ( eve->dtStart().date() != event->dtStart().date() )
304 continue; 314 continue;
305 // now we have an event with fitting category+date 315 // now we have an event with fitting category+date
306 if ( eve->summary() != event->summary() ) 316 if ( eve->summary() != event->summary() )
307 continue; 317 continue;
308 // now we have an event with fitting category+date+summary 318 // now we have an event with fitting category+date+summary
309 return false; 319 return false;
310 } 320 }
311 return addEvent( event ); 321 return addEvent( event );
312 322
313} 323}
314bool CalendarLocal::addEventNoDup( Event *event ) 324bool CalendarLocal::addEventNoDup( Event *event )
315{ 325{
316 Event * eve; 326 Event * eve;
317 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 327 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
318 if ( *eve == *event ) { 328 if ( *eve == *event ) {
319 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 329 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
320 return false; 330 return false;
321 } 331 }
322 } 332 }
323 return addEvent( event ); 333 return addEvent( event );
324} 334}
325 335
326bool CalendarLocal::addEvent( Event *event ) 336bool CalendarLocal::addEvent( Event *event )
327{ 337{
328 insertEvent( event ); 338 insertEvent( event );
329 339
330 event->registerObserver( this ); 340 event->registerObserver( this );
331 341
332 setModified( true ); 342 setModified( true );
333 if ( event->calID() == 0 ) 343 if ( event->calID() == 0 )
334 event->setCalID( mDefaultCalendar ); 344 event->setCalID( mDefaultCalendar );
335 event->setCalEnabled( true ); 345 event->setCalEnabled( true );
336 346
337 return true; 347 return true;
338} 348}
339 349
340void CalendarLocal::deleteEvent( Event *event ) 350void CalendarLocal::deleteEvent( Event *event )
341{ 351{
342 clearUndo(event); 352 clearUndo(event);
343 if ( mEventList.removeRef( event ) ) { 353 if ( mEventList.removeRef( event ) ) {
344 setModified( true ); 354 setModified( true );
345 } 355 }
346} 356}
347 357
348 358
349Event *CalendarLocal::event( const QString &uid ) 359Event *CalendarLocal::event( const QString &uid )
350{ 360{
351 Event *event; 361 Event *event;
352 Event *retVal = 0; 362 Event *retVal = 0;
353 for ( event = mEventList.first(); event; event = mEventList.next() ) { 363 for ( event = mEventList.first(); event; event = mEventList.next() ) {
354 if ( event->calEnabled() && event->uid() == uid ) { 364 if ( event->calEnabled() && event->uid() == uid ) {
355 if ( retVal ) { 365 if ( retVal ) {
356 if ( retVal->calID() > event->calID() ) { 366 if ( retVal->calID() > event->calID() ) {
357 retVal = event; 367 retVal = event;
358 } 368 }
359 } else { 369 } else {
360 retVal = event; 370 retVal = event;
361 } 371 }
362 } 372 }
363 } 373 }
364 return retVal; 374 return retVal;
365} 375}
366bool CalendarLocal::addTodoNoDup( Todo *todo ) 376bool CalendarLocal::addTodoNoDup( Todo *todo )
367{ 377{
368 Todo * eve; 378 Todo * eve;
369 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 379 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
370 if ( *eve == *todo ) { 380 if ( *eve == *todo ) {
371 //qDebug("duplicate todo found! not inserted! "); 381 //qDebug("duplicate todo found! not inserted! ");
372 return false; 382 return false;
373 } 383 }
374 } 384 }
375 return addTodo( todo ); 385 return addTodo( todo );
376} 386}
377bool CalendarLocal::addTodo( Todo *todo ) 387bool CalendarLocal::addTodo( Todo *todo )
378{ 388{
379 mTodoList.append( todo ); 389 mTodoList.append( todo );
380 390
381 todo->registerObserver( this ); 391 todo->registerObserver( this );
382 392
383 // Set up subtask relations 393 // Set up subtask relations
384 setupRelations( todo ); 394 setupRelations( todo );
385 395
386 setModified( true ); 396 setModified( true );
387 if ( todo->calID() == 0 ) 397 if ( todo->calID() == 0 )
388 todo->setCalID( mDefaultCalendar ); 398 todo->setCalID( mDefaultCalendar );
389 todo->setCalEnabled( true ); 399 todo->setCalEnabled( true );
390 return true; 400 return true;
391} 401}
392 402
393void CalendarLocal::deleteTodo( Todo *todo ) 403void CalendarLocal::deleteTodo( Todo *todo )
394{ 404{
395 // Handle orphaned children 405 // Handle orphaned children
396 removeRelations( todo ); 406 removeRelations( todo );
397 clearUndo(todo); 407 clearUndo(todo);
398 408
399 if ( mTodoList.removeRef( todo ) ) { 409 if ( mTodoList.removeRef( todo ) ) {
400 setModified( true ); 410 setModified( true );
401 } 411 }
402} 412}
403 413
404QPtrList<Todo> CalendarLocal::rawTodos() 414QPtrList<Todo> CalendarLocal::rawTodos()
405{ 415{
406 QPtrList<Todo> el; 416 QPtrList<Todo> el;
407 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 417 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
408 if ( it->calEnabled() ) el.append( it ); 418 if ( it->calEnabled() ) el.append( it );
409 return el; 419 return el;
410} 420}
411Todo *CalendarLocal::todo( QString syncProf, QString id ) 421Todo *CalendarLocal::todo( QString syncProf, QString id )
412{ 422{
413 Todo *todo; 423 Todo *todo;
414 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 424 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
415 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 425 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
416 } 426 }
417 427
418 return 0; 428 return 0;
419} 429}
420void CalendarLocal::removeSyncInfo( QString syncProfile) 430void CalendarLocal::removeSyncInfo( QString syncProfile)
421{ 431{
422 QPtrList<Incidence> all = rawIncidences() ; 432 QPtrList<Incidence> all = rawIncidences() ;
423 Incidence *inc; 433 Incidence *inc;
424 for ( inc = all.first(); inc; inc = all.next() ) { 434 for ( inc = all.first(); inc; inc = all.next() ) {
425 inc->removeID( syncProfile ); 435 inc->removeID( syncProfile );
426 } 436 }
427 if ( syncProfile.isEmpty() ) { 437 if ( syncProfile.isEmpty() ) {
428 QPtrList<Event> el; 438 QPtrList<Event> el;
429 Event *todo; 439 Event *todo;
430 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 440 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
431 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 441 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
432 el.append( todo ); 442 el.append( todo );
433 } 443 }
434 for ( todo = el.first(); todo; todo = el.next() ) { 444 for ( todo = el.first(); todo; todo = el.next() ) {
435 deleteIncidence ( todo ); 445 deleteIncidence ( todo );
436 } 446 }
437 } else { 447 } else {
438 Event *lse = event( "last-syncEvent-"+ syncProfile); 448 Event *lse = event( "last-syncEvent-"+ syncProfile);
439 if ( lse ) 449 if ( lse )
440 deleteIncidence ( lse ); 450 deleteIncidence ( lse );
441 } 451 }
442} 452}
443QPtrList<Event> CalendarLocal::getExternLastSyncEvents() 453QPtrList<Event> CalendarLocal::getExternLastSyncEvents()
444{ 454{
445 QPtrList<Event> el; 455 QPtrList<Event> el;
446 Event *todo; 456 Event *todo;
447 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 457 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
448 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 458 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
449 if ( todo->summary().left(3) == "E: " ) 459 if ( todo->summary().left(3) == "E: " )
450 el.append( todo ); 460 el.append( todo );
451 } 461 }
452 462
453 return el; 463 return el;
454 464
455} 465}
456Event *CalendarLocal::event( QString syncProf, QString id ) 466Event *CalendarLocal::event( QString syncProf, QString id )
457{ 467{
458 Event *todo; 468 Event *todo;
459 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 469 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
460 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 470 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
461 } 471 }
462 472
463 return 0; 473 return 0;
464} 474}
465Todo *CalendarLocal::todo( const QString &uid ) 475Todo *CalendarLocal::todo( const QString &uid )
466{ 476{
467 Todo *todo; 477 Todo *todo;
468 Todo *retVal = 0; 478 Todo *retVal = 0;
469 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 479 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
470 if ( todo->calEnabled() && todo->uid() == uid ) { 480 if ( todo->calEnabled() && todo->uid() == uid ) {
471 if ( retVal ) { 481 if ( retVal ) {
472 if ( retVal->calID() > todo->calID() ) { 482 if ( retVal->calID() > todo->calID() ) {
473 retVal = todo; 483 retVal = todo;
474 } 484 }
475 } else { 485 } else {
476 retVal = todo; 486 retVal = todo;
477 } 487 }
478 } 488 }
479 } 489 }
480 return retVal; 490 return retVal;
481} 491}
482void CalendarLocal::getIncidenceCount( int calId, int& events, int & todos, int & journals) 492void CalendarLocal::getIncidenceCount( int calId, int& events, int & todos, int & journals)
483{ 493{
484 events = 0; 494 events = 0;
485 todos = 0; 495 todos = 0;
486 journals = 0; 496 journals = 0;
487 { 497 {
488 Todo *todo; 498 Todo *todo;
489 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 499 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
490 if ( todo->calID() == calId ) 500 if ( todo->calID() == calId )
491 ++todos; 501 ++todos;
492 } 502 }
493 } 503 }
494 { 504 {
495 Event *todo; 505 Event *todo;
496 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 506 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
497 if ( todo->calID() == calId ) 507 if ( todo->calID() == calId )
498 ++events; 508 ++events;
499 509
500 } 510 }
501 } 511 }
502 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 512 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
503 if ( it->calID() == calId ) ++journals; 513 if ( it->calID() == calId ) ++journals;
504 514
505} 515}
506QString CalendarLocal::nextSummary() const 516QString CalendarLocal::nextSummary() const
507{ 517{
508 return mNextSummary; 518 return mNextSummary;
509} 519}
510QDateTime CalendarLocal::nextAlarmEventDateTime() const 520QDateTime CalendarLocal::nextAlarmEventDateTime() const
511{ 521{
512 return mNextAlarmEventDateTime; 522 return mNextAlarmEventDateTime;
513} 523}
514void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) 524void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted)
515{ 525{
516 //mNextAlarmIncidence 526 //mNextAlarmIncidence
517 //mNextAlarmDateTime 527 //mNextAlarmDateTime
518 //return mNextSummary; 528 //return mNextSummary;
519 //return mNextAlarmEventDateTime; 529 //return mNextAlarmEventDateTime;
520 bool newNextAlarm = false; 530 bool newNextAlarm = false;
521 bool computeNextAlarm = false; 531 bool computeNextAlarm = false;
522 bool ok; 532 bool ok;
523 int offset; 533 int offset;
524 QDateTime nextA; 534 QDateTime nextA;
525 // QString nextSum; 535 // QString nextSum;
526 //QDateTime nextEvent; 536 //QDateTime nextEvent;
527 if ( mNextAlarmIncidence == 0 || incidence == 0 ) { 537 if ( mNextAlarmIncidence == 0 || incidence == 0 ) {
528 computeNextAlarm = true; 538 computeNextAlarm = true;
529 } else { 539 } else {
530 if ( ! deleted ) { 540 if ( ! deleted ) {
531 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 541 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
532 if ( ok ) { 542 if ( ok ) {
533 if ( nextA < mNextAlarmDateTime ) { 543 if ( nextA < mNextAlarmDateTime ) {
534 deRegisterAlarm(); 544 deRegisterAlarm();
535 mNextAlarmDateTime = nextA; 545 mNextAlarmDateTime = nextA;
536 mNextSummary = incidence->summary(); 546 mNextSummary = incidence->summary();
537 mNextAlarmEventDateTime = nextA.addSecs(offset ) ; 547 mNextAlarmEventDateTime = nextA.addSecs(offset ) ;
538 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 548 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
539 newNextAlarm = true; 549 newNextAlarm = true;
540 mNextAlarmIncidence = incidence; 550 mNextAlarmIncidence = incidence;
541 } else { 551 } else {
542 if ( incidence == mNextAlarmIncidence ) { 552 if ( incidence == mNextAlarmIncidence ) {
543 computeNextAlarm = true; 553 computeNextAlarm = true;
544 } 554 }
545 } 555 }
546 } else { 556 } else {
547 if ( mNextAlarmIncidence == incidence ) { 557 if ( mNextAlarmIncidence == incidence ) {
548 computeNextAlarm = true; 558 computeNextAlarm = true;
549 } 559 }
550 } 560 }
551 } else { // deleted 561 } else { // deleted
552 if ( incidence == mNextAlarmIncidence ) { 562 if ( incidence == mNextAlarmIncidence ) {
553 computeNextAlarm = true; 563 computeNextAlarm = true;
554 } 564 }
555 } 565 }
556 } 566 }
557 if ( computeNextAlarm ) { 567 if ( computeNextAlarm ) {
558 deRegisterAlarm(); 568 deRegisterAlarm();
559 nextA = nextAlarm( 1000 ); 569 nextA = nextAlarm( 1000 );
560 if (! mNextAlarmIncidence ) { 570 if (! mNextAlarmIncidence ) {
561 return; 571 return;
562 } 572 }
563 newNextAlarm = true; 573 newNextAlarm = true;
564 } 574 }
565 if ( newNextAlarm ) 575 if ( newNextAlarm )
566 registerAlarm(); 576 registerAlarm();
567} 577}
568QString CalendarLocal:: getAlarmNotification() 578QString CalendarLocal:: getAlarmNotification()
569{ 579{
570 QString ret; 580 QString ret;
571 // this should not happen 581 // this should not happen
572 if (! mNextAlarmIncidence ) 582 if (! mNextAlarmIncidence )
573 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString; 583 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString;
574 Alarm* alarm = mNextAlarmIncidence->alarms().first(); 584 Alarm* alarm = mNextAlarmIncidence->alarms().first();
575 if ( alarm->type() == Alarm::Procedure ) { 585 if ( alarm->type() == Alarm::Procedure ) {
576 ret = "proc_alarm" + alarm->programFile()+"+++"; 586 ret = "proc_alarm" + alarm->programFile()+"+++";
577 } else { 587 } else {
578 ret = "audio_alarm" +alarm->audioFile() +"+++"; 588 ret = "audio_alarm" +alarm->audioFile() +"+++";
579 } 589 }
580 ret += "cal_alarm"+ mNextSummary.left( 25 ); 590 ret += "cal_alarm"+ mNextSummary.left( 25 );
581 if ( mNextSummary.length() > 25 ) 591 if ( mNextSummary.length() > 25 )
582 ret += "\n" + mNextSummary.mid(25, 25 ); 592 ret += "\n" + mNextSummary.mid(25, 25 );
583 ret+= "\n"+mNextAlarmEventDateTimeString; 593 ret+= "\n"+mNextAlarmEventDateTimeString;
584 return ret; 594 return ret;
585} 595}
586void CalendarLocal::registerAlarm() 596void CalendarLocal::registerAlarm()
587{ 597{
588 mLastAlarmNotificationString = getAlarmNotification(); 598 mLastAlarmNotificationString = getAlarmNotification();
589 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() ); 599 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() );
590 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 600 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
591// #ifndef DESKTOP_VERSION 601// #ifndef DESKTOP_VERSION
592// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() ); 602// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() );
593// #endif 603// #endif
594} 604}
595void CalendarLocal::deRegisterAlarm() 605void CalendarLocal::deRegisterAlarm()
596{ 606{
597 if ( mLastAlarmNotificationString.isNull() ) 607 if ( mLastAlarmNotificationString.isNull() )
598 return; 608 return;
599 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() ); 609 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() );
600 610
601 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 611 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
602 mNextAlarmEventDateTime = QDateTime(); 612 mNextAlarmEventDateTime = QDateTime();
603// #ifndef DESKTOP_VERSION 613// #ifndef DESKTOP_VERSION
604// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() ); 614// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() );
605// #endif 615// #endif
606} 616}
607 617
608QPtrList<Todo> CalendarLocal::todos( const QDate &date ) 618QPtrList<Todo> CalendarLocal::todos( const QDate &date )
609{ 619{
610 QPtrList<Todo> todos; 620 QPtrList<Todo> todos;
611 621
612 Todo *todo; 622 Todo *todo;
613 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 623 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
614 if ( !todo->calEnabled() ) continue; 624 if ( !todo->calEnabled() ) continue;
615 if ( todo->hasDueDate() && todo->dtDue().date() == date ) { 625 if ( todo->hasDueDate() && todo->dtDue().date() == date ) {
616 todos.append( todo ); 626 todos.append( todo );
617 } 627 }
618 } 628 }
619 629
620 filter()->apply( &todos ); 630 filter()->apply( &todos );
621 return todos; 631 return todos;
622} 632}
623void CalendarLocal::reInitAlarmSettings() 633void CalendarLocal::reInitAlarmSettings()
624{ 634{
625 if ( !mNextAlarmIncidence ) { 635 if ( !mNextAlarmIncidence ) {
626 nextAlarm( 1000 ); 636 nextAlarm( 1000 );
627 } 637 }
628 deRegisterAlarm(); 638 deRegisterAlarm();
629 mNextAlarmIncidence = 0; 639 mNextAlarmIncidence = 0;
630 checkAlarmForIncidence( 0, false ); 640 checkAlarmForIncidence( 0, false );
631 641
632} 642}
633 643
634 644
635 645
636QDateTime CalendarLocal::nextAlarm( int daysTo ) 646QDateTime CalendarLocal::nextAlarm( int daysTo )
637{ 647{
638 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); 648 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo );
639 QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); 649 QDateTime start = QDateTime::currentDateTime().addSecs( 30 );
640 QDateTime next; 650 QDateTime next;
641 Event *e; 651 Event *e;
642 bool ok; 652 bool ok;
643 bool found = false; 653 bool found = false;
644 int offset; 654 int offset;
645 mNextAlarmIncidence = 0; 655 mNextAlarmIncidence = 0;
646 for( e = mEventList.first(); e; e = mEventList.next() ) { 656 for( e = mEventList.first(); e; e = mEventList.next() ) {
647 if ( !e->calEnabled() ) continue; 657 if ( !e->calEnabled() ) continue;
648 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 658 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
649 if ( ok ) { 659 if ( ok ) {
650 if ( next < nextA ) { 660 if ( next < nextA ) {
651 nextA = next; 661 nextA = next;
652 found = true; 662 found = true;
653 mNextSummary = e->summary(); 663 mNextSummary = e->summary();
654 mNextAlarmEventDateTime = next.addSecs(offset ) ; 664 mNextAlarmEventDateTime = next.addSecs(offset ) ;
655 mNextAlarmIncidence = (Incidence *) e; 665 mNextAlarmIncidence = (Incidence *) e;
656 } 666 }
657 } 667 }
658 } 668 }
659 Todo *t; 669 Todo *t;
660 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 670 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
661 if ( !t->calEnabled() ) continue; 671 if ( !t->calEnabled() ) continue;
662 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 672 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
663 if ( ok ) { 673 if ( ok ) {
664 if ( next < nextA ) { 674 if ( next < nextA ) {
665 nextA = next; 675 nextA = next;
666 found = true; 676 found = true;
667 mNextSummary = t->summary(); 677 mNextSummary = t->summary();
668 mNextAlarmEventDateTime = next.addSecs(offset ); 678 mNextAlarmEventDateTime = next.addSecs(offset );
669 mNextAlarmIncidence = (Incidence *) t; 679 mNextAlarmIncidence = (Incidence *) t;
670 } 680 }
671 } 681 }
672 } 682 }
673 if ( mNextAlarmIncidence ) { 683 if ( mNextAlarmIncidence ) {
674 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 684 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
675 mNextAlarmDateTime = nextA; 685 mNextAlarmDateTime = nextA;
676 } 686 }
677 return nextA; 687 return nextA;
678} 688}
679Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) 689Alarm::List CalendarLocal::alarmsTo( const QDateTime &to )
680{ 690{
681 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); 691 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to );
682} 692}
683 693
684Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) 694Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to )
685{ 695{
686 696
687 Alarm::List alarms; 697 Alarm::List alarms;
688 698
689 Event *e; 699 Event *e;
690 700
691 for( e = mEventList.first(); e; e = mEventList.next() ) { 701 for( e = mEventList.first(); e; e = mEventList.next() ) {
692 if ( !e->calEnabled() ) continue; 702 if ( !e->calEnabled() ) continue;
693 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); 703 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to );
694 else appendAlarms( alarms, e, from, to ); 704 else appendAlarms( alarms, e, from, to );
695 } 705 }
696 706
697 Todo *t; 707 Todo *t;
698 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 708 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
699 if ( !t->calEnabled() ) continue; 709 if ( !t->calEnabled() ) continue;
700 appendAlarms( alarms, t, from, to ); 710 appendAlarms( alarms, t, from, to );
701 } 711 }
702 712
703 return alarms; 713 return alarms;
704} 714}
705 715
706void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, 716void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence,
707 const QDateTime &from, const QDateTime &to ) 717 const QDateTime &from, const QDateTime &to )
708{ 718{
709 QPtrList<Alarm> alarmList = incidence->alarms(); 719 QPtrList<Alarm> alarmList = incidence->alarms();
710 Alarm *alarm; 720 Alarm *alarm;
711 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 721 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
712// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() 722// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text()
713// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; 723// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl;
714 if ( alarm->enabled() ) { 724 if ( alarm->enabled() ) {
715 if ( alarm->time() >= from && alarm->time() <= to ) { 725 if ( alarm->time() >= from && alarm->time() <= to ) {
716 alarms.append( alarm ); 726 alarms.append( alarm );
717 } 727 }
718 } 728 }
719 } 729 }
720} 730}
721 731
722void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, 732void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms,
723 Incidence *incidence, 733 Incidence *incidence,
724 const QDateTime &from, 734 const QDateTime &from,
725 const QDateTime &to ) 735 const QDateTime &to )
726{ 736{
727 737
728 QPtrList<Alarm> alarmList = incidence->alarms(); 738 QPtrList<Alarm> alarmList = incidence->alarms();
729 Alarm *alarm; 739 Alarm *alarm;
730 QDateTime qdt; 740 QDateTime qdt;
731 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 741 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
732 if (incidence->recursOn(from.date())) { 742 if (incidence->recursOn(from.date())) {
733 qdt.setTime(alarm->time().time()); 743 qdt.setTime(alarm->time().time());
734 qdt.setDate(from.date()); 744 qdt.setDate(from.date());
735 } 745 }
736 else qdt = alarm->time(); 746 else qdt = alarm->time();
737 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1()); 747 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1());
738 if ( alarm->enabled() ) { 748 if ( alarm->enabled() ) {
739 if ( qdt >= from && qdt <= to ) { 749 if ( qdt >= from && qdt <= to ) {
740 alarms.append( alarm ); 750 alarms.append( alarm );
741 } 751 }
742 } 752 }
743 } 753 }
744} 754}
745 755
746 756
747/****************************** PROTECTED METHODS ****************************/ 757/****************************** PROTECTED METHODS ****************************/
748 758
749// after changes are made to an event, this should be called. 759// after changes are made to an event, this should be called.
750void CalendarLocal::update( IncidenceBase *incidence ) 760void CalendarLocal::update( IncidenceBase *incidence )
751{ 761{
752 incidence->setSyncStatus( Event::SYNCMOD ); 762 incidence->setSyncStatus( Event::SYNCMOD );
753 incidence->setLastModified( QDateTime::currentDateTime() ); 763 incidence->setLastModified( QDateTime::currentDateTime() );
754 // we should probably update the revision number here, 764 // we should probably update the revision number here,
755 // or internally in the Event itself when certain things change. 765 // or internally in the Event itself when certain things change.
756 // need to verify with ical documentation. 766 // need to verify with ical documentation.
757 767
758 setModified( true ); 768 setModified( true );
759} 769}
760 770
761void CalendarLocal::insertEvent( Event *event ) 771void CalendarLocal::insertEvent( Event *event )
762{ 772{
763 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); 773 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event );
764} 774}
765 775
766 776
767QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) 777QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted )
768{ 778{
769 QPtrList<Event> eventList; 779 QPtrList<Event> eventList;
770 780
771 Event *event; 781 Event *event;
772 for( event = mEventList.first(); event; event = mEventList.next() ) { 782 for( event = mEventList.first(); event; event = mEventList.next() ) {
773 if ( !event->calEnabled() ) continue; 783 if ( !event->calEnabled() ) continue;
774 if ( event->doesRecur() ) { 784 if ( event->doesRecur() ) {
775 if ( event->isMultiDay() ) { 785 if ( event->isMultiDay() ) {
776 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); 786 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() );
777 int i; 787 int i;
778 for ( i = 0; i <= extraDays; i++ ) { 788 for ( i = 0; i <= extraDays; i++ ) {
779 if ( event->recursOn( qd.addDays( -i ) ) ) { 789 if ( event->recursOn( qd.addDays( -i ) ) ) {
780 eventList.append( event ); 790 eventList.append( event );
781 break; 791 break;
782 } 792 }
783 } 793 }
784 } else { 794 } else {
785 if ( event->recursOn( qd ) ) 795 if ( event->recursOn( qd ) )
786 eventList.append( event ); 796 eventList.append( event );
787 } 797 }
788 } else { 798 } else {
789 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { 799 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) {
790 eventList.append( event ); 800 eventList.append( event );
791 } 801 }
792 } 802 }
793 } 803 }
794 804
795 if ( !sorted ) { 805 if ( !sorted ) {
796 return eventList; 806 return eventList;
797 } 807 }
798 808
799 // kdDebug(5800) << "Sorting events for date\n" << endl; 809 // kdDebug(5800) << "Sorting events for date\n" << endl;
800 // now, we have to sort it based on dtStart.time() 810 // now, we have to sort it based on dtStart.time()
801 QPtrList<Event> eventListSorted; 811 QPtrList<Event> eventListSorted;
802 Event *sortEvent; 812 Event *sortEvent;
803 for ( event = eventList.first(); event; event = eventList.next() ) { 813 for ( event = eventList.first(); event; event = eventList.next() ) {
804 sortEvent = eventListSorted.first(); 814 sortEvent = eventListSorted.first();
805 int i = 0; 815 int i = 0;
806 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) 816 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() )
807 { 817 {
808 i++; 818 i++;
809 sortEvent = eventListSorted.next(); 819 sortEvent = eventListSorted.next();
810 } 820 }
811 eventListSorted.insert( i, event ); 821 eventListSorted.insert( i, event );
812 } 822 }
813 return eventListSorted; 823 return eventListSorted;
814} 824}
815 825
816 826
817QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, 827QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
818 bool inclusive ) 828 bool inclusive )
819{ 829{
820 Event *event = 0; 830 Event *event = 0;
821 831
822 QPtrList<Event> eventList; 832 QPtrList<Event> eventList;
823 833
824 // Get non-recurring events 834 // Get non-recurring events
825 for( event = mEventList.first(); event; event = mEventList.next() ) { 835 for( event = mEventList.first(); event; event = mEventList.next() ) {
826 if ( !event->calEnabled() ) continue; 836 if ( !event->calEnabled() ) continue;
827 if ( event->doesRecur() ) { 837 if ( event->doesRecur() ) {
828 QDate rStart = event->dtStart().date(); 838 QDate rStart = event->dtStart().date();
829 bool found = false; 839 bool found = false;
830 if ( inclusive ) { 840 if ( inclusive ) {
831 if ( rStart >= start && rStart <= end ) { 841 if ( rStart >= start && rStart <= end ) {
832 // Start date of event is in range. Now check for end date. 842 // Start date of event is in range. Now check for end date.
833 // if duration is negative, event recurs forever, so do not include it. 843 // if duration is negative, event recurs forever, so do not include it.
834 if ( event->recurrence()->duration() == 0 ) { // End date set 844 if ( event->recurrence()->duration() == 0 ) { // End date set
835 QDate rEnd = event->recurrence()->endDate(); 845 QDate rEnd = event->recurrence()->endDate();
836 if ( rEnd >= start && rEnd <= end ) { // End date within range 846 if ( rEnd >= start && rEnd <= end ) { // End date within range
837 found = true; 847 found = true;
838 } 848 }
839 } else if ( event->recurrence()->duration() > 0 ) { // Duration set 849 } else if ( event->recurrence()->duration() > 0 ) { // Duration set
840 // TODO: Calculate end date from duration. Should be done in Event 850 // TODO: Calculate end date from duration. Should be done in Event
841 // For now exclude all events with a duration. 851 // For now exclude all events with a duration.
842 } 852 }
843 } 853 }
844 } else { 854 } else {
845 bool founOne; 855 bool founOne;
846 QDate next = event->getNextOccurence( start, &founOne ).date(); 856 QDate next = event->getNextOccurence( start, &founOne ).date();
847 if ( founOne ) { 857 if ( founOne ) {
848 if ( next <= end ) { 858 if ( next <= end ) {
849 found = true; 859 found = true;
850 } 860 }
851 } 861 }
852 862
853 /* 863 /*
854 // crap !!! 864 // crap !!!
855 if ( rStart <= end ) { // Start date not after range 865 if ( rStart <= end ) { // Start date not after range
856 if ( rStart >= start ) { // Start date within range 866 if ( rStart >= start ) { // Start date within range
857 found = true; 867 found = true;
858 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever 868 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
859 found = true; 869 found = true;
860 } else if ( event->recurrence()->duration() == 0 ) { // End date set 870 } else if ( event->recurrence()->duration() == 0 ) { // End date set
861 QDate rEnd = event->recurrence()->endDate(); 871 QDate rEnd = event->recurrence()->endDate();
862 if ( rEnd >= start && rEnd <= end ) { // End date within range 872 if ( rEnd >= start && rEnd <= end ) { // End date within range
863 found = true; 873 found = true;
864 } 874 }
865 } else { // Duration set 875 } else { // Duration set
866 // TODO: Calculate end date from duration. Should be done in Event 876 // TODO: Calculate end date from duration. Should be done in Event
867 // For now include all events with a duration. 877 // For now include all events with a duration.
868 found = true; 878 found = true;
869 } 879 }
870 } 880 }
871 */ 881 */
872 882
873 } 883 }
874 884
875 if ( found ) eventList.append( event ); 885 if ( found ) eventList.append( event );
876 } else { 886 } else {
877 QDate s = event->dtStart().date(); 887 QDate s = event->dtStart().date();
878 QDate e = event->dtEnd().date(); 888 QDate e = event->dtEnd().date();
879 889
880 if ( inclusive ) { 890 if ( inclusive ) {
881 if ( s >= start && e <= end ) { 891 if ( s >= start && e <= end ) {
882 eventList.append( event ); 892 eventList.append( event );
883 } 893 }
884 } else { 894 } else {
885 if ( ( e >= start && s <= end ) ) { 895 if ( ( e >= start && s <= end ) ) {
886 eventList.append( event ); 896 eventList.append( event );
887 } 897 }
888 } 898 }
889 } 899 }
890 } 900 }
891 901
892 return eventList; 902 return eventList;
893} 903}
894 904
895QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 905QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
896{ 906{
897 return rawEventsForDate( qdt.date() ); 907 return rawEventsForDate( qdt.date() );
898} 908}
899 909
900QPtrList<Event> CalendarLocal::rawEvents() 910QPtrList<Event> CalendarLocal::rawEvents()
901{ 911{
902 QPtrList<Event> el; 912 QPtrList<Event> el;
903 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 913 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
904 if ( it->calEnabled() ) el.append( it ); 914 if ( it->calEnabled() ) el.append( it );
905 return el; 915 return el;
906} 916}
907 917
908bool CalendarLocal::addJournal(Journal *journal) 918bool CalendarLocal::addJournal(Journal *journal)
909{ 919{
910 mJournalList.append(journal); 920 mJournalList.append(journal);
911 921
912 journal->registerObserver( this ); 922 journal->registerObserver( this );
913 923
914 setModified( true ); 924 setModified( true );
915 if ( journal->calID() == 0 ) 925 if ( journal->calID() == 0 )
916 journal->setCalID( mDefaultCalendar ); 926 journal->setCalID( mDefaultCalendar );
917 journal->setCalEnabled( true ); 927 journal->setCalEnabled( true );
918 return true; 928 return true;
919} 929}
920 930
921void CalendarLocal::deleteJournal( Journal *journal ) 931void CalendarLocal::deleteJournal( Journal *journal )
922{ 932{
923 clearUndo(journal); 933 clearUndo(journal);
924 if ( mJournalList.removeRef(journal) ) { 934 if ( mJournalList.removeRef(journal) ) {
925 setModified( true ); 935 setModified( true );
926 } 936 }
927} 937}
928 938
929QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date ) 939QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date )
930{ 940{
931 QPtrList<Journal> el; 941 QPtrList<Journal> el;
932 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 942 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
933 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it ); 943 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it );
934 return el; 944 return el;
935} 945}
936Journal *CalendarLocal::journal( const QDate &date ) 946Journal *CalendarLocal::journal( const QDate &date )
937{ 947{
938// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 948// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
939 949
940 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 950 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
941 if ( it->calEnabled() && it->dtStart().date() == date ) 951 if ( it->calEnabled() && it->dtStart().date() == date )
942 return it; 952 return it;
943 953
944 return 0; 954 return 0;
945} 955}
946 956
947Journal *CalendarLocal::journal( const QString &uid ) 957Journal *CalendarLocal::journal( const QString &uid )
948{ 958{
949 Journal * retVal = 0; 959 Journal * retVal = 0;
950 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 960 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
951 if ( it->calEnabled() && it->uid() == uid ) { 961 if ( it->calEnabled() && it->uid() == uid ) {
952 if ( retVal ) { 962 if ( retVal ) {
953 if ( retVal->calID() > it->calID() ) { 963 if ( retVal->calID() > it->calID() ) {
954 retVal = it; 964 retVal = it;
955 } 965 }
956 } else { 966 } else {
957 retVal = it; 967 retVal = it;
958 } 968 }
959 } 969 }
960 return retVal; 970 return retVal;
961} 971}
962 972
963QPtrList<Journal> CalendarLocal::journals() 973QPtrList<Journal> CalendarLocal::journals()
964{ 974{
965 QPtrList<Journal> el; 975 QPtrList<Journal> el;
966 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 976 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
967 if ( it->calEnabled() ) el.append( it ); 977 if ( it->calEnabled() ) el.append( it );
968 return el; 978 return el;
969} 979}
970void CalendarLocal::setCalendarRemove( int id ) 980void CalendarLocal::setCalendarRemove( int id )
971{ 981{
972 982
973 { 983 {
974 QPtrList<Event> EventList = mEventList; 984 QPtrList<Event> EventList = mEventList;
975 Event * ev = EventList.first(); 985 Event * ev = EventList.first();
976 while ( ev ) { 986 while ( ev ) {
977 if ( ev->calID() == id ) 987 if ( ev->calID() == id )
978 deleteEvent( ev ); 988 deleteEvent( ev );
979 ev = EventList.next(); 989 ev = EventList.next();
980 } 990 }
981 } 991 }
982 { 992 {
983 993
984 QPtrList<Todo> TodoList = mTodoList; 994 QPtrList<Todo> TodoList = mTodoList;
985 Todo * ev = TodoList.first(); 995 Todo * ev = TodoList.first();
986 while ( ev ) { 996 while ( ev ) {
987 if ( ev->calID() == id ) 997 if ( ev->calID() == id )
988 deleteTodo( ev ); 998 deleteTodo( ev );
989 ev = TodoList.next(); 999 ev = TodoList.next();
990 } 1000 }
991 } 1001 }
992 { 1002 {
993 QPtrList<Journal> JournalList = mJournalList; 1003 QPtrList<Journal> JournalList = mJournalList;
994 Journal * ev = JournalList.first(); 1004 Journal * ev = JournalList.first();
995 while ( ev ) { 1005 while ( ev ) {
996 if ( ev->calID() == id ) 1006 if ( ev->calID() == id )
997 deleteJournal( ev ); 1007 deleteJournal( ev );
998 ev = JournalList.next(); 1008 ev = JournalList.next();
999 } 1009 }
1000 } 1010 }
1001 1011
1002 clearUndo(0); 1012 clearUndo(0);
1003 1013
1004} 1014}
1005 1015
1016void CalendarLocal::setAllCalendarEnabled( bool enable )
1017{
1018 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1019 it->setCalEnabled( enable );
1020
1021 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1022 it->setCalEnabled( enable );
1023
1024 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1025 it->setCalEnabled( enable );
1026
1027
1028}
1006void CalendarLocal::setCalendarEnabled( int id, bool enable ) 1029void CalendarLocal::setCalendarEnabled( int id, bool enable )
1007{ 1030{
1008 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1031 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1009 if ( it->calID() == id ) it->setCalEnabled( enable ); 1032 if ( it->calID() == id ) it->setCalEnabled( enable );
1010 1033
1011 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1034 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1012 if ( it->calID() == id ) it->setCalEnabled( enable ); 1035 if ( it->calID() == id ) it->setCalEnabled( enable );
1013 1036
1014 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1037 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1015 if ( it->calID() == id ) it->setCalEnabled( enable ); 1038 if ( it->calID() == id ) it->setCalEnabled( enable );
1016 1039
1017} 1040}
1018 1041
1019void CalendarLocal::setReadOnly( int id, bool enable ) 1042void CalendarLocal::setReadOnly( int id, bool enable )
1020{ 1043{
1021 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1044 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1022 if ( it->calID() == id ) it->setReadOnly( enable ); 1045 if ( it->calID() == id ) it->setReadOnly( enable );
1023 1046
1024 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1047 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1025 if ( it->calID() == id ) it->setReadOnly( enable ); 1048 if ( it->calID() == id ) it->setReadOnly( enable );
1026 1049
1027 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1050 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1028 if ( it->calID() == id ) it->setReadOnly( enable ); 1051 if ( it->calID() == id ) it->setReadOnly( enable );
1029 1052
1030} 1053}
1031 1054
1032void CalendarLocal::setAlarmEnabled( int id, bool enable ) 1055void CalendarLocal::setAlarmEnabled( int id, bool enable )
1033{ 1056{
1034 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1057 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1035 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1058 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1036 1059
1037 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1060 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1038 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1061 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1039 1062
1040 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1063 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1041 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1064 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1042 reInitAlarmSettings(); 1065 reInitAlarmSettings();
1043 1066
1044} 1067}
1045void CalendarLocal::setDefaultCalendarEnabledOnly() 1068void CalendarLocal::setDefaultCalendarEnabledOnly()
1046{ 1069{
1047 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1070 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1048 it->setCalEnabled( it->calID() == mDefaultCalendar ); 1071 it->setCalEnabled( it->calID() == mDefaultCalendar );
1049 1072
1050 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1073 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1051 it->setCalEnabled( it->calID() == mDefaultCalendar); 1074 it->setCalEnabled( it->calID() == mDefaultCalendar);
1052 1075
1053 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1076 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1054 it->setCalEnabled( it->calID() == mDefaultCalendar); 1077 it->setCalEnabled( it->calID() == mDefaultCalendar);
1055 1078
1056} 1079}
diff --git a/libkcal/calendarlocal.h b/libkcal/calendarlocal.h
index eb7bf34..b70f0c9 100644
--- a/libkcal/calendarlocal.h
+++ b/libkcal/calendarlocal.h
@@ -1,232 +1,233 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22#ifndef KCAL_CALENDARLOCAL_H 22#ifndef KCAL_CALENDARLOCAL_H
23#define KCAL_CALENDARLOCAL_H 23#define KCAL_CALENDARLOCAL_H
24 24
25#include "calendar.h" 25#include "calendar.h"
26 26
27namespace KCal { 27namespace KCal {
28 28
29class CalFormat; 29class CalFormat;
30 30
31/** 31/**
32 This class provides a calendar stored as a local file. 32 This class provides a calendar stored as a local file.
33*/ 33*/
34class CalendarLocal : public Calendar 34class CalendarLocal : public Calendar
35{ 35{
36 public: 36 public:
37 /** 37 /**
38 Constructs a new calendar, with variables initialized to sane values. 38 Constructs a new calendar, with variables initialized to sane values.
39 */ 39 */
40 CalendarLocal(); 40 CalendarLocal();
41 /** 41 /**
42 Constructs a new calendar, with variables initialized to sane values. 42 Constructs a new calendar, with variables initialized to sane values.
43 */ 43 */
44 CalendarLocal( const QString &timeZoneId ); 44 CalendarLocal( const QString &timeZoneId );
45 ~CalendarLocal(); 45 ~CalendarLocal();
46 void addCalendar( Calendar* ); 46 void addCalendar( Calendar* );
47 bool addCalendarFile( QString name, int id ); 47 bool addCalendarFile( QString name, int id );
48 bool mergeCalendarFile( QString name ); 48 bool mergeCalendarFile( QString name );
49 bool mergeCalendar( Calendar* cal ); 49 bool mergeCalendar( Calendar* cal );
50 Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ); 50 Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates );
51 void setSyncEventsReadOnly(); 51 void setSyncEventsReadOnly();
52 void setSyncEventsEnabled(); 52 void setSyncEventsEnabled();
53 void stopAllTodos(); 53 void stopAllTodos();
54 /** 54 /**
55 Loads a calendar on disk in vCalendar or iCalendar format into the current 55 Loads a calendar on disk in vCalendar or iCalendar format into the current
56 calendar. Any information already present is lost. 56 calendar. Any information already present is lost.
57 @return true, if successfull, false on error. 57 @return true, if successfull, false on error.
58 @param fileName the name of the calendar on disk. 58 @param fileName the name of the calendar on disk.
59 */ 59 */
60 bool load( const QString &fileName ); 60 bool load( const QString &fileName );
61 /** 61 /**
62 Writes out the calendar to disk in the specified \a format. 62 Writes out the calendar to disk in the specified \a format.
63 CalendarLocal takes ownership of the CalFormat object. 63 CalendarLocal takes ownership of the CalFormat object.
64 @return true, if successfull, false on error. 64 @return true, if successfull, false on error.
65 @param fileName the name of the file 65 @param fileName the name of the file
66 */ 66 */
67 bool save( const QString &fileName, CalFormat *format = 0 ); 67 bool save( const QString &fileName, CalFormat *format = 0 );
68 68
69 /** 69 /**
70 Clears out the current calendar, freeing all used memory etc. etc. 70 Clears out the current calendar, freeing all used memory etc. etc.
71 */ 71 */
72 void close(); 72 void close();
73 73
74 void save() {} 74 void save() {}
75 75
76 /** 76 /**
77 Add Event to calendar. 77 Add Event to calendar.
78 */ 78 */
79 void removeSyncInfo( QString syncProfile); 79 void removeSyncInfo( QString syncProfile);
80 bool addAnniversaryNoDup( Event *event ); 80 bool addAnniversaryNoDup( Event *event );
81 bool addEventNoDup( Event *event ); 81 bool addEventNoDup( Event *event );
82 bool addEvent( Event *event ); 82 bool addEvent( Event *event );
83 /** 83 /**
84 Deletes an event from this calendar. 84 Deletes an event from this calendar.
85 */ 85 */
86 void deleteEvent( Event *event ); 86 void deleteEvent( Event *event );
87 87
88 /** 88 /**
89 Retrieves an event on the basis of the unique string ID. 89 Retrieves an event on the basis of the unique string ID.
90 */ 90 */
91 Event *event( const QString &uid ); 91 Event *event( const QString &uid );
92 /** 92 /**
93 Return unfiltered list of all events in calendar. 93 Return unfiltered list of all events in calendar.
94 */ 94 */
95 QPtrList<Event> rawEvents(); 95 QPtrList<Event> rawEvents();
96 QPtrList<Event> getExternLastSyncEvents(); 96 QPtrList<Event> getExternLastSyncEvents();
97 /** 97 /**
98 Add a todo to the todolist. 98 Add a todo to the todolist.
99 */ 99 */
100 bool addTodo( Todo *todo ); 100 bool addTodo( Todo *todo );
101 bool addTodoNoDup( Todo *todo ); 101 bool addTodoNoDup( Todo *todo );
102 /** 102 /**
103 Remove a todo from the todolist. 103 Remove a todo from the todolist.
104 */ 104 */
105 void deleteTodo( Todo * ); 105 void deleteTodo( Todo * );
106 /** 106 /**
107 Searches todolist for an event with this unique string identifier, 107 Searches todolist for an event with this unique string identifier,
108 returns a pointer or null. 108 returns a pointer or null.
109 */ 109 */
110 Todo *todo( const QString &uid ); 110 Todo *todo( const QString &uid );
111 /** 111 /**
112 Return list of all todos. 112 Return list of all todos.
113 */ 113 */
114 QPtrList<Todo> rawTodos(); 114 QPtrList<Todo> rawTodos();
115 /** 115 /**
116 Returns list of todos due on the specified date. 116 Returns list of todos due on the specified date.
117 */ 117 */
118 QPtrList<Todo> todos( const QDate &date ); 118 QPtrList<Todo> todos( const QDate &date );
119 /** 119 /**
120 Return list of all todos. 120 Return list of all todos.
121 121
122 Workaround because compiler does not recognize function of base class. 122 Workaround because compiler does not recognize function of base class.
123 */ 123 */
124 QPtrList<Todo> todos() { return Calendar::todos(); } 124 QPtrList<Todo> todos() { return Calendar::todos(); }
125 125
126 /** 126 /**
127 Add a Journal entry to calendar. 127 Add a Journal entry to calendar.
128 */ 128 */
129 bool addJournal( Journal * ); 129 bool addJournal( Journal * );
130 /** 130 /**
131 Remove a Journal from the calendar. 131 Remove a Journal from the calendar.
132 */ 132 */
133 void deleteJournal( Journal * ); 133 void deleteJournal( Journal * );
134 /** 134 /**
135 Return Journal for given date. 135 Return Journal for given date.
136 */ 136 */
137 Journal *journal( const QDate & ); 137 Journal *journal( const QDate & );
138 QPtrList<Journal> journals4Date( const QDate & ); 138 QPtrList<Journal> journals4Date( const QDate & );
139 /** 139 /**
140 Return Journal with given UID. 140 Return Journal with given UID.
141 */ 141 */
142 Journal *journal( const QString &uid ); 142 Journal *journal( const QString &uid );
143 /** 143 /**
144 Return list of all Journals stored in calendar. 144 Return list of all Journals stored in calendar.
145 */ 145 */
146 QPtrList<Journal> journals(); 146 QPtrList<Journal> journals();
147 147
148 /** 148 /**
149 Return all alarms, which ocur in the given time interval. 149 Return all alarms, which ocur in the given time interval.
150 */ 150 */
151 Alarm::List alarms( const QDateTime &from, const QDateTime &to ); 151 Alarm::List alarms( const QDateTime &from, const QDateTime &to );
152 152
153 /** 153 /**
154 Return all alarms, which ocur before given date. 154 Return all alarms, which ocur before given date.
155 */ 155 */
156 Alarm::List alarmsTo( const QDateTime &to ); 156 Alarm::List alarmsTo( const QDateTime &to );
157 157
158 QDateTime nextAlarm( int daysTo ) ; 158 QDateTime nextAlarm( int daysTo ) ;
159 QDateTime nextAlarmEventDateTime() const; 159 QDateTime nextAlarmEventDateTime() const;
160 void checkAlarmForIncidence( Incidence *, bool deleted ) ; 160 void checkAlarmForIncidence( Incidence *, bool deleted ) ;
161 void registerAlarm(); 161 void registerAlarm();
162 void deRegisterAlarm(); 162 void deRegisterAlarm();
163 QString getAlarmNotification(); 163 QString getAlarmNotification();
164 QString nextSummary() const ; 164 QString nextSummary() const ;
165 /** 165 /**
166 This method should be called whenever a Event is modified directly 166 This method should be called whenever a Event is modified directly
167 via it's pointer. It makes sure that the calendar is internally 167 via it's pointer. It makes sure that the calendar is internally
168 consistent. 168 consistent.
169 */ 169 */
170 void update( IncidenceBase *incidence ); 170 void update( IncidenceBase *incidence );
171 171
172 /** 172 /**
173 Builds and then returns a list of all events that match for the 173 Builds and then returns a list of all events that match for the
174 date specified. useful for dayView, etc. etc. 174 date specified. useful for dayView, etc. etc.
175 */ 175 */
176 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false ); 176 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false );
177 /** 177 /**
178 Get unfiltered events for date \a qdt. 178 Get unfiltered events for date \a qdt.
179 */ 179 */
180 QPtrList<Event> rawEventsForDate( const QDateTime &qdt ); 180 QPtrList<Event> rawEventsForDate( const QDateTime &qdt );
181 /** 181 /**
182 Get unfiltered events in a range of dates. If inclusive is set to true, 182 Get unfiltered events in a range of dates. If inclusive is set to true,
183 only events are returned, which are completely included in the range. 183 only events are returned, which are completely included in the range.
184 */ 184 */
185 QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 185 QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
186 bool inclusive = false ); 186 bool inclusive = false );
187 Todo *todo( QString, QString ); 187 Todo *todo( QString, QString );
188 Event *event( QString, QString ); 188 Event *event( QString, QString );
189 void getIncidenceCount( int calId, int& events, int & todos, int & journals); 189 void getIncidenceCount( int calId, int& events, int & todos, int & journals);
190 190
191public slots: 191public slots:
192 void setCalendarEnabled( int id, bool enable ); 192 void setCalendarEnabled( int id, bool enable );
193 void setAlarmEnabled( int id, bool enable ); 193 void setAlarmEnabled( int id, bool enable );
194 void setReadOnly( int id, bool enable ); 194 void setReadOnly( int id, bool enable );
195 void setDefaultCalendarEnabledOnly(); 195 void setDefaultCalendarEnabledOnly();
196 void setCalendarRemove( int id ); 196 void setCalendarRemove( int id );
197 void setAllCalendarEnabled( bool enable );
197 198
198 protected: 199 protected:
199 200
200 // Event* mNextAlarmEvent; 201 // Event* mNextAlarmEvent;
201 QString mNextSummary; 202 QString mNextSummary;
202 QString mNextAlarmEventDateTimeString; 203 QString mNextAlarmEventDateTimeString;
203 QString mLastAlarmNotificationString; 204 QString mLastAlarmNotificationString;
204 QDateTime mNextAlarmEventDateTime; 205 QDateTime mNextAlarmEventDateTime;
205 QDateTime mNextAlarmDateTime; 206 QDateTime mNextAlarmDateTime;
206 void reInitAlarmSettings(); 207 void reInitAlarmSettings();
207 208
208 /** Notification function of IncidenceBase::Observer. */ 209 /** Notification function of IncidenceBase::Observer. */
209 void incidenceUpdated( IncidenceBase *i ) { update( i ); } 210 void incidenceUpdated( IncidenceBase *i ) { update( i ); }
210 211
211 /** inserts an event into its "proper place" in the calendar. */ 212 /** inserts an event into its "proper place" in the calendar. */
212 void insertEvent( Event *event ); 213 void insertEvent( Event *event );
213 214
214 /** Append alarms of incidence in interval to list of alarms. */ 215 /** Append alarms of incidence in interval to list of alarms. */
215 void appendAlarms( Alarm::List &alarms, Incidence *incidence, 216 void appendAlarms( Alarm::List &alarms, Incidence *incidence,
216 const QDateTime &from, const QDateTime &to ); 217 const QDateTime &from, const QDateTime &to );
217 218
218 /** Append alarms of recurring events in interval to list of alarms. */ 219 /** Append alarms of recurring events in interval to list of alarms. */
219 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence, 220 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence,
220 const QDateTime &from, const QDateTime &to ); 221 const QDateTime &from, const QDateTime &to );
221 222
222 private: 223 private:
223 void init(); 224 void init();
224 225
225 QPtrList<Event> mEventList; 226 QPtrList<Event> mEventList;
226 QPtrList<Todo> mTodoList; 227 QPtrList<Todo> mTodoList;
227 QPtrList<Journal> mJournalList; 228 QPtrList<Journal> mJournalList;
228}; 229};
229 230
230} 231}
231 232
232#endif 233#endif
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index 795cd30..d2cb71b 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -119,1661 +119,1660 @@ void KSyncManager::fillSyncMenu()
119#else 119#else
120 externalName = "Sharp_DTM"; 120 externalName = "Sharp_DTM";
121#endif 121#endif
122 prof << externalName; 122 prof << externalName;
123 prof << i18n("Local_file"); 123 prof << i18n("Local_file");
124 prof << i18n("Last_file"); 124 prof << i18n("Last_file");
125 KSyncProfile* temp = new KSyncProfile (); 125 KSyncProfile* temp = new KSyncProfile ();
126 temp->setName( prof[0] ); 126 temp->setName( prof[0] );
127 temp->writeConfig(&config); 127 temp->writeConfig(&config);
128 temp->setName( prof[1] ); 128 temp->setName( prof[1] );
129 temp->writeConfig(&config); 129 temp->writeConfig(&config);
130 temp->setName( prof[2] ); 130 temp->setName( prof[2] );
131 temp->writeConfig(&config); 131 temp->writeConfig(&config);
132 config.setGroup("General"); 132 config.setGroup("General");
133 config.writeEntry("SyncProfileNames",prof); 133 config.writeEntry("SyncProfileNames",prof);
134 config.writeEntry("ExternSyncProfiles",externalName); 134 config.writeEntry("ExternSyncProfiles",externalName);
135 config.sync(); 135 config.sync();
136 delete temp; 136 delete temp;
137 } 137 }
138 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 138 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
139 mSyncProfileNames = prof; 139 mSyncProfileNames = prof;
140 unsigned int i; 140 unsigned int i;
141 for ( i = 0; i < prof.count(); ++i ) { 141 for ( i = 0; i < prof.count(); ++i ) {
142 QString insertText = prof[i]; 142 QString insertText = prof[i];
143 if ( i == 0 ) { 143 if ( i == 0 ) {
144#ifdef DESKTOP_VERSION 144#ifdef DESKTOP_VERSION
145#ifdef _WIN32_ 145#ifdef _WIN32_
146 insertText = "OutLook(not_implemented)"; 146 insertText = "OutLook(not_implemented)";
147#else 147#else
148 insertText = "KDE_Desktop"; 148 insertText = "KDE_Desktop";
149#endif 149#endif
150#else 150#else
151 insertText = "Sharp_DTM"; 151 insertText = "Sharp_DTM";
152#endif 152#endif
153 } 153 }
154 mSyncMenu->insertItem( insertText, 1000+i ); 154 mSyncMenu->insertItem( insertText, 1000+i );
155 clearMenu->insertItem( insertText, 1000+i ); 155 clearMenu->insertItem( insertText, 1000+i );
156 if ( i == 2 ) 156 if ( i == 2 )
157 mSyncMenu->insertSeparator(); 157 mSyncMenu->insertSeparator();
158 } 158 }
159 QDir app_dir; 159 QDir app_dir;
160 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available 160 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available
161 if ( mTargetApp == PWMPI) { 161 if ( mTargetApp == PWMPI) {
162 mSyncMenu->removeItem( 1000 ); 162 mSyncMenu->removeItem( 1000 );
163 clearMenu->removeItem( 1000 ); 163 clearMenu->removeItem( 1000 );
164 } 164 }
165#ifndef DESKTOP_VERSION 165#ifndef DESKTOP_VERSION
166 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 166 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
167 mSyncMenu->removeItem( 1000 ); 167 mSyncMenu->removeItem( 1000 );
168 clearMenu->removeItem( 1000 ); 168 clearMenu->removeItem( 1000 );
169 } 169 }
170#endif 170#endif
171 mSyncMenu->removeItem( 1002 ); 171 mSyncMenu->removeItem( 1002 );
172 clearMenu->removeItem( 1002 ); 172 clearMenu->removeItem( 1002 );
173} 173}
174void KSyncManager::slotClearMenu( int action ) 174void KSyncManager::slotClearMenu( int action )
175{ 175{
176 QString syncDevice; 176 QString syncDevice;
177 if ( action > 999 ) { 177 if ( action > 999 ) {
178 syncDevice = mSyncProfileNames[action - 1000] ; 178 syncDevice = mSyncProfileNames[action - 1000] ;
179 } 179 }
180 180
181 181
182 182
183 int result = 0; 183 int result = 0;
184 QString sd; 184 QString sd;
185 if ( syncDevice.isEmpty() ) 185 if ( syncDevice.isEmpty() )
186 sd = i18n("Do you want to\nclear all sync info\nof all profiles?"); 186 sd = i18n("Do you want to\nclear all sync info\nof all profiles?");
187 else 187 else
188 sd = i18n("Do you want to\nclear the sync\ninfo of profile\n%1?\n"). arg( syncDevice ); 188 sd = i18n("Do you want to\nclear the sync\ninfo of profile\n%1?\n"). arg( syncDevice );
189 189
190 result = QMessageBox::warning( mParent, i18n("Warning!"),sd,i18n("OK"), i18n("Cancel"), 0, 190 result = QMessageBox::warning( mParent, i18n("Warning!"),sd,i18n("OK"), i18n("Cancel"), 0,
191 0, 1 ); 191 0, 1 );
192 if ( result ) 192 if ( result )
193 return; 193 return;
194 mImplementation->removeSyncInfo( syncDevice ); 194 mImplementation->removeSyncInfo( syncDevice );
195} 195}
196void KSyncManager::slotSyncMenu( int action ) 196void KSyncManager::slotSyncMenu( int action )
197{ 197{
198 qDebug("KSM::syncaction %d ", action); 198 qDebug("KSM::syncaction %d ", action);
199 mCurrentResourceLocal = ""; 199 mCurrentResourceLocal = "";
200 emit multiResourceSyncStart( false ); 200 emit multiResourceSyncStart( false );
201 if ( action == 5000 ) 201 if ( action == 5000 )
202 return; 202 return;
203 mSyncWithDesktop = false; 203 mSyncWithDesktop = false;
204 if ( action == 0 ) { 204 if ( action == 0 ) {
205 205
206 // seems to be a Qt2 event handling bug 206 // seems to be a Qt2 event handling bug
207 // syncmenu.clear causes a segfault at first time 207 // syncmenu.clear causes a segfault at first time
208 // when we call it after the main event loop, it is ok 208 // when we call it after the main event loop, it is ok
209 // same behaviour when calling OM/Pi via QCOP for the first time 209 // same behaviour when calling OM/Pi via QCOP for the first time
210 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 210 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
211 //confSync(); 211 //confSync();
212 212
213 return; 213 return;
214 } 214 }
215 if ( action == 1 ) { 215 if ( action == 1 ) {
216 multiSync( true ); 216 multiSync( true );
217 return; 217 return;
218 } 218 }
219 if ( action == 2 ) { 219 if ( action == 2 ) {
220 enableQuick(); 220 enableQuick();
221 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 221 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
222 return; 222 return;
223 } 223 }
224 if ( action == 3 ) { 224 if ( action == 3 ) {
225 delete mServerSocket; 225 delete mServerSocket;
226 mServerSocket = 0; 226 mServerSocket = 0;
227 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 227 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
228 return; 228 return;
229 } 229 }
230 230
231 if (blockSave()) 231 if (blockSave())
232 return; 232 return;
233 233
234 setBlockSave(true); 234 setBlockSave(true);
235 bool silent = false; 235 bool silent = false;
236 if ( action == 999 ) { 236 if ( action == 999 ) {
237 //special mode for silent syncing 237 //special mode for silent syncing
238 action = 1000; 238 action = 1000;
239 silent = true; 239 silent = true;
240 } 240 }
241 241
242 mCurrentSyncProfile = action - 1000 ; 242 mCurrentSyncProfile = action - 1000 ;
243 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ; 243 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ;
244 mCurrentSyncName = mLocalMachineName ; 244 mCurrentSyncName = mLocalMachineName ;
245 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 245 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
246 KSyncProfile* temp = new KSyncProfile (); 246 KSyncProfile* temp = new KSyncProfile ();
247 temp->setName(mSyncProfileNames[mCurrentSyncProfile]); 247 temp->setName(mSyncProfileNames[mCurrentSyncProfile]);
248 temp->readConfig(&config); 248 temp->readConfig(&config);
249 if (silent) { 249 if (silent) {
250 mAskForPreferences = false; 250 mAskForPreferences = false;
251 mShowSyncSummary = false; 251 mShowSyncSummary = false;
252 mWriteBackFile = true; 252 mWriteBackFile = true;
253 mSyncAlgoPrefs = 2;// take newest 253 mSyncAlgoPrefs = 2;// take newest
254 } 254 }
255 else { 255 else {
256 mAskForPreferences = temp->getAskForPreferences(); 256 mAskForPreferences = temp->getAskForPreferences();
257 mShowSyncSummary = temp->getShowSummaryAfterSync(); 257 mShowSyncSummary = temp->getShowSummaryAfterSync();
258 mWriteBackFile = temp->getWriteBackFile(); 258 mWriteBackFile = temp->getWriteBackFile();
259 mSyncAlgoPrefs = temp->getSyncPrefs(); 259 mSyncAlgoPrefs = temp->getSyncPrefs();
260 } 260 }
261 mWriteBackExistingOnly = temp->getWriteBackExisting(); 261 mWriteBackExistingOnly = temp->getWriteBackExisting();
262 mIsKapiFile = temp->getIsKapiFile(); 262 mIsKapiFile = temp->getIsKapiFile();
263 mWriteBackInFuture = 0; 263 mWriteBackInFuture = 0;
264 if ( temp->getWriteBackFuture() ) { 264 if ( temp->getWriteBackFuture() ) {
265 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 265 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
266 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 266 mWriteBackInPast = temp->getWriteBackPastWeeks( );
267 } 267 }
268 mFilterInCal = temp->getFilterInCal(); 268 mFilterInCal = temp->getFilterInCal();
269 mFilterOutCal = temp->getFilterOutCal(); 269 mFilterOutCal = temp->getFilterOutCal();
270 mFilterInAB = temp->getFilterInAB(); 270 mFilterInAB = temp->getFilterInAB();
271 mFilterOutAB = temp->getFilterOutAB(); 271 mFilterOutAB = temp->getFilterOutAB();
272 272
273 if ( action == 1000 ) { 273 if ( action == 1000 ) {
274 mIsKapiFile = false; 274 mIsKapiFile = false;
275#ifdef DESKTOP_VERSION 275#ifdef DESKTOP_VERSION
276 syncKDE(); 276 syncKDE();
277#else 277#else
278 syncSharp(); 278 syncSharp();
279#endif 279#endif
280 280
281 } else if ( action == 1001 ) { 281 } else if ( action == 1001 ) {
282 syncLocalFile(); 282 syncLocalFile();
283 283
284 } else if ( action == 1002 ) { 284 } else if ( action == 1002 ) {
285 mWriteBackFile = false; 285 mWriteBackFile = false;
286 mAskForPreferences = false; 286 mAskForPreferences = false;
287 mShowSyncSummary = false; 287 mShowSyncSummary = false;
288 mSyncAlgoPrefs = 3; 288 mSyncAlgoPrefs = 3;
289 quickSyncLocalFile(); 289 quickSyncLocalFile();
290 290
291 } else if ( action >= 1003 ) { 291 } else if ( action >= 1003 ) {
292 if ( temp->getIsLocalFileSync() ) { 292 if ( temp->getIsLocalFileSync() ) {
293 switch(mTargetApp) 293 switch(mTargetApp)
294 { 294 {
295 case (KAPI): 295 case (KAPI):
296 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 296 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
297 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 297 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
298 break; 298 break;
299 case (KOPI): 299 case (KOPI):
300 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 300 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
301 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName(); 301 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
302 break; 302 break;
303 case (PWMPI): 303 case (PWMPI):
304 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 304 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
305 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 305 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
306 break; 306 break;
307 default: 307 default:
308 qDebug("KSM::slotSyncMenu: invalid apptype selected"); 308 qDebug("KSM::slotSyncMenu: invalid apptype selected");
309 break; 309 break;
310 310
311 } 311 }
312 } else { 312 } else {
313 if ( temp->getIsPhoneSync() ) { 313 if ( temp->getIsPhoneSync() ) {
314 mPhoneDevice = temp->getPhoneDevice( ) ; 314 mPhoneDevice = temp->getPhoneDevice( ) ;
315 mPhoneConnection = temp->getPhoneConnection( ); 315 mPhoneConnection = temp->getPhoneConnection( );
316 mPhoneModel = temp->getPhoneModel( ); 316 mPhoneModel = temp->getPhoneModel( );
317 syncPhone(); 317 syncPhone();
318 } else if ( temp->getIsPiSync()|| temp->getIsPiSyncSpec()) { 318 } else if ( temp->getIsPiSync()|| temp->getIsPiSyncSpec()) {
319 mSpecificResources.clear(); 319 mSpecificResources.clear();
320 if ( mTargetApp == KAPI ) { 320 if ( mTargetApp == KAPI ) {
321 mPassWordPiSync = temp->getRemotePwAB(); 321 mPassWordPiSync = temp->getRemotePwAB();
322 mActiveSyncPort = temp->getRemotePortAB(); 322 mActiveSyncPort = temp->getRemotePortAB();
323 mActiveSyncIP = temp->getRemoteIPAB(); 323 mActiveSyncIP = temp->getRemoteIPAB();
324 } else if ( mTargetApp == KOPI ) { 324 } else if ( mTargetApp == KOPI ) {
325 if ( temp->getIsPiSyncSpec() ) 325 if ( temp->getIsPiSyncSpec() )
326 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true ); 326 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true );
327 mPassWordPiSync = temp->getRemotePw(); 327 mPassWordPiSync = temp->getRemotePw();
328 mActiveSyncPort = temp->getRemotePort(); 328 mActiveSyncPort = temp->getRemotePort();
329 mActiveSyncIP = temp->getRemoteIP(); 329 mActiveSyncIP = temp->getRemoteIP();
330 } else { 330 } else {
331 mPassWordPiSync = temp->getRemotePwPWM(); 331 mPassWordPiSync = temp->getRemotePwPWM();
332 mActiveSyncPort = temp->getRemotePortPWM(); 332 mActiveSyncPort = temp->getRemotePortPWM();
333 mActiveSyncIP = temp->getRemoteIPPWM(); 333 mActiveSyncIP = temp->getRemoteIPPWM();
334 } 334 }
335 syncPi(); 335 syncPi();
336 while ( !mPisyncFinished ) { 336 while ( !mPisyncFinished ) {
337 //qDebug("waiting "); 337 //qDebug("waiting ");
338 qApp->processEvents(); 338 qApp->processEvents();
339 } 339 }
340 } else 340 } else
341 syncRemote( temp ); 341 syncRemote( temp );
342 342
343 } 343 }
344 } 344 }
345 delete temp; 345 delete temp;
346 setBlockSave(false); 346 setBlockSave(false);
347} 347}
348 348
349void KSyncManager::enableQuick( bool ask ) 349void KSyncManager::enableQuick( bool ask )
350{ 350{
351 bool autoStart; 351 bool autoStart;
352 bool changed = false; 352 bool changed = false;
353 if ( ask ) { 353 if ( ask ) {
354 QDialog dia ( 0, "input-dialog", true ); 354 QDialog dia ( 0, "input-dialog", true );
355 QLineEdit lab ( &dia ); 355 QLineEdit lab ( &dia );
356 QVBoxLayout lay( &dia ); 356 QVBoxLayout lay( &dia );
357 lab.setText( mPrefs->mPassiveSyncPort ); 357 lab.setText( mPrefs->mPassiveSyncPort );
358 lay.setMargin(7); 358 lay.setMargin(7);
359 lay.setSpacing(7); 359 lay.setSpacing(7);
360 int po = 9197+mTargetApp; 360 int po = 9197+mTargetApp;
361 QLabel label ( i18n("Port number (Default: %1)\nValid range from 1 to 65535").arg(po), &dia ); 361 QLabel label ( i18n("Port number (Default: %1)\nValid range from 1 to 65535").arg(po), &dia );
362 lay.addWidget( &label); 362 lay.addWidget( &label);
363 lay.addWidget( &lab); 363 lay.addWidget( &lab);
364 364
365 QLineEdit lepw ( &dia ); 365 QLineEdit lepw ( &dia );
366 lepw.setText( mPrefs->mPassiveSyncPw ); 366 lepw.setText( mPrefs->mPassiveSyncPw );
367 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia ); 367 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia );
368 lay.addWidget( &label2); 368 lay.addWidget( &label2);
369 lay.addWidget( &lepw); 369 lay.addWidget( &lepw);
370 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia ); 370 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia );
371 lay.addWidget( &autostart); 371 lay.addWidget( &autostart);
372 autostart.setChecked( mPrefs->mPassiveSyncAutoStart ); 372 autostart.setChecked( mPrefs->mPassiveSyncAutoStart );
373#ifdef DESKTOP_VERSION 373#ifdef DESKTOP_VERSION
374#ifdef _WIN32_ 374#ifdef _WIN32_
375 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia ); 375 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia );
376 syncdesktop.hide();// not implemented! 376 syncdesktop.hide();// not implemented!
377#else 377#else
378 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia ); 378 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia );
379#endif 379#endif
380 lay.addWidget( &syncdesktop); 380 lay.addWidget( &syncdesktop);
381#else 381#else
382 mPrefs->mPassiveSyncWithDesktop = false; 382 mPrefs->mPassiveSyncWithDesktop = false;
383 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia ); 383 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia );
384 syncdesktop.hide(); 384 syncdesktop.hide();
385#endif 385#endif
386 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop ); 386 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop );
387 387
388 QPushButton pb ( "OK", &dia); 388 QPushButton pb ( "OK", &dia);
389 lay.addWidget( &pb ); 389 lay.addWidget( &pb );
390 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 390 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
391 dia.resize( 230,120 ); 391 dia.resize( 230,120 );
392 dia.setCaption( i18n("Enter port for Pi-Sync") ); 392 dia.setCaption( i18n("Enter port for Pi-Sync") );
393 dia.show(); 393 dia.show();
394#ifndef DESKTOP_VERSION 394#ifndef DESKTOP_VERSION
395 int dw = QApplication::desktop()->width(); 395 int dw = QApplication::desktop()->width();
396 int dh = QApplication::desktop()->height(); 396 int dh = QApplication::desktop()->height();
397 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 ); 397 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 );
398#endif 398#endif
399 if ( ! dia.exec() ) 399 if ( ! dia.exec() )
400 return; 400 return;
401 dia.hide(); 401 dia.hide();
402 qApp->processEvents(); 402 qApp->processEvents();
403 if ( mPrefs->mPassiveSyncPw != lepw.text() ) { 403 if ( mPrefs->mPassiveSyncPw != lepw.text() ) {
404 changed = true; 404 changed = true;
405 mPrefs->mPassiveSyncPw = lepw.text(); 405 mPrefs->mPassiveSyncPw = lepw.text();
406 } 406 }
407 if ( mPrefs->mPassiveSyncPort != lab.text() ) { 407 if ( mPrefs->mPassiveSyncPort != lab.text() ) {
408 mPrefs->mPassiveSyncPort = lab.text(); 408 mPrefs->mPassiveSyncPort = lab.text();
409 changed = true; 409 changed = true;
410 } 410 }
411 autoStart = autostart.isChecked(); 411 autoStart = autostart.isChecked();
412 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) { 412 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) {
413 changed = true; 413 changed = true;
414 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked(); 414 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked();
415 } 415 }
416 } 416 }
417 else 417 else
418 autoStart = mPrefs->mPassiveSyncAutoStart; 418 autoStart = mPrefs->mPassiveSyncAutoStart;
419 if ( autoStart != mPrefs->mPassiveSyncAutoStart ) 419 if ( autoStart != mPrefs->mPassiveSyncAutoStart )
420 changed = true; 420 changed = true;
421 bool ok; 421 bool ok;
422 mPrefs->mPassiveSyncAutoStart = false; 422 mPrefs->mPassiveSyncAutoStart = false;
423 Q_UINT32 port_t = mPrefs->mPassiveSyncPort.toUInt(&ok); 423 Q_UINT32 port_t = mPrefs->mPassiveSyncPort.toUInt(&ok);
424 qDebug("%d ", port_t); 424 qDebug("%d ", port_t);
425 if ( ! ok || port_t > 65535 ) { 425 if ( ! ok || port_t > 65535 ) {
426 KMessageBox::information( 0, i18n("No valid port number:\n%1").arg ( mPrefs->mPassiveSyncPort ), i18n("Pi-Sync Port Error")); 426 KMessageBox::information( 0, i18n("No valid port number:\n%1").arg ( mPrefs->mPassiveSyncPort ), i18n("Pi-Sync Port Error"));
427 return; 427 return;
428 } 428 }
429 Q_UINT16 port = port_t; 429 Q_UINT16 port = port_t;
430 //qDebug("port %d ", port); 430 //qDebug("port %d ", port);
431 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 ); 431 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 );
432 mServerSocket->setFileName( defaultFileName() );//bbb 432 mServerSocket->setFileName( defaultFileName() );//bbb
433 if ( !mServerSocket->ok() ) { 433 if ( !mServerSocket->ok() ) {
434 QTimer::singleShot( 2000, this, SLOT ( displayErrorPort() ) ); 434 QTimer::singleShot( 2000, this, SLOT ( displayErrorPort() ) );
435 delete mServerSocket; 435 delete mServerSocket;
436 mServerSocket = 0; 436 mServerSocket = 0;
437 return; 437 return;
438 } 438 }
439 mPrefs->mPassiveSyncAutoStart = autoStart; 439 mPrefs->mPassiveSyncAutoStart = autoStart;
440 if ( changed ) { 440 if ( changed ) {
441 mPrefs->writeConfig(); 441 mPrefs->writeConfig();
442 } 442 }
443 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) ); 443 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) );
444 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) ); 444 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) );
445 connect( mServerSocket, SIGNAL ( request_file(const QString &) ),this, SIGNAL ( request_file(const QString &) ) ); 445 connect( mServerSocket, SIGNAL ( request_file(const QString &) ),this, SIGNAL ( request_file(const QString &) ) );
446 connect( mServerSocket, SIGNAL ( file_received( bool ,const QString &) ), this, SIGNAL ( getFile( bool,const QString & ) ) ); 446 connect( mServerSocket, SIGNAL ( file_received( bool ,const QString &) ), this, SIGNAL ( getFile( bool,const QString & ) ) );
447} 447}
448void KSyncManager::displayErrorPort() 448void KSyncManager::displayErrorPort()
449{ 449{
450 KMessageBox::information( 0, i18n("<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?").arg( mPrefs->mPassiveSyncPort) , i18n("Pi-Sync Port Error")); 450 KMessageBox::information( 0, i18n("<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?").arg( mPrefs->mPassiveSyncPort) , i18n("Pi-Sync Port Error"));
451} 451}
452void KSyncManager::syncLocalFile() 452void KSyncManager::syncLocalFile()
453{ 453{
454 454
455 QString fn =mPrefs->mLastSyncedLocalFile; 455 QString fn =mPrefs->mLastSyncedLocalFile;
456 QString ext; 456 QString ext;
457 457
458 switch(mTargetApp) 458 switch(mTargetApp)
459 { 459 {
460 case (KAPI): 460 case (KAPI):
461 ext = "(*.vcf)"; 461 ext = "(*.vcf)";
462 break; 462 break;
463 case (KOPI): 463 case (KOPI):
464 ext = "(*.ics/*.vcs)"; 464 ext = "(*.ics/*.vcs)";
465 break; 465 break;
466 case (PWMPI): 466 case (PWMPI):
467 ext = "(*.pwm)"; 467 ext = "(*.pwm)";
468 break; 468 break;
469 default: 469 default:
470 qDebug("KSM::syncLocalFile: invalid apptype selected"); 470 qDebug("KSM::syncLocalFile: invalid apptype selected");
471 break; 471 break;
472 472
473 } 473 }
474 474
475 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent ); 475 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent );
476 if ( fn == "" ) 476 if ( fn == "" )
477 return; 477 return;
478 if ( syncWithFile( fn, false ) ) { 478 if ( syncWithFile( fn, false ) ) {
479 qDebug("KSM::syncLocalFile() successful "); 479 qDebug("KSM::syncLocalFile() successful ");
480 } 480 }
481 481
482} 482}
483 483
484bool KSyncManager::syncWithFile( QString fn , bool quick ) 484bool KSyncManager::syncWithFile( QString fn , bool quick )
485{ 485{
486 bool ret = false; 486 bool ret = false;
487 QFileInfo info; 487 QFileInfo info;
488 info.setFile( fn ); 488 info.setFile( fn );
489 QString mess; 489 QString mess;
490 if ( !info. exists() ) { 490 if ( !info. exists() ) {
491 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 491 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
492 QMessageBox::warning( mParent, i18n("Warning!"), 492 QMessageBox::warning( mParent, i18n("Warning!"),
493 mess ); 493 mess );
494 return ret; 494 return ret;
495 } 495 }
496 int result = 0; 496 int result = 0;
497 if ( !quick ) { 497 if ( !quick ) {
498 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 498 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
499 result = QMessageBox::warning( mParent, i18n("Warning!"), 499 result = QMessageBox::warning( mParent, i18n("Warning!"),
500 mess, 500 mess,
501 i18n("Sync"), i18n("Cancel"), 0, 501 i18n("Sync"), i18n("Cancel"), 0,
502 0, 1 ); 502 0, 1 );
503 if ( result ) 503 if ( result )
504 return false; 504 return false;
505 } 505 }
506 if ( mAskForPreferences ) 506 if ( mAskForPreferences )
507 if ( !edit_sync_options()) { 507 if ( !edit_sync_options()) {
508 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 508 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
509 return false; 509 return false;
510 } 510 }
511 if ( result == 0 ) { 511 if ( result == 0 ) {
512 //qDebug("Now sycing ... "); 512 //qDebug("Now sycing ... ");
513 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ,mCurrentResourceLocal ) ) 513 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ,mCurrentResourceLocal ) )
514 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") ); 514 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") );
515 else 515 else
516 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 516 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
517 if ( ! quick ) 517 if ( ! quick )
518 mPrefs->mLastSyncedLocalFile = fn; 518 mPrefs->mLastSyncedLocalFile = fn;
519 } 519 }
520 return ret; 520 return ret;
521} 521}
522 522
523void KSyncManager::quickSyncLocalFile() 523void KSyncManager::quickSyncLocalFile()
524{ 524{
525 525
526 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) { 526 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) {
527 qDebug("KSM::quick syncLocalFile() successful "); 527 qDebug("KSM::quick syncLocalFile() successful ");
528 528
529 } 529 }
530} 530}
531 531
532void KSyncManager::multiSync( bool askforPrefs ) 532void KSyncManager::multiSync( bool askforPrefs )
533{ 533{
534 if (blockSave()) 534 if (blockSave())
535 return; 535 return;
536 setBlockSave(true); 536 setBlockSave(true);
537 mCurrentResourceLocal = ""; 537 mCurrentResourceLocal = "";
538 if ( askforPrefs ) { 538 if ( askforPrefs ) {
539 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 539 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
540 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"), 540 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"),
541 question, 541 question,
542 i18n("Yes"), i18n("No"), 542 i18n("Yes"), i18n("No"),
543 0, 0 ) != 0 ) { 543 0, 0 ) != 0 ) {
544 setBlockSave(false); 544 setBlockSave(false);
545 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!")); 545 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!"));
546 return; 546 return;
547 } 547 }
548 } 548 }
549 mCurrentSyncDevice = i18n("Multiple profiles") ; 549 mCurrentSyncDevice = i18n("Multiple profiles") ;
550 mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs; 550 mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs;
551 if ( askforPrefs ) { 551 if ( askforPrefs ) {
552 if ( !edit_sync_options()) { 552 if ( !edit_sync_options()) {
553 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted.") ); 553 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted.") );
554 return; 554 return;
555 } 555 }
556 mPrefs->mRingSyncAlgoPrefs = mSyncAlgoPrefs; 556 mPrefs->mRingSyncAlgoPrefs = mSyncAlgoPrefs;
557 } 557 }
558 mParent->topLevelWidget()->setCaption(i18n("Multiple sync started.") ); 558 mParent->topLevelWidget()->setCaption(i18n("Multiple sync started.") );
559 qApp->processEvents(); 559 qApp->processEvents();
560 int num = ringSync() ; 560 int num = ringSync() ;
561 if ( num > 1 ) 561 if ( num > 1 )
562 ringSync(); 562 ringSync();
563 setBlockSave(false); 563 setBlockSave(false);
564 if ( num ) 564 if ( num )
565 emit save(); 565 emit save();
566 if ( num ) 566 if ( num )
567 mParent->topLevelWidget()->setCaption(i18n("%1 profiles synced. Multiple sync complete!").arg(num) ); 567 mParent->topLevelWidget()->setCaption(i18n("%1 profiles synced. Multiple sync complete!").arg(num) );
568 else 568 else
569 mParent->topLevelWidget()->setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 569 mParent->topLevelWidget()->setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
570 return; 570 return;
571} 571}
572 572
573int KSyncManager::ringSync() 573int KSyncManager::ringSync()
574{ 574{
575 emit multiResourceSyncStart( false ); 575 emit multiResourceSyncStart( false );
576 int syncedProfiles = 0; 576 int syncedProfiles = 0;
577 unsigned int i; 577 unsigned int i;
578 QTime timer; 578 QTime timer;
579 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 579 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
580 QStringList syncProfileNames = mSyncProfileNames; 580 QStringList syncProfileNames = mSyncProfileNames;
581 KSyncProfile* temp = new KSyncProfile (); 581 KSyncProfile* temp = new KSyncProfile ();
582 mAskForPreferences = false; 582 mAskForPreferences = false;
583 mCurrentResourceLocal = ""; 583 mCurrentResourceLocal = "";
584 for ( i = 0; i < syncProfileNames.count(); ++i ) { 584 for ( i = 0; i < syncProfileNames.count(); ++i ) {
585 mCurrentSyncProfile = i; 585 mCurrentSyncProfile = i;
586 temp->setName(syncProfileNames[mCurrentSyncProfile]); 586 temp->setName(syncProfileNames[mCurrentSyncProfile]);
587 temp->readConfig(&config); 587 temp->readConfig(&config);
588 588
589 bool includeInRingSync = false; 589 bool includeInRingSync = false;
590 switch(mTargetApp) 590 switch(mTargetApp)
591 { 591 {
592 case (KAPI): 592 case (KAPI):
593 includeInRingSync = temp->getIncludeInRingSyncAB(); 593 includeInRingSync = temp->getIncludeInRingSyncAB();
594 break; 594 break;
595 case (KOPI): 595 case (KOPI):
596 includeInRingSync = temp->getIncludeInRingSync(); 596 includeInRingSync = temp->getIncludeInRingSync();
597 break; 597 break;
598 case (PWMPI): 598 case (PWMPI):
599 includeInRingSync = temp->getIncludeInRingSyncPWM(); 599 includeInRingSync = temp->getIncludeInRingSyncPWM();
600 break; 600 break;
601 default: 601 default:
602 qDebug("KSM::ringSync: invalid apptype selected"); 602 qDebug("KSM::ringSync: invalid apptype selected");
603 break; 603 break;
604 604
605 } 605 }
606 606
607 607
608 if ( includeInRingSync && ( i < 1 || i > 2 )) { 608 if ( includeInRingSync && ( i < 1 || i > 2 )) {
609 mParent->topLevelWidget()->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 609 mParent->topLevelWidget()->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
610 ++syncedProfiles; 610 ++syncedProfiles;
611 mSyncWithDesktop = false; 611 mSyncWithDesktop = false;
612 // mAskForPreferences = temp->getAskForPreferences(); 612 // mAskForPreferences = temp->getAskForPreferences();
613 mWriteBackFile = temp->getWriteBackFile(); 613 mWriteBackFile = temp->getWriteBackFile();
614 mWriteBackExistingOnly = temp->getWriteBackExisting(); 614 mWriteBackExistingOnly = temp->getWriteBackExisting();
615 mIsKapiFile = temp->getIsKapiFile(); 615 mIsKapiFile = temp->getIsKapiFile();
616 mWriteBackInFuture = 0; 616 mWriteBackInFuture = 0;
617 if ( temp->getWriteBackFuture() ) { 617 if ( temp->getWriteBackFuture() ) {
618 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 618 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
619 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 619 mWriteBackInPast = temp->getWriteBackPastWeeks( );
620 } 620 }
621 mFilterInCal = temp->getFilterInCal(); 621 mFilterInCal = temp->getFilterInCal();
622 mFilterOutCal = temp->getFilterOutCal(); 622 mFilterOutCal = temp->getFilterOutCal();
623 mFilterInAB = temp->getFilterInAB(); 623 mFilterInAB = temp->getFilterInAB();
624 mFilterOutAB = temp->getFilterOutAB(); 624 mFilterOutAB = temp->getFilterOutAB();
625 mShowSyncSummary = false; 625 mShowSyncSummary = false;
626 mCurrentSyncDevice = syncProfileNames[i] ; 626 mCurrentSyncDevice = syncProfileNames[i] ;
627 mCurrentSyncName = mLocalMachineName; 627 mCurrentSyncName = mLocalMachineName;
628 if ( i == 0 ) { 628 if ( i == 0 ) {
629 mIsKapiFile = false; 629 mIsKapiFile = false;
630#ifdef DESKTOP_VERSION 630#ifdef DESKTOP_VERSION
631 syncKDE(); 631 syncKDE();
632#else 632#else
633 syncSharp(); 633 syncSharp();
634#endif 634#endif
635 } else { 635 } else {
636 if ( temp->getIsLocalFileSync() ) { 636 if ( temp->getIsLocalFileSync() ) {
637 switch(mTargetApp) 637 switch(mTargetApp)
638 { 638 {
639 case (KAPI): 639 case (KAPI):
640 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 640 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
641 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 641 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
642 break; 642 break;
643 case (KOPI): 643 case (KOPI):
644 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 644 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
645 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName(); 645 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
646 break; 646 break;
647 case (PWMPI): 647 case (PWMPI):
648 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 648 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
649 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 649 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
650 break; 650 break;
651 default: 651 default:
652 qDebug("KSM: invalid apptype selected"); 652 qDebug("KSM: invalid apptype selected");
653 break; 653 break;
654 } 654 }
655 } else { 655 } else {
656 if ( temp->getIsPhoneSync() ) { 656 if ( temp->getIsPhoneSync() ) {
657 mPhoneDevice = temp->getPhoneDevice( ) ; 657 mPhoneDevice = temp->getPhoneDevice( ) ;
658 mPhoneConnection = temp->getPhoneConnection( ); 658 mPhoneConnection = temp->getPhoneConnection( );
659 mPhoneModel = temp->getPhoneModel( ); 659 mPhoneModel = temp->getPhoneModel( );
660 syncPhone(); 660 syncPhone();
661 } else if ( temp->getIsPiSync() || temp->getIsPiSyncSpec()) { 661 } else if ( temp->getIsPiSync() || temp->getIsPiSyncSpec()) {
662 mSpecificResources.clear(); 662 mSpecificResources.clear();
663 if ( mTargetApp == KAPI ) { 663 if ( mTargetApp == KAPI ) {
664 mPassWordPiSync = temp->getRemotePwAB(); 664 mPassWordPiSync = temp->getRemotePwAB();
665 mActiveSyncPort = temp->getRemotePortAB(); 665 mActiveSyncPort = temp->getRemotePortAB();
666 mActiveSyncIP = temp->getRemoteIPAB(); 666 mActiveSyncIP = temp->getRemoteIPAB();
667 } else if ( mTargetApp == KOPI ) { 667 } else if ( mTargetApp == KOPI ) {
668 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true ); 668 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true );
669 mPassWordPiSync = temp->getRemotePw(); 669 mPassWordPiSync = temp->getRemotePw();
670 mActiveSyncPort = temp->getRemotePort(); 670 mActiveSyncPort = temp->getRemotePort();
671 mActiveSyncIP = temp->getRemoteIP(); 671 mActiveSyncIP = temp->getRemoteIP();
672 } else { 672 } else {
673 mPassWordPiSync = temp->getRemotePwPWM(); 673 mPassWordPiSync = temp->getRemotePwPWM();
674 mActiveSyncPort = temp->getRemotePortPWM(); 674 mActiveSyncPort = temp->getRemotePortPWM();
675 mActiveSyncIP = temp->getRemoteIPPWM(); 675 mActiveSyncIP = temp->getRemoteIPPWM();
676 } 676 }
677 syncPi(); 677 syncPi();
678 while ( !mPisyncFinished ) { 678 while ( !mPisyncFinished ) {
679 //qDebug("waiting "); 679 //qDebug("waiting ");
680 qApp->processEvents(); 680 qApp->processEvents();
681 } 681 }
682 timer.start(); 682 timer.start();
683 while ( timer.elapsed () < 2000 ) { 683 while ( timer.elapsed () < 2000 ) {
684 qApp->processEvents(); 684 qApp->processEvents();
685 } 685 }
686 } else 686 } else
687 syncRemote( temp, false ); 687 syncRemote( temp, false );
688 688
689 } 689 }
690 } 690 }
691 timer.start(); 691 timer.start();
692 mParent->topLevelWidget()->setCaption(i18n("Multiple sync in progress ... please wait!") ); 692 mParent->topLevelWidget()->setCaption(i18n("Multiple sync in progress ... please wait!") );
693 while ( timer.elapsed () < 2000 ) { 693 while ( timer.elapsed () < 2000 ) {
694 qApp->processEvents(); 694 qApp->processEvents();
695#ifndef _WIN32_ 695#ifndef _WIN32_
696 sleep (1); 696 sleep (1);
697#endif 697#endif
698 } 698 }
699 699
700 } 700 }
701 701
702 } 702 }
703 delete temp; 703 delete temp;
704 return syncedProfiles; 704 return syncedProfiles;
705} 705}
706 706
707void KSyncManager::syncRemote( KSyncProfile* prof, bool ask) 707void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
708{ 708{
709 QString question; 709 QString question;
710 if ( ask ) { 710 if ( ask ) {
711 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 711 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
712 if ( QMessageBox::information( mParent, i18n("Sync"), 712 if ( QMessageBox::information( mParent, i18n("Sync"),
713 question, 713 question,
714 i18n("Yes"), i18n("No"), 714 i18n("Yes"), i18n("No"),
715 0, 0 ) != 0 ) 715 0, 0 ) != 0 )
716 return; 716 return;
717 } 717 }
718 718
719 QString preCommand; 719 QString preCommand;
720 QString localTempFile; 720 QString localTempFile;
721 QString postCommand; 721 QString postCommand;
722 722
723 switch(mTargetApp) 723 switch(mTargetApp)
724 { 724 {
725 case (KAPI): 725 case (KAPI):
726 preCommand = prof->getPreSyncCommandAB(); 726 preCommand = prof->getPreSyncCommandAB();
727 postCommand = prof->getPostSyncCommandAB(); 727 postCommand = prof->getPostSyncCommandAB();
728 localTempFile = prof->getLocalTempFileAB(); 728 localTempFile = prof->getLocalTempFileAB();
729 break; 729 break;
730 case (KOPI): 730 case (KOPI):
731 preCommand = prof->getPreSyncCommand(); 731 preCommand = prof->getPreSyncCommand();
732 postCommand = prof->getPostSyncCommand(); 732 postCommand = prof->getPostSyncCommand();
733 localTempFile = prof->getLocalTempFile(); 733 localTempFile = prof->getLocalTempFile();
734 break; 734 break;
735 case (PWMPI): 735 case (PWMPI):
736 preCommand = prof->getPreSyncCommandPWM(); 736 preCommand = prof->getPreSyncCommandPWM();
737 postCommand = prof->getPostSyncCommandPWM(); 737 postCommand = prof->getPostSyncCommandPWM();
738 localTempFile = prof->getLocalTempFilePWM(); 738 localTempFile = prof->getLocalTempFilePWM();
739 break; 739 break;
740 default: 740 default:
741 qDebug("KSM::syncRemote: invalid apptype selected"); 741 qDebug("KSM::syncRemote: invalid apptype selected");
742 break; 742 break;
743 } 743 }
744 744
745 745
746 int fi; 746 int fi;
747 if ( (fi = preCommand.find("$PWD$")) > 0 ) { 747 if ( (fi = preCommand.find("$PWD$")) > 0 ) {
748 QString pwd = getPassword(); 748 QString pwd = getPassword();
749 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 ); 749 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 );
750 750
751 } 751 }
752 int maxlen = 30; 752 int maxlen = 30;
753 if ( QApplication::desktop()->width() > 320 ) 753 if ( QApplication::desktop()->width() > 320 )
754 maxlen += 25; 754 maxlen += 25;
755 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) ); 755 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) );
756 int fileSize = 0; 756 int fileSize = 0;
757 int result = system ( preCommand ); 757 int result = system ( preCommand );
758 // 0 : okay 758 // 0 : okay
759 // 256: no such file or dir 759 // 256: no such file or dir
760 // 760 //
761 qDebug("KSM::Sync: Remote copy result(0 = okay): %d ",result ); 761 qDebug("KSM::Sync: Remote copy result(0 = okay): %d ",result );
762 if ( result != 0 ) { 762 if ( result != 0 ) {
763 unsigned int len = maxlen; 763 unsigned int len = maxlen;
764 while ( len < preCommand.length() ) { 764 while ( len < preCommand.length() ) {
765 preCommand.insert( len , "\n" ); 765 preCommand.insert( len , "\n" );
766 len += maxlen +2; 766 len += maxlen +2;
767 } 767 }
768 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ; 768 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ;
769 QMessageBox::information( mParent, i18n("Sync - ERROR"), 769 QMessageBox::information( mParent, i18n("Sync - ERROR"),
770 question, 770 question,
771 i18n("Okay!")) ; 771 i18n("Okay!")) ;
772 mParent->topLevelWidget()->setCaption ("KDE-Pim"); 772 mParent->topLevelWidget()->setCaption ("KDE-Pim");
773 return; 773 return;
774 } 774 }
775 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) ); 775 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) );
776 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 776 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
777 777
778 if ( syncWithFile( localTempFile, true ) ) { 778 if ( syncWithFile( localTempFile, true ) ) {
779 779
780 if ( mWriteBackFile ) { 780 if ( mWriteBackFile ) {
781 int fi; 781 int fi;
782 if ( (fi = postCommand.find("$PWD$")) > 0 ) { 782 if ( (fi = postCommand.find("$PWD$")) > 0 ) {
783 QString pwd = getPassword(); 783 QString pwd = getPassword();
784 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 ); 784 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 );
785 785
786 } 786 }
787 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) ); 787 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) );
788 result = system ( postCommand ); 788 result = system ( postCommand );
789 qDebug("KSM::Sync:Writing back file result: %d ", result); 789 qDebug("KSM::Sync:Writing back file result: %d ", result);
790 if ( result != 0 ) { 790 if ( result != 0 ) {
791 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 791 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
792 return; 792 return;
793 } else { 793 } else {
794 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) ); 794 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) );
795 } 795 }
796 } 796 }
797 } 797 }
798 return; 798 return;
799} 799}
800bool KSyncManager::edit_pisync_options() 800bool KSyncManager::edit_pisync_options()
801{ 801{
802 QDialog dia( mParent, "dia", true ); 802 QDialog dia( mParent, "dia", true );
803 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice ); 803 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice );
804 QVBoxLayout lay ( &dia ); 804 QVBoxLayout lay ( &dia );
805 lay.setSpacing( 5 ); 805 lay.setSpacing( 5 );
806 lay.setMargin( 3 ); 806 lay.setMargin( 3 );
807 QLabel lab1 ( i18n("Password for remote access:"), &dia); 807 QLabel lab1 ( i18n("Password for remote access:"), &dia);
808 lay.addWidget( &lab1 ); 808 lay.addWidget( &lab1 );
809 QLineEdit le1 (&dia ); 809 QLineEdit le1 (&dia );
810 lay.addWidget( &le1 ); 810 lay.addWidget( &le1 );
811 QLabel lab2 ( i18n("Remote IP address:"), &dia); 811 QLabel lab2 ( i18n("Remote IP address:"), &dia);
812 lay.addWidget( &lab2 ); 812 lay.addWidget( &lab2 );
813 QLineEdit le2 (&dia ); 813 QLineEdit le2 (&dia );
814 lay.addWidget( &le2 ); 814 lay.addWidget( &le2 );
815 QLabel lab3 ( i18n("Remote port number:\n(May be: 1 - 65535)"), &dia); 815 QLabel lab3 ( i18n("Remote port number:\n(May be: 1 - 65535)"), &dia);
816 lay.addWidget( &lab3 ); 816 lay.addWidget( &lab3 );
817 QLineEdit le3 (&dia ); 817 QLineEdit le3 (&dia );
818 lay.addWidget( &le3 ); 818 lay.addWidget( &le3 );
819 QPushButton pb ( "OK", &dia); 819 QPushButton pb ( "OK", &dia);
820 lay.addWidget( &pb ); 820 lay.addWidget( &pb );
821 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 821 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
822 le1.setText( mPassWordPiSync ); 822 le1.setText( mPassWordPiSync );
823 le2.setText( mActiveSyncIP ); 823 le2.setText( mActiveSyncIP );
824 le3.setText( mActiveSyncPort ); 824 le3.setText( mActiveSyncPort );
825 if ( dia.exec() ) { 825 if ( dia.exec() ) {
826 mPassWordPiSync = le1.text(); 826 mPassWordPiSync = le1.text();
827 mActiveSyncPort = le3.text(); 827 mActiveSyncPort = le3.text();
828 mActiveSyncIP = le2.text(); 828 mActiveSyncIP = le2.text();
829 return true; 829 return true;
830 } 830 }
831 return false; 831 return false;
832} 832}
833bool KSyncManager::edit_sync_options() 833bool KSyncManager::edit_sync_options()
834{ 834{
835 835
836 QDialog dia( mParent, "dia", true ); 836 QDialog dia( mParent, "dia", true );
837 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 837 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
838 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 838 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
839 QVBoxLayout lay ( &dia ); 839 QVBoxLayout lay ( &dia );
840 lay.setSpacing( 2 ); 840 lay.setSpacing( 2 );
841 lay.setMargin( 3 ); 841 lay.setMargin( 3 );
842 lay.addWidget(&gr); 842 lay.addWidget(&gr);
843 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 843 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
844 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 844 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
845 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 845 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
846 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 846 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
847 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 847 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
848 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 848 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
849 //QRadioButton both( i18n("Take both on conflict"), &gr ); 849 //QRadioButton both( i18n("Take both on conflict"), &gr );
850 QPushButton pb ( "OK", &dia); 850 QPushButton pb ( "OK", &dia);
851 lay.addWidget( &pb ); 851 lay.addWidget( &pb );
852 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 852 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
853 switch ( mSyncAlgoPrefs ) { 853 switch ( mSyncAlgoPrefs ) {
854 case 0: 854 case 0:
855 loc.setChecked( true); 855 loc.setChecked( true);
856 break; 856 break;
857 case 1: 857 case 1:
858 rem.setChecked( true ); 858 rem.setChecked( true );
859 break; 859 break;
860 case 2: 860 case 2:
861 newest.setChecked( true); 861 newest.setChecked( true);
862 break; 862 break;
863 case 3: 863 case 3:
864 ask.setChecked( true); 864 ask.setChecked( true);
865 break; 865 break;
866 case 4: 866 case 4:
867 f_loc.setChecked( true); 867 f_loc.setChecked( true);
868 break; 868 break;
869 case 5: 869 case 5:
870 f_rem.setChecked( true); 870 f_rem.setChecked( true);
871 break; 871 break;
872 case 6: 872 case 6:
873 // both.setChecked( true); 873 // both.setChecked( true);
874 break; 874 break;
875 default: 875 default:
876 break; 876 break;
877 } 877 }
878 if ( dia.exec() ) { 878 if ( dia.exec() ) {
879 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 879 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
880 return true; 880 return true;
881 } 881 }
882 return false; 882 return false;
883} 883}
884 884
885QString KSyncManager::getPassword( ) 885QString KSyncManager::getPassword( )
886{ 886{
887 QString retfile = ""; 887 QString retfile = "";
888 QDialog dia ( mParent, "input-dialog", true ); 888 QDialog dia ( mParent, "input-dialog", true );
889 QLineEdit lab ( &dia ); 889 QLineEdit lab ( &dia );
890 lab.setEchoMode( QLineEdit::Password ); 890 lab.setEchoMode( QLineEdit::Password );
891 QVBoxLayout lay( &dia ); 891 QVBoxLayout lay( &dia );
892 lay.setMargin(7); 892 lay.setMargin(7);
893 lay.setSpacing(7); 893 lay.setSpacing(7);
894 lay.addWidget( &lab); 894 lay.addWidget( &lab);
895 dia.setFixedSize( 230,50 ); 895 dia.setFixedSize( 230,50 );
896 dia.setCaption( i18n("Enter password") ); 896 dia.setCaption( i18n("Enter password") );
897 QPushButton pb ( "OK", &dia); 897 QPushButton pb ( "OK", &dia);
898 lay.addWidget( &pb ); 898 lay.addWidget( &pb );
899 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 899 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
900 dia.show(); 900 dia.show();
901 int res = dia.exec(); 901 int res = dia.exec();
902 if ( res ) 902 if ( res )
903 retfile = lab.text(); 903 retfile = lab.text();
904 dia.hide(); 904 dia.hide();
905 qApp->processEvents(); 905 qApp->processEvents();
906 return retfile; 906 return retfile;
907 907
908} 908}
909 909
910 910
911void KSyncManager::confSync() 911void KSyncManager::confSync()
912{ 912{
913 static KSyncPrefsDialog* sp = 0; 913 static KSyncPrefsDialog* sp = 0;
914 if ( ! sp ) { 914 if ( ! sp ) {
915 sp = new KSyncPrefsDialog( mParent, "syncprefs", true ); 915 sp = new KSyncPrefsDialog( mParent, "syncprefs", true );
916 } 916 }
917 sp->usrReadConfig(); 917 sp->usrReadConfig();
918#ifndef DESKTOP_VERSION 918#ifndef DESKTOP_VERSION
919 sp->showMaximized(); 919 sp->showMaximized();
920#else 920#else
921 sp->show(); 921 sp->show();
922#endif 922#endif
923 sp->exec(); 923 sp->exec();
924 QStringList oldSyncProfileNames = mSyncProfileNames; 924 QStringList oldSyncProfileNames = mSyncProfileNames;
925 mSyncProfileNames = sp->getSyncProfileNames(); 925 mSyncProfileNames = sp->getSyncProfileNames();
926 mLocalMachineName = sp->getLocalMachineName (); 926 mLocalMachineName = sp->getLocalMachineName ();
927 int ii; 927 int ii;
928 for ( ii = 0; ii < oldSyncProfileNames.count(); ++ii ) { 928 for ( ii = 0; ii < oldSyncProfileNames.count(); ++ii ) {
929 if ( ! mSyncProfileNames.contains( oldSyncProfileNames[ii] ) ) 929 if ( ! mSyncProfileNames.contains( oldSyncProfileNames[ii] ) )
930 mImplementation->removeSyncInfo( oldSyncProfileNames[ii] ); 930 mImplementation->removeSyncInfo( oldSyncProfileNames[ii] );
931 } 931 }
932 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 932 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
933} 933}
934void KSyncManager::syncKDE() 934void KSyncManager::syncKDE()
935{ 935{
936 mSyncWithDesktop = true; 936 mSyncWithDesktop = true;
937 emit save(); 937 emit save();
938 switch(mTargetApp) 938 switch(mTargetApp)
939 { 939 {
940 case (KAPI): 940 case (KAPI):
941 { 941 {
942#ifdef DESKTOP_VERSION 942#ifdef DESKTOP_VERSION
943 QString command = "kdeabdump33"; 943 QString command = "kdeabdump33";
944 QString commandfile = "kdeabdump33"; 944 QString commandfile = "kdeabdump33";
945 QString commandpath = qApp->applicationDirPath () + "/"; 945 QString commandpath = qApp->applicationDirPath () + "/";
946#else 946#else
947 QString command = "kdeabdump33"; 947 QString command = "kdeabdump33";
948 QString commandfile = "kdeabdump33"; 948 QString commandfile = "kdeabdump33";
949 QString commandpath = QDir::homeDirPath ()+"/"; 949 QString commandpath = QDir::homeDirPath ()+"/";
950#endif 950#endif
951 if ( ! QFile::exists ( commandpath+commandfile ) ) 951 if ( ! QFile::exists ( commandpath+commandfile ) )
952 command = commandfile; 952 command = commandfile;
953 else 953 else
954 command = commandpath+commandfile; 954 command = commandpath+commandfile;
955 955
956 QString fileName = QDir::homeDirPath ()+"/.kdeaddressbookdump.vcf"; 956 QString fileName = QDir::homeDirPath ()+"/.kdeaddressbookdump.vcf";
957 int result = system ( command.latin1()); 957 int result = system ( command.latin1());
958 qDebug("AB dump 33 command call result: %d ", result); 958 qDebug("AB dump 33 command call result: %d ", result);
959 if ( result != 0 ) { 959 if ( result != 0 ) {
960 qDebug("Calling AB dump version 33 failed. Trying 34... "); 960 qDebug("Calling AB dump version 33 failed. Trying 34... ");
961 commandfile = "kdeabdump34"; 961 commandfile = "kdeabdump34";
962 if ( ! QFile::exists ( commandpath+commandfile ) ) 962 if ( ! QFile::exists ( commandpath+commandfile ) )
963 command = commandfile; 963 command = commandfile;
964 else 964 else
965 command = commandpath+commandfile; 965 command = commandpath+commandfile;
966 result = system ( command.latin1()); 966 result = system ( command.latin1());
967 qDebug("AB dump 34 command call result: %d ", result); 967 qDebug("AB dump 34 command call result: %d ", result);
968 if ( result != 0 ) { 968 if ( result != 0 ) {
969 KMessageBox::error( 0, i18n("Error accessing KDE addressbook data.\nMake sure the file\n%1kdeabdump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath )); 969 KMessageBox::error( 0, i18n("Error accessing KDE addressbook data.\nMake sure the file\n%1kdeabdump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath ));
970 return; 970 return;
971 } 971 }
972 } 972 }
973 if ( syncWithFile( fileName,true ) ) { 973 if ( syncWithFile( fileName,true ) ) {
974 if ( mWriteBackFile ) { 974 if ( mWriteBackFile ) {
975 command += " --read"; 975 command += " --read";
976 system ( command.latin1()); 976 system ( command.latin1());
977 } 977 }
978 } 978 }
979 979
980 } 980 }
981 break; 981 break;
982 case (KOPI): 982 case (KOPI):
983 { 983 {
984#ifdef DESKTOP_VERSION 984#ifdef DESKTOP_VERSION
985 QString command = "kdecaldump33"; 985 QString command = "kdecaldump33";
986 QString commandfile = "kdecaldump33"; 986 QString commandfile = "kdecaldump33";
987 QString commandpath = qApp->applicationDirPath () + "/"; 987 QString commandpath = qApp->applicationDirPath () + "/";
988#else 988#else
989 QString command = "kdecaldump33"; 989 QString command = "kdecaldump33";
990 QString commandfile = "kdecaldump33"; 990 QString commandfile = "kdecaldump33";
991 QString commandpath = QDir::homeDirPath ()+"/"; 991 QString commandpath = QDir::homeDirPath ()+"/";
992#endif 992#endif
993 if ( ! QFile::exists ( commandpath+commandfile ) ) 993 if ( ! QFile::exists ( commandpath+commandfile ) )
994 command = commandfile; 994 command = commandfile;
995 else 995 else
996 command = commandpath+commandfile; 996 command = commandpath+commandfile;
997 997
998 QString fileName = QDir::homeDirPath ()+"/.kdecalendardump.ics"; 998 QString fileName = QDir::homeDirPath ()+"/.kdecalendardump.ics";
999 int result = system ( command.latin1()); 999 int result = system ( command.latin1());
1000 qDebug("Cal dump 33 command call result result: %d ", result); 1000 qDebug("Cal dump 33 command call result result: %d ", result);
1001 if ( result != 0 ) { 1001 if ( result != 0 ) {
1002 qDebug("Calling CAL dump version 33 failed. Trying 34... "); 1002 qDebug("Calling CAL dump version 33 failed. Trying 34... ");
1003 commandfile = "kdecaldump34"; 1003 commandfile = "kdecaldump34";
1004 if ( ! QFile::exists ( commandpath+commandfile ) ) 1004 if ( ! QFile::exists ( commandpath+commandfile ) )
1005 command = commandfile; 1005 command = commandfile;
1006 else 1006 else
1007 command = commandpath+commandfile; 1007 command = commandpath+commandfile;
1008 result = system ( command.latin1()); 1008 result = system ( command.latin1());
1009 qDebug("Cal dump 34 command call result result: %d ", result); 1009 qDebug("Cal dump 34 command call result result: %d ", result);
1010 if ( result != 0 ) { 1010 if ( result != 0 ) {
1011 KMessageBox::error( 0, i18n("Error accessing KDE calendar data.\nMake sure the file\n%1kdecaldump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath )); 1011 KMessageBox::error( 0, i18n("Error accessing KDE calendar data.\nMake sure the file\n%1kdecaldump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath ));
1012 return; 1012 return;
1013 } 1013 }
1014 } 1014 }
1015 if ( syncWithFile( fileName,true ) ) { 1015 if ( syncWithFile( fileName,true ) ) {
1016 if ( mWriteBackFile ) { 1016 if ( mWriteBackFile ) {
1017 command += " --read"; 1017 command += " --read";
1018 system ( command.latin1()); 1018 system ( command.latin1());
1019 } 1019 }
1020 } 1020 }
1021 1021
1022 } 1022 }
1023 break; 1023 break;
1024 case (PWMPI): 1024 case (PWMPI):
1025 1025
1026 break; 1026 break;
1027 default: 1027 default:
1028 qDebug("KSM::slotSyncMenu: invalid apptype selected"); 1028 qDebug("KSM::slotSyncMenu: invalid apptype selected");
1029 break; 1029 break;
1030 1030
1031 } 1031 }
1032} 1032}
1033 1033
1034void KSyncManager::syncSharp() 1034void KSyncManager::syncSharp()
1035{ 1035{
1036 1036
1037 if ( ! syncExternalApplication("sharp") ) 1037 if ( ! syncExternalApplication("sharp") )
1038 qDebug("KSM::ERROR sync sharp "); 1038 qDebug("KSM::ERROR sync sharp ");
1039} 1039}
1040 1040
1041bool KSyncManager::syncExternalApplication(QString resource) 1041bool KSyncManager::syncExternalApplication(QString resource)
1042{ 1042{
1043 1043
1044 emit save(); 1044 emit save();
1045 1045
1046 if ( mAskForPreferences ) 1046 if ( mAskForPreferences )
1047 if ( !edit_sync_options()) { 1047 if ( !edit_sync_options()) {
1048 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 1048 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
1049 return false; 1049 return false;
1050 } 1050 }
1051 1051
1052 qDebug("KSM::Sync extern %s", resource.latin1()); 1052 qDebug("KSM::Sync extern %s", resource.latin1());
1053 1053
1054 bool syncOK = mImplementation->syncExternal(this, resource); 1054 bool syncOK = mImplementation->syncExternal(this, resource);
1055 1055
1056 return syncOK; 1056 return syncOK;
1057 1057
1058} 1058}
1059 1059
1060void KSyncManager::syncPhone() 1060void KSyncManager::syncPhone()
1061{ 1061{
1062 1062
1063 syncExternalApplication("phone"); 1063 syncExternalApplication("phone");
1064 1064
1065} 1065}
1066 1066
1067void KSyncManager::showProgressBar(int percentage, QString caption, int total) 1067void KSyncManager::showProgressBar(int percentage, QString caption, int total)
1068{ 1068{
1069 if (!bar->isVisible()) 1069 if (!bar->isVisible())
1070 { 1070 {
1071 int w = 300; 1071 int w = 300;
1072 if ( QApplication::desktop()->width() < 320 ) 1072 if ( QApplication::desktop()->width() < 320 )
1073 w = 220; 1073 w = 220;
1074 int h = bar->sizeHint().height() ; 1074 int h = bar->sizeHint().height() ;
1075 int dw = QApplication::desktop()->width(); 1075 int dw = QApplication::desktop()->width();
1076 int dh = QApplication::desktop()->height(); 1076 int dh = QApplication::desktop()->height();
1077 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1077 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1078 bar->setCaption (caption); 1078 bar->setCaption (caption);
1079 bar->setTotalSteps ( total ) ; 1079 bar->setTotalSteps ( total ) ;
1080 bar->show(); 1080 bar->show();
1081 } 1081 }
1082 bar->raise(); 1082 bar->raise();
1083 bar->setProgress( percentage ); 1083 bar->setProgress( percentage );
1084 qApp->processEvents(); 1084 qApp->processEvents();
1085} 1085}
1086 1086
1087void KSyncManager::hideProgressBar() 1087void KSyncManager::hideProgressBar()
1088{ 1088{
1089 bar->hide(); 1089 bar->hide();
1090 qApp->processEvents(); 1090 qApp->processEvents();
1091} 1091}
1092 1092
1093bool KSyncManager::isProgressBarCanceled() 1093bool KSyncManager::isProgressBarCanceled()
1094{ 1094{
1095 return !bar->isVisible(); 1095 return !bar->isVisible();
1096} 1096}
1097 1097
1098QString KSyncManager::syncFileName() 1098QString KSyncManager::syncFileName()
1099{ 1099{
1100 1100
1101 QString fn = "tempfile"; 1101 QString fn = "tempfile";
1102 switch(mTargetApp) 1102 switch(mTargetApp)
1103 { 1103 {
1104 case (KAPI): 1104 case (KAPI):
1105 fn = "tempsyncab.vcf"; 1105 fn = "tempsyncab.vcf";
1106 break; 1106 break;
1107 case (KOPI): 1107 case (KOPI):
1108 fn = "tempsynccal.ics"; 1108 fn = "tempsynccal.ics";
1109 break; 1109 break;
1110 case (PWMPI): 1110 case (PWMPI):
1111 fn = "tempsyncpw.pwm"; 1111 fn = "tempsyncpw.pwm";
1112 break; 1112 break;
1113 default: 1113 default:
1114 break; 1114 break;
1115 } 1115 }
1116#ifdef DESKTOP_VERSION 1116#ifdef DESKTOP_VERSION
1117 return locateLocal( "tmp", fn ); 1117 return locateLocal( "tmp", fn );
1118#else 1118#else
1119 return (QString( "/tmp/" )+ fn ); 1119 return (QString( "/tmp/" )+ fn );
1120#endif 1120#endif
1121} 1121}
1122 1122
1123void KSyncManager::syncPi() 1123void KSyncManager::syncPi()
1124{ 1124{
1125 mIsKapiFile = true; 1125 mIsKapiFile = true;
1126 mPisyncFinished = false; 1126 mPisyncFinished = false;
1127 qApp->processEvents(); 1127 qApp->processEvents();
1128 if ( mAskForPreferences ) 1128 if ( mAskForPreferences )
1129 if ( !edit_pisync_options()) { 1129 if ( !edit_pisync_options()) {
1130 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 1130 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
1131 mPisyncFinished = true; 1131 mPisyncFinished = true;
1132 return; 1132 return;
1133 } 1133 }
1134 bool ok; 1134 bool ok;
1135 Q_UINT16 port = mActiveSyncPort.toUInt(&ok); 1135 Q_UINT16 port = mActiveSyncPort.toUInt(&ok);
1136 if ( ! ok ) { 1136 if ( ! ok ) {
1137 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") ); 1137 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") );
1138 mPisyncFinished = true; 1138 mPisyncFinished = true;
1139 return; 1139 return;
1140 } 1140 }
1141 mCurrentResourceLocal = ""; 1141 mCurrentResourceLocal = "";
1142 mCurrentResourceRemote = ""; 1142 mCurrentResourceRemote = "";
1143 qDebug ( "KSM: sync pi %d",mSpecificResources.count() );
1144 if ( mSpecificResources.count() ) { 1143 if ( mSpecificResources.count() ) {
1145 int lastSyncRes = mSpecificResources.count()/2; 1144 int lastSyncRes = mSpecificResources.count()/2;
1146 int ccc = mSpecificResources.count()-1; 1145 int ccc = mSpecificResources.count()-1;
1147 while ( lastSyncRes > 0 && ccc > 0 && mSpecificResources[ ccc ].isEmpty() ) { 1146 while ( lastSyncRes > 0 && ccc > 0 && mSpecificResources[ ccc ].isEmpty() ) {
1148 --ccc; 1147 --ccc;
1149 --lastSyncRes; 1148 --lastSyncRes;
1150 qDebug ( "KSM: sync pi %d",ccc ); 1149 //qDebug ( "KSM: sync pi %d",ccc );
1151 } 1150 }
1152 int startLocal = 0; 1151 int startLocal = 0;
1153 int startRemote = mSpecificResources.count()/2; 1152 int startRemote = mSpecificResources.count()/2;
1154 emit multiResourceSyncStart( true ); 1153 emit multiResourceSyncStart( true );
1155 while ( startLocal < mSpecificResources.count()/2 ) { 1154 while ( startLocal < mSpecificResources.count()/2 ) {
1156 if ( startLocal+1 >= lastSyncRes ) 1155 if ( startLocal+1 >= lastSyncRes )
1157 emit multiResourceSyncStart( false ); 1156 emit multiResourceSyncStart( false );
1158 mPisyncFinished = false; 1157 mPisyncFinished = false;
1159 mCurrentResourceLocal = mSpecificResources[ startLocal ]; 1158 mCurrentResourceLocal = mSpecificResources[ startLocal ];
1160 mCurrentResourceRemote = mSpecificResources[ startRemote ]; 1159 mCurrentResourceRemote = mSpecificResources[ startRemote ];
1161 qDebug ( "KSM: AAASyncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() ); 1160 //qDebug ( "KSM: AAASyncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() );
1162 if ( !mCurrentResourceRemote.isEmpty() ) { 1161 if ( !mCurrentResourceRemote.isEmpty() ) {
1163 qDebug ( "KSM: Syncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() ); 1162 qDebug ( "KSM: Syncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() );
1164 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1163 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1165 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1164 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1166 commandSocket->readFile( syncFileName() ); 1165 commandSocket->readFile( syncFileName() );
1167 while ( !mPisyncFinished ) { 1166 while ( !mPisyncFinished ) {
1168 //qDebug("waiting "); 1167 //qDebug("waiting ");
1169 qApp->processEvents(); 1168 qApp->processEvents();
1170 } 1169 }
1171 } 1170 }
1172 ++startRemote; 1171 ++startRemote;
1173 ++startLocal; 1172 ++startLocal;
1174 } 1173 }
1175 mPisyncFinished = true; 1174 mPisyncFinished = true;
1176 } else { 1175 } else {
1177 KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1176 KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1178 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1177 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1179 commandSocket->readFile( syncFileName() ); 1178 commandSocket->readFile( syncFileName() );
1180 } 1179 }
1181} 1180}
1182 1181
1183void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) 1182void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state)
1184{ 1183{
1185 //enum { success, errorW, errorR, quiet }; 1184 //enum { success, errorW, errorR, quiet };
1186 1185
1187 1186
1188 1187
1189 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW || 1188 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW ||
1190 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) { 1189 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) {
1191 if ( state == KCommandSocket::errorPW ) 1190 if ( state == KCommandSocket::errorPW )
1192 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") ); 1191 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") );
1193 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ) 1192 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO )
1194 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") ); 1193 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") );
1195 else if ( state == KCommandSocket::errorCA ) 1194 else if ( state == KCommandSocket::errorCA )
1196 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") ); 1195 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") );
1197 else if ( state == KCommandSocket::errorFI ) 1196 else if ( state == KCommandSocket::errorFI )
1198 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") ); 1197 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") );
1199 else if ( state == KCommandSocket::errorED ) 1198 else if ( state == KCommandSocket::errorED )
1200 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") ); 1199 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") );
1201 else if ( state == KCommandSocket::errorUN ) 1200 else if ( state == KCommandSocket::errorUN )
1202 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") ); 1201 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") );
1203 delete s; 1202 delete s;
1204 if ( state == KCommandSocket::errorR ) { 1203 if ( state == KCommandSocket::errorR ) {
1205 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget()); 1204 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget());
1206 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1205 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1207 commandSocket->sendStop(); 1206 commandSocket->sendStop();
1208 } 1207 }
1209 mPisyncFinished = true; 1208 mPisyncFinished = true;
1210 return; 1209 return;
1211 1210
1212 } else if ( state == KCommandSocket::errorW ) { 1211 } else if ( state == KCommandSocket::errorW ) {
1213 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") ); 1212 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") );
1214 mPisyncFinished = true; 1213 mPisyncFinished = true;
1215 1214
1216 } else if ( state == KCommandSocket::successR ) { 1215 } else if ( state == KCommandSocket::successR ) {
1217 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket())); 1216 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket()));
1218 1217
1219 } else if ( state == KCommandSocket::successW ) { 1218 } else if ( state == KCommandSocket::successW ) {
1220 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") ); 1219 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") );
1221 mPisyncFinished = true; 1220 mPisyncFinished = true;
1222 } else if ( state == KCommandSocket::quiet ){ 1221 } else if ( state == KCommandSocket::quiet ){
1223 qDebug("KSS: quiet "); 1222 qDebug("KSS: quiet ");
1224 mPisyncFinished = true; 1223 mPisyncFinished = true;
1225 } else { 1224 } else {
1226 qDebug("KSS: Error: unknown state: %d ", state); 1225 qDebug("KSS: Error: unknown state: %d ", state);
1227 mPisyncFinished = true; 1226 mPisyncFinished = true;
1228 } 1227 }
1229 1228
1230 delete s; 1229 delete s;
1231} 1230}
1232 1231
1233void KSyncManager::readFileFromSocket() 1232void KSyncManager::readFileFromSocket()
1234{ 1233{
1235 QString fileName = syncFileName(); 1234 QString fileName = syncFileName();
1236 bool syncOK = true; 1235 bool syncOK = true;
1237 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") ); 1236 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") );
1238 if ( ! syncWithFile( fileName , true ) ) { 1237 if ( ! syncWithFile( fileName , true ) ) {
1239 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") ); 1238 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") );
1240 syncOK = false; 1239 syncOK = false;
1241 } 1240 }
1242 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote,mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() ); 1241 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote,mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() );
1243 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1242 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1244 if ( mWriteBackFile && syncOK ) { 1243 if ( mWriteBackFile && syncOK ) {
1245 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") ); 1244 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") );
1246 commandSocket->writeFile( fileName ); 1245 commandSocket->writeFile( fileName );
1247 } 1246 }
1248 else { 1247 else {
1249 commandSocket->sendStop(); 1248 commandSocket->sendStop();
1250 if ( syncOK ) 1249 if ( syncOK )
1251 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") ); 1250 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") );
1252 mPisyncFinished = true; 1251 mPisyncFinished = true;
1253 } 1252 }
1254} 1253}
1255 1254
1256KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) 1255KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name )
1257{ 1256{
1258 mPassWord = pw; 1257 mPassWord = pw;
1259 mSocket = 0; 1258 mSocket = 0;
1260 mSyncActionDialog = 0; 1259 mSyncActionDialog = 0;
1261 blockRC = false; 1260 blockRC = false;
1262 mErrorMessage = 0; 1261 mErrorMessage = 0;
1263} 1262}
1264 1263
1265void KServerSocket::newConnection ( int socket ) 1264void KServerSocket::newConnection ( int socket )
1266{ 1265{
1267 // qDebug("KServerSocket:New connection %d ", socket); 1266 // qDebug("KServerSocket:New connection %d ", socket);
1268 if ( mSocket ) { 1267 if ( mSocket ) {
1269 qDebug("KSS::newConnection Socket deleted! "); 1268 qDebug("KSS::newConnection Socket deleted! ");
1270 delete mSocket; 1269 delete mSocket;
1271 mSocket = 0; 1270 mSocket = 0;
1272 } 1271 }
1273 mSocket = new QSocket( this ); 1272 mSocket = new QSocket( this );
1274 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) ); 1273 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
1275 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); 1274 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
1276 mSocket->setSocket( socket ); 1275 mSocket->setSocket( socket );
1277} 1276}
1278 1277
1279void KServerSocket::discardClient() 1278void KServerSocket::discardClient()
1280{ 1279{
1281 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1280 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1282} 1281}
1283void KServerSocket::deleteSocket() 1282void KServerSocket::deleteSocket()
1284{ 1283{
1285 qDebug("KSS::deleteSocket"); 1284 qDebug("KSS::deleteSocket");
1286 if ( mSocket ) { 1285 if ( mSocket ) {
1287 delete mSocket; 1286 delete mSocket;
1288 mSocket = 0; 1287 mSocket = 0;
1289 } 1288 }
1290 if ( mErrorMessage ) 1289 if ( mErrorMessage )
1291 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage())); 1290 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage()));
1292} 1291}
1293void KServerSocket::readClient() 1292void KServerSocket::readClient()
1294{ 1293{
1295 if ( blockRC ) 1294 if ( blockRC )
1296 return; 1295 return;
1297 if ( mSocket == 0 ) { 1296 if ( mSocket == 0 ) {
1298 qDebug("ERROR::KSS::readClient(): mSocket == 0 "); 1297 qDebug("ERROR::KSS::readClient(): mSocket == 0 ");
1299 return; 1298 return;
1300 } 1299 }
1301 if ( mErrorMessage ) { 1300 if ( mErrorMessage ) {
1302 mErrorMessage = 999; 1301 mErrorMessage = 999;
1303 error_connect("ERROR_ED\r\n\r\n"); 1302 error_connect("ERROR_ED\r\n\r\n");
1304 return; 1303 return;
1305 } 1304 }
1306 mResource = ""; 1305 mResource = "";
1307 mErrorMessage = 0; 1306 mErrorMessage = 0;
1308 //qDebug("KServerSocket::readClient()"); 1307 //qDebug("KServerSocket::readClient()");
1309 if ( mSocket->canReadLine() ) { 1308 if ( mSocket->canReadLine() ) {
1310 QString line = mSocket->readLine(); 1309 QString line = mSocket->readLine();
1311 //qDebug("KServerSocket readline: %s ", line.latin1()); 1310 //qDebug("KServerSocket readline: %s ", line.latin1());
1312 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line ); 1311 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line );
1313 if ( tokens[0] == "GET" ) { 1312 if ( tokens[0] == "GET" ) {
1314 if ( tokens[1] == mPassWord ) { 1313 if ( tokens[1] == mPassWord ) {
1315 //emit sendFile( mSocket ); 1314 //emit sendFile( mSocket );
1316 bool ok = false; 1315 bool ok = false;
1317 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok); 1316 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok);
1318 if ( ok ) { 1317 if ( ok ) {
1319 KSyncManager::mRequestedSyncEvent = dt; 1318 KSyncManager::mRequestedSyncEvent = dt;
1320 } 1319 }
1321 else 1320 else
1322 KSyncManager::mRequestedSyncEvent = QDateTime(); 1321 KSyncManager::mRequestedSyncEvent = QDateTime();
1323 mResource =tokens[3]; 1322 mResource =tokens[3];
1324 send_file(); 1323 send_file();
1325 } 1324 }
1326 else { 1325 else {
1327 mErrorMessage = 1; 1326 mErrorMessage = 1;
1328 error_connect("ERROR_PW\r\n\r\n"); 1327 error_connect("ERROR_PW\r\n\r\n");
1329 } 1328 }
1330 } 1329 }
1331 if ( tokens[0] == "PUT" ) { 1330 if ( tokens[0] == "PUT" ) {
1332 if ( tokens[1] == mPassWord ) { 1331 if ( tokens[1] == mPassWord ) {
1333 //emit getFile( mSocket ); 1332 //emit getFile( mSocket );
1334 blockRC = true; 1333 blockRC = true;
1335 mResource =tokens[2]; 1334 mResource =tokens[2];
1336 get_file(); 1335 get_file();
1337 } 1336 }
1338 else { 1337 else {
1339 mErrorMessage = 2; 1338 mErrorMessage = 2;
1340 error_connect("ERROR_PW\r\n\r\n"); 1339 error_connect("ERROR_PW\r\n\r\n");
1341 end_connect(); 1340 end_connect();
1342 } 1341 }
1343 } 1342 }
1344 if ( tokens[0] == "STOP" ) { 1343 if ( tokens[0] == "STOP" ) {
1345 //emit endConnect(); 1344 //emit endConnect();
1346 end_connect(); 1345 end_connect();
1347 } 1346 }
1348 } 1347 }
1349} 1348}
1350void KServerSocket::displayErrorMessage() 1349void KServerSocket::displayErrorMessage()
1351{ 1350{
1352 if ( mErrorMessage == 1 ) { 1351 if ( mErrorMessage == 1 ) {
1353 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error")); 1352 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error"));
1354 mErrorMessage = 0; 1353 mErrorMessage = 0;
1355 } 1354 }
1356 else if ( mErrorMessage == 2 ) { 1355 else if ( mErrorMessage == 2 ) {
1357 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error")); 1356 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error"));
1358 mErrorMessage = 0; 1357 mErrorMessage = 0;
1359 } 1358 }
1360} 1359}
1361void KServerSocket::error_connect( QString errmess ) 1360void KServerSocket::error_connect( QString errmess )
1362{ 1361{
1363 QTextStream os( mSocket ); 1362 QTextStream os( mSocket );
1364 os.setEncoding( QTextStream::Latin1 ); 1363 os.setEncoding( QTextStream::Latin1 );
1365 os << errmess ; 1364 os << errmess ;
1366 mSocket->close(); 1365 mSocket->close();
1367 if ( mSocket->state() == QSocket::Idle ) { 1366 if ( mSocket->state() == QSocket::Idle ) {
1368 QTimer::singleShot( 0, this , SLOT ( discardClient())); 1367 QTimer::singleShot( 0, this , SLOT ( discardClient()));
1369 } 1368 }
1370} 1369}
1371void KServerSocket::end_connect() 1370void KServerSocket::end_connect()
1372{ 1371{
1373 delete mSyncActionDialog; 1372 delete mSyncActionDialog;
1374 mSyncActionDialog = 0; 1373 mSyncActionDialog = 0;
1375} 1374}
1376void KServerSocket::send_file() 1375void KServerSocket::send_file()
1377{ 1376{
1378 //qDebug("MainWindow::sendFile(QSocket* s) "); 1377 //qDebug("MainWindow::sendFile(QSocket* s) ");
1379 if ( mSyncActionDialog ) 1378 if ( mSyncActionDialog )
1380 delete mSyncActionDialog; 1379 delete mSyncActionDialog;
1381 mSyncActionDialog = new QDialog ( 0, "input-dialog", true ); 1380 mSyncActionDialog = new QDialog ( 0, "input-dialog", true );
1382 mSyncActionDialog->setCaption(i18n("Received sync request")); 1381 mSyncActionDialog->setCaption(i18n("Received sync request"));
1383 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog ); 1382 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog );
1384 label->setAlignment ( Qt::AlignHCenter ); 1383 label->setAlignment ( Qt::AlignHCenter );
1385 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog ); 1384 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
1386 lay->addWidget( label); 1385 lay->addWidget( label);
1387 lay->setMargin(7); 1386 lay->setMargin(7);
1388 lay->setSpacing(7); 1387 lay->setSpacing(7);
1389 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1388 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1390 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent ); 1389 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent );
1391 //secs = 333; 1390 //secs = 333;
1392 if ( secs < 0 ) 1391 if ( secs < 0 )
1393 secs = secs * (-1); 1392 secs = secs * (-1);
1394 if ( secs > 30 ) 1393 if ( secs > 30 )
1395 //if ( true ) 1394 //if ( true )
1396 { 1395 {
1397 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs ); 1396 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs );
1398 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1397 QLabel* label = new QLabel( warning, mSyncActionDialog );
1399 label->setAlignment ( Qt::AlignHCenter ); 1398 label->setAlignment ( Qt::AlignHCenter );
1400 lay->addWidget( label); 1399 lay->addWidget( label);
1401 if ( secs > 180 ) 1400 if ( secs > 180 )
1402 { 1401 {
1403 if ( secs > 300 ) { 1402 if ( secs > 300 ) {
1404 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(0, i18n("The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!"), i18n("High clock skew!"),i18n("Synchronize!"))) { 1403 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(0, i18n("The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!"), i18n("High clock skew!"),i18n("Synchronize!"))) {
1405 qDebug("KSS::Sync cancelled ,cs"); 1404 qDebug("KSS::Sync cancelled ,cs");
1406 mErrorMessage = 0; 1405 mErrorMessage = 0;
1407 end_connect(); 1406 end_connect();
1408 error_connect("ERROR_CA\r\n\r\n"); 1407 error_connect("ERROR_CA\r\n\r\n");
1409 return ; 1408 return ;
1410 } 1409 }
1411 } 1410 }
1412 QFont f = label->font(); 1411 QFont f = label->font();
1413 f.setPointSize ( f.pointSize() *2 ); 1412 f.setPointSize ( f.pointSize() *2 );
1414 f. setBold (true ); 1413 f. setBold (true );
1415 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1414 QLabel* label = new QLabel( warning, mSyncActionDialog );
1416 label->setFont( f ); 1415 label->setFont( f );
1417 warning = i18n("ADJUST\nYOUR\nCLOCKS!"); 1416 warning = i18n("ADJUST\nYOUR\nCLOCKS!");
1418 label->setText( warning ); 1417 label->setText( warning );
1419 label->setAlignment ( Qt::AlignHCenter ); 1418 label->setAlignment ( Qt::AlignHCenter );
1420 lay->addWidget( label); 1419 lay->addWidget( label);
1421 mSyncActionDialog->setFixedSize( 230, 300); 1420 mSyncActionDialog->setFixedSize( 230, 300);
1422 } else { 1421 } else {
1423 mSyncActionDialog->setFixedSize( 230, 200); 1422 mSyncActionDialog->setFixedSize( 230, 200);
1424 } 1423 }
1425 } else { 1424 } else {
1426 mSyncActionDialog->setFixedSize( 230, 120); 1425 mSyncActionDialog->setFixedSize( 230, 120);
1427 } 1426 }
1428 } else 1427 } else
1429 mSyncActionDialog->setFixedSize( 230, 120); 1428 mSyncActionDialog->setFixedSize( 230, 120);
1430 mSyncActionDialog->show(); 1429 mSyncActionDialog->show();
1431 mSyncActionDialog->raise(); 1430 mSyncActionDialog->raise();
1432 emit request_file(mResource); 1431 emit request_file(mResource);
1433 emit request_file(); 1432 emit request_file();
1434 qApp->processEvents(); 1433 qApp->processEvents();
1435 QString fileName = mFileName; 1434 QString fileName = mFileName;
1436 QFile file( fileName ); 1435 QFile file( fileName );
1437 if (!file.open( IO_ReadOnly ) ) { 1436 if (!file.open( IO_ReadOnly ) ) {
1438 mErrorMessage = 0; 1437 mErrorMessage = 0;
1439 end_connect(); 1438 end_connect();
1440 error_connect("ERROR_FI\r\n\r\n"); 1439 error_connect("ERROR_FI\r\n\r\n");
1441 return ; 1440 return ;
1442 } 1441 }
1443 mSyncActionDialog->setCaption( i18n("Sending file...") ); 1442 mSyncActionDialog->setCaption( i18n("Sending file...") );
1444 QTextStream ts( &file ); 1443 QTextStream ts( &file );
1445 ts.setEncoding( QTextStream::Latin1 ); 1444 ts.setEncoding( QTextStream::Latin1 );
1446 1445
1447 QTextStream os( mSocket ); 1446 QTextStream os( mSocket );
1448 os.setEncoding( QTextStream::Latin1 ); 1447 os.setEncoding( QTextStream::Latin1 );
1449 while ( ! ts.atEnd() ) { 1448 while ( ! ts.atEnd() ) {
1450 os << ts.readLine() << "\r\n"; 1449 os << ts.readLine() << "\r\n";
1451 } 1450 }
1452 os << "\r\n"; 1451 os << "\r\n";
1453 //os << ts.read(); 1452 //os << ts.read();
1454 file.close(); 1453 file.close();
1455 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") ); 1454 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") );
1456 mSocket->close(); 1455 mSocket->close();
1457 if ( mSocket->state() == QSocket::Idle ) 1456 if ( mSocket->state() == QSocket::Idle )
1458 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1457 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1459} 1458}
1460void KServerSocket::get_file() 1459void KServerSocket::get_file()
1461{ 1460{
1462 mSyncActionDialog->setCaption( i18n("Receiving synced file...") ); 1461 mSyncActionDialog->setCaption( i18n("Receiving synced file...") );
1463 1462
1464 piTime.start(); 1463 piTime.start();
1465 piFileString = ""; 1464 piFileString = "";
1466 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) )); 1465 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) ));
1467} 1466}
1468 1467
1469 1468
1470void KServerSocket::readBackFileFromSocket() 1469void KServerSocket::readBackFileFromSocket()
1471{ 1470{
1472 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ()); 1471 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ());
1473 while ( mSocket->canReadLine () ) { 1472 while ( mSocket->canReadLine () ) {
1474 piTime.restart(); 1473 piTime.restart();
1475 QString line = mSocket->readLine (); 1474 QString line = mSocket->readLine ();
1476 piFileString += line; 1475 piFileString += line;
1477 //qDebug("readline: %s ", line.latin1()); 1476 //qDebug("readline: %s ", line.latin1());
1478 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) ); 1477 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) );
1479 1478
1480 } 1479 }
1481 if ( piTime.elapsed () < 3000 ) { 1480 if ( piTime.elapsed () < 3000 ) {
1482 // wait for more 1481 // wait for more
1483 //qDebug("waitformore "); 1482 //qDebug("waitformore ");
1484 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) )); 1483 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) ));
1485 return; 1484 return;
1486 } 1485 }
1487 QString fileName = mFileName; 1486 QString fileName = mFileName;
1488 QFile file ( fileName ); 1487 QFile file ( fileName );
1489 if (!file.open( IO_WriteOnly ) ) { 1488 if (!file.open( IO_WriteOnly ) ) {
1490 delete mSyncActionDialog; 1489 delete mSyncActionDialog;
1491 mSyncActionDialog = 0; 1490 mSyncActionDialog = 0;
1492 qDebug("KSS:Error open read back file "); 1491 qDebug("KSS:Error open read back file ");
1493 piFileString = ""; 1492 piFileString = "";
1494 emit file_received( false, mResource); 1493 emit file_received( false, mResource);
1495 emit file_received( false); 1494 emit file_received( false);
1496 blockRC = false; 1495 blockRC = false;
1497 return ; 1496 return ;
1498 1497
1499 } 1498 }
1500 1499
1501 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1500 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1502 QTextStream ts ( &file ); 1501 QTextStream ts ( &file );
1503 ts.setEncoding( QTextStream::Latin1 ); 1502 ts.setEncoding( QTextStream::Latin1 );
1504 mSyncActionDialog->setCaption( i18n("Writing file to disk...") ); 1503 mSyncActionDialog->setCaption( i18n("Writing file to disk...") );
1505 ts << piFileString; 1504 ts << piFileString;
1506 mSocket->close(); 1505 mSocket->close();
1507 if ( mSocket->state() == QSocket::Idle ) 1506 if ( mSocket->state() == QSocket::Idle )
1508 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1507 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1509 file.close(); 1508 file.close();
1510 piFileString = ""; 1509 piFileString = "";
1511 emit file_received( true, mResource ); 1510 emit file_received( true, mResource );
1512 emit file_received( true); 1511 emit file_received( true);
1513 delete mSyncActionDialog; 1512 delete mSyncActionDialog;
1514 mSyncActionDialog = 0; 1513 mSyncActionDialog = 0;
1515 blockRC = false; 1514 blockRC = false;
1516 1515
1517} 1516}
1518 1517
1519KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name ) 1518KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name )
1520{ 1519{
1521 mRemoteResource = remres; 1520 mRemoteResource = remres;
1522 if ( mRemoteResource.isEmpty() ) 1521 if ( mRemoteResource.isEmpty() )
1523 mRemoteResource = "ALL"; 1522 mRemoteResource = "ALL";
1524 else 1523 else
1525 mRemoteResource.replace (QRegExp (" "),"_" ); 1524 mRemoteResource.replace (QRegExp (" "),"_" );
1526 mPassWord = password; 1525 mPassWord = password;
1527 mSocket = 0; 1526 mSocket = 0;
1528 mFirst = false; 1527 mFirst = false;
1529 mFirstLine = true; 1528 mFirstLine = true;
1530 mPort = port; 1529 mPort = port;
1531 mHost = host; 1530 mHost = host;
1532 tlw = cap; 1531 tlw = cap;
1533 mRetVal = quiet; 1532 mRetVal = quiet;
1534 mTimerSocket = new QTimer ( this ); 1533 mTimerSocket = new QTimer ( this );
1535 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) ); 1534 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) );
1536 mConnectProgress.setCaption( i18n("Pi-Sync") ); 1535 mConnectProgress.setCaption( i18n("Pi-Sync") );
1537 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) ); 1536 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) );
1538 mConnectCount = -1; 1537 mConnectCount = -1;
1539} 1538}
1540void KCommandSocket::sendFileRequest() 1539void KCommandSocket::sendFileRequest()
1541{ 1540{
1542 if ( tlw ) 1541 if ( tlw )
1543 tlw->setCaption( i18n("Connected! Sending request for remote file ...") ); 1542 tlw->setCaption( i18n("Connected! Sending request for remote file ...") );
1544 mConnectProgress.hide(); 1543 mConnectProgress.hide();
1545 mConnectCount = 300;mConnectMax = 300; 1544 mConnectCount = 300;mConnectMax = 300;
1546 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") ); 1545 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") );
1547 mTimerSocket->start( 100, true ); 1546 mTimerSocket->start( 100, true );
1548 QTextStream os( mSocket ); 1547 QTextStream os( mSocket );
1549 os.setEncoding( QTextStream::Latin1 ); 1548 os.setEncoding( QTextStream::Latin1 );
1550 1549
1551 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate ); 1550 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate );
1552 os << "GET " << mPassWord << curDt << " " << mRemoteResource << "\r\n\r\n"; 1551 os << "GET " << mPassWord << curDt << " " << mRemoteResource << "\r\n\r\n";
1553} 1552}
1554 1553
1555void KCommandSocket::readFile( QString fn ) 1554void KCommandSocket::readFile( QString fn )
1556{ 1555{
1557 if ( !mSocket ) { 1556 if ( !mSocket ) {
1558 mSocket = new QSocket( this ); 1557 mSocket = new QSocket( this );
1559 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) ); 1558 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) );
1560 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1559 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1561 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() )); 1560 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() ));
1562 } 1561 }
1563 mFileString = ""; 1562 mFileString = "";
1564 mFileName = fn; 1563 mFileName = fn;
1565 mFirst = true; 1564 mFirst = true;
1566 if ( tlw ) 1565 if ( tlw )
1567 tlw->setCaption( i18n("Trying to connect to remote...") ); 1566 tlw->setCaption( i18n("Trying to connect to remote...") );
1568 mConnectCount = 30;mConnectMax = 30; 1567 mConnectCount = 30;mConnectMax = 30;
1569 mTimerSocket->start( 1000, true ); 1568 mTimerSocket->start( 1000, true );
1570 mSocket->connectToHost( mHost, mPort ); 1569 mSocket->connectToHost( mHost, mPort );
1571 qDebug("KSS: Waiting for connection"); 1570 qDebug("KSS: Waiting for connection");
1572} 1571}
1573void KCommandSocket::updateConnectDialog() 1572void KCommandSocket::updateConnectDialog()
1574{ 1573{
1575 1574
1576 if ( mConnectCount == mConnectMax ) { 1575 if ( mConnectCount == mConnectMax ) {
1577 //qDebug("MAXX %d", mConnectMax); 1576 //qDebug("MAXX %d", mConnectMax);
1578 mConnectProgress.setTotalSteps ( 30 ); 1577 mConnectProgress.setTotalSteps ( 30 );
1579 mConnectProgress.show(); 1578 mConnectProgress.show();
1580 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") ); 1579 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") );
1581 } 1580 }
1582 //qDebug("updateConnectDialog() %d", mConnectCount); 1581 //qDebug("updateConnectDialog() %d", mConnectCount);
1583 mConnectProgress.raise(); 1582 mConnectProgress.raise();
1584 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 ); 1583 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 );
1585 --mConnectCount; 1584 --mConnectCount;
1586 if ( mConnectCount > 0 ) 1585 if ( mConnectCount > 0 )
1587 mTimerSocket->start( 1000, true ); 1586 mTimerSocket->start( 1000, true );
1588 else 1587 else
1589 deleteSocket(); 1588 deleteSocket();
1590 1589
1591} 1590}
1592void KCommandSocket::writeFile( QString fileName ) 1591void KCommandSocket::writeFile( QString fileName )
1593{ 1592{
1594 if ( !mSocket ) { 1593 if ( !mSocket ) {
1595 mSocket = new QSocket( this ); 1594 mSocket = new QSocket( this );
1596 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1595 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1597 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) ); 1596 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) );
1598 } 1597 }
1599 mFileName = fileName ; 1598 mFileName = fileName ;
1600 mConnectCount = 30;mConnectMax = 30; 1599 mConnectCount = 30;mConnectMax = 30;
1601 mTimerSocket->start( 1000, true ); 1600 mTimerSocket->start( 1000, true );
1602 mSocket->connectToHost( mHost, mPort ); 1601 mSocket->connectToHost( mHost, mPort );
1603} 1602}
1604void KCommandSocket::writeFileToSocket() 1603void KCommandSocket::writeFileToSocket()
1605{ 1604{
1606 mTimerSocket->stop(); 1605 mTimerSocket->stop();
1607 QFile file2( mFileName ); 1606 QFile file2( mFileName );
1608 if (!file2.open( IO_ReadOnly ) ) { 1607 if (!file2.open( IO_ReadOnly ) ) {
1609 mConnectProgress.hide(); 1608 mConnectProgress.hide();
1610 mConnectCount = -1; 1609 mConnectCount = -1;
1611 mRetVal= errorW; 1610 mRetVal= errorW;
1612 mSocket->close(); 1611 mSocket->close();
1613 if ( mSocket->state() == QSocket::Idle ) 1612 if ( mSocket->state() == QSocket::Idle )
1614 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1613 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1615 return ; 1614 return ;
1616 } 1615 }
1617 mConnectProgress.setTotalSteps ( file2.size() ); 1616 mConnectProgress.setTotalSteps ( file2.size() );
1618 mConnectProgress.show(); 1617 mConnectProgress.show();
1619 int count = 0; 1618 int count = 0;
1620 mConnectProgress.setLabelText( i18n("Sending back synced file...") ); 1619 mConnectProgress.setLabelText( i18n("Sending back synced file...") );
1621 mConnectProgress.setProgress( count ); 1620 mConnectProgress.setProgress( count );
1622 mConnectProgress.blockSignals( true ); 1621 mConnectProgress.blockSignals( true );
1623 QTextStream ts2( &file2 ); 1622 QTextStream ts2( &file2 );
1624 ts2.setEncoding( QTextStream::Latin1 ); 1623 ts2.setEncoding( QTextStream::Latin1 );
1625 QTextStream os2( mSocket ); 1624 QTextStream os2( mSocket );
1626 os2.setEncoding( QTextStream::Latin1 ); 1625 os2.setEncoding( QTextStream::Latin1 );
1627 os2 << "PUT " << mPassWord << " " << mRemoteResource << "\r\n\r\n";; 1626 os2 << "PUT " << mPassWord << " " << mRemoteResource << "\r\n\r\n";;
1628 int byteCount = 0; 1627 int byteCount = 0;
1629 int byteMax = file2.size()/53; 1628 int byteMax = file2.size()/53;
1630 while ( ! ts2.atEnd() ) { 1629 while ( ! ts2.atEnd() ) {
1631 qApp->processEvents(); 1630 qApp->processEvents();
1632 if ( byteCount > byteMax ) { 1631 if ( byteCount > byteMax ) {
1633 byteCount = 0; 1632 byteCount = 0;
1634 mConnectProgress.setProgress( count ); 1633 mConnectProgress.setProgress( count );
1635 } 1634 }
1636 QString temp = ts2.readLine(); 1635 QString temp = ts2.readLine();
1637 count += temp.length(); 1636 count += temp.length();
1638 byteCount += temp.length(); 1637 byteCount += temp.length();
1639 os2 << temp << "\r\n"; 1638 os2 << temp << "\r\n";
1640 } 1639 }
1641 file2.close(); 1640 file2.close();
1642 mConnectProgress.hide(); 1641 mConnectProgress.hide();
1643 mConnectCount = -1; 1642 mConnectCount = -1;
1644 os2 << "\r\n"; 1643 os2 << "\r\n";
1645 mRetVal= successW; 1644 mRetVal= successW;
1646 mSocket->close(); 1645 mSocket->close();
1647 if ( mSocket->state() == QSocket::Idle ) 1646 if ( mSocket->state() == QSocket::Idle )
1648 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1647 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1649 mConnectProgress.blockSignals( false ); 1648 mConnectProgress.blockSignals( false );
1650} 1649}
1651void KCommandSocket::sendStop() 1650void KCommandSocket::sendStop()
1652{ 1651{
1653 if ( !mSocket ) { 1652 if ( !mSocket ) {
1654 mSocket = new QSocket( this ); 1653 mSocket = new QSocket( this );
1655 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1654 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1656 } 1655 }
1657 mSocket->connectToHost( mHost, mPort ); 1656 mSocket->connectToHost( mHost, mPort );
1658 QTextStream os2( mSocket ); 1657 QTextStream os2( mSocket );
1659 os2.setEncoding( QTextStream::Latin1 ); 1658 os2.setEncoding( QTextStream::Latin1 );
1660 os2 << "STOP\r\n\r\n"; 1659 os2 << "STOP\r\n\r\n";
1661 mSocket->close(); 1660 mSocket->close();
1662 if ( mSocket->state() == QSocket::Idle ) 1661 if ( mSocket->state() == QSocket::Idle )
1663 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1662 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1664} 1663}
1665 1664
1666void KCommandSocket::startReadFileFromSocket() 1665void KCommandSocket::startReadFileFromSocket()
1667{ 1666{
1668 if ( ! mFirst ) 1667 if ( ! mFirst )
1669 return; 1668 return;
1670 mConnectProgress.setLabelText( i18n("Receiving file from remote...") ); 1669 mConnectProgress.setLabelText( i18n("Receiving file from remote...") );
1671 mFirst = false; 1670 mFirst = false;
1672 mFileString = ""; 1671 mFileString = "";
1673 mTime.start(); 1672 mTime.start();
1674 mFirstLine = true; 1673 mFirstLine = true;
1675 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) )); 1674 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) ));
1676 1675
1677} 1676}
1678void KCommandSocket::readFileFromSocket() 1677void KCommandSocket::readFileFromSocket()
1679{ 1678{
1680 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ()); 1679 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ());
1681 while ( mSocket->canReadLine () ) { 1680 while ( mSocket->canReadLine () ) {
1682 mTime.restart(); 1681 mTime.restart();
1683 QString line = mSocket->readLine (); 1682 QString line = mSocket->readLine ();
1684 if ( mFirstLine ) { 1683 if ( mFirstLine ) {
1685 mFirstLine = false; 1684 mFirstLine = false;
1686 if ( line.left( 6 ) == "ERROR_" ) { 1685 if ( line.left( 6 ) == "ERROR_" ) {
1687 mTimerSocket->stop(); 1686 mTimerSocket->stop();
1688 mConnectCount = -1; 1687 mConnectCount = -1;
1689 if ( line.left( 8 ) == "ERROR_PW" ) { 1688 if ( line.left( 8 ) == "ERROR_PW" ) {
1690 mRetVal = errorPW; 1689 mRetVal = errorPW;
1691 deleteSocket(); 1690 deleteSocket();
1692 return ; 1691 return ;
1693 } 1692 }
1694 if ( line.left( 8 ) == "ERROR_CA" ) { 1693 if ( line.left( 8 ) == "ERROR_CA" ) {
1695 mRetVal = errorCA; 1694 mRetVal = errorCA;
1696 deleteSocket(); 1695 deleteSocket();
1697 return ; 1696 return ;
1698 } 1697 }
1699 if ( line.left( 8 ) == "ERROR_FI" ) { 1698 if ( line.left( 8 ) == "ERROR_FI" ) {
1700 mRetVal = errorFI; 1699 mRetVal = errorFI;
1701 deleteSocket(); 1700 deleteSocket();
1702 return ; 1701 return ;
1703 } 1702 }
1704 if ( line.left( 8 ) == "ERROR_ED" ) { 1703 if ( line.left( 8 ) == "ERROR_ED" ) {
1705 mRetVal = errorED; 1704 mRetVal = errorED;
1706 deleteSocket(); 1705 deleteSocket();
1707 return ; 1706 return ;
1708 } 1707 }
1709 mRetVal = errorUN; 1708 mRetVal = errorUN;
1710 deleteSocket(); 1709 deleteSocket();
1711 return ; 1710 return ;
1712 } 1711 }
1713 } 1712 }
1714 mFileString += line; 1713 mFileString += line;
1715 //qDebug("readline: %s ", line.latin1()); 1714 //qDebug("readline: %s ", line.latin1());
1716 } 1715 }
1717 if ( mTime.elapsed () < 3000 ) { 1716 if ( mTime.elapsed () < 3000 ) {
1718 // wait for more 1717 // wait for more
1719 //qDebug("waitformore "); 1718 //qDebug("waitformore ");
1720 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) )); 1719 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) ));
1721 return; 1720 return;
1722 } 1721 }
1723 mTimerSocket->stop(); 1722 mTimerSocket->stop();
1724 mConnectCount = -1; 1723 mConnectCount = -1;
1725 mConnectProgress.hide(); 1724 mConnectProgress.hide();
1726 QString fileName = mFileName; 1725 QString fileName = mFileName;
1727 QFile file ( fileName ); 1726 QFile file ( fileName );
1728 if (!file.open( IO_WriteOnly ) ) { 1727 if (!file.open( IO_WriteOnly ) ) {
1729 mFileString = ""; 1728 mFileString = "";
1730 mRetVal = errorR; 1729 mRetVal = errorR;
1731 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() ); 1730 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() );
1732 deleteSocket(); 1731 deleteSocket();
1733 return ; 1732 return ;
1734 1733
1735 } 1734 }
1736 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1735 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1737 QTextStream ts ( &file ); 1736 QTextStream ts ( &file );
1738 ts.setEncoding( QTextStream::Latin1 ); 1737 ts.setEncoding( QTextStream::Latin1 );
1739 ts << mFileString; 1738 ts << mFileString;
1740 file.close(); 1739 file.close();
1741 mFileString = ""; 1740 mFileString = "";
1742 mRetVal = successR; 1741 mRetVal = successR;
1743 mSocket->close(); 1742 mSocket->close();
1744 // if state is not idle, deleteSocket(); is called via 1743 // if state is not idle, deleteSocket(); is called via
1745 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1744 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1746 if ( mSocket->state() == QSocket::Idle ) 1745 if ( mSocket->state() == QSocket::Idle )
1747 deleteSocket(); 1746 deleteSocket();
1748} 1747}
1749 1748
1750void KCommandSocket::deleteSocket() 1749void KCommandSocket::deleteSocket()
1751{ 1750{
1752 //qDebug("KCommandSocket::deleteSocket() "); 1751 //qDebug("KCommandSocket::deleteSocket() ");
1753 mConnectProgress.hide(); 1752 mConnectProgress.hide();
1754 1753
1755 if ( mConnectCount >= 0 ) { 1754 if ( mConnectCount >= 0 ) {
1756 mTimerSocket->stop(); 1755 mTimerSocket->stop();
1757 mRetVal = errorTO; 1756 mRetVal = errorTO;
1758 qDebug("KCS::Connection to remote host timed out"); 1757 qDebug("KCS::Connection to remote host timed out");
1759 if ( mSocket ) { 1758 if ( mSocket ) {
1760 mSocket->close(); 1759 mSocket->close();
1761 //if ( mSocket->state() == QSocket::Idle ) 1760 //if ( mSocket->state() == QSocket::Idle )
1762 // deleteSocket(); 1761 // deleteSocket();
1763 delete mSocket; 1762 delete mSocket;
1764 mSocket = 0; 1763 mSocket = 0;
1765 } 1764 }
1766 if ( mConnectCount == 0 ) 1765 if ( mConnectCount == 0 )
1767 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?")); 1766 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?"));
1768 else if ( tlw ) 1767 else if ( tlw )
1769 tlw->setCaption( i18n("Connection to remote host cancelled!") ); 1768 tlw->setCaption( i18n("Connection to remote host cancelled!") );
1770 emit commandFinished( this, mRetVal ); 1769 emit commandFinished( this, mRetVal );
1771 return; 1770 return;
1772 } 1771 }
1773 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal ); 1772 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal );
1774 if ( mSocket) 1773 if ( mSocket)
1775 delete mSocket; 1774 delete mSocket;
1776 mSocket = 0; 1775 mSocket = 0;
1777 qDebug("commandFinished "); 1776 qDebug("commandFinished ");
1778 emit commandFinished( this, mRetVal ); 1777 emit commandFinished( this, mRetVal );
1779} 1778}