summaryrefslogtreecommitdiffabout
path: root/korganizer/calendarview.cpp
Unidiff
Diffstat (limited to 'korganizer/calendarview.cpp') (more/less context) (show whitespace changes)
-rw-r--r--korganizer/calendarview.cpp29
1 files changed, 20 insertions, 9 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 9571f16..8d024c1 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,103 +1,103 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) savecale1997, 1998, 1999
8 Preston Brown (preton.brown@yale.edu) 8 Preston Brown (preton.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
@@ -686,218 +686,222 @@ void CalendarView::nextConflict( bool all, bool allday )
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#else
783 Q_UNUSED( val );
782#endif 784#endif
783} 785}
784void CalendarView::scrollBarValue(int val ) 786void CalendarView::scrollBarValue(int val )
785{ 787{
786#ifdef DESKTOP_VERSION 788#ifdef DESKTOP_VERSION
787 if ( QApplication::desktop()->width() < 800 ) return; 789 if ( QApplication::desktop()->width() < 800 ) return;
788 if ( flag_blockScrollBar ) return; 790 if ( flag_blockScrollBar ) return;
789 flag_blockScrollBar = true; 791 flag_blockScrollBar = true;
790 int count = mNavigator->selectedDates().count(); 792 int count = mNavigator->selectedDates().count();
791 int day = mNavigator->selectedDates().first().dayOfYear(); 793 int day = mNavigator->selectedDates().first().dayOfYear();
792 int stepdays = val; 794 int stepdays = val;
793 if ( mDateScrollBar->lineStep () <= count ) { 795 if ( mDateScrollBar->lineStep () <= count ) {
794 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 796 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
795 //qDebug("VAL %d ",val ); 797 //qDebug("VAL %d ",val );
796 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 798 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
797 stepdays = day+stepdays; 799 stepdays = day+stepdays;
798 if ( stepdays < 0 ) stepdays = 0; 800 if ( stepdays < 0 ) stepdays = 0;
799 } 801 }
800 if ( stepdays == day ) { 802 if ( stepdays == day ) {
801 flag_blockScrollBar = false; 803 flag_blockScrollBar = false;
802 return; 804 return;
803 } 805 }
804 int year = mNavigator->selectedDates().first().year(); 806 int year = mNavigator->selectedDates().first().year();
805 QDate d ( year,1,1 ); 807 QDate d ( year,1,1 );
806 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 808 mNavigator->selectDates( d.addDays( stepdays-1) , count );
807 flag_blockScrollBar = false; 809 flag_blockScrollBar = false;
810#else
811 Q_UNUSED( val );
808#endif 812#endif
809 813
810} 814}
811void CalendarView::updateView(const QDate &start, const QDate &end) 815void CalendarView::updateView(const QDate &start, const QDate &end)
812{ 816{
813#ifdef DESKTOP_VERSION 817#ifdef DESKTOP_VERSION
814 if ( ! mDateScrollBar->draggingSlider () ) { 818 if ( ! mDateScrollBar->draggingSlider () ) {
815 int dof = start.dayOfYear(); 819 int dof = start.dayOfYear();
816 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 820 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
817 if ( dof != mDateScrollBar->value() ) { 821 if ( dof != mDateScrollBar->value() ) {
818 mDateScrollBar->blockSignals( true ); 822 mDateScrollBar->blockSignals( true );
819 mDateScrollBar->setValue( start.dayOfYear()); 823 mDateScrollBar->setValue( start.dayOfYear());
820 mDateScrollBar->blockSignals( false ); 824 mDateScrollBar->blockSignals( false );
821 } 825 }
822 } 826 }
823#endif 827#endif
824 mTodoList->updateView(); 828 mTodoList->updateView();
825 mViewManager->updateView(start, end); 829 mViewManager->updateView(start, end);
826 //mDateNavigator->updateView(); 830 //mDateNavigator->updateView();
827} 831}
828 832
829 833
830 834
831void CalendarView::checkFiles() 835void CalendarView::checkFiles()
832{ 836{
833 QString message; 837 QString message;
834 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 838 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
835 KopiCalendarFile * cal = calendars.first(); 839 KopiCalendarFile * cal = calendars.first();
836 while ( cal ) { 840 while ( cal ) {
837 if ( cal->mErrorOnLoad ) { 841 if ( cal->mErrorOnLoad ) {
838 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 842 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
839 } 843 }
840 cal = calendars.next(); 844 cal = calendars.next();
841 } 845 }
842 if ( !message.isEmpty() ) { 846 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); 847 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")); 848 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed"));
845 } 849 }
846 if ( flag_checkFileFirsttime ) { 850 if ( flag_checkFileFirsttime ) {
847 flag_checkFileFirsttime = false; 851 flag_checkFileFirsttime = false;
848 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 852 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
849 } 853 }
850} 854}
851void CalendarView::checkAlarms() 855void CalendarView::checkAlarms()
852{ 856{
853 KConfig *config = KOGlobals::config(); 857 KConfig *config = KOGlobals::config();
854 config->setGroup( "AppRun" ); 858 config->setGroup( "AppRun" );
855 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 859 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
856 int daysto = dt.daysTo( QDate::currentDate() ); 860 int daysto = dt.daysTo( QDate::currentDate() );
857 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 861 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
858 dt = dt.addDays( days ); 862 dt = dt.addDays( days );
859 int secto = dt.secsTo( QDateTime::currentDateTime() ); 863 int secto = dt.secsTo( QDateTime::currentDateTime() );
860 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 864 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
861 //qDebug("KO: Reading program stop %d ", secs); 865 //qDebug("KO: Reading program stop %d ", secs);
862 //secs -= ( 3600 * 24*3 ); // debug only 866 //secs -= ( 3600 * 24*3 ); // debug only
863 QDateTime latest = dt.addSecs ( secs ); 867 QDateTime latest = dt.addSecs ( secs );
864 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 868 qDebug("KO: Last termination on %s ", latest.toString().latin1());
865 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 869 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
866 QPtrList<Incidence> el = mCalendar->rawIncidences(); 870 QPtrList<Incidence> el = mCalendar->rawIncidences();
867 QPtrList<Incidence> al; 871 QPtrList<Incidence> al;
868 Incidence* inL = el.first(); 872 Incidence* inL = el.first();
869 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 873 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
870 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 874 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
871 while ( inL ) { 875 while ( inL ) {
872 bool ok = false; 876 bool ok = false;
873 int offset = 0; 877 int offset = 0;
874 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 878 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
875 if ( ok ) { 879 if ( ok ) {
876 //qDebug("OK %s",next.toString().latin1()); 880 //qDebug("OK %s",next.toString().latin1());
877 if ( next < cur ) { 881 if ( next < cur ) {
878 al.append( inL ); 882 al.append( inL );
879 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 883 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
880 } 884 }
881 } 885 }
882 inL = el.next(); 886 inL = el.next();
883 } 887 }
884 if ( al.count() ) { 888 if ( al.count() ) {
885 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 889 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
886 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 890 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
887 QVBoxLayout* lay = new QVBoxLayout( dia ); 891 QVBoxLayout* lay = new QVBoxLayout( dia );
888 lay->setSpacing( 0 ); 892 lay->setSpacing( 0 );
889 lay->setMargin( 0 ); 893 lay->setMargin( 0 );
890 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 894 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
891 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 895 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
892 lay->addWidget( matb ); 896 lay->addWidget( matb );
893 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 897 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
894 int wid = 210; 898 int wid = 210;
895 int x = QApplication::desktop()->width() - wid - 7; 899 int x = QApplication::desktop()->width() - wid - 7;
896 int y = QApplication::desktop()->height() - wid - 70; 900 int y = QApplication::desktop()->height() - wid - 70;
897 dia->setGeometry ( x,y,wid,wid); 901 dia->setGeometry ( x,y,wid,wid);
898 } else { 902 } else {
899 int si = 220; 903 int si = 220;
900 if ( QApplication::desktop()->width() > 470 ) 904 if ( QApplication::desktop()->width() > 470 )
901 si = 400; 905 si = 400;
902 dia->resize(si,si/2); 906 dia->resize(si,si/2);
903 } 907 }
@@ -1509,452 +1513,453 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b
1509 if ( localIsNew ) 1513 if ( localIsNew )
1510 getEventViewerDialog()->setColorMode( 1 ); 1514 getEventViewerDialog()->setColorMode( 1 );
1511 else 1515 else
1512 getEventViewerDialog()->setColorMode( 2 ); 1516 getEventViewerDialog()->setColorMode( 2 );
1513 getEventViewerDialog()->setIncidence(local); 1517 getEventViewerDialog()->setIncidence(local);
1514 if ( localIsNew ) 1518 if ( localIsNew )
1515 getEventViewerDialog()->setColorMode( 2 ); 1519 getEventViewerDialog()->setColorMode( 2 );
1516 else 1520 else
1517 getEventViewerDialog()->setColorMode( 1 ); 1521 getEventViewerDialog()->setColorMode( 1 );
1518 getEventViewerDialog()->addIncidence(remote); 1522 getEventViewerDialog()->addIncidence(remote);
1519 getEventViewerDialog()->setColorMode( 0 ); 1523 getEventViewerDialog()->setColorMode( 0 );
1520 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1524 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1521 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1525 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1522 getEventViewerDialog()->showMe(); 1526 getEventViewerDialog()->showMe();
1523 result = getEventViewerDialog()->executeS( localIsNew ); 1527 result = getEventViewerDialog()->executeS( localIsNew );
1524 return result; 1528 return result;
1525 1529
1526 break; 1530 break;
1527 case SYNC_PREF_FORCE_LOCAL: 1531 case SYNC_PREF_FORCE_LOCAL:
1528 return 1; 1532 return 1;
1529 break; 1533 break;
1530 case SYNC_PREF_FORCE_REMOTE: 1534 case SYNC_PREF_FORCE_REMOTE:
1531 return 2; 1535 return 2;
1532 break; 1536 break;
1533 1537
1534 default: 1538 default:
1535 // SYNC_PREF_TAKE_BOTH not implemented 1539 // SYNC_PREF_TAKE_BOTH not implemented
1536 break; 1540 break;
1537 } 1541 }
1538 return 0; 1542 return 0;
1539} 1543}
1540Event* CalendarView::getLastSyncEvent() 1544Event* CalendarView::getLastSyncEvent()
1541{ 1545{
1542 Event* lse; 1546 Event* lse;
1543 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1547 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1544 mCalendar->setSyncEventsEnabled(); 1548 mCalendar->setSyncEventsEnabled();
1545 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1549 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1546 if (!lse) { 1550 if (!lse) {
1547 qDebug("KO: New last Syncevent created for local: %s",mCurrentSyncDevice.latin1() ); 1551 qDebug("KO: New last Syncevent created for local: %s",mCurrentSyncDevice.latin1() );
1548 lse = new Event(); 1552 lse = new Event();
1549 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1553 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1550 QString sum = ""; 1554 QString sum = "";
1551 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1555 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1552 sum = "E: "; 1556 sum = "E: ";
1553 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1557 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1554 lse->setDtStart( mLastCalendarSync ); 1558 lse->setDtStart( mLastCalendarSync );
1555 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1559 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1556 lse->setCategories( i18n("SyncEvent") ); 1560 lse->setCategories( i18n("SyncEvent") );
1557 lse->setReadOnly( true ); 1561 lse->setReadOnly( true );
1558 lse->setCalID( 1 ); 1562 lse->setCalID( 1 );
1559 mCalendar->addEvent( lse ); 1563 mCalendar->addEvent( lse );
1560 } else 1564 } else
1561 qDebug("KO: Last Syncevent on local found"); 1565 qDebug("KO: Last Syncevent on local found");
1562 1566
1563 return lse; 1567 return lse;
1564 1568
1565} 1569}
1566 1570
1567// we check, if the to delete event has a id for a profile 1571// we check, if the to delete event has a id for a profile
1568// if yes, we set this id in the profile to delete 1572// if yes, we set this id in the profile to delete
1569void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1573void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1570{ 1574{
1571 if ( lastSync.count() == 0 ) { 1575 if ( lastSync.count() == 0 ) {
1572 //qDebug(" lastSync.count() == 0"); 1576 //qDebug(" lastSync.count() == 0");
1573 return; 1577 return;
1574 } 1578 }
1575 if ( toDelete->typeID() == journalID ) 1579 if ( toDelete->typeID() == journalID )
1576 return; 1580 return;
1577 1581
1578 Event* eve = lastSync.first(); 1582 Event* eve = lastSync.first();
1579 1583
1580 while ( eve ) { 1584 while ( eve ) {
1581 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1585 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1582 if ( !id.isEmpty() ) { 1586 if ( !id.isEmpty() ) {
1583 QString des = eve->description(); 1587 QString des = eve->description();
1584 QString pref = "e"; 1588 QString pref = "e";
1585 if ( toDelete->typeID() == todoID ) 1589 if ( toDelete->typeID() == todoID )
1586 pref = "t"; 1590 pref = "t";
1587 des += pref+ id + ","; 1591 des += pref+ id + ",";
1588 eve->setReadOnly( false ); 1592 eve->setReadOnly( false );
1589 eve->setDescription( des ); 1593 eve->setDescription( des );
1590 //qDebug("setdes %s ", des.latin1()); 1594 //qDebug("setdes %s ", des.latin1());
1591 eve->setReadOnly( true ); 1595 eve->setReadOnly( true );
1592 } 1596 }
1593 eve = lastSync.next(); 1597 eve = lastSync.next();
1594 } 1598 }
1595 1599
1596} 1600}
1597void CalendarView::checkExternalId( Incidence * inc ) 1601void CalendarView::checkExternalId( Incidence * inc )
1598{ 1602{
1599 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1603 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1600 checkExternSyncEvent( lastSync, inc ); 1604 checkExternSyncEvent( lastSync, inc );
1601 1605
1602} 1606}
1603bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1607bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1604{ 1608{
1609
1605 bool syncOK = true; 1610 bool syncOK = true;
1606 int addedEvent = 0; 1611 int addedEvent = 0;
1607 int addedEventR = 0; 1612 int addedEventR = 0;
1608 int deletedEventR = 0; 1613 int deletedEventR = 0;
1609 int deletedEventL = 0; 1614 int deletedEventL = 0;
1610 int changedLocal = 0; 1615 int changedLocal = 0;
1611 int changedRemote = 0; 1616 int changedRemote = 0;
1612 int filteredIN = 0; 1617 int filteredIN = 0;
1613 int filteredOUT = 0; 1618 int filteredOUT = 0;
1614 //QPtrList<Event> el = local->rawEvents(); 1619 //QPtrList<Event> el = local->rawEvents();
1615 Event* eventR; 1620 Event* eventR;
1616 QString uid; 1621 QString uid;
1617 int take; 1622 int take;
1618 Event* eventRSync; 1623 Event* eventRSync;
1619 Event* eventLSync; 1624 Event* eventLSync;
1620 clearAllViews(); 1625 clearAllViews();
1621 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1626 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1622 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1627 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1623 bool fullDateRange = false; 1628 bool fullDateRange = false;
1624 local->resetTempSyncStat(); 1629 local->resetTempSyncStat();
1625 mLastCalendarSync = QDateTime::currentDateTime(); 1630 mLastCalendarSync = QDateTime::currentDateTime();
1626 if ( mSyncManager->syncWithDesktop() ) { 1631 if ( mSyncManager->syncWithDesktop() ) {
1627 remote->resetPilotStat(1); 1632 remote->resetPilotStat(1);
1628 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1633 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1629 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1634 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1630 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1635 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1631 } else { 1636 } else {
1632 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1637 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1633 } 1638 }
1634 } 1639 }
1635 QDateTime modifiedCalendar = mLastCalendarSync; 1640 QDateTime modifiedCalendar = mLastCalendarSync;
1636 eventLSync = getLastSyncEvent(); 1641 eventLSync = getLastSyncEvent();
1637 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1642 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1638 if ( eventR ) { 1643 if ( eventR ) {
1639 qDebug("KO: Last-syncEvent on remote found "); 1644 qDebug("KO: Last-syncEvent on remote found ");
1640 eventRSync = (Event*) eventR->clone(); 1645 eventRSync = (Event*) eventR->clone();
1641 remote->deleteEvent(eventR ); 1646 remote->deleteEvent(eventR );
1642 1647
1643 } else { 1648 } else {
1644 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1649 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1645 eventRSync = (Event*)eventLSync->clone(); 1650 eventRSync = (Event*)eventLSync->clone();
1646 } else { 1651 } else {
1647 fullDateRange = true; 1652 fullDateRange = true;
1648 eventRSync = new Event(); 1653 eventRSync = new Event();
1649 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1654 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1650 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1655 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1651 eventRSync->setDtStart( mLastCalendarSync ); 1656 eventRSync->setDtStart( mLastCalendarSync );
1652 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1657 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1653 eventRSync->setCategories( i18n("SyncEvent") ); 1658 eventRSync->setCategories( i18n("SyncEvent") );
1654 } 1659 }
1655 } 1660 }
1656 if ( eventLSync->dtStart() == mLastCalendarSync ) 1661 if ( eventLSync->dtStart() == mLastCalendarSync )
1657 fullDateRange = true; 1662 fullDateRange = true;
1658 1663
1659 if ( ! fullDateRange ) { 1664 if ( ! fullDateRange ) {
1660 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1665 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1661 1666
1662 qDebug("KO: Sync: Set fulldate to true! Local: %s --- Remote: %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1667 qDebug("KO: Sync: Set fulldate to true! Local: %s --- Remote: %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1663 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1668 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1664 fullDateRange = true; 1669 fullDateRange = true;
1665 } 1670 }
1666 } 1671 }
1667 if ( mSyncManager->syncWithDesktop() ) { 1672 if ( mSyncManager->syncWithDesktop() ) {
1668 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1673 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1669 } 1674 }
1670 if ( fullDateRange ) 1675 if ( fullDateRange )
1671 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1676 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1672 else 1677 else
1673 mLastCalendarSync = eventLSync->dtStart(); 1678 mLastCalendarSync = eventLSync->dtStart();
1674 // for resyncing if own file has changed 1679 // for resyncing if own file has changed
1675 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1680 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1676 mLastCalendarSync = loadedFileVersion; 1681 mLastCalendarSync = loadedFileVersion;
1677 //qDebug("setting mLastCalendarSync "); 1682 //qDebug("setting mLastCalendarSync ");
1678 } 1683 }
1679 //qDebug("*************************** "); 1684 //qDebug("*************************** ");
1680 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1685 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1681 QPtrList<Incidence> er = remote->rawIncidences(); 1686 QPtrList<Incidence> er = remote->rawIncidences();
1682 Incidence* inR = er.first(); 1687 Incidence* inR = er.first();
1683 Incidence* inL; 1688 Incidence* inL;
1684 QProgressBar bar( er.count(),0 ); 1689 QProgressBar bar( er.count(),0 );
1685 bar.setCaption (i18n("Syncing - close to abort!") ); 1690 bar.setCaption (i18n("Syncing - close to abort!") );
1686 1691
1687 // ************** setting up filter ************* 1692 // ************** setting up filter *************
1688 CalFilter *filterIN = 0; 1693 CalFilter *filterIN = 0;
1689 CalFilter *filterOUT = 0; 1694 CalFilter *filterOUT = 0;
1690 CalFilter *filter = mFilters.first(); 1695 CalFilter *filter = mFilters.first();
1691 while(filter) { 1696 while(filter) {
1692 if ( filter->name() == mSyncManager->mFilterInCal ) 1697 if ( filter->name() == mSyncManager->mFilterInCal )
1693 filterIN = filter; 1698 filterIN = filter;
1694 if ( filter->name() == mSyncManager->mFilterOutCal ) 1699 if ( filter->name() == mSyncManager->mFilterOutCal )
1695 filterOUT = filter; 1700 filterOUT = filter;
1696 filter = mFilters.next(); 1701 filter = mFilters.next();
1697 } 1702 }
1698 int w = 300; 1703 int w = 300;
1699 if ( QApplication::desktop()->width() < 320 ) 1704 if ( QApplication::desktop()->width() < 320 )
1700 w = 220; 1705 w = 220;
1701 int h = bar.sizeHint().height() ; 1706 int h = bar.sizeHint().height() ;
1702 int dw = QApplication::desktop()->width(); 1707 int dw = QApplication::desktop()->width();
1703 int dh = QApplication::desktop()->height(); 1708 int dh = QApplication::desktop()->height();
1704 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1709 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1705 bar.show(); 1710 bar.show();
1706 int modulo = (er.count()/10)+1; 1711 int modulo = (er.count()/10)+1;
1707 int incCounter = 0; 1712 int incCounter = 0;
1708 while ( inR ) { 1713 while ( inR ) {
1709 if ( ! bar.isVisible() ) 1714 if ( ! bar.isVisible() )
1710 return false; 1715 return false;
1711 if ( incCounter % modulo == 0 ) 1716 if ( incCounter % modulo == 0 )
1712 bar.setProgress( incCounter ); 1717 bar.setProgress( incCounter );
1713 ++incCounter; 1718 ++incCounter;
1714 uid = inR->uid(); 1719 uid = inR->uid();
1715 bool skipIncidence = false; 1720 bool skipIncidence = false;
1716 if ( uid.left(15) == QString("last-syncEvent-") ) 1721 if ( uid.left(15) == QString("last-syncEvent-") )
1717 skipIncidence = true; 1722 skipIncidence = true;
1718 QString idS; 1723 QString idS;
1719 qApp->processEvents(); 1724 qApp->processEvents();
1720 if ( !skipIncidence ) { 1725 if ( !skipIncidence ) {
1721 inL = local->incidenceForUid( uid , false , true ); 1726 inL = local->incidenceForUid( uid , false , true );
1722 if ( inL ) { // maybe conflict - same uid in both calendars 1727 if ( inL ) { // maybe conflict - same uid in both calendars
1723 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1728 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1724 //qDebug("take %d %s ", take, inL->summary().latin1()); 1729 //qDebug("take %d %s ", take, inL->summary().latin1());
1725 if ( take == 3 ) 1730 if ( take == 3 )
1726 return false; 1731 return false;
1727 if ( take == 1 ) {// take local ********************** 1732 if ( take == 1 ) {// take local **********************
1728 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1733 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1729 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1734 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1730 else 1735 else
1731 idS = inR->IDStr(); 1736 idS = inR->IDStr();
1732 int calID = inR->calID(); 1737 int calID = inR->calID();
1733 remote->deleteIncidence( inR ); 1738 remote->deleteIncidence( inR );
1734 inR = inL->clone(); 1739 inR = inL->clone();
1735 inR->setCalID( calID ); 1740 inR->setCalID_block( calID );
1736 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1741 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1737 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1742 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1738 inR->setIDStr( idS ); 1743 inR->setIDStr( idS );
1739 remote->addIncidence( inR ); 1744 remote->addIncidence( inR );
1740 if ( mSyncManager->syncWithDesktop() ) 1745 if ( mSyncManager->syncWithDesktop() )
1741 inR->setPilotId( 2 ); 1746 inR->setPilotId( 2 );
1742 ++changedRemote; 1747 ++changedRemote;
1743 } else {// take remote ********************** 1748 } else {// take remote **********************
1744 if ( !inL->isReadOnly() ) { 1749 if ( !inL->isReadOnly() ) {
1745 idS = inL->IDStr(); 1750 idS = inL->IDStr();
1746 int pid = inL->pilotId(); 1751 int pid = inL->pilotId();
1747 int calID = inL->calID(); 1752 int calID = inL->calID();
1748 local->deleteIncidence( inL ); 1753 local->deleteIncidence( inL );
1749 inL = inR->clone(); 1754 inL = inR->clone();
1750 inL->setCalID( calID ); 1755 inL->setCalID_block( calID );
1751 if ( mSyncManager->syncWithDesktop() ) 1756 if ( mSyncManager->syncWithDesktop() )
1752 inL->setPilotId( pid ); 1757 inL->setPilotId( pid );
1753 inL->setIDStr( idS ); 1758 inL->setIDStr( idS );
1754 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1759 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1755 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1760 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1756 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1761 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1757 } 1762 }
1758 local->addIncidence( inL ); 1763 local->addIncidence( inL );
1759 ++changedLocal; 1764 ++changedLocal;
1760 } 1765 }
1761 } 1766 }
1762 } 1767 }
1763 } else { // no conflict ********** add or delete remote 1768 } else { // no conflict ********** add or delete remote
1764 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1769 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1765 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1770 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1766 QString des = eventLSync->description(); 1771 QString des = eventLSync->description();
1767 QString pref = "e"; 1772 QString pref = "e";
1768 if ( inR->typeID() == todoID ) 1773 if ( inR->typeID() == todoID )
1769 pref = "t"; 1774 pref = "t";
1770 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1775 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1771 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1776 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1772 //remote->deleteIncidence( inR ); 1777 //remote->deleteIncidence( inR );
1773 ++deletedEventR; 1778 ++deletedEventR;
1774 } else { 1779 } else {
1775 inR->setLastModified( modifiedCalendar ); 1780 inR->setLastModified( modifiedCalendar );
1776 inL = inR->clone(); 1781 inL = inR->clone();
1777 inL->setIDStr( ":" ); 1782 inL->setIDStr( ":" );
1778 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1783 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1779 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1784 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1780 1785
1781 inL->setCalID( 0 );// add to default cal 1786 inL->setCalID_block( 0 );// add to default cal
1782 local->addIncidence( inL ); 1787 local->addIncidence( inL );
1783 ++addedEvent; 1788 ++addedEvent;
1784 1789
1785 } 1790 }
1786 } else { 1791 } else {
1787 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1792 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1788 inR->setLastModified( modifiedCalendar ); 1793 inR->setLastModified( modifiedCalendar );
1789 inL = inR->clone(); 1794 inL = inR->clone();
1790 inL->setIDStr( ":" ); 1795 inL->setIDStr( ":" );
1791 inL->setCalID( 0 );// add to default cal 1796 inL->setCalID_block( 0 );// add to default cal
1792 local->addIncidence( inL ); 1797 local->addIncidence( inL );
1793 ++addedEvent; 1798 ++addedEvent;
1794 1799
1795 } else { 1800 } else {
1796 checkExternSyncEvent(eventRSyncSharp, inR); 1801 checkExternSyncEvent(eventRSyncSharp, inR);
1797 remote->deleteIncidence( inR ); 1802 remote->deleteIncidence( inR );
1798 ++deletedEventR; 1803 ++deletedEventR;
1799 } 1804 }
1800 } 1805 }
1801 } else { 1806 } else {
1802 ++filteredIN; 1807 ++filteredIN;
1803 } 1808 }
1804 } 1809 }
1805 } 1810 }
1806 inR = er.next(); 1811 inR = er.next();
1807 } 1812 }
1808 QPtrList<Incidence> el = local->rawIncidences(); 1813 QPtrList<Incidence> el = local->rawIncidences();
1809 inL = el.first(); 1814 inL = el.first();
1810 modulo = (el.count()/10)+1; 1815 modulo = (el.count()/10)+1;
1811 bar.setCaption (i18n("Add / remove events") ); 1816 bar.setCaption (i18n("Add / remove events") );
1812 bar.setTotalSteps ( el.count() ) ; 1817 bar.setTotalSteps ( el.count() ) ;
1813 bar.show(); 1818 bar.show();
1814 incCounter = 0; 1819 incCounter = 0;
1815 1820
1816 while ( inL ) { 1821 while ( inL ) {
1817 1822
1818 qApp->processEvents(); 1823 qApp->processEvents();
1819 if ( ! bar.isVisible() ) 1824 if ( ! bar.isVisible() )
1820 return false; 1825 return false;
1821 if ( incCounter % modulo == 0 ) 1826 if ( incCounter % modulo == 0 )
1822 bar.setProgress( incCounter ); 1827 bar.setProgress( incCounter );
1823 ++incCounter; 1828 ++incCounter;
1824 uid = inL->uid(); 1829 uid = inL->uid();
1825 bool skipIncidence = false; 1830 bool skipIncidence = false;
1826 if ( uid.left(15) == QString("last-syncEvent-") ) 1831 if ( uid.left(15) == QString("last-syncEvent-") )
1827 skipIncidence = true; 1832 skipIncidence = true;
1828 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1833 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1829 skipIncidence = true; 1834 skipIncidence = true;
1830 if ( !skipIncidence ) { 1835 if ( !skipIncidence ) {
1831 inR = remote->incidenceForUid( uid , true, true ); 1836 inR = remote->incidenceForUid( uid , true, true );
1832 if ( ! inR ) { 1837 if ( ! inR ) {
1833 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1838 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1834 // no conflict ********** add or delete local 1839 // no conflict ********** add or delete local
1835 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1840 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1836 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1841 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1837 checkExternSyncEvent(eventLSyncSharp, inL); 1842 checkExternSyncEvent(eventLSyncSharp, inL);
1838 local->deleteIncidence( inL ); 1843 local->deleteIncidence( inL );
1839 ++deletedEventL; 1844 ++deletedEventL;
1840 } else { 1845 } else {
1841 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1846 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1842 inL->removeID(mCurrentSyncDevice ); 1847 inL->removeID(mCurrentSyncDevice );
1843 ++addedEventR; 1848 ++addedEventR;
1844 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1849 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1845 inL->setLastModified( modifiedCalendar ); 1850 inL->setLastModified( modifiedCalendar );
1846 inR = inL->clone(); 1851 inR = inL->clone();
1847 inR->setIDStr( ":" ); 1852 inR->setIDStr( ":" );
1848 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1853 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1849 inR->setCalID( 0 );// add to default cal 1854 inR->setCalID_block( 0 );// add to default cal
1850 remote->addIncidence( inR ); 1855 remote->addIncidence( inR );
1851 } 1856 }
1852 } 1857 }
1853 } else { 1858 } else {
1854 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1859 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1855 checkExternSyncEvent(eventLSyncSharp, inL); 1860 checkExternSyncEvent(eventLSyncSharp, inL);
1856 local->deleteIncidence( inL ); 1861 local->deleteIncidence( inL );
1857 ++deletedEventL; 1862 ++deletedEventL;
1858 } else { 1863 } else {
1859 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1864 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1860 ++addedEventR; 1865 ++addedEventR;
1861 inL->setLastModified( modifiedCalendar ); 1866 inL->setLastModified( modifiedCalendar );
1862 inR = inL->clone(); 1867 inR = inL->clone();
1863 inR->setIDStr( ":" ); 1868 inR->setIDStr( ":" );
1864 inR->setCalID( 0 );// add to default cal 1869 inR->setCalID_block( 0 );// add to default cal
1865 remote->addIncidence( inR ); 1870 remote->addIncidence( inR );
1866 } 1871 }
1867 } 1872 }
1868 } 1873 }
1869 } else { 1874 } else {
1870 ++filteredOUT; 1875 ++filteredOUT;
1871 } 1876 }
1872 } 1877 }
1873 } 1878 }
1874 inL = el.next(); 1879 inL = el.next();
1875 } 1880 }
1876 int delFut = 0; 1881 int delFut = 0;
1877 int remRem = 0; 1882 int remRem = 0;
1878 if ( mSyncManager->mWriteBackInFuture ) { 1883 if ( mSyncManager->mWriteBackInFuture ) {
1879 er = remote->rawIncidences(); 1884 er = remote->rawIncidences();
1880 remRem = er.count(); 1885 remRem = er.count();
1881 inR = er.first(); 1886 inR = er.first();
1882 QDateTime dt; 1887 QDateTime dt;
1883 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1888 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1884 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1889 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1885 while ( inR ) { 1890 while ( inR ) {
1886 if ( inR->typeID() == todoID ) { 1891 if ( inR->typeID() == todoID ) {
1887 Todo * t = (Todo*)inR; 1892 Todo * t = (Todo*)inR;
1888 if ( t->hasDueDate() ) 1893 if ( t->hasDueDate() )
1889 dt = t->dtDue(); 1894 dt = t->dtDue();
1890 else 1895 else
1891 dt = cur.addSecs( 62 ); 1896 dt = cur.addSecs( 62 );
1892 } 1897 }
1893 else if (inR->typeID() == eventID ) { 1898 else if (inR->typeID() == eventID ) {
1894 bool ok; 1899 bool ok;
1895 dt = inR->getNextOccurence( cur, &ok ); 1900 dt = inR->getNextOccurence( cur, &ok );
1896 if ( !ok ) 1901 if ( !ok )
1897 dt = cur.addSecs( -62 ); 1902 dt = cur.addSecs( -62 );
1898 } 1903 }
1899 else 1904 else
1900 dt = inR->dtStart(); 1905 dt = inR->dtStart();
1901 if ( dt < cur || dt > end ) { 1906 if ( dt < cur || dt > end ) {
1902 remote->deleteIncidence( inR ); 1907 remote->deleteIncidence( inR );
1903 ++delFut; 1908 ++delFut;
1904 } 1909 }
1905 inR = er.next(); 1910 inR = er.next();
1906 } 1911 }
1907 } 1912 }
1908 bar.hide(); 1913 bar.hide();
1909 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1914 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1910 if ( mMultiResourceSync ) { 1915 if ( mMultiResourceSync ) {
1911 remote->removeSyncInfo( "" ); //all 1916 remote->removeSyncInfo( "" ); //all
1912 qDebug("KO: Remoing all sync info on remote "); 1917 qDebug("KO: Remoing all sync info on remote ");
1913 } else { 1918 } else {
1914 eventLSync->setReadOnly( false ); 1919 eventLSync->setReadOnly( false );
1915 eventLSync->setDtStart( mLastCalendarSync ); 1920 eventLSync->setDtStart( mLastCalendarSync );
1916 eventRSync->setDtStart( mLastCalendarSync ); 1921 eventRSync->setDtStart( mLastCalendarSync );
1917 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1922 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1918 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1923 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1919 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1924 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1920 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1925 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1921 eventLSync->setReadOnly( true ); 1926 eventLSync->setReadOnly( true );
1922 } 1927 }
1923 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1928 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1924 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop() && !mMultiResourceSync ) // kde is abnormal... 1929 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop() && !mMultiResourceSync ) // kde is abnormal...
1925 remote->addEvent( eventRSync ); 1930 remote->addEvent( eventRSync );
1926 else 1931 else
1927 delete eventRSync; 1932 delete eventRSync;
1928 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1933 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1929 QString mes; 1934 QString mes;
1930 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 ); 1935 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 );
1931 QString delmess; 1936 QString delmess;
1932 if ( delFut ) { 1937 if ( delFut ) {
1933 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); 1938 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);
1934 mes += delmess; 1939 mes += delmess;
1935 } 1940 }
1936 mes = i18n("Local calendar changed!\n") +mes; 1941 mes = i18n("Local calendar changed!\n") +mes;
1937 mCalendar->checkAlarmForIncidence( 0, true ); 1942 mCalendar->checkAlarmForIncidence( 0, true );
1938 qDebug( mes ); 1943 qDebug( mes );
1939 if ( mSyncManager->mShowSyncSummary ) { 1944 if ( mSyncManager->mShowSyncSummary ) {
1940 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1945 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1941 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1946 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1942 qDebug("KO: WB cancelled "); 1947 qDebug("KO: WB cancelled ");
1943 mSyncManager->mWriteBackFile = false; 1948 mSyncManager->mWriteBackFile = false;
1944 return syncOK; 1949 return syncOK;
1945 } 1950 }
1946 } 1951 }
1947 return syncOK; 1952 return syncOK;
1948} 1953}
1949 1954
1950void CalendarView::setSyncDevice( QString s ) 1955void CalendarView::setSyncDevice( QString s )
1951{ 1956{
1952 mCurrentSyncDevice= s; 1957 mCurrentSyncDevice= s;
1953} 1958}
1954void CalendarView::setSyncName( QString s ) 1959void CalendarView::setSyncName( QString s )
1955{ 1960{
1956 mCurrentSyncName= s; 1961 mCurrentSyncName= s;
1957} 1962}
1958bool CalendarView::syncCalendar(QString filename, int mode) 1963bool CalendarView::syncCalendar(QString filename, int mode)
1959{ 1964{
1960 //qDebug("syncCalendar %s ", filename.latin1()); 1965 //qDebug("syncCalendar %s ", filename.latin1());
@@ -2356,342 +2361,348 @@ bool CalendarView::restoreCalendarSettings()
2356} 2361}
2357void CalendarView::addCalendarId( int id ) 2362void CalendarView::addCalendarId( int id )
2358{ 2363{
2359 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2364 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2360 if ( cal ) 2365 if ( cal )
2361 addCalendar( cal ); 2366 addCalendar( cal );
2362} 2367}
2363bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2368bool CalendarView::addCalendar( KopiCalendarFile * cal )
2364{ 2369{
2365 cal->mErrorOnLoad = false; 2370 cal->mErrorOnLoad = false;
2366 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2371 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2367 cal->mLoadDt = QDateTime::currentDateTime(); 2372 cal->mLoadDt = QDateTime::currentDateTime();
2368 return true; 2373 return true;
2369 } 2374 }
2370 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2375 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2371 cal->mErrorOnLoad = true; 2376 cal->mErrorOnLoad = true;
2372 return false; 2377 return false;
2373} 2378}
2374bool CalendarView::openCalendar(QString filename, bool merge) 2379bool CalendarView::openCalendar(QString filename, bool merge)
2375{ 2380{
2376 2381
2377 if (filename.isEmpty()) { 2382 if (filename.isEmpty()) {
2378 return false; 2383 return false;
2379 } 2384 }
2380 2385
2381 if (!QFile::exists(filename)) { 2386 if (!QFile::exists(filename)) {
2382 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2387 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2383 return false; 2388 return false;
2384 } 2389 }
2385 2390
2386 globalFlagBlockAgenda = 1; 2391 globalFlagBlockAgenda = 1;
2387 clearAllViews(); 2392 clearAllViews();
2388 if (!merge) { 2393 if (!merge) {
2389 mViewManager->setDocumentId( filename ); 2394 mViewManager->setDocumentId( filename );
2390 mCalendar->close(); 2395 mCalendar->close();
2391 } 2396 }
2392 mStorage->setFileName( filename ); 2397 mStorage->setFileName( filename );
2393 2398
2394 if ( mStorage->load() ) { 2399 if ( mStorage->load() ) {
2395 if ( merge ) ;//setModified( true ); 2400 if ( merge ) ;//setModified( true );
2396 else { 2401 else {
2397 //setModified( true ); 2402 //setModified( true );
2398 mViewManager->setDocumentId( filename ); 2403 mViewManager->setDocumentId( filename );
2399 mDialogManager->setDocumentId( filename ); 2404 mDialogManager->setDocumentId( filename );
2400 mTodoList->setDocumentId( filename ); 2405 mTodoList->setDocumentId( filename );
2401 } 2406 }
2402 globalFlagBlockAgenda = 2; 2407 globalFlagBlockAgenda = 2;
2403 // if ( getLastSyncEvent() ) 2408 // if ( getLastSyncEvent() )
2404 // getLastSyncEvent()->setReadOnly( true ); 2409 // getLastSyncEvent()->setReadOnly( true );
2405 mCalendar->reInitAlarmSettings(); 2410 mCalendar->reInitAlarmSettings();
2406 setSyncEventsReadOnly(); 2411 setSyncEventsReadOnly();
2407 //updateUnmanagedViews(); 2412 //updateUnmanagedViews();
2408 //updateView(); 2413 //updateView();
2409 if ( filename != MainWindow::defaultFileName() ) { 2414 if ( filename != MainWindow::defaultFileName() ) {
2410 saveCalendar( MainWindow::defaultFileName() ); 2415 saveCalendar( MainWindow::defaultFileName() );
2411 } else { 2416 } else {
2412 QFileInfo finf ( MainWindow::defaultFileName()); 2417 QFileInfo finf ( MainWindow::defaultFileName());
2413 if ( finf.exists() ) { 2418 if ( finf.exists() ) {
2414 setLoadedFileVersion( finf.lastModified () ); 2419 setLoadedFileVersion( finf.lastModified () );
2415 } 2420 }
2416 } 2421 }
2417 return true; 2422 return true;
2418 } else { 2423 } else {
2419 // while failing to load, the calendar object could 2424 // while failing to load, the calendar object could
2420 // have become partially populated. Clear it out. 2425 // have become partially populated. Clear it out.
2421 if ( !merge ) { 2426 if ( !merge ) {
2422 mCalendar->close(); 2427 mCalendar->close();
2423 mViewManager->setDocumentId( filename ); 2428 mViewManager->setDocumentId( filename );
2424 mDialogManager->setDocumentId( filename ); 2429 mDialogManager->setDocumentId( filename );
2425 mTodoList->setDocumentId( filename ); 2430 mTodoList->setDocumentId( filename );
2426 } 2431 }
2427 2432
2428 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2433 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2429 2434
2430 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2435 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2431 globalFlagBlockAgenda = 2; 2436 globalFlagBlockAgenda = 2;
2432 mCalendar->reInitAlarmSettings(); 2437 mCalendar->reInitAlarmSettings();
2433 setSyncEventsReadOnly(); 2438 setSyncEventsReadOnly();
2434 updateUnmanagedViews(); 2439 updateUnmanagedViews();
2435 updateView(); 2440 updateView();
2436 } 2441 }
2437 return false; 2442 return false;
2438} 2443}
2439void CalendarView::mergeFile( QString fn ) 2444void CalendarView::mergeFile( QString fn )
2440{ 2445{
2441 clearAllViews(); 2446 clearAllViews();
2442 mCalendar->mergeCalendarFile( fn ); 2447 mCalendar->mergeCalendarFile( fn );
2443 mCalendar->reInitAlarmSettings(); 2448 mCalendar->reInitAlarmSettings();
2444 setSyncEventsReadOnly(); 2449 setSyncEventsReadOnly();
2445 updateUnmanagedViews(); 2450 updateUnmanagedViews();
2446 updateView(); 2451 updateView();
2447} 2452}
2448void CalendarView::mergeFileResource( QString fn ,QString resource ) 2453void CalendarView::mergeFileResource( QString fn ,QString resource )
2449{ 2454{
2450 2455
2451 if ( resource == "ALL" ) { 2456 if ( resource == "ALL" ) {
2457 mCalendar->setAllCalendarEnabled( true );
2452 mergeFile( fn ); 2458 mergeFile( fn );
2459 restoreCalendarSettings();
2453 return; 2460 return;
2454 } 2461 }
2455 2462
2456 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 2463 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
2457 if ( !exclusiveResource ) { 2464 if ( !exclusiveResource ) {
2458 qDebug("KO: CalendarView::mergeFileResource: resource not found %s", resource.latin1() ); 2465 qDebug("KO: CalendarView::mergeFileResource: resource not found %s", resource.latin1() );
2459 return; 2466 return;
2460 } 2467 }
2461 clearAllViews(); 2468 clearAllViews();
2462 mCalendar->setCalendarRemove( exclusiveResource ); 2469 mCalendar->setCalendarRemove( exclusiveResource );
2463 int def = mCalendar->defaultCalendar(); 2470 int def = mCalendar->defaultCalendar();
2464 mCalendar->setDefaultCalendar(exclusiveResource); 2471 mCalendar->setDefaultCalendar(exclusiveResource);
2465 if ( !mCalendar->addCalendarFile( fn, exclusiveResource )) { 2472 if ( !mCalendar->addCalendarFile( fn, exclusiveResource )) {
2466 qDebug("KO: CalendarView::mergeFileResource: error adding file %s", fn.latin1() ); 2473 qDebug("KO: CalendarView::mergeFileResource: error adding file %s", fn.latin1() );
2467 } 2474 }
2468 mCalendar->setDefaultCalendar( def ); 2475 mCalendar->setDefaultCalendar( def );
2469 mCalendar->reInitAlarmSettings(); 2476 mCalendar->reInitAlarmSettings();
2470 setSyncEventsReadOnly(); 2477 setSyncEventsReadOnly();
2471 updateUnmanagedViews(); 2478 updateUnmanagedViews();
2472 updateView(); 2479 updateView();
2473} 2480}
2474void CalendarView::showOpenError() 2481void CalendarView::showOpenError()
2475{ 2482{
2476 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2483 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2477} 2484}
2478void CalendarView::setLoadedFileVersion(QDateTime dt) 2485void CalendarView::setLoadedFileVersion(QDateTime dt)
2479{ 2486{
2480 loadedFileVersion = dt; 2487 loadedFileVersion = dt;
2481} 2488}
2482bool CalendarView::checkFileChanged(QString fn) 2489bool CalendarView::checkFileChanged(QString fn)
2483{ 2490{
2484 QFileInfo finf ( fn ); 2491 QFileInfo finf ( fn );
2485 if ( !finf.exists() ) 2492 if ( !finf.exists() )
2486 return true; 2493 return true;
2487 QDateTime dt = finf.lastModified (); 2494 QDateTime dt = finf.lastModified ();
2488 if ( dt <= loadedFileVersion ) 2495 if ( dt <= loadedFileVersion )
2489 return false; 2496 return false;
2490 return true; 2497 return true;
2491 2498
2492} 2499}
2493void CalendarView::watchSavedFile() 2500void CalendarView::watchSavedFile()
2494{ 2501{
2495 QFileInfo finf ( MainWindow::defaultFileName()); 2502 QFileInfo finf ( MainWindow::defaultFileName());
2496 if ( !finf.exists() ) 2503 if ( !finf.exists() )
2497 return; 2504 return;
2498 QDateTime dt = finf.lastModified (); 2505 QDateTime dt = finf.lastModified ();
2499 if ( dt < loadedFileVersion ) { 2506 if ( dt < loadedFileVersion ) {
2500 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2507 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2501 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2508 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2502 return; 2509 return;
2503 } 2510 }
2504 loadedFileVersion = dt; 2511 loadedFileVersion = dt;
2505} 2512}
2506bool CalendarView::checkAllFileVersions() 2513bool CalendarView::checkAllFileVersions()
2507{ 2514{
2508 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2515 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2509 KopiCalendarFile * cal = calendars.first(); 2516 KopiCalendarFile * cal = calendars.first();
2510 mCalendar->setDefaultCalendar( 1 ); 2517 mCalendar->setDefaultCalendar( 1 );
2511 mCalendar->setDefaultCalendarEnabledOnly(); 2518 mCalendar->setDefaultCalendarEnabledOnly();
2512 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2519 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2513 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2520 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2514 restoreCalendarSettings(); 2521 restoreCalendarSettings();
2515 return false; 2522 return false;
2516 } 2523 }
2517 } 2524 }
2518 cal = calendars.next(); 2525 cal = calendars.next();
2519 QDateTime storeTemp = loadedFileVersion; 2526 QDateTime storeTemp = loadedFileVersion;
2520 while ( cal ) { 2527 while ( cal ) {
2521 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2528 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2522 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2529 mCalendar->setDefaultCalendar( cal->mCalNumber );
2523 mCalendar->setDefaultCalendarEnabledOnly(); 2530 mCalendar->setDefaultCalendarEnabledOnly();
2524 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2531 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2525 if ( !checkFileVersion(cal->mFileName )) { 2532 if ( !checkFileVersion(cal->mFileName )) {
2526 loadedFileVersion = storeTemp; 2533 loadedFileVersion = storeTemp;
2527 restoreCalendarSettings(); 2534 restoreCalendarSettings();
2528 return false; 2535 return false;
2529 } 2536 }
2530 } 2537 }
2531 cal = calendars.next(); 2538 cal = calendars.next();
2532 } 2539 }
2533 loadedFileVersion = storeTemp; 2540 loadedFileVersion = storeTemp;
2534 return true; 2541 return true;
2535} 2542}
2536bool CalendarView::checkFileVersion(QString fn) 2543bool CalendarView::checkFileVersion(QString fn)
2537{ 2544{
2538 QFileInfo finf ( fn ); 2545 QFileInfo finf ( fn );
2539 if ( !finf.exists() ) 2546 if ( !finf.exists() )
2540 return true; 2547 return true;
2541 QDateTime dt = finf.lastModified (); 2548 QDateTime dt = finf.lastModified ();
2542 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2549 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2543 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2550 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2544 if ( dt <= loadedFileVersion ) 2551 if ( dt <= loadedFileVersion )
2545 return true; 2552 return true;
2546 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)) , 2553 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)) ,
2547 i18n("KO/Pi Warning"),i18n("Overwrite"), 2554 i18n("KO/Pi Warning"),i18n("Overwrite"),
2548 i18n("Sync+save")); 2555 i18n("Sync+save"));
2549 2556
2550 if ( km == KMessageBox::Cancel ) 2557 if ( km == KMessageBox::Cancel )
2551 return false; 2558 return false;
2552 if ( km == KMessageBox::Yes ) 2559 if ( km == KMessageBox::Yes )
2553 return true; 2560 return true;
2554 2561
2555 setSyncDevice("deleteaftersync" ); 2562 setSyncDevice("deleteaftersync" );
2556 mSyncManager->mAskForPreferences = true; 2563 mSyncManager->mAskForPreferences = true;
2557 mSyncManager->mSyncAlgoPrefs = 3; 2564 mSyncManager->mSyncAlgoPrefs = 3;
2558 mSyncManager->mWriteBackFile = false; 2565 mSyncManager->mWriteBackFile = false;
2559 mSyncManager->mWriteBackExistingOnly = false; 2566 mSyncManager->mWriteBackExistingOnly = false;
2560 mSyncManager->mShowSyncSummary = false; 2567 mSyncManager->mShowSyncSummary = false;
2561 mMultiResourceSync = false; 2568 mMultiResourceSync = false;
2562 syncCalendar( fn, 3 ); 2569 syncCalendar( fn, 3 );
2563 Event * e = getLastSyncEvent(); 2570 Event * e = getLastSyncEvent();
2564 if ( e ) 2571 if ( e )
2565 mCalendar->deleteEvent( e ); 2572 mCalendar->deleteEvent( e );
2566 return true; 2573 return true;
2567} 2574}
2568bool CalendarView::saveCalendars() 2575bool CalendarView::saveCalendars()
2569{ 2576{
2570 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2577 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2571 KopiCalendarFile * cal = calendars.first(); 2578 KopiCalendarFile * cal = calendars.first();
2572 mCalendar->setDefaultCalendar( 1 ); 2579 mCalendar->setDefaultCalendar( 1 );
2573 mCalendar->setDefaultCalendarEnabledOnly(); 2580 mCalendar->setDefaultCalendarEnabledOnly();
2574 QString saveError; 2581 QString saveError;
2575 if ( !saveCalendar( MainWindow::defaultFileName() ) ) 2582 if ( !saveCalendar( MainWindow::defaultFileName() ) )
2576 saveError = cal->mName +"\n"; 2583 saveError = cal->mName +"\n";
2577 cal = calendars.next(); 2584 cal = calendars.next();
2578 while ( cal ) { 2585 while ( cal ) {
2579 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2586 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2580 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2587 mCalendar->setDefaultCalendar( cal->mCalNumber );
2581 mCalendar->setDefaultCalendarEnabledOnly(); 2588 mCalendar->setDefaultCalendarEnabledOnly();
2582 if ( saveCalendar( cal->mFileName ) ) 2589 if ( saveCalendar( cal->mFileName ) )
2583 cal->mLoadDt = QDateTime::currentDateTime(); 2590 cal->mLoadDt = QDateTime::currentDateTime();
2584 else 2591 else
2585 saveError += cal->mName + "\n"; 2592 saveError += cal->mName + "\n";
2586 } 2593 }
2587 cal = calendars.next(); 2594 cal = calendars.next();
2588 } 2595 }
2589 restoreCalendarSettings(); 2596 restoreCalendarSettings();
2590 //saveError = "test error"; 2597 //saveError = "test error";
2591 if ( !saveError.isEmpty() ) { 2598 if ( !saveError.isEmpty() ) {
2592 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError; 2599 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError;
2593 KMessageBox::error(this, saveError, i18n("Error saving data")); 2600 KMessageBox::error(this, saveError, i18n("Error saving data"));
2594 return false; 2601 return false;
2595 } 2602 }
2596 return true; 2603 return true;
2597} 2604}
2598bool CalendarView::saveCalendarResource(QString filename, QString resource) 2605bool CalendarView::saveCalendarResource(QString filename, QString resource)
2599{ 2606{
2600 if ( resource == "ALL" ) 2607 if ( resource == "ALL" ) {
2601 return saveCalendar( filename ); 2608 mCalendar->setAllCalendarEnabled( true );
2609 bool retval = saveCalendar( filename );
2610 restoreCalendarSettings();
2611 return retval;
2612 }
2602 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 2613 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
2603 if ( !exclusiveResource ) { 2614 if ( !exclusiveResource ) {
2604 qDebug("KO: CalendarView::saveCalendarResource: resource not found %s", resource.latin1() ); 2615 qDebug("KO: CalendarView::saveCalendarResource: resource not found %s", resource.latin1() );
2605 return false; 2616 return false;
2606 } 2617 }
2607 mCalendar->setDefaultCalendar( exclusiveResource ); 2618 mCalendar->setDefaultCalendar( exclusiveResource );
2608 mCalendar->setDefaultCalendarEnabledOnly(); 2619 mCalendar->setDefaultCalendarEnabledOnly();
2609 mCalendar->setSyncEventsEnabled(); 2620 mCalendar->setSyncEventsEnabled();
2610 bool res = saveCalendar( filename ); 2621 bool res = saveCalendar( filename );
2611 restoreCalendarSettings(); 2622 restoreCalendarSettings();
2612 return res; 2623 return res;
2613 2624
2614} 2625}
2615bool CalendarView::saveCalendar( QString filename ) 2626bool CalendarView::saveCalendar( QString filename )
2616{ 2627{
2617 2628
2618 // Store back all unsaved data into calendar object 2629 // Store back all unsaved data into calendar object
2619 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2630 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2620 if ( mViewManager->currentView() ) 2631 if ( mViewManager->currentView() )
2621 mViewManager->currentView()->flushView(); 2632 mViewManager->currentView()->flushView();
2622 2633
2623 2634
2624 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2635 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2625 mStorage->setSaveFormat( new ICalFormat() ); 2636 mStorage->setSaveFormat( new ICalFormat() );
2626 mStorage->setFileName( filename ); 2637 mStorage->setFileName( filename );
2627 bool success; 2638 bool success;
2628 success = mStorage->save(); 2639 success = mStorage->save();
2629 if ( !success ) { 2640 if ( !success ) {
2630 return false; 2641 return false;
2631 } 2642 }
2632 if ( filename == MainWindow::defaultFileName() ) { 2643 if ( filename == MainWindow::defaultFileName() ) {
2633 setLoadedFileVersion( lfv ); 2644 setLoadedFileVersion( lfv );
2634 watchSavedFile(); 2645 watchSavedFile();
2635 } 2646 }
2636 return true; 2647 return true;
2637} 2648}
2638 2649
2639void CalendarView::closeCalendar() 2650void CalendarView::closeCalendar()
2640{ 2651{
2641 2652
2642 // child windows no longer valid 2653 // child windows no longer valid
2643 clearAllViews(); 2654 clearAllViews();
2644 emit closingDown(); 2655 emit closingDown();
2645 2656
2646 mCalendar->close(); 2657 mCalendar->close();
2647 setModified(false); 2658 setModified(false);
2648 updateView(); 2659 updateView();
2649} 2660}
2650 2661
2651void CalendarView::archiveCalendar() 2662void CalendarView::archiveCalendar()
2652{ 2663{
2653 mDialogManager->showArchiveDialog(); 2664 mDialogManager->showArchiveDialog();
2654} 2665}
2655 2666
2656 2667
2657void CalendarView::readSettings() 2668void CalendarView::readSettings()
2658{ 2669{
2659 2670
2660 2671
2661 // mViewManager->showAgendaView(); 2672 // mViewManager->showAgendaView();
2662 QString str; 2673 QString str;
2663 //qDebug("CalendarView::readSettings() "); 2674 //qDebug("CalendarView::readSettings() ");
2664 // read settings from the KConfig, supplying reasonable 2675 // read settings from the KConfig, supplying reasonable
2665 // defaults where none are to be found 2676 // defaults where none are to be found
2666 KConfig *config = KOGlobals::config(); 2677 KConfig *config = KOGlobals::config();
2667#ifndef KORG_NOSPLITTER 2678#ifndef KORG_NOSPLITTER
2668 config->setGroup("KOrganizer Geometry"); 2679 config->setGroup("KOrganizer Geometry");
2669 2680
2670 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2681 QValueList<int> sizes = config->readIntListEntry("Separator1");
2671 if (sizes.count() != 2) { 2682 if (sizes.count() != 2) {
2672 sizes << mDateNavigator->minimumSizeHint().width(); 2683 sizes << mDateNavigator->minimumSizeHint().width();
2673 sizes << 300; 2684 sizes << 300;
2674 } 2685 }
2675 mPanner->setSizes(sizes); 2686 mPanner->setSizes(sizes);
2676 2687
2677 sizes = config->readIntListEntry("Separator2"); 2688 sizes = config->readIntListEntry("Separator2");
2678 if ( ( mResourceView && sizes.count() == 4 ) || 2689 if ( ( mResourceView && sizes.count() == 4 ) ||
2679 ( !mResourceView && sizes.count() == 3 ) ) { 2690 ( !mResourceView && sizes.count() == 3 ) ) {
2680 mLeftSplitter->setSizes(sizes); 2691 mLeftSplitter->setSizes(sizes);
2681 } 2692 }
2682#endif 2693#endif
2683 globalFlagBlockAgenda = 1; 2694 globalFlagBlockAgenda = 1;
2684 mViewManager->showAgendaView(); 2695 mViewManager->showAgendaView();
2685 //mViewManager->readSettings( config ); 2696 //mViewManager->readSettings( config );
2686 mTodoList->restoreLayout(config,QString("Todo Layout")); 2697 mTodoList->restoreLayout(config,QString("Todo Layout"));
2687 readFilterSettings(config); 2698 readFilterSettings(config);
2688 2699
2689#ifdef DESKTOP_VERSION 2700#ifdef DESKTOP_VERSION
2690 config->setGroup("WidgetLayout"); 2701 config->setGroup("WidgetLayout");
2691 QStringList list; 2702 QStringList list;
2692 list = config->readListEntry("MainLayout"); 2703 list = config->readListEntry("MainLayout");
2693 int x,y,w,h; 2704 int x,y,w,h;
2694 if ( ! list.isEmpty() ) { 2705 if ( ! list.isEmpty() ) {
2695 x = list[0].toInt(); 2706 x = list[0].toInt();
2696 y = list[1].toInt(); 2707 y = list[1].toInt();
2697 w = list[2].toInt(); 2708 w = list[2].toInt();