summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-09-14 02:04:12 (UTC)
committer zautrix <zautrix>2004-09-14 02:04:12 (UTC)
commit5060b0737c0c279859cac3bcfb73d2ac21c6a79e (patch) (unidiff)
tree8de6965559cb5bd6eba1eea5c635315d0945cfd1
parent739fec31c8cea89dd40ff1ce7dd7b84b05e4e973 (diff)
downloadkdepimpi-5060b0737c0c279859cac3bcfb73d2ac21c6a79e.zip
kdepimpi-5060b0737c0c279859cac3bcfb73d2ac21c6a79e.tar.gz
kdepimpi-5060b0737c0c279859cac3bcfb73d2ac21c6a79e.tar.bz2
debug off
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp6
-rw-r--r--libkcal/sharpformat.cpp4
2 files changed, 5 insertions, 5 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index ce41fbd..5a6d615 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,1770 +1,1770 @@
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) 1997, 1998, 1999
8 Preston Brown (preston.brown@yale.edu) 8 Preston Brown (preston.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 66
67#include <libkcal/vcaldrag.h> 67#include <libkcal/vcaldrag.h>
68#include <libkcal/icaldrag.h> 68#include <libkcal/icaldrag.h>
69#include <libkcal/icalformat.h> 69#include <libkcal/icalformat.h>
70#include <libkcal/vcalformat.h> 70#include <libkcal/vcalformat.h>
71#include <libkcal/scheduler.h> 71#include <libkcal/scheduler.h>
72#include <libkcal/calendarlocal.h> 72#include <libkcal/calendarlocal.h>
73#include <libkcal/journal.h> 73#include <libkcal/journal.h>
74#include <libkcal/calfilter.h> 74#include <libkcal/calfilter.h>
75#include <libkcal/attendee.h> 75#include <libkcal/attendee.h>
76#include <libkcal/dndfactory.h> 76#include <libkcal/dndfactory.h>
77#include <libkcal/freebusy.h> 77#include <libkcal/freebusy.h>
78#include <libkcal/filestorage.h> 78#include <libkcal/filestorage.h>
79#include <libkcal/calendarresources.h> 79#include <libkcal/calendarresources.h>
80#include <libkcal/qtopiaformat.h> 80#include <libkcal/qtopiaformat.h>
81#include "../kalarmd/alarmdialog.h" 81#include "../kalarmd/alarmdialog.h"
82 82
83#ifndef DESKTOP_VERSION 83#ifndef DESKTOP_VERSION
84#include <libkcal/sharpformat.h> 84#include <libkcal/sharpformat.h>
85#endif 85#endif
86#include <libkcal/phoneformat.h> 86#include <libkcal/phoneformat.h>
87#ifndef KORG_NOMAIL 87#ifndef KORG_NOMAIL
88#include "komailclient.h" 88#include "komailclient.h"
89#endif 89#endif
90#ifndef KORG_NOPRINTER 90#ifndef KORG_NOPRINTER
91#include "calprinter.h" 91#include "calprinter.h"
92#endif 92#endif
93#ifndef KORG_NOPLUGINS 93#ifndef KORG_NOPLUGINS
94#include "kocore.h" 94#include "kocore.h"
95#endif 95#endif
96#include "koeventeditor.h" 96#include "koeventeditor.h"
97#include "kotodoeditor.h" 97#include "kotodoeditor.h"
98#include "koprefs.h" 98#include "koprefs.h"
99#include "koeventviewerdialog.h" 99#include "koeventviewerdialog.h"
100#include "publishdialog.h" 100#include "publishdialog.h"
101#include "kofilterview.h" 101#include "kofilterview.h"
102#include "koglobals.h" 102#include "koglobals.h"
103#include "koviewmanager.h" 103#include "koviewmanager.h"
104#include "koagendaview.h" 104#include "koagendaview.h"
105#include "kodialogmanager.h" 105#include "kodialogmanager.h"
106#include "outgoingdialog.h" 106#include "outgoingdialog.h"
107#include "incomingdialog.h" 107#include "incomingdialog.h"
108#include "statusdialog.h" 108#include "statusdialog.h"
109#include "kdatenavigator.h" 109#include "kdatenavigator.h"
110#include "kotodoview.h" 110#include "kotodoview.h"
111#include "datenavigator.h" 111#include "datenavigator.h"
112#include "resourceview.h" 112#include "resourceview.h"
113#include "navigatorbar.h" 113#include "navigatorbar.h"
114#include "searchdialog.h" 114#include "searchdialog.h"
115#include "mainwindow.h" 115#include "mainwindow.h"
116 116
117#include "calendarview.h" 117#include "calendarview.h"
118#ifndef DESKTOP_VERSION 118#ifndef DESKTOP_VERSION
119#include <qtopia/alarmserver.h> 119#include <qtopia/alarmserver.h>
120#endif 120#endif
121#ifndef _WIN32_ 121#ifndef _WIN32_
122#include <stdlib.h> 122#include <stdlib.h>
123#include <stdio.h> 123#include <stdio.h>
124#include <unistd.h> 124#include <unistd.h>
125#else 125#else
126#include <qprocess.h> 126#include <qprocess.h>
127#endif 127#endif
128using namespace KOrg; 128using namespace KOrg;
129using namespace KCal; 129using namespace KCal;
130extern int globalFlagBlockAgenda; 130extern int globalFlagBlockAgenda;
131extern int globalFlagBlockStartup; 131extern int globalFlagBlockStartup;
132 132
133 133
134 134
135class KOBeamPrefs : public QDialog 135class KOBeamPrefs : public QDialog
136{ 136{
137 public: 137 public:
138 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 138 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
139 QDialog( parent, name, true ) 139 QDialog( parent, name, true )
140 { 140 {
141 setCaption( i18n("Beam Options") ); 141 setCaption( i18n("Beam Options") );
142 QVBoxLayout* lay = new QVBoxLayout( this ); 142 QVBoxLayout* lay = new QVBoxLayout( this );
143 lay->setSpacing( 3 ); 143 lay->setSpacing( 3 );
144 lay->setMargin( 3 ); 144 lay->setMargin( 3 );
145 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 145 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
146 lay->addWidget( format ); 146 lay->addWidget( format );
147 format->setExclusive ( true ) ; 147 format->setExclusive ( true ) ;
148 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 148 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
149 lay->addWidget( time ); time->setExclusive ( true ) ; 149 lay->addWidget( time ); time->setExclusive ( true ) ;
150 vcal = new QRadioButton(" vCalendar ", format ); 150 vcal = new QRadioButton(" vCalendar ", format );
151 ical = new QRadioButton(" iCalendar ", format ); 151 ical = new QRadioButton(" iCalendar ", format );
152 vcal->setChecked( true ); 152 vcal->setChecked( true );
153 tz = new QRadioButton(i18n(" With timezone "), time ); 153 tz = new QRadioButton(i18n(" With timezone "), time );
154 local = new QRadioButton(i18n(" Local time "), time ); 154 local = new QRadioButton(i18n(" Local time "), time );
155 tz->setChecked( true ); 155 tz->setChecked( true );
156 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 156 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
157 lay->addWidget( ok ); 157 lay->addWidget( ok );
158 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 158 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
159 lay->addWidget( cancel ); 159 lay->addWidget( cancel );
160 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 160 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
161 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 161 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
162 resize( 200, 200 ); 162 resize( 200, 200 );
163 } 163 }
164 164
165 bool beamVcal() { return vcal->isChecked(); } 165 bool beamVcal() { return vcal->isChecked(); }
166 bool beamLocal() { return local->isChecked(); } 166 bool beamLocal() { return local->isChecked(); }
167private: 167private:
168 QRadioButton* vcal, *ical, *local, *tz; 168 QRadioButton* vcal, *ical, *local, *tz;
169}; 169};
170class KOCatPrefs : public QDialog 170class KOCatPrefs : public QDialog
171{ 171{
172 public: 172 public:
173 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 173 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
174 QDialog( parent, name, true ) 174 QDialog( parent, name, true )
175 { 175 {
176 setCaption( i18n("Manage new Categories") ); 176 setCaption( i18n("Manage new Categories") );
177 QVBoxLayout* lay = new QVBoxLayout( this ); 177 QVBoxLayout* lay = new QVBoxLayout( this );
178 lay->setSpacing( 3 ); 178 lay->setSpacing( 3 );
179 lay->setMargin( 3 ); 179 lay->setMargin( 3 );
180 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); 180 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this );
181 lay->addWidget( lab ); 181 lay->addWidget( lab );
182 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 182 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
183 lay->addWidget( format ); 183 lay->addWidget( format );
184 format->setExclusive ( true ) ; 184 format->setExclusive ( true ) ;
185 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 185 addCatBut = new QRadioButton(i18n("Add to category list"), format );
186 new QRadioButton(i18n("Remove from Events/Todos"), format ); 186 new QRadioButton(i18n("Remove from Events/Todos"), format );
187 addCatBut->setChecked( true ); 187 addCatBut->setChecked( true );
188 QPushButton * ok = new QPushButton( i18n("OK"), this ); 188 QPushButton * ok = new QPushButton( i18n("OK"), this );
189 lay->addWidget( ok ); 189 lay->addWidget( ok );
190 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 190 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
191 lay->addWidget( cancel ); 191 lay->addWidget( cancel );
192 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 192 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
193 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 193 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
194 resize( 200, 200 ); 194 resize( 200, 200 );
195 } 195 }
196 196
197 bool addCat() { return addCatBut->isChecked(); } 197 bool addCat() { return addCatBut->isChecked(); }
198private: 198private:
199 QRadioButton* addCatBut; 199 QRadioButton* addCatBut;
200}; 200};
201 201
202 202
203 203
204CalendarView::CalendarView( CalendarResources *calendar, 204CalendarView::CalendarView( CalendarResources *calendar,
205 QWidget *parent, const char *name ) 205 QWidget *parent, const char *name )
206 : CalendarViewBase( parent, name ), 206 : CalendarViewBase( parent, name ),
207 mCalendar( calendar ), 207 mCalendar( calendar ),
208 mResourceManager( calendar->resourceManager() ) 208 mResourceManager( calendar->resourceManager() )
209{ 209{
210 210
211 mEventEditor = 0; 211 mEventEditor = 0;
212 mTodoEditor = 0; 212 mTodoEditor = 0;
213 213
214 init(); 214 init();
215} 215}
216 216
217CalendarView::CalendarView( Calendar *calendar, 217CalendarView::CalendarView( Calendar *calendar,
218 QWidget *parent, const char *name ) 218 QWidget *parent, const char *name )
219 : CalendarViewBase( parent, name ), 219 : CalendarViewBase( parent, name ),
220 mCalendar( calendar ), 220 mCalendar( calendar ),
221 mResourceManager( 0 ) 221 mResourceManager( 0 )
222{ 222{
223 223
224 mEventEditor = 0; 224 mEventEditor = 0;
225 mTodoEditor = 0; 225 mTodoEditor = 0;
226 init();} 226 init();}
227 227
228void CalendarView::init() 228void CalendarView::init()
229{ 229{
230 beamDialog = new KOBeamPrefs(); 230 beamDialog = new KOBeamPrefs();
231 mDatePickerMode = 0; 231 mDatePickerMode = 0;
232 mCurrentSyncDevice = ""; 232 mCurrentSyncDevice = "";
233 writeLocale(); 233 writeLocale();
234 mViewManager = new KOViewManager( this ); 234 mViewManager = new KOViewManager( this );
235 mDialogManager = new KODialogManager( this ); 235 mDialogManager = new KODialogManager( this );
236 mEventViewerDialog = 0; 236 mEventViewerDialog = 0;
237 mModified = false; 237 mModified = false;
238 mReadOnly = false; 238 mReadOnly = false;
239 mSelectedIncidence = 0; 239 mSelectedIncidence = 0;
240 mCalPrinter = 0; 240 mCalPrinter = 0;
241 mFilters.setAutoDelete(true); 241 mFilters.setAutoDelete(true);
242 242
243 mCalendar->registerObserver( this ); 243 mCalendar->registerObserver( this );
244 // TODO: Make sure that view is updated, when calendar is changed. 244 // TODO: Make sure that view is updated, when calendar is changed.
245 245
246 mStorage = new FileStorage( mCalendar ); 246 mStorage = new FileStorage( mCalendar );
247 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 247 mNavigator = new DateNavigator( this, "datevav", mViewManager );
248 248
249 QBoxLayout *topLayout = (QBoxLayout*)layout(); 249 QBoxLayout *topLayout = (QBoxLayout*)layout();
250#ifndef KORG_NOSPLITTER 250#ifndef KORG_NOSPLITTER
251 // create the main layout frames. 251 // create the main layout frames.
252 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 252 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
253 topLayout->addWidget(mPanner); 253 topLayout->addWidget(mPanner);
254 254
255 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 255 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
256 "CalendarView::LeftFrame"); 256 "CalendarView::LeftFrame");
257 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 257 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
258 258
259 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, 259 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE,
260 "CalendarView::DateNavigator", QDate::currentDate() ); 260 "CalendarView::DateNavigator", QDate::currentDate() );
261 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 261 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
262 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 262 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
263 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 263 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
264 264
265#ifdef KORG_NORESOURCEVIEW 265#ifdef KORG_NORESOURCEVIEW
266 mResourceView = 0; 266 mResourceView = 0;
267#else 267#else
268 if ( mResourceManager ) { 268 if ( mResourceManager ) {
269 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 269 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
270 mResourceView->updateView(); 270 mResourceView->updateView();
271 connect( mResourceView, SIGNAL( resourcesChanged() ), 271 connect( mResourceView, SIGNAL( resourcesChanged() ),
272 SLOT( updateView() ) ); 272 SLOT( updateView() ) );
273 } else { 273 } else {
274 mResourceView = 0; 274 mResourceView = 0;
275 } 275 }
276#endif 276#endif
277 QWidget *rightBox = new QWidget( mPanner ); 277 QWidget *rightBox = new QWidget( mPanner );
278 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 278 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
279 279
280 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 280 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
281 rightLayout->addWidget( mNavigatorBar ); 281 rightLayout->addWidget( mNavigatorBar );
282 282
283 mRightFrame = new QWidgetStack( rightBox ); 283 mRightFrame = new QWidgetStack( rightBox );
284 rightLayout->addWidget( mRightFrame, 1 ); 284 rightLayout->addWidget( mRightFrame, 1 );
285 285
286 mLeftFrame = mLeftSplitter; 286 mLeftFrame = mLeftSplitter;
287#else 287#else
288 QWidget *mainBox = new QWidget( this ); 288 QWidget *mainBox = new QWidget( this );
289 QWidget *leftFrame = new QWidget( mainBox ); 289 QWidget *leftFrame = new QWidget( mainBox );
290 290
291 QBoxLayout * mainBoxLayout; 291 QBoxLayout * mainBoxLayout;
292 QBoxLayout * leftFrameLayout; 292 QBoxLayout * leftFrameLayout;
293 if ( KOPrefs::instance()->mVerticalScreen ) { 293 if ( KOPrefs::instance()->mVerticalScreen ) {
294 mainBoxLayout = new QVBoxLayout(mainBox); 294 mainBoxLayout = new QVBoxLayout(mainBox);
295 leftFrameLayout = new QHBoxLayout(leftFrame ); 295 leftFrameLayout = new QHBoxLayout(leftFrame );
296 } else { 296 } else {
297 mainBoxLayout = new QHBoxLayout(mainBox); 297 mainBoxLayout = new QHBoxLayout(mainBox);
298 leftFrameLayout = new QVBoxLayout(leftFrame ); 298 leftFrameLayout = new QVBoxLayout(leftFrame );
299 } 299 }
300 topLayout->addWidget( mainBox ); 300 topLayout->addWidget( mainBox );
301 mainBoxLayout->addWidget (leftFrame); 301 mainBoxLayout->addWidget (leftFrame);
302 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, 302 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE,
303 "CalendarView::DateNavigator", QDate::currentDate()); 303 "CalendarView::DateNavigator", QDate::currentDate());
304 // mDateNavigator->blockSignals( true ); 304 // mDateNavigator->blockSignals( true );
305 leftFrameLayout->addWidget( mDateNavigator ); 305 leftFrameLayout->addWidget( mDateNavigator );
306 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); 306 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView");
307 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist"); 307 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist");
308 308
309 if ( QApplication::desktop()->width() < 480 ) { 309 if ( QApplication::desktop()->width() < 480 ) {
310 leftFrameLayout->addWidget(mFilterView); 310 leftFrameLayout->addWidget(mFilterView);
311 leftFrameLayout->addWidget(mTodoList, 2 ); 311 leftFrameLayout->addWidget(mTodoList, 2 );
312 312
313 } else { 313 } else {
314 leftFrameLayout->addWidget(mTodoList,2 ); 314 leftFrameLayout->addWidget(mTodoList,2 );
315 leftFrameLayout->addWidget(mFilterView ); 315 leftFrameLayout->addWidget(mFilterView );
316 } 316 }
317 mFilterView->hide(); 317 mFilterView->hide();
318 QWidget *rightBox = new QWidget( mainBox ); 318 QWidget *rightBox = new QWidget( mainBox );
319 mainBoxLayout->addWidget ( rightBox, 10 ); 319 mainBoxLayout->addWidget ( rightBox, 10 );
320 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 320 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
321 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 321 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
322 mRightFrame = new QWidgetStack( rightBox ); 322 mRightFrame = new QWidgetStack( rightBox );
323 rightLayout->addWidget( mNavigatorBar ); 323 rightLayout->addWidget( mNavigatorBar );
324 rightLayout->addWidget( mRightFrame, 10 ); 324 rightLayout->addWidget( mRightFrame, 10 );
325 325
326 mLeftFrame = leftFrame; 326 mLeftFrame = leftFrame;
327 if ( KOPrefs::instance()->mVerticalScreen ) { 327 if ( KOPrefs::instance()->mVerticalScreen ) {
328 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 328 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
329 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 329 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
330 } else { 330 } else {
331 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 331 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
332 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 332 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
333 } 333 }
334 334
335 //qDebug("Calendarview Size %d %d ", width(), height()); 335 //qDebug("Calendarview Size %d %d ", width(), height());
336#endif 336#endif
337 337
338 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 338 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
339 SLOT( showDates( const KCal::DateList & ) ) ); 339 SLOT( showDates( const KCal::DateList & ) ) );
340 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 340 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
341 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 341 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
342 342
343 connect( mNavigatorBar, SIGNAL( goPrevYear() ), 343 connect( mNavigatorBar, SIGNAL( goPrevYear() ),
344 mNavigator, SLOT( selectPreviousYear() ) ); 344 mNavigator, SLOT( selectPreviousYear() ) );
345 connect( mNavigatorBar, SIGNAL( goNextYear() ), 345 connect( mNavigatorBar, SIGNAL( goNextYear() ),
346 mNavigator, SLOT( selectNextYear() ) ); 346 mNavigator, SLOT( selectNextYear() ) );
347 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), 347 connect( mNavigatorBar, SIGNAL( goPrevMonth() ),
348 mNavigator, SLOT( selectPreviousMonth() ) ); 348 mNavigator, SLOT( selectPreviousMonth() ) );
349 connect( mNavigatorBar, SIGNAL( goNextMonth() ), 349 connect( mNavigatorBar, SIGNAL( goNextMonth() ),
350 mNavigator, SLOT( selectNextMonth() ) ); 350 mNavigator, SLOT( selectNextMonth() ) );
351 351
352 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 352 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
353 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) ); 353 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) );
354 354
355 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 355 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
356 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 356 mNavigator, SLOT( selectWeek( const QDate & ) ) );
357 357
358 connect( mDateNavigator, SIGNAL( goPrevYear() ), 358 connect( mDateNavigator, SIGNAL( goPrevYear() ),
359 mNavigator, SLOT( selectPreviousYear() ) ); 359 mNavigator, SLOT( selectPreviousYear() ) );
360 connect( mDateNavigator, SIGNAL( goNextYear() ), 360 connect( mDateNavigator, SIGNAL( goNextYear() ),
361 mNavigator, SLOT( selectNextYear() ) ); 361 mNavigator, SLOT( selectNextYear() ) );
362 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 362 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
363 mNavigator, SLOT( selectPreviousMonth() ) ); 363 mNavigator, SLOT( selectPreviousMonth() ) );
364 connect( mDateNavigator, SIGNAL( goNextMonth() ), 364 connect( mDateNavigator, SIGNAL( goNextMonth() ),
365 mNavigator, SLOT( selectNextMonth() ) ); 365 mNavigator, SLOT( selectNextMonth() ) );
366 366
367 connect( mDateNavigator, SIGNAL( goPrevious() ), 367 connect( mDateNavigator, SIGNAL( goPrevious() ),
368 mNavigator, SLOT( selectPrevious() ) ); 368 mNavigator, SLOT( selectPrevious() ) );
369 connect( mDateNavigator, SIGNAL( goNext() ), 369 connect( mDateNavigator, SIGNAL( goNext() ),
370 mNavigator, SLOT( selectNext() ) ); 370 mNavigator, SLOT( selectNext() ) );
371 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 371 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
372 mNavigator, SLOT( slotMonthSelect( int ) ) ); 372 mNavigator, SLOT( slotMonthSelect( int ) ) );
373 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ), 373 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ),
374 mNavigator, SLOT( slotMonthSelect( int ) ) ); 374 mNavigator, SLOT( slotMonthSelect( int ) ) );
375 375
376 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 376 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
377 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 377 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
378 378
379 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), 379 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ),
380 SLOT( eventAdded( Event *) ) ); 380 SLOT( eventAdded( Event *) ) );
381 381
382 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 382 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
383 383
384 connect( this, SIGNAL( configChanged() ), 384 connect( this, SIGNAL( configChanged() ),
385 mDateNavigator, SLOT( updateConfig() ) ); 385 mDateNavigator, SLOT( updateConfig() ) );
386 386
387 connect( mTodoList, SIGNAL( newTodoSignal() ), 387 connect( mTodoList, SIGNAL( newTodoSignal() ),
388 SLOT( newTodo() ) ); 388 SLOT( newTodo() ) );
389 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 389 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
390 SLOT( newSubTodo( Todo * ) ) ); 390 SLOT( newSubTodo( Todo * ) ) );
391 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 391 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
392 SLOT( editTodo( Todo * ) ) ); 392 SLOT( editTodo( Todo * ) ) );
393 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 393 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
394 SLOT( showTodo( Todo *) ) ); 394 SLOT( showTodo( Todo *) ) );
395 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 395 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
396 SLOT( deleteTodo( Todo *) ) ); 396 SLOT( deleteTodo( Todo *) ) );
397 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 397 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
398 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 398 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
399 SLOT( purgeCompleted() ) ); 399 SLOT( purgeCompleted() ) );
400 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 400 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
401 SIGNAL( todoModified( Todo *, int ) ) ); 401 SIGNAL( todoModified( Todo *, int ) ) );
402 402
403 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 403 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
404 this, SLOT ( cloneIncidence( Incidence * ) ) ); 404 this, SLOT ( cloneIncidence( Incidence * ) ) );
405 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 405 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
406 this, SLOT (cancelIncidence( Incidence * ) ) ); 406 this, SLOT (cancelIncidence( Incidence * ) ) );
407 407
408 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 408 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
409 this, SLOT ( moveIncidence( Incidence * ) ) ); 409 this, SLOT ( moveIncidence( Incidence * ) ) );
410 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 410 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
411 this, SLOT ( beamIncidence( Incidence * ) ) ); 411 this, SLOT ( beamIncidence( Incidence * ) ) );
412 412
413 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 413 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
414 this, SLOT ( todo_unsub( Todo * ) ) ); 414 this, SLOT ( todo_unsub( Todo * ) ) );
415 415
416 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 416 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
417 SLOT( updateTodo( Todo *, int ) ) ); 417 SLOT( updateTodo( Todo *, int ) ) );
418 connect( this, SIGNAL( todoModified( Todo *, int )), this, 418 connect( this, SIGNAL( todoModified( Todo *, int )), this,
419 SLOT( changeTodoDisplay( Todo *, int ) ) ); 419 SLOT( changeTodoDisplay( Todo *, int ) ) );
420 420
421 421
422 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 422 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
423 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 423 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
424 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 424 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
425 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 425 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
426 426
427 427
428 428
429 429
430 430
431 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 431 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
432 SLOT(checkClipboard())); 432 SLOT(checkClipboard()));
433 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 433 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
434 SLOT( processTodoListSelection( Incidence * ) ) ); 434 SLOT( processTodoListSelection( Incidence * ) ) );
435 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 435 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
436 436
437 // kdDebug() << "CalendarView::CalendarView() done" << endl; 437 // kdDebug() << "CalendarView::CalendarView() done" << endl;
438 438
439 mDateFrame = new QVBox(0,0,WType_Popup); 439 mDateFrame = new QVBox(0,0,WType_Popup);
440 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 440 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
441 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 441 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
442 mDateFrame->setLineWidth(3); 442 mDateFrame->setLineWidth(3);
443 mDateFrame->hide(); 443 mDateFrame->hide();
444 mDateFrame->setCaption( i18n( "Pick a date to display")); 444 mDateFrame->setCaption( i18n( "Pick a date to display"));
445 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 445 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
446 446
447 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 447 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
448 448
449 mEventEditor = mDialogManager->getEventEditor(); 449 mEventEditor = mDialogManager->getEventEditor();
450 mTodoEditor = mDialogManager->getTodoEditor(); 450 mTodoEditor = mDialogManager->getTodoEditor();
451 451
452 mFlagEditDescription = false; 452 mFlagEditDescription = false;
453 453
454 mSuspendTimer = new QTimer( this ); 454 mSuspendTimer = new QTimer( this );
455 mAlarmTimer = new QTimer( this ); 455 mAlarmTimer = new QTimer( this );
456 mRecheckAlarmTimer = new QTimer( this ); 456 mRecheckAlarmTimer = new QTimer( this );
457 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 457 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
458 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 458 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
459 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 459 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
460 mAlarmDialog = new AlarmDialog( this ); 460 mAlarmDialog = new AlarmDialog( this );
461 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 461 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
462 mAlarmDialog->setServerNotification( false ); 462 mAlarmDialog->setServerNotification( false );
463 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 463 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
464} 464}
465 465
466 466
467CalendarView::~CalendarView() 467CalendarView::~CalendarView()
468{ 468{
469 // kdDebug() << "~CalendarView()" << endl; 469 // kdDebug() << "~CalendarView()" << endl;
470 //qDebug("CalendarView::~CalendarView() "); 470 //qDebug("CalendarView::~CalendarView() ");
471 delete mDialogManager; 471 delete mDialogManager;
472 delete mViewManager; 472 delete mViewManager;
473 delete mStorage; 473 delete mStorage;
474 delete mDateFrame ; 474 delete mDateFrame ;
475 delete beamDialog; 475 delete beamDialog;
476 //kdDebug() << "~CalendarView() done" << endl; 476 //kdDebug() << "~CalendarView() done" << endl;
477} 477}
478void CalendarView::timerAlarm() 478void CalendarView::timerAlarm()
479{ 479{
480 //qDebug("CalendarView::timerAlarm() "); 480 //qDebug("CalendarView::timerAlarm() ");
481 computeAlarm(mAlarmNotification ); 481 computeAlarm(mAlarmNotification );
482} 482}
483 483
484void CalendarView::suspendAlarm() 484void CalendarView::suspendAlarm()
485{ 485{
486 //qDebug(" CalendarView::suspendAlarm() "); 486 //qDebug(" CalendarView::suspendAlarm() ");
487 computeAlarm(mSuspendAlarmNotification ); 487 computeAlarm(mSuspendAlarmNotification );
488 488
489} 489}
490 490
491void CalendarView::startAlarm( QString mess , QString filename) 491void CalendarView::startAlarm( QString mess , QString filename)
492{ 492{
493 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 493 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
494 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); 494 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) );
495 495
496} 496}
497 497
498void CalendarView::checkNextTimerAlarm() 498void CalendarView::checkNextTimerAlarm()
499{ 499{
500 mCalendar->checkAlarmForIncidence( 0, true ); 500 mCalendar->checkAlarmForIncidence( 0, true );
501} 501}
502 502
503void CalendarView::computeAlarm( QString msg ) 503void CalendarView::computeAlarm( QString msg )
504{ 504{
505 505
506 QString mess = msg; 506 QString mess = msg;
507 QString mAlarmMessage = mess.mid( 9 ); 507 QString mAlarmMessage = mess.mid( 9 );
508 QString filename = MainWindow::resourcePath(); 508 QString filename = MainWindow::resourcePath();
509 filename += "koalarm.wav"; 509 filename += "koalarm.wav";
510 QString tempfilename; 510 QString tempfilename;
511 if ( mess.left( 13 ) == "suspend_alarm") { 511 if ( mess.left( 13 ) == "suspend_alarm") {
512 bool error = false; 512 bool error = false;
513 int len = mess.mid( 13 ).find("+++"); 513 int len = mess.mid( 13 ).find("+++");
514 if ( len < 2 ) 514 if ( len < 2 )
515 error = true; 515 error = true;
516 else { 516 else {
517 tempfilename = mess.mid( 13, len ); 517 tempfilename = mess.mid( 13, len );
518 if ( !QFile::exists( tempfilename ) ) 518 if ( !QFile::exists( tempfilename ) )
519 error = true; 519 error = true;
520 } 520 }
521 if ( ! error ) { 521 if ( ! error ) {
522 filename = tempfilename; 522 filename = tempfilename;
523 } 523 }
524 mAlarmMessage = mess.mid( 13+len+3 ); 524 mAlarmMessage = mess.mid( 13+len+3 );
525 //qDebug("suspend file %s ",tempfilename.latin1() ); 525 //qDebug("suspend file %s ",tempfilename.latin1() );
526 startAlarm( mAlarmMessage, filename); 526 startAlarm( mAlarmMessage, filename);
527 return; 527 return;
528 } 528 }
529 if ( mess.left( 11 ) == "timer_alarm") { 529 if ( mess.left( 11 ) == "timer_alarm") {
530 //mTimerTime = 0; 530 //mTimerTime = 0;
531 startAlarm( mess.mid( 11 ), filename ); 531 startAlarm( mess.mid( 11 ), filename );
532 return; 532 return;
533 } 533 }
534 if ( mess.left( 10 ) == "proc_alarm") { 534 if ( mess.left( 10 ) == "proc_alarm") {
535 bool error = false; 535 bool error = false;
536 int len = mess.mid( 10 ).find("+++"); 536 int len = mess.mid( 10 ).find("+++");
537 if ( len < 2 ) 537 if ( len < 2 )
538 error = true; 538 error = true;
539 else { 539 else {
540 tempfilename = mess.mid( 10, len ); 540 tempfilename = mess.mid( 10, len );
541 if ( !QFile::exists( tempfilename ) ) 541 if ( !QFile::exists( tempfilename ) )
542 error = true; 542 error = true;
543 } 543 }
544 if ( error ) { 544 if ( error ) {
545 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 545 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
546 mAlarmMessage += mess.mid( 10+len+3+9 ); 546 mAlarmMessage += mess.mid( 10+len+3+9 );
547 } else { 547 } else {
548 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 548 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
549 //qDebug("-----system command %s ",tempfilename.latin1() ); 549 //qDebug("-----system command %s ",tempfilename.latin1() );
550#ifndef _WIN32_ 550#ifndef _WIN32_
551 if ( vfork () == 0 ) { 551 if ( vfork () == 0 ) {
552 execl ( tempfilename.latin1(), 0 ); 552 execl ( tempfilename.latin1(), 0 );
553 return; 553 return;
554 } 554 }
555#else 555#else
556 QProcess* p = new QProcess(); 556 QProcess* p = new QProcess();
557 p->addArgument( tempfilename.latin1() ); 557 p->addArgument( tempfilename.latin1() );
558 p->start(); 558 p->start();
559 return; 559 return;
560#endif 560#endif
561 561
562 return; 562 return;
563 } 563 }
564 564
565 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 565 //qDebug("+++++++system command %s ",tempfilename.latin1() );
566 } 566 }
567 if ( mess.left( 11 ) == "audio_alarm") { 567 if ( mess.left( 11 ) == "audio_alarm") {
568 bool error = false; 568 bool error = false;
569 int len = mess.mid( 11 ).find("+++"); 569 int len = mess.mid( 11 ).find("+++");
570 if ( len < 2 ) 570 if ( len < 2 )
571 error = true; 571 error = true;
572 else { 572 else {
573 tempfilename = mess.mid( 11, len ); 573 tempfilename = mess.mid( 11, len );
574 if ( !QFile::exists( tempfilename ) ) 574 if ( !QFile::exists( tempfilename ) )
575 error = true; 575 error = true;
576 } 576 }
577 if ( ! error ) { 577 if ( ! error ) {
578 filename = tempfilename; 578 filename = tempfilename;
579 } 579 }
580 mAlarmMessage = mess.mid( 11+len+3+9 ); 580 mAlarmMessage = mess.mid( 11+len+3+9 );
581 //qDebug("audio file command %s ",tempfilename.latin1() ); 581 //qDebug("audio file command %s ",tempfilename.latin1() );
582 } 582 }
583 if ( mess.left( 9 ) == "cal_alarm") { 583 if ( mess.left( 9 ) == "cal_alarm") {
584 mAlarmMessage = mess.mid( 9 ) ; 584 mAlarmMessage = mess.mid( 9 ) ;
585 } 585 }
586 586
587 startAlarm( mAlarmMessage, filename ); 587 startAlarm( mAlarmMessage, filename );
588 588
589 589
590} 590}
591 591
592void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 592void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
593{ 593{
594 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 594 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
595 595
596 mSuspendAlarmNotification = noti; 596 mSuspendAlarmNotification = noti;
597 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 597 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
598 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 598 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
599 mSuspendTimer->start( ms , true ); 599 mSuspendTimer->start( ms , true );
600 600
601} 601}
602 602
603void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 603void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
604{ 604{
605 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 605 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
606 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 606 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
607#ifndef DESKTOP_VERSION 607#ifndef DESKTOP_VERSION
608 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() ); 608 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() );
609#endif 609#endif
610 return; 610 return;
611 } 611 }
612 int maxSec; 612 int maxSec;
613 //maxSec = 5; //testing only 613 //maxSec = 5; //testing only
614 maxSec = 86400+3600; // one day+1hour 614 maxSec = 86400+3600; // one day+1hour
615 mAlarmNotification = noti; 615 mAlarmNotification = noti;
616 int sec = QDateTime::currentDateTime().secsTo( qdt ); 616 int sec = QDateTime::currentDateTime().secsTo( qdt );
617 if ( sec > maxSec ) { 617 if ( sec > maxSec ) {
618 mRecheckAlarmTimer->start( maxSec * 1000 ); 618 mRecheckAlarmTimer->start( maxSec * 1000 );
619 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 619 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
620 return; 620 return;
621 } else { 621 } else {
622 mRecheckAlarmTimer->stop(); 622 mRecheckAlarmTimer->stop();
623 } 623 }
624 //qDebug("Alarm timer started with secs: %d ", sec); 624 //qDebug("Alarm timer started with secs: %d ", sec);
625 mAlarmTimer->start( sec *1000 , true ); 625 mAlarmTimer->start( sec *1000 , true );
626 626
627} 627}
628// called by mRecheckAlarmTimer to get next alarm 628// called by mRecheckAlarmTimer to get next alarm
629// we need this, because a QTimer has only a max range of 25 days 629// we need this, because a QTimer has only a max range of 25 days
630void CalendarView::recheckTimerAlarm() 630void CalendarView::recheckTimerAlarm()
631{ 631{
632 mAlarmTimer->stop(); 632 mAlarmTimer->stop();
633 mRecheckAlarmTimer->stop(); 633 mRecheckAlarmTimer->stop();
634 mCalendar->checkAlarmForIncidence( 0, true ); 634 mCalendar->checkAlarmForIncidence( 0, true );
635} 635}
636void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 636void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
637{ 637{
638 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 638 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
639 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 639 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
640#ifndef DESKTOP_VERSION 640#ifndef DESKTOP_VERSION
641 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() ); 641 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() );
642#endif 642#endif
643 return; 643 return;
644 } 644 }
645 mAlarmTimer->stop(); 645 mAlarmTimer->stop();
646} 646}
647void CalendarView::selectWeekNum ( int num ) 647void CalendarView::selectWeekNum ( int num )
648{ 648{
649 dateNavigator()->selectWeek( num ); 649 dateNavigator()->selectWeek( num );
650 mViewManager->showWeekView(); 650 mViewManager->showWeekView();
651} 651}
652KOViewManager *CalendarView::viewManager() 652KOViewManager *CalendarView::viewManager()
653{ 653{
654 return mViewManager; 654 return mViewManager;
655} 655}
656 656
657KODialogManager *CalendarView::dialogManager() 657KODialogManager *CalendarView::dialogManager()
658{ 658{
659 return mDialogManager; 659 return mDialogManager;
660} 660}
661 661
662QDate CalendarView::startDate() 662QDate CalendarView::startDate()
663{ 663{
664 DateList dates = mNavigator->selectedDates(); 664 DateList dates = mNavigator->selectedDates();
665 665
666 return dates.first(); 666 return dates.first();
667} 667}
668 668
669QDate CalendarView::endDate() 669QDate CalendarView::endDate()
670{ 670{
671 DateList dates = mNavigator->selectedDates(); 671 DateList dates = mNavigator->selectedDates();
672 672
673 return dates.last(); 673 return dates.last();
674} 674}
675 675
676 676
677void CalendarView::createPrinter() 677void CalendarView::createPrinter()
678{ 678{
679#ifndef KORG_NOPRINTER 679#ifndef KORG_NOPRINTER
680 if (!mCalPrinter) { 680 if (!mCalPrinter) {
681 mCalPrinter = new CalPrinter(this, mCalendar); 681 mCalPrinter = new CalPrinter(this, mCalendar);
682 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 682 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
683 } 683 }
684#endif 684#endif
685} 685}
686 686
687void CalendarView::confSync() 687void CalendarView::confSync()
688{ 688{
689 static KSyncPrefsDialog* sp = 0; 689 static KSyncPrefsDialog* sp = 0;
690 if ( ! sp ) { 690 if ( ! sp ) {
691 sp = new KSyncPrefsDialog( this, "syncprefs", true ); 691 sp = new KSyncPrefsDialog( this, "syncprefs", true );
692 } 692 }
693 sp->usrReadConfig(); 693 sp->usrReadConfig();
694#ifndef DESKTOP_VERSION 694#ifndef DESKTOP_VERSION
695 sp->showMaximized(); 695 sp->showMaximized();
696#else 696#else
697 sp->show(); 697 sp->show();
698#endif 698#endif
699 sp->exec(); 699 sp->exec();
700 KOPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames(); 700 KOPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
701 KOPrefs::instance()->mLocalMachineName = sp->getLocalMachineName (); 701 KOPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
702} 702}
703 703
704 704
705//KOPrefs::instance()->mWriteBackFile 705//KOPrefs::instance()->mWriteBackFile
706//KOPrefs::instance()->mWriteBackExistingOnly 706//KOPrefs::instance()->mWriteBackExistingOnly
707 707
708// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 708// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
709// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 709// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
710// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 710// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
711// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 711// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
712// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 712// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
713// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 713// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
714 714
715int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 715int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
716{ 716{
717 717
718 //void setZaurusId(int id); 718 //void setZaurusId(int id);
719 // int zaurusId() const; 719 // int zaurusId() const;
720 // void setZaurusUid(int id); 720 // void setZaurusUid(int id);
721 // int zaurusUid() const; 721 // int zaurusUid() const;
722 // void setZaurusStat(int id); 722 // void setZaurusStat(int id);
723 // int zaurusStat() const; 723 // int zaurusStat() const;
724 // 0 equal 724 // 0 equal
725 // 1 take local 725 // 1 take local
726 // 2 take remote 726 // 2 take remote
727 // 3 cancel 727 // 3 cancel
728 QDateTime lastSync = mLastCalendarSync; 728 QDateTime lastSync = mLastCalendarSync;
729 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 729 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
730 bool remCh, locCh; 730 bool remCh, locCh;
731 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 731 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
732 if ( remCh ) 732 if ( remCh )
733 qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 733 qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
734 locCh = ( local->lastModified() > mLastCalendarSync ); 734 locCh = ( local->lastModified() > mLastCalendarSync );
735 //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() ); 735 //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() );
736 if ( !remCh && ! locCh ) { 736 if ( !remCh && ! locCh ) {
737 qDebug("both not changed "); 737 //qDebug("both not changed ");
738 lastSync = local->lastModified().addDays(1); 738 lastSync = local->lastModified().addDays(1);
739 } else { 739 } else {
740 if ( locCh ) { 740 if ( locCh ) {
741 qDebug("loc changed %d %s %s", local->revision() , local->lastModified().toString().latin1(), mLastCalendarSync.toString().latin1()); 741 // qDebug("loc changed %d %s %s", local->revision() , local->lastModified().toString().latin1(), mLastCalendarSync.toString().latin1());
742 lastSync = local->lastModified().addDays( -1 ); 742 lastSync = local->lastModified().addDays( -1 );
743 if ( !remCh ) 743 if ( !remCh )
744 remote->setLastModified( lastSync.addDays( -1 ) ); 744 remote->setLastModified( lastSync.addDays( -1 ) );
745 } else { 745 } else {
746 qDebug(" not loc changed "); 746 //qDebug(" not loc changed ");
747 lastSync = local->lastModified().addDays( 1 ); 747 lastSync = local->lastModified().addDays( 1 );
748 if ( remCh ) 748 if ( remCh )
749 remote->setLastModified( lastSync.addDays( 1 ) ); 749 remote->setLastModified( lastSync.addDays( 1 ) );
750 750
751 } 751 }
752 } 752 }
753 full = true; 753 full = true;
754 if ( mode < SYNC_PREF_ASK ) 754 if ( mode < SYNC_PREF_ASK )
755 mode = SYNC_PREF_ASK; 755 mode = SYNC_PREF_ASK;
756 } else { 756 } else {
757 if ( local->lastModified() == remote->lastModified() ) 757 if ( local->lastModified() == remote->lastModified() )
758 if ( local->revision() == remote->revision() ) 758 if ( local->revision() == remote->revision() )
759 return 0; 759 return 0;
760 760
761 } 761 }
762 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 762 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
763 763
764 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision()); 764 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision());
765 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 765 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
766 //full = true; //debug only 766 //full = true; //debug only
767 if ( full ) { 767 if ( full ) {
768 bool equ = false; 768 bool equ = false;
769 if ( local->type() == "Event" ) { 769 if ( local->type() == "Event" ) {
770 equ = (*((Event*) local) == *((Event*) remote)); 770 equ = (*((Event*) local) == *((Event*) remote));
771 } 771 }
772 else if ( local->type() =="Todo" ) 772 else if ( local->type() =="Todo" )
773 equ = (*((Todo*) local) == (*(Todo*) remote)); 773 equ = (*((Todo*) local) == (*(Todo*) remote));
774 else if ( local->type() =="Journal" ) 774 else if ( local->type() =="Journal" )
775 equ = (*((Journal*) local) == *((Journal*) remote)); 775 equ = (*((Journal*) local) == *((Journal*) remote));
776 if ( equ ) { 776 if ( equ ) {
777 //qDebug("equal "); 777 //qDebug("equal ");
778 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 778 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
779 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 779 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
780 } 780 }
781 if ( mode < SYNC_PREF_FORCE_LOCAL ) 781 if ( mode < SYNC_PREF_FORCE_LOCAL )
782 return 0; 782 return 0;
783 783
784 }//else //debug only 784 }//else //debug only
785 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 785 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
786 } 786 }
787 int result; 787 int result;
788 bool localIsNew; 788 bool localIsNew;
789 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() ); 789 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() );
790 790
791 if ( full && mode < SYNC_PREF_NEWEST ) 791 if ( full && mode < SYNC_PREF_NEWEST )
792 mode = SYNC_PREF_ASK; 792 mode = SYNC_PREF_ASK;
793 793
794 switch( mode ) { 794 switch( mode ) {
795 case SYNC_PREF_LOCAL: 795 case SYNC_PREF_LOCAL:
796 if ( lastSync > remote->lastModified() ) 796 if ( lastSync > remote->lastModified() )
797 return 1; 797 return 1;
798 if ( lastSync > local->lastModified() ) 798 if ( lastSync > local->lastModified() )
799 return 2; 799 return 2;
800 return 1; 800 return 1;
801 break; 801 break;
802 case SYNC_PREF_REMOTE: 802 case SYNC_PREF_REMOTE:
803 if ( lastSync > remote->lastModified() ) 803 if ( lastSync > remote->lastModified() )
804 return 1; 804 return 1;
805 if ( lastSync > local->lastModified() ) 805 if ( lastSync > local->lastModified() )
806 return 2; 806 return 2;
807 return 2; 807 return 2;
808 break; 808 break;
809 case SYNC_PREF_NEWEST: 809 case SYNC_PREF_NEWEST:
810 if ( local->lastModified() > remote->lastModified() ) 810 if ( local->lastModified() > remote->lastModified() )
811 return 1; 811 return 1;
812 else 812 else
813 return 2; 813 return 2;
814 break; 814 break;
815 case SYNC_PREF_ASK: 815 case SYNC_PREF_ASK:
816 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); 816 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() );
817 if ( lastSync > remote->lastModified() ) 817 if ( lastSync > remote->lastModified() )
818 return 1; 818 return 1;
819 if ( lastSync > local->lastModified() ) 819 if ( lastSync > local->lastModified() )
820 return 2; 820 return 2;
821 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); 821 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() );
822 localIsNew = local->lastModified() >= remote->lastModified(); 822 localIsNew = local->lastModified() >= remote->lastModified();
823 if ( localIsNew ) 823 if ( localIsNew )
824 getEventViewerDialog()->setColorMode( 1 ); 824 getEventViewerDialog()->setColorMode( 1 );
825 else 825 else
826 getEventViewerDialog()->setColorMode( 2 ); 826 getEventViewerDialog()->setColorMode( 2 );
827 getEventViewerDialog()->setIncidence(local); 827 getEventViewerDialog()->setIncidence(local);
828 if ( localIsNew ) 828 if ( localIsNew )
829 getEventViewerDialog()->setColorMode( 2 ); 829 getEventViewerDialog()->setColorMode( 2 );
830 else 830 else
831 getEventViewerDialog()->setColorMode( 1 ); 831 getEventViewerDialog()->setColorMode( 1 );
832 getEventViewerDialog()->addIncidence(remote); 832 getEventViewerDialog()->addIncidence(remote);
833 getEventViewerDialog()->setColorMode( 0 ); 833 getEventViewerDialog()->setColorMode( 0 );
834 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 834 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
835 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 835 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
836 getEventViewerDialog()->showMe(); 836 getEventViewerDialog()->showMe();
837 result = getEventViewerDialog()->executeS( localIsNew ); 837 result = getEventViewerDialog()->executeS( localIsNew );
838 return result; 838 return result;
839 839
840 break; 840 break;
841 case SYNC_PREF_FORCE_LOCAL: 841 case SYNC_PREF_FORCE_LOCAL:
842 return 1; 842 return 1;
843 break; 843 break;
844 case SYNC_PREF_FORCE_REMOTE: 844 case SYNC_PREF_FORCE_REMOTE:
845 return 2; 845 return 2;
846 break; 846 break;
847 847
848 default: 848 default:
849 // SYNC_PREF_TAKE_BOTH not implemented 849 // SYNC_PREF_TAKE_BOTH not implemented
850 break; 850 break;
851 } 851 }
852 return 0; 852 return 0;
853} 853}
854Event* CalendarView::getLastSyncEvent() 854Event* CalendarView::getLastSyncEvent()
855{ 855{
856 Event* lse; 856 Event* lse;
857 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 857 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
858 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 858 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
859 if (!lse) { 859 if (!lse) {
860 lse = new Event(); 860 lse = new Event();
861 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 861 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
862 QString sum = ""; 862 QString sum = "";
863 if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 863 if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
864 sum = "E: "; 864 sum = "E: ";
865 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 865 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
866 lse->setDtStart( mLastCalendarSync ); 866 lse->setDtStart( mLastCalendarSync );
867 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 867 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
868 lse->setCategories( i18n("SyncEvent") ); 868 lse->setCategories( i18n("SyncEvent") );
869 lse->setReadOnly( true ); 869 lse->setReadOnly( true );
870 mCalendar->addEvent( lse ); 870 mCalendar->addEvent( lse );
871 } 871 }
872 872
873 return lse; 873 return lse;
874 874
875} 875}
876// probaly useless 876// probaly useless
877void CalendarView::setupExternSyncProfiles() 877void CalendarView::setupExternSyncProfiles()
878{ 878{
879 Event* lse; 879 Event* lse;
880 mExternLastSyncEvent.clear(); 880 mExternLastSyncEvent.clear();
881 int i; 881 int i;
882 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) { 882 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) {
883 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] ); 883 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] );
884 if ( lse ) 884 if ( lse )
885 mExternLastSyncEvent.append( lse ); 885 mExternLastSyncEvent.append( lse );
886 else 886 else
887 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1()); 887 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1());
888 } 888 }
889 889
890} 890}
891// we check, if the to delete event has a id for a profile 891// we check, if the to delete event has a id for a profile
892// if yes, we set this id in the profile to delete 892// if yes, we set this id in the profile to delete
893void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 893void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
894{ 894{
895 if ( lastSync.count() == 0 ) { 895 if ( lastSync.count() == 0 ) {
896 //qDebug(" lastSync.count() == 0"); 896 //qDebug(" lastSync.count() == 0");
897 return; 897 return;
898 } 898 }
899 if ( toDelete->type() == "Journal" ) 899 if ( toDelete->type() == "Journal" )
900 return; 900 return;
901 901
902 Event* eve = lastSync.first(); 902 Event* eve = lastSync.first();
903 903
904 while ( eve ) { 904 while ( eve ) {
905 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 905 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
906 if ( !id.isEmpty() ) { 906 if ( !id.isEmpty() ) {
907 QString des = eve->description(); 907 QString des = eve->description();
908 QString pref = "e"; 908 QString pref = "e";
909 if ( toDelete->type() == "Todo" ) 909 if ( toDelete->type() == "Todo" )
910 pref = "t"; 910 pref = "t";
911 des += pref+ id + ","; 911 des += pref+ id + ",";
912 eve->setReadOnly( false ); 912 eve->setReadOnly( false );
913 eve->setDescription( des ); 913 eve->setDescription( des );
914 //qDebug("setdes %s ", des.latin1()); 914 //qDebug("setdes %s ", des.latin1());
915 eve->setReadOnly( true ); 915 eve->setReadOnly( true );
916 } 916 }
917 eve = lastSync.next(); 917 eve = lastSync.next();
918 } 918 }
919 919
920} 920}
921void CalendarView::checkExternalId( Incidence * inc ) 921void CalendarView::checkExternalId( Incidence * inc )
922{ 922{
923 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 923 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
924 checkExternSyncEvent( lastSync, inc ); 924 checkExternSyncEvent( lastSync, inc );
925 925
926} 926}
927bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 927bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
928{ 928{
929 bool syncOK = true; 929 bool syncOK = true;
930 int addedEvent = 0; 930 int addedEvent = 0;
931 int addedEventR = 0; 931 int addedEventR = 0;
932 int deletedEventR = 0; 932 int deletedEventR = 0;
933 int deletedEventL = 0; 933 int deletedEventL = 0;
934 int changedLocal = 0; 934 int changedLocal = 0;
935 int changedRemote = 0; 935 int changedRemote = 0;
936 //QPtrList<Event> el = local->rawEvents(); 936 //QPtrList<Event> el = local->rawEvents();
937 Event* eventR; 937 Event* eventR;
938 QString uid; 938 QString uid;
939 int take; 939 int take;
940 Event* eventL; 940 Event* eventL;
941 Event* eventRSync; 941 Event* eventRSync;
942 Event* eventLSync; 942 Event* eventLSync;
943 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 943 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
944 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 944 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
945 bool fullDateRange = false; 945 bool fullDateRange = false;
946 local->resetTempSyncStat(); 946 local->resetTempSyncStat();
947 mLastCalendarSync = QDateTime::currentDateTime(); 947 mLastCalendarSync = QDateTime::currentDateTime();
948 QDateTime modifiedCalendar = mLastCalendarSync;; 948 QDateTime modifiedCalendar = mLastCalendarSync;;
949 eventLSync = getLastSyncEvent(); 949 eventLSync = getLastSyncEvent();
950 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 950 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
951 if ( eventR ) { 951 if ( eventR ) {
952 eventRSync = (Event*) eventR->clone(); 952 eventRSync = (Event*) eventR->clone();
953 remote->deleteEvent(eventR ); 953 remote->deleteEvent(eventR );
954 954
955 } else { 955 } else {
956 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 956 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
957 eventRSync = (Event*)eventLSync->clone(); 957 eventRSync = (Event*)eventLSync->clone();
958 } else { 958 } else {
959 fullDateRange = true; 959 fullDateRange = true;
960 eventRSync = new Event(); 960 eventRSync = new Event();
961 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 961 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
962 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 962 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
963 eventRSync->setDtStart( mLastCalendarSync ); 963 eventRSync->setDtStart( mLastCalendarSync );
964 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 964 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
965 eventRSync->setCategories( i18n("SyncEvent") ); 965 eventRSync->setCategories( i18n("SyncEvent") );
966 } 966 }
967 } 967 }
968 if ( eventLSync->dtStart() == mLastCalendarSync ) 968 if ( eventLSync->dtStart() == mLastCalendarSync )
969 fullDateRange = true; 969 fullDateRange = true;
970 970
971 if ( ! fullDateRange ) { 971 if ( ! fullDateRange ) {
972 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 972 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
973 973
974 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 974 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
975 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 975 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
976 fullDateRange = true; 976 fullDateRange = true;
977 } 977 }
978 } 978 }
979 if ( fullDateRange ) 979 if ( fullDateRange )
980 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 980 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
981 else 981 else
982 mLastCalendarSync = eventLSync->dtStart(); 982 mLastCalendarSync = eventLSync->dtStart();
983 // for resyncing if own file has changed 983 // for resyncing if own file has changed
984 if ( mCurrentSyncDevice == "deleteaftersync" ) { 984 if ( mCurrentSyncDevice == "deleteaftersync" ) {
985 mLastCalendarSync = loadedFileVersion; 985 mLastCalendarSync = loadedFileVersion;
986 qDebug("setting mLastCalendarSync "); 986 qDebug("setting mLastCalendarSync ");
987 } 987 }
988 //qDebug("*************************** "); 988 //qDebug("*************************** ");
989 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() ); 989 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() );
990 QPtrList<Incidence> er = remote->rawIncidences(); 990 QPtrList<Incidence> er = remote->rawIncidences();
991 Incidence* inR = er.first(); 991 Incidence* inR = er.first();
992 Incidence* inL; 992 Incidence* inL;
993 QProgressBar bar( er.count(),0 ); 993 QProgressBar bar( er.count(),0 );
994 bar.setCaption (i18n("Syncing - close to abort!") ); 994 bar.setCaption (i18n("Syncing - close to abort!") );
995 995
996 int w = 300; 996 int w = 300;
997 if ( QApplication::desktop()->width() < 320 ) 997 if ( QApplication::desktop()->width() < 320 )
998 w = 220; 998 w = 220;
999 int h = bar.sizeHint().height() ; 999 int h = bar.sizeHint().height() ;
1000 int dw = QApplication::desktop()->width(); 1000 int dw = QApplication::desktop()->width();
1001 int dh = QApplication::desktop()->height(); 1001 int dh = QApplication::desktop()->height();
1002 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1002 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1003 bar.show(); 1003 bar.show();
1004 int modulo = (er.count()/10)+1; 1004 int modulo = (er.count()/10)+1;
1005 int incCounter = 0; 1005 int incCounter = 0;
1006 while ( inR ) { 1006 while ( inR ) {
1007 if ( ! bar.isVisible() ) 1007 if ( ! bar.isVisible() )
1008 return false; 1008 return false;
1009 if ( incCounter % modulo == 0 ) 1009 if ( incCounter % modulo == 0 )
1010 bar.setProgress( incCounter ); 1010 bar.setProgress( incCounter );
1011 ++incCounter; 1011 ++incCounter;
1012 uid = inR->uid(); 1012 uid = inR->uid();
1013 bool skipIncidence = false; 1013 bool skipIncidence = false;
1014 if ( uid.left(15) == QString("last-syncEvent-") ) 1014 if ( uid.left(15) == QString("last-syncEvent-") )
1015 skipIncidence = true; 1015 skipIncidence = true;
1016 QString idS; 1016 QString idS;
1017 qApp->processEvents(); 1017 qApp->processEvents();
1018 if ( !skipIncidence ) { 1018 if ( !skipIncidence ) {
1019 inL = local->incidence( uid ); 1019 inL = local->incidence( uid );
1020 if ( inL ) { // maybe conflict - same uid in both calendars 1020 if ( inL ) { // maybe conflict - same uid in both calendars
1021 int maxrev = inL->revision(); 1021 int maxrev = inL->revision();
1022 if ( maxrev < inR->revision() ) 1022 if ( maxrev < inR->revision() )
1023 maxrev = inR->revision(); 1023 maxrev = inR->revision();
1024 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1024 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1025 //qDebug("take %d %s ", take, inL->summary().latin1()); 1025 //qDebug("take %d %s ", take, inL->summary().latin1());
1026 if ( take == 3 ) 1026 if ( take == 3 )
1027 return false; 1027 return false;
1028 if ( take == 1 ) {// take local 1028 if ( take == 1 ) {// take local
1029 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1029 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1030 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1030 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1031 else 1031 else
1032 idS = inR->IDStr(); 1032 idS = inR->IDStr();
1033 remote->deleteIncidence( inR ); 1033 remote->deleteIncidence( inR );
1034 if ( inL->revision() < maxrev ) 1034 if ( inL->revision() < maxrev )
1035 inL->setRevision( maxrev ); 1035 inL->setRevision( maxrev );
1036 inR = inL->clone(); 1036 inR = inL->clone();
1037 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1037 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1038 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1038 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1039 inR->setIDStr( idS ); 1039 inR->setIDStr( idS );
1040 remote->addIncidence( inR ); 1040 remote->addIncidence( inR );
1041 ++changedRemote; 1041 ++changedRemote;
1042 } else { 1042 } else {
1043 if ( inR->revision() < maxrev ) 1043 if ( inR->revision() < maxrev )
1044 inR->setRevision( maxrev ); 1044 inR->setRevision( maxrev );
1045 idS = inL->IDStr(); 1045 idS = inL->IDStr();
1046 local->deleteIncidence( inL ); 1046 local->deleteIncidence( inL );
1047 inL = inR->clone(); 1047 inL = inR->clone();
1048 inL->setIDStr( idS ); 1048 inL->setIDStr( idS );
1049 local->addIncidence( inL ); 1049 local->addIncidence( inL );
1050 ++changedLocal; 1050 ++changedLocal;
1051 } 1051 }
1052 } 1052 }
1053 } else { // no conflict 1053 } else { // no conflict
1054 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1054 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1055 QString des = eventLSync->description(); 1055 QString des = eventLSync->description();
1056 QString pref = "e"; 1056 QString pref = "e";
1057 if ( inR->type() == "Todo" ) 1057 if ( inR->type() == "Todo" )
1058 pref = "t"; 1058 pref = "t";
1059 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1059 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1060 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1060 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1061 //remote->deleteIncidence( inR ); 1061 //remote->deleteIncidence( inR );
1062 ++deletedEventR; 1062 ++deletedEventR;
1063 } else { 1063 } else {
1064 inR->setLastModified( modifiedCalendar ); 1064 inR->setLastModified( modifiedCalendar );
1065 inL = inR->clone(); 1065 inL = inR->clone();
1066 local->addIncidence( inL ); 1066 local->addIncidence( inL );
1067 ++addedEvent; 1067 ++addedEvent;
1068 } 1068 }
1069 } else { 1069 } else {
1070 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1070 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1071 inR->setLastModified( modifiedCalendar ); 1071 inR->setLastModified( modifiedCalendar );
1072 local->addIncidence( inR->clone() ); 1072 local->addIncidence( inR->clone() );
1073 ++addedEvent; 1073 ++addedEvent;
1074 } else { 1074 } else {
1075 checkExternSyncEvent(eventRSyncSharp, inR); 1075 checkExternSyncEvent(eventRSyncSharp, inR);
1076 remote->deleteIncidence( inR ); 1076 remote->deleteIncidence( inR );
1077 ++deletedEventR; 1077 ++deletedEventR;
1078 } 1078 }
1079 } 1079 }
1080 } 1080 }
1081 } 1081 }
1082 inR = er.next(); 1082 inR = er.next();
1083 } 1083 }
1084 QPtrList<Incidence> el = local->rawIncidences(); 1084 QPtrList<Incidence> el = local->rawIncidences();
1085 inL = el.first(); 1085 inL = el.first();
1086 modulo = (el.count()/10)+1; 1086 modulo = (el.count()/10)+1;
1087 bar.setCaption (i18n("Add / remove events") ); 1087 bar.setCaption (i18n("Add / remove events") );
1088 bar.setTotalSteps ( el.count() ) ; 1088 bar.setTotalSteps ( el.count() ) ;
1089 bar.show(); 1089 bar.show();
1090 incCounter = 0; 1090 incCounter = 0;
1091 1091
1092 while ( inL ) { 1092 while ( inL ) {
1093 1093
1094 qApp->processEvents(); 1094 qApp->processEvents();
1095 if ( ! bar.isVisible() ) 1095 if ( ! bar.isVisible() )
1096 return false; 1096 return false;
1097 if ( incCounter % modulo == 0 ) 1097 if ( incCounter % modulo == 0 )
1098 bar.setProgress( incCounter ); 1098 bar.setProgress( incCounter );
1099 ++incCounter; 1099 ++incCounter;
1100 uid = inL->uid(); 1100 uid = inL->uid();
1101 bool skipIncidence = false; 1101 bool skipIncidence = false;
1102 if ( uid.left(15) == QString("last-syncEvent-") ) 1102 if ( uid.left(15) == QString("last-syncEvent-") )
1103 skipIncidence = true; 1103 skipIncidence = true;
1104 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) 1104 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" )
1105 skipIncidence = true; 1105 skipIncidence = true;
1106 if ( !skipIncidence ) { 1106 if ( !skipIncidence ) {
1107 inR = remote->incidence( uid ); 1107 inR = remote->incidence( uid );
1108 if ( ! inR ) { 1108 if ( ! inR ) {
1109 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1109 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1110 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1110 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1111 checkExternSyncEvent(eventLSyncSharp, inL); 1111 checkExternSyncEvent(eventLSyncSharp, inL);
1112 local->deleteIncidence( inL ); 1112 local->deleteIncidence( inL );
1113 ++deletedEventL; 1113 ++deletedEventL;
1114 } else { 1114 } else {
1115 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1115 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1116 inL->removeID(mCurrentSyncDevice ); 1116 inL->removeID(mCurrentSyncDevice );
1117 ++addedEventR; 1117 ++addedEventR;
1118 qDebug("remote added Incidence %s ", inL->summary().latin1()); 1118 qDebug("remote added Incidence %s ", inL->summary().latin1());
1119 inL->setLastModified( modifiedCalendar ); 1119 inL->setLastModified( modifiedCalendar );
1120 inR = inL->clone(); 1120 inR = inL->clone();
1121 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1121 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1122 remote->addIncidence( inR ); 1122 remote->addIncidence( inR );
1123 } 1123 }
1124 } 1124 }
1125 } else { 1125 } else {
1126 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1126 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1127 checkExternSyncEvent(eventLSyncSharp, inL); 1127 checkExternSyncEvent(eventLSyncSharp, inL);
1128 local->deleteIncidence( inL ); 1128 local->deleteIncidence( inL );
1129 ++deletedEventL; 1129 ++deletedEventL;
1130 } else { 1130 } else {
1131 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1131 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1132 ++addedEventR; 1132 ++addedEventR;
1133 inL->setLastModified( modifiedCalendar ); 1133 inL->setLastModified( modifiedCalendar );
1134 remote->addIncidence( inL->clone() ); 1134 remote->addIncidence( inL->clone() );
1135 } 1135 }
1136 } 1136 }
1137 } 1137 }
1138 } 1138 }
1139 } 1139 }
1140 inL = el.next(); 1140 inL = el.next();
1141 } 1141 }
1142 int delFut = 0; 1142 int delFut = 0;
1143 if ( KOPrefs::instance()->mWriteBackInFuture ) { 1143 if ( KOPrefs::instance()->mWriteBackInFuture ) {
1144 er = remote->rawIncidences(); 1144 er = remote->rawIncidences();
1145 inR = er.first(); 1145 inR = er.first();
1146 QDateTime dt; 1146 QDateTime dt;
1147 QDateTime cur = QDateTime::currentDateTime(); 1147 QDateTime cur = QDateTime::currentDateTime();
1148 QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 ); 1148 QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 );
1149 while ( inR ) { 1149 while ( inR ) {
1150 if ( inR->type() == "Todo" ) { 1150 if ( inR->type() == "Todo" ) {
1151 Todo * t = (Todo*)inR; 1151 Todo * t = (Todo*)inR;
1152 if ( t->hasDueDate() ) 1152 if ( t->hasDueDate() )
1153 dt = t->dtDue(); 1153 dt = t->dtDue();
1154 else 1154 else
1155 dt = cur.addSecs( 62 ); 1155 dt = cur.addSecs( 62 );
1156 } 1156 }
1157 else if (inR->type() == "Event" ) { 1157 else if (inR->type() == "Event" ) {
1158 bool ok; 1158 bool ok;
1159 dt = inR->getNextOccurence( cur, &ok ); 1159 dt = inR->getNextOccurence( cur, &ok );
1160 if ( !ok ) 1160 if ( !ok )
1161 dt = cur.addSecs( -62 ); 1161 dt = cur.addSecs( -62 );
1162 } 1162 }
1163 else 1163 else
1164 dt = inR->dtStart(); 1164 dt = inR->dtStart();
1165 if ( dt < cur || dt > end ) { 1165 if ( dt < cur || dt > end ) {
1166 remote->deleteIncidence( inR ); 1166 remote->deleteIncidence( inR );
1167 ++delFut; 1167 ++delFut;
1168 } 1168 }
1169 inR = er.next(); 1169 inR = er.next();
1170 } 1170 }
1171 } 1171 }
1172 bar.hide(); 1172 bar.hide();
1173 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1173 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1174 eventLSync->setReadOnly( false ); 1174 eventLSync->setReadOnly( false );
1175 eventLSync->setDtStart( mLastCalendarSync ); 1175 eventLSync->setDtStart( mLastCalendarSync );
1176 eventRSync->setDtStart( mLastCalendarSync ); 1176 eventRSync->setDtStart( mLastCalendarSync );
1177 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1177 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1178 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1178 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1179 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1179 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1180 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1180 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1181 eventLSync->setReadOnly( true ); 1181 eventLSync->setReadOnly( true );
1182 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 1182 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
1183 remote->addEvent( eventRSync ); 1183 remote->addEvent( eventRSync );
1184 QString mes; 1184 QString mes;
1185 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"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR ); 1185 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"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR );
1186 QString delmess; 1186 QString delmess;
1187 if ( delFut ) { 1187 if ( delFut ) {
1188 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture ); 1188 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture );
1189 mes += delmess; 1189 mes += delmess;
1190 } 1190 }
1191 if ( KOPrefs::instance()->mShowSyncSummary ) { 1191 if ( KOPrefs::instance()->mShowSyncSummary ) {
1192 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 1192 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
1193 } 1193 }
1194 qDebug( mes ); 1194 qDebug( mes );
1195 mCalendar->checkAlarmForIncidence( 0, true ); 1195 mCalendar->checkAlarmForIncidence( 0, true );
1196 return syncOK; 1196 return syncOK;
1197} 1197}
1198 1198
1199void CalendarView::setSyncDevice( QString s ) 1199void CalendarView::setSyncDevice( QString s )
1200{ 1200{
1201 mCurrentSyncDevice= s; 1201 mCurrentSyncDevice= s;
1202} 1202}
1203void CalendarView::setSyncName( QString s ) 1203void CalendarView::setSyncName( QString s )
1204{ 1204{
1205 mCurrentSyncName= s; 1205 mCurrentSyncName= s;
1206} 1206}
1207bool CalendarView::syncCalendar(QString filename, int mode) 1207bool CalendarView::syncCalendar(QString filename, int mode)
1208{ 1208{
1209 mGlobalSyncMode = SYNC_MODE_NORMAL; 1209 mGlobalSyncMode = SYNC_MODE_NORMAL;
1210 CalendarLocal* calendar = new CalendarLocal(); 1210 CalendarLocal* calendar = new CalendarLocal();
1211 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1211 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1212 FileStorage* storage = new FileStorage( calendar ); 1212 FileStorage* storage = new FileStorage( calendar );
1213 bool syncOK = false; 1213 bool syncOK = false;
1214 storage->setFileName( filename ); 1214 storage->setFileName( filename );
1215 // qDebug("loading ... "); 1215 // qDebug("loading ... ");
1216 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 1216 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
1217 getEventViewerDialog()->setSyncMode( true ); 1217 getEventViewerDialog()->setSyncMode( true );
1218 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1218 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1219 getEventViewerDialog()->setSyncMode( false ); 1219 getEventViewerDialog()->setSyncMode( false );
1220 if ( syncOK ) { 1220 if ( syncOK ) {
1221 if ( KOPrefs::instance()->mWriteBackFile ) 1221 if ( KOPrefs::instance()->mWriteBackFile )
1222 { 1222 {
1223 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1223 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1224 storage->save(); 1224 storage->save();
1225 } 1225 }
1226 } 1226 }
1227 setModified( true ); 1227 setModified( true );
1228 } 1228 }
1229 delete storage; 1229 delete storage;
1230 delete calendar; 1230 delete calendar;
1231 if ( syncOK ) 1231 if ( syncOK )
1232 updateView(); 1232 updateView();
1233 return syncOK; 1233 return syncOK;
1234} 1234}
1235void CalendarView::syncPhone() 1235void CalendarView::syncPhone()
1236{ 1236{
1237 syncExternal( 1 ); 1237 syncExternal( 1 );
1238} 1238}
1239void CalendarView::syncExternal( int mode ) 1239void CalendarView::syncExternal( int mode )
1240{ 1240{
1241 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1241 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1242 //mCurrentSyncDevice = "sharp-DTM"; 1242 //mCurrentSyncDevice = "sharp-DTM";
1243 if ( KOPrefs::instance()->mAskForPreferences ) 1243 if ( KOPrefs::instance()->mAskForPreferences )
1244 edit_sync_options(); 1244 edit_sync_options();
1245 qApp->processEvents(); 1245 qApp->processEvents();
1246 CalendarLocal* calendar = new CalendarLocal(); 1246 CalendarLocal* calendar = new CalendarLocal();
1247 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1247 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1248 bool syncOK = false; 1248 bool syncOK = false;
1249 bool loadSuccess = false; 1249 bool loadSuccess = false;
1250 PhoneFormat* phoneFormat = 0; 1250 PhoneFormat* phoneFormat = 0;
1251#ifndef DESKTOP_VERSION 1251#ifndef DESKTOP_VERSION
1252 SharpFormat* sharpFormat = 0; 1252 SharpFormat* sharpFormat = 0;
1253 if ( mode == 0 ) { // sharp 1253 if ( mode == 0 ) { // sharp
1254 sharpFormat = new SharpFormat () ; 1254 sharpFormat = new SharpFormat () ;
1255 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1255 loadSuccess = sharpFormat->load( calendar, mCalendar );
1256 1256
1257 } else 1257 } else
1258#endif 1258#endif
1259 if ( mode == 1 ) { // phone 1259 if ( mode == 1 ) { // phone
1260 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1260 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1261 KOPrefs::instance()->mPhoneDevice, 1261 KOPrefs::instance()->mPhoneDevice,
1262 KOPrefs::instance()->mPhoneConnection, 1262 KOPrefs::instance()->mPhoneConnection,
1263 KOPrefs::instance()->mPhoneModel); 1263 KOPrefs::instance()->mPhoneModel);
1264 loadSuccess = phoneFormat->load( calendar,mCalendar); 1264 loadSuccess = phoneFormat->load( calendar,mCalendar);
1265 1265
1266 } else 1266 } else
1267 return; 1267 return;
1268 if ( loadSuccess ) { 1268 if ( loadSuccess ) {
1269 getEventViewerDialog()->setSyncMode( true ); 1269 getEventViewerDialog()->setSyncMode( true );
1270 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1270 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1271 getEventViewerDialog()->setSyncMode( false ); 1271 getEventViewerDialog()->setSyncMode( false );
1272 qApp->processEvents(); 1272 qApp->processEvents();
1273 if ( syncOK ) { 1273 if ( syncOK ) {
1274 if ( KOPrefs::instance()->mWriteBackFile ) 1274 if ( KOPrefs::instance()->mWriteBackFile )
1275 { 1275 {
1276 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1276 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1277 Incidence* inc = iL.first(); 1277 Incidence* inc = iL.first();
1278 if ( phoneFormat ) { 1278 if ( phoneFormat ) {
1279 while ( inc ) { 1279 while ( inc ) {
1280 inc->removeID(mCurrentSyncDevice); 1280 inc->removeID(mCurrentSyncDevice);
1281 inc = iL.next(); 1281 inc = iL.next();
1282 } 1282 }
1283 } 1283 }
1284#ifndef DESKTOP_VERSION 1284#ifndef DESKTOP_VERSION
1285 if ( sharpFormat ) 1285 if ( sharpFormat )
1286 sharpFormat->save(calendar); 1286 sharpFormat->save(calendar);
1287#endif 1287#endif
1288 if ( phoneFormat ) 1288 if ( phoneFormat )
1289 phoneFormat->save(calendar); 1289 phoneFormat->save(calendar);
1290 iL = calendar->rawIncidences(); 1290 iL = calendar->rawIncidences();
1291 inc = iL.first(); 1291 inc = iL.first();
1292 Incidence* loc; 1292 Incidence* loc;
1293 while ( inc ) { 1293 while ( inc ) {
1294 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1294 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1295 loc = mCalendar->incidence(inc->uid() ); 1295 loc = mCalendar->incidence(inc->uid() );
1296 if ( loc ) { 1296 if ( loc ) {
1297 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1297 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1298 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1298 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1299 } 1299 }
1300 } 1300 }
1301 inc = iL.next(); 1301 inc = iL.next();
1302 } 1302 }
1303 Incidence* lse = getLastSyncEvent(); 1303 Incidence* lse = getLastSyncEvent();
1304 if ( lse ) { 1304 if ( lse ) {
1305 lse->setReadOnly( false ); 1305 lse->setReadOnly( false );
1306 lse->setDescription( "" ); 1306 lse->setDescription( "" );
1307 lse->setReadOnly( true ); 1307 lse->setReadOnly( true );
1308 } 1308 }
1309 } 1309 }
1310 } 1310 }
1311 setModified( true ); 1311 setModified( true );
1312 } else { 1312 } else {
1313 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1313 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1314 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1314 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1315 question, i18n("Ok")) ; 1315 question, i18n("Ok")) ;
1316 1316
1317 } 1317 }
1318 delete calendar; 1318 delete calendar;
1319 updateView(); 1319 updateView();
1320 return ;//syncOK; 1320 return ;//syncOK;
1321 1321
1322} 1322}
1323void CalendarView::syncSharp() 1323void CalendarView::syncSharp()
1324{ 1324{
1325 syncExternal( 0 ); 1325 syncExternal( 0 );
1326 1326
1327} 1327}
1328 1328
1329 1329
1330#include <kabc/stdaddressbook.h> 1330#include <kabc/stdaddressbook.h>
1331bool CalendarView::importBday() 1331bool CalendarView::importBday()
1332{ 1332{
1333 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1333 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1334 KABC::AddressBook::Iterator it; 1334 KABC::AddressBook::Iterator it;
1335 int count = 0; 1335 int count = 0;
1336 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1336 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1337 ++count; 1337 ++count;
1338 } 1338 }
1339 QProgressBar bar(count,0 ); 1339 QProgressBar bar(count,0 );
1340 int w = 300; 1340 int w = 300;
1341 if ( QApplication::desktop()->width() < 320 ) 1341 if ( QApplication::desktop()->width() < 320 )
1342 w = 220; 1342 w = 220;
1343 int h = bar.sizeHint().height() ; 1343 int h = bar.sizeHint().height() ;
1344 int dw = QApplication::desktop()->width(); 1344 int dw = QApplication::desktop()->width();
1345 int dh = QApplication::desktop()->height(); 1345 int dh = QApplication::desktop()->height();
1346 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1346 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1347 bar.show(); 1347 bar.show();
1348 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1348 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1349 qApp->processEvents(); 1349 qApp->processEvents();
1350 count = 0; 1350 count = 0;
1351 int addCount = 0; 1351 int addCount = 0;
1352 KCal::Attendee* a = 0; 1352 KCal::Attendee* a = 0;
1353 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1353 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1354 if ( ! bar.isVisible() ) 1354 if ( ! bar.isVisible() )
1355 return false; 1355 return false;
1356 bar.setProgress( count++ ); 1356 bar.setProgress( count++ );
1357 qApp->processEvents(); 1357 qApp->processEvents();
1358 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1358 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1359 if ( (*it).birthday().date().isValid() ){ 1359 if ( (*it).birthday().date().isValid() ){
1360 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1360 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1361 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1361 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1362 ++addCount; 1362 ++addCount;
1363 } 1363 }
1364 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1364 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1365 if ( anni.isValid() ){ 1365 if ( anni.isValid() ){
1366 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1366 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1367 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1367 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1368 ++addCount; 1368 ++addCount;
1369 } 1369 }
1370 } 1370 }
1371 updateView(); 1371 updateView();
1372 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1372 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1373 return true; 1373 return true;
1374} 1374}
1375 1375
1376bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1376bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1377{ 1377{
1378 //qDebug("addAnni "); 1378 //qDebug("addAnni ");
1379 Event * ev = new Event(); 1379 Event * ev = new Event();
1380 if ( a ) { 1380 if ( a ) {
1381 ev->addAttendee( a ); 1381 ev->addAttendee( a );
1382 } 1382 }
1383 QString kind; 1383 QString kind;
1384 if ( birthday ) 1384 if ( birthday )
1385 kind = i18n( "Birthday" ); 1385 kind = i18n( "Birthday" );
1386 else 1386 else
1387 kind = i18n( "Anniversary" ); 1387 kind = i18n( "Anniversary" );
1388 ev->setSummary( name + " - " + kind ); 1388 ev->setSummary( name + " - " + kind );
1389 ev->setOrganizer( "nobody@nowhere" ); 1389 ev->setOrganizer( "nobody@nowhere" );
1390 ev->setCategories( kind ); 1390 ev->setCategories( kind );
1391 ev->setDtStart( QDateTime(date) ); 1391 ev->setDtStart( QDateTime(date) );
1392 ev->setDtEnd( QDateTime(date) ); 1392 ev->setDtEnd( QDateTime(date) );
1393 ev->setFloats( true ); 1393 ev->setFloats( true );
1394 Recurrence * rec = ev->recurrence(); 1394 Recurrence * rec = ev->recurrence();
1395 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1395 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1396 rec->addYearlyNum( date.month() ); 1396 rec->addYearlyNum( date.month() );
1397 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1397 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1398 delete ev; 1398 delete ev;
1399 return false; 1399 return false;
1400 } 1400 }
1401 return true; 1401 return true;
1402 1402
1403} 1403}
1404bool CalendarView::importQtopia( const QString &categories, 1404bool CalendarView::importQtopia( const QString &categories,
1405 const QString &datebook, 1405 const QString &datebook,
1406 const QString &todolist ) 1406 const QString &todolist )
1407{ 1407{
1408 1408
1409 QtopiaFormat qtopiaFormat; 1409 QtopiaFormat qtopiaFormat;
1410 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1410 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1411 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1411 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1412 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1412 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1413 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1413 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1414 1414
1415 updateView(); 1415 updateView();
1416 return true; 1416 return true;
1417 1417
1418#if 0 1418#if 0
1419 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1419 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1420 mCurrentSyncDevice = "qtopia-XML"; 1420 mCurrentSyncDevice = "qtopia-XML";
1421 if ( KOPrefs::instance()->mAskForPreferences ) 1421 if ( KOPrefs::instance()->mAskForPreferences )
1422 edit_sync_options(); 1422 edit_sync_options();
1423 qApp->processEvents(); 1423 qApp->processEvents();
1424 CalendarLocal* calendar = new CalendarLocal(); 1424 CalendarLocal* calendar = new CalendarLocal();
1425 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1425 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1426 bool syncOK = false; 1426 bool syncOK = false;
1427 QtopiaFormat qtopiaFormat; 1427 QtopiaFormat qtopiaFormat;
1428 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1428 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1429 bool loadOk = true; 1429 bool loadOk = true;
1430 if ( !categories.isEmpty() ) 1430 if ( !categories.isEmpty() )
1431 loadOk = qtopiaFormat.load( calendar, categories ); 1431 loadOk = qtopiaFormat.load( calendar, categories );
1432 if ( loadOk && !datebook.isEmpty() ) 1432 if ( loadOk && !datebook.isEmpty() )
1433 loadOk = qtopiaFormat.load( calendar, datebook ); 1433 loadOk = qtopiaFormat.load( calendar, datebook );
1434 if ( loadOk && !todolist.isEmpty() ) 1434 if ( loadOk && !todolist.isEmpty() )
1435 loadOk = qtopiaFormat.load( calendar, todolist ); 1435 loadOk = qtopiaFormat.load( calendar, todolist );
1436 1436
1437 if ( loadOk ) { 1437 if ( loadOk ) {
1438 getEventViewerDialog()->setSyncMode( true ); 1438 getEventViewerDialog()->setSyncMode( true );
1439 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1439 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1440 getEventViewerDialog()->setSyncMode( false ); 1440 getEventViewerDialog()->setSyncMode( false );
1441 qApp->processEvents(); 1441 qApp->processEvents();
1442 if ( syncOK ) { 1442 if ( syncOK ) {
1443 if ( KOPrefs::instance()->mWriteBackFile ) 1443 if ( KOPrefs::instance()->mWriteBackFile )
1444 { 1444 {
1445 // write back XML file 1445 // write back XML file
1446 1446
1447 } 1447 }
1448 setModified( true ); 1448 setModified( true );
1449 } 1449 }
1450 } else { 1450 } else {
1451 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1451 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1452 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1452 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1453 question, i18n("Ok")) ; 1453 question, i18n("Ok")) ;
1454 } 1454 }
1455 delete calendar; 1455 delete calendar;
1456 updateView(); 1456 updateView();
1457 return syncOK; 1457 return syncOK;
1458 1458
1459 1459
1460#endif 1460#endif
1461 1461
1462} 1462}
1463 1463
1464void CalendarView::setSyncEventsReadOnly() 1464void CalendarView::setSyncEventsReadOnly()
1465{ 1465{
1466 Event * ev; 1466 Event * ev;
1467 QPtrList<Event> eL = mCalendar->rawEvents(); 1467 QPtrList<Event> eL = mCalendar->rawEvents();
1468 ev = eL.first(); 1468 ev = eL.first();
1469 while ( ev ) { 1469 while ( ev ) {
1470 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1470 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1471 ev->setReadOnly( true ); 1471 ev->setReadOnly( true );
1472 ev = eL.next(); 1472 ev = eL.next();
1473 } 1473 }
1474} 1474}
1475bool CalendarView::openCalendar(QString filename, bool merge) 1475bool CalendarView::openCalendar(QString filename, bool merge)
1476{ 1476{
1477 1477
1478 if (filename.isEmpty()) { 1478 if (filename.isEmpty()) {
1479 return false; 1479 return false;
1480 } 1480 }
1481 1481
1482 if (!QFile::exists(filename)) { 1482 if (!QFile::exists(filename)) {
1483 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1483 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1484 return false; 1484 return false;
1485 } 1485 }
1486 1486
1487 globalFlagBlockAgenda = 1; 1487 globalFlagBlockAgenda = 1;
1488 if (!merge) mCalendar->close(); 1488 if (!merge) mCalendar->close();
1489 1489
1490 mStorage->setFileName( filename ); 1490 mStorage->setFileName( filename );
1491 1491
1492 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) { 1492 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) {
1493 if ( merge ) ;//setModified( true ); 1493 if ( merge ) ;//setModified( true );
1494 else { 1494 else {
1495 //setModified( true ); 1495 //setModified( true );
1496 mViewManager->setDocumentId( filename ); 1496 mViewManager->setDocumentId( filename );
1497 mDialogManager->setDocumentId( filename ); 1497 mDialogManager->setDocumentId( filename );
1498 mTodoList->setDocumentId( filename ); 1498 mTodoList->setDocumentId( filename );
1499 } 1499 }
1500 globalFlagBlockAgenda = 2; 1500 globalFlagBlockAgenda = 2;
1501 // if ( getLastSyncEvent() ) 1501 // if ( getLastSyncEvent() )
1502 // getLastSyncEvent()->setReadOnly( true ); 1502 // getLastSyncEvent()->setReadOnly( true );
1503 mCalendar->reInitAlarmSettings(); 1503 mCalendar->reInitAlarmSettings();
1504 setSyncEventsReadOnly(); 1504 setSyncEventsReadOnly();
1505 updateUnmanagedViews(); 1505 updateUnmanagedViews();
1506 updateView(); 1506 updateView();
1507 if ( filename != MainWindow::defaultFileName() ) 1507 if ( filename != MainWindow::defaultFileName() )
1508 saveCalendar( MainWindow::defaultFileName() ); 1508 saveCalendar( MainWindow::defaultFileName() );
1509 loadedFileVersion = QDateTime::currentDateTime(); 1509 loadedFileVersion = QDateTime::currentDateTime();
1510 return true; 1510 return true;
1511 } else { 1511 } else {
1512 // while failing to load, the calendar object could 1512 // while failing to load, the calendar object could
1513 // have become partially populated. Clear it out. 1513 // have become partially populated. Clear it out.
1514 if ( !merge ) mCalendar->close(); 1514 if ( !merge ) mCalendar->close();
1515 1515
1516 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1516 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1517 1517
1518 globalFlagBlockAgenda = 2; 1518 globalFlagBlockAgenda = 2;
1519 updateView(); 1519 updateView();
1520 } 1520 }
1521 return false; 1521 return false;
1522} 1522}
1523void CalendarView::setLoadedFileVersion(QDateTime dt) 1523void CalendarView::setLoadedFileVersion(QDateTime dt)
1524{ 1524{
1525 loadedFileVersion = dt; 1525 loadedFileVersion = dt;
1526} 1526}
1527bool CalendarView::checkFileChanged(QString fn) 1527bool CalendarView::checkFileChanged(QString fn)
1528{ 1528{
1529 QFileInfo finf ( fn ); 1529 QFileInfo finf ( fn );
1530 if ( !finf.exists() ) 1530 if ( !finf.exists() )
1531 return true; 1531 return true;
1532 QDateTime dt = finf.lastModified (); 1532 QDateTime dt = finf.lastModified ();
1533 if ( dt <= loadedFileVersion ) 1533 if ( dt <= loadedFileVersion )
1534 return false; 1534 return false;
1535 return true; 1535 return true;
1536 1536
1537} 1537}
1538bool CalendarView::checkFileVersion(QString fn) 1538bool CalendarView::checkFileVersion(QString fn)
1539{ 1539{
1540 QFileInfo finf ( fn ); 1540 QFileInfo finf ( fn );
1541 if ( !finf.exists() ) 1541 if ( !finf.exists() )
1542 return true; 1542 return true;
1543 QDateTime dt = finf.lastModified (); 1543 QDateTime dt = finf.lastModified ();
1544 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1544 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1545 //qDebug("file on disk version %s",dt.toString().latin1()); 1545 //qDebug("file on disk version %s",dt.toString().latin1());
1546 if ( dt <= loadedFileVersion ) 1546 if ( dt <= loadedFileVersion )
1547 return true; 1547 return true;
1548 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, false)) , 1548 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, false)) ,
1549 i18n("KO/Pi Warning"),i18n("Overwrite"), 1549 i18n("KO/Pi Warning"),i18n("Overwrite"),
1550 i18n("Sync+save")); 1550 i18n("Sync+save"));
1551 1551
1552 if ( km == KMessageBox::Cancel ) 1552 if ( km == KMessageBox::Cancel )
1553 return false; 1553 return false;
1554 if ( km == KMessageBox::Yes ) 1554 if ( km == KMessageBox::Yes )
1555 return true; 1555 return true;
1556 1556
1557 setSyncDevice("deleteaftersync" ); 1557 setSyncDevice("deleteaftersync" );
1558 KOPrefs::instance()->mAskForPreferences = true; 1558 KOPrefs::instance()->mAskForPreferences = true;
1559 KOPrefs::instance()->mSyncAlgoPrefs = 3; 1559 KOPrefs::instance()->mSyncAlgoPrefs = 3;
1560 KOPrefs::instance()->mWriteBackFile = false; 1560 KOPrefs::instance()->mWriteBackFile = false;
1561 KOPrefs::instance()->mWriteBackExistingOnly = false; 1561 KOPrefs::instance()->mWriteBackExistingOnly = false;
1562 KOPrefs::instance()->mShowSyncSummary = false; 1562 KOPrefs::instance()->mShowSyncSummary = false;
1563 syncCalendar( fn, 3 ); 1563 syncCalendar( fn, 3 );
1564 Event * e = getLastSyncEvent(); 1564 Event * e = getLastSyncEvent();
1565 mCalendar->deleteEvent ( e ); 1565 mCalendar->deleteEvent ( e );
1566 updateView(); 1566 updateView();
1567 return true; 1567 return true;
1568} 1568}
1569 1569
1570bool CalendarView::saveCalendar( QString filename ) 1570bool CalendarView::saveCalendar( QString filename )
1571{ 1571{
1572 1572
1573 // Store back all unsaved data into calendar object 1573 // Store back all unsaved data into calendar object
1574 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1574 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1575 if ( mViewManager->currentView() ) 1575 if ( mViewManager->currentView() )
1576 mViewManager->currentView()->flushView(); 1576 mViewManager->currentView()->flushView();
1577 1577
1578 //mStorage->setFileName( filename ); 1578 //mStorage->setFileName( filename );
1579 1579
1580 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1580 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1581 mStorage->setFileName( filename ); 1581 mStorage->setFileName( filename );
1582 bool success; 1582 bool success;
1583 success = mStorage->save(); 1583 success = mStorage->save();
1584 if ( !success ) { 1584 if ( !success ) {
1585 return false; 1585 return false;
1586 } 1586 }
1587 1587
1588 return true; 1588 return true;
1589} 1589}
1590 1590
1591void CalendarView::closeCalendar() 1591void CalendarView::closeCalendar()
1592{ 1592{
1593 1593
1594 // child windows no longer valid 1594 // child windows no longer valid
1595 emit closingDown(); 1595 emit closingDown();
1596 1596
1597 mCalendar->close(); 1597 mCalendar->close();
1598 setModified(false); 1598 setModified(false);
1599 updateView(); 1599 updateView();
1600} 1600}
1601 1601
1602void CalendarView::archiveCalendar() 1602void CalendarView::archiveCalendar()
1603{ 1603{
1604 mDialogManager->showArchiveDialog(); 1604 mDialogManager->showArchiveDialog();
1605} 1605}
1606 1606
1607 1607
1608void CalendarView::readSettings() 1608void CalendarView::readSettings()
1609{ 1609{
1610 1610
1611 1611
1612 // mViewManager->showAgendaView(); 1612 // mViewManager->showAgendaView();
1613 QString str; 1613 QString str;
1614 //qDebug("CalendarView::readSettings() "); 1614 //qDebug("CalendarView::readSettings() ");
1615 // read settings from the KConfig, supplying reasonable 1615 // read settings from the KConfig, supplying reasonable
1616 // defaults where none are to be found 1616 // defaults where none are to be found
1617 KConfig *config = KOGlobals::config(); 1617 KConfig *config = KOGlobals::config();
1618#ifndef KORG_NOSPLITTER 1618#ifndef KORG_NOSPLITTER
1619 config->setGroup("KOrganizer Geometry"); 1619 config->setGroup("KOrganizer Geometry");
1620 1620
1621 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1621 QValueList<int> sizes = config->readIntListEntry("Separator1");
1622 if (sizes.count() != 2) { 1622 if (sizes.count() != 2) {
1623 sizes << mDateNavigator->minimumSizeHint().width(); 1623 sizes << mDateNavigator->minimumSizeHint().width();
1624 sizes << 300; 1624 sizes << 300;
1625 } 1625 }
1626 mPanner->setSizes(sizes); 1626 mPanner->setSizes(sizes);
1627 1627
1628 sizes = config->readIntListEntry("Separator2"); 1628 sizes = config->readIntListEntry("Separator2");
1629 if ( ( mResourceView && sizes.count() == 4 ) || 1629 if ( ( mResourceView && sizes.count() == 4 ) ||
1630 ( !mResourceView && sizes.count() == 3 ) ) { 1630 ( !mResourceView && sizes.count() == 3 ) ) {
1631 mLeftSplitter->setSizes(sizes); 1631 mLeftSplitter->setSizes(sizes);
1632 } 1632 }
1633#endif 1633#endif
1634 globalFlagBlockAgenda = 1; 1634 globalFlagBlockAgenda = 1;
1635 mViewManager->showAgendaView(); 1635 mViewManager->showAgendaView();
1636 //mViewManager->readSettings( config ); 1636 //mViewManager->readSettings( config );
1637 mTodoList->restoreLayout(config,QString("Todo Layout")); 1637 mTodoList->restoreLayout(config,QString("Todo Layout"));
1638 readFilterSettings(config); 1638 readFilterSettings(config);
1639 config->setGroup( "Views" ); 1639 config->setGroup( "Views" );
1640 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1640 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1641 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1641 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1642 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1642 else if ( dateCount == 7 ) mNavigator->selectWeek();
1643 else mNavigator->selectDates( dateCount ); 1643 else mNavigator->selectDates( dateCount );
1644 // mViewManager->readSettings( config ); 1644 // mViewManager->readSettings( config );
1645 updateConfig(); 1645 updateConfig();
1646 globalFlagBlockAgenda = 2; 1646 globalFlagBlockAgenda = 2;
1647 mViewManager->readSettings( config ); 1647 mViewManager->readSettings( config );
1648#ifdef DESKTOP_VERSION 1648#ifdef DESKTOP_VERSION
1649 config->setGroup("WidgetLayout"); 1649 config->setGroup("WidgetLayout");
1650 QStringList list; 1650 QStringList list;
1651 list = config->readListEntry("MainLayout"); 1651 list = config->readListEntry("MainLayout");
1652 int x,y,w,h; 1652 int x,y,w,h;
1653 if ( ! list.isEmpty() ) { 1653 if ( ! list.isEmpty() ) {
1654 x = list[0].toInt(); 1654 x = list[0].toInt();
1655 y = list[1].toInt(); 1655 y = list[1].toInt();
1656 w = list[2].toInt(); 1656 w = list[2].toInt();
1657 h = list[3].toInt(); 1657 h = list[3].toInt();
1658 topLevelWidget()->setGeometry(x,y,w,h); 1658 topLevelWidget()->setGeometry(x,y,w,h);
1659 1659
1660 } else { 1660 } else {
1661 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1661 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1662 } 1662 }
1663 list = config->readListEntry("EditEventLayout"); 1663 list = config->readListEntry("EditEventLayout");
1664 if ( ! list.isEmpty() ) { 1664 if ( ! list.isEmpty() ) {
1665 x = list[0].toInt(); 1665 x = list[0].toInt();
1666 y = list[1].toInt(); 1666 y = list[1].toInt();
1667 w = list[2].toInt(); 1667 w = list[2].toInt();
1668 h = list[3].toInt(); 1668 h = list[3].toInt();
1669 mEventEditor->setGeometry(x,y,w,h); 1669 mEventEditor->setGeometry(x,y,w,h);
1670 1670
1671 } 1671 }
1672 list = config->readListEntry("EditTodoLayout"); 1672 list = config->readListEntry("EditTodoLayout");
1673 if ( ! list.isEmpty() ) { 1673 if ( ! list.isEmpty() ) {
1674 x = list[0].toInt(); 1674 x = list[0].toInt();
1675 y = list[1].toInt(); 1675 y = list[1].toInt();
1676 w = list[2].toInt(); 1676 w = list[2].toInt();
1677 h = list[3].toInt(); 1677 h = list[3].toInt();
1678 mTodoEditor->setGeometry(x,y,w,h); 1678 mTodoEditor->setGeometry(x,y,w,h);
1679 1679
1680 } 1680 }
1681 list = config->readListEntry("ViewerLayout"); 1681 list = config->readListEntry("ViewerLayout");
1682 if ( ! list.isEmpty() ) { 1682 if ( ! list.isEmpty() ) {
1683 x = list[0].toInt(); 1683 x = list[0].toInt();
1684 y = list[1].toInt(); 1684 y = list[1].toInt();
1685 w = list[2].toInt(); 1685 w = list[2].toInt();
1686 h = list[3].toInt(); 1686 h = list[3].toInt();
1687 getEventViewerDialog()->setGeometry(x,y,w,h); 1687 getEventViewerDialog()->setGeometry(x,y,w,h);
1688 } 1688 }
1689#endif 1689#endif
1690 1690
1691} 1691}
1692 1692
1693 1693
1694void CalendarView::writeSettings() 1694void CalendarView::writeSettings()
1695{ 1695{
1696 // kdDebug() << "CalendarView::writeSettings" << endl; 1696 // kdDebug() << "CalendarView::writeSettings" << endl;
1697 1697
1698 KConfig *config = KOGlobals::config(); 1698 KConfig *config = KOGlobals::config();
1699 1699
1700#ifndef KORG_NOSPLITTER 1700#ifndef KORG_NOSPLITTER
1701 config->setGroup("KOrganizer Geometry"); 1701 config->setGroup("KOrganizer Geometry");
1702 1702
1703 QValueList<int> list = mPanner->sizes(); 1703 QValueList<int> list = mPanner->sizes();
1704 config->writeEntry("Separator1",list); 1704 config->writeEntry("Separator1",list);
1705 1705
1706 list = mLeftSplitter->sizes(); 1706 list = mLeftSplitter->sizes();
1707 config->writeEntry("Separator2",list); 1707 config->writeEntry("Separator2",list);
1708#endif 1708#endif
1709 1709
1710 mViewManager->writeSettings( config ); 1710 mViewManager->writeSettings( config );
1711 mTodoList->saveLayout(config,QString("Todo Layout")); 1711 mTodoList->saveLayout(config,QString("Todo Layout"));
1712 mDialogManager->writeSettings( config ); 1712 mDialogManager->writeSettings( config );
1713 //KOPrefs::instance()->usrWriteConfig(); 1713 //KOPrefs::instance()->usrWriteConfig();
1714 KOPrefs::instance()->writeConfig(); 1714 KOPrefs::instance()->writeConfig();
1715 1715
1716 writeFilterSettings(config); 1716 writeFilterSettings(config);
1717 1717
1718 config->setGroup( "Views" ); 1718 config->setGroup( "Views" );
1719 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 1719 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1720 1720
1721#ifdef DESKTOP_VERSION 1721#ifdef DESKTOP_VERSION
1722 config->setGroup("WidgetLayout"); 1722 config->setGroup("WidgetLayout");
1723 QStringList list ;//= config->readListEntry("MainLayout"); 1723 QStringList list ;//= config->readListEntry("MainLayout");
1724 int x,y,w,h; 1724 int x,y,w,h;
1725 QWidget* wid; 1725 QWidget* wid;
1726 wid = topLevelWidget(); 1726 wid = topLevelWidget();
1727 x = wid->geometry().x(); 1727 x = wid->geometry().x();
1728 y = wid->geometry().y(); 1728 y = wid->geometry().y();
1729 w = wid->width(); 1729 w = wid->width();
1730 h = wid->height(); 1730 h = wid->height();
1731 list.clear(); 1731 list.clear();
1732 list << QString::number( x ); 1732 list << QString::number( x );
1733 list << QString::number( y ); 1733 list << QString::number( y );
1734 list << QString::number( w ); 1734 list << QString::number( w );
1735 list << QString::number( h ); 1735 list << QString::number( h );
1736 config->writeEntry("MainLayout",list ); 1736 config->writeEntry("MainLayout",list );
1737 1737
1738 wid = mEventEditor; 1738 wid = mEventEditor;
1739 x = wid->geometry().x(); 1739 x = wid->geometry().x();
1740 y = wid->geometry().y(); 1740 y = wid->geometry().y();
1741 w = wid->width(); 1741 w = wid->width();
1742 h = wid->height(); 1742 h = wid->height();
1743 list.clear(); 1743 list.clear();
1744 list << QString::number( x ); 1744 list << QString::number( x );
1745 list << QString::number( y ); 1745 list << QString::number( y );
1746 list << QString::number( w ); 1746 list << QString::number( w );
1747 list << QString::number( h ); 1747 list << QString::number( h );
1748 config->writeEntry("EditEventLayout",list ); 1748 config->writeEntry("EditEventLayout",list );
1749 1749
1750 wid = mTodoEditor; 1750 wid = mTodoEditor;
1751 x = wid->geometry().x(); 1751 x = wid->geometry().x();
1752 y = wid->geometry().y(); 1752 y = wid->geometry().y();
1753 w = wid->width(); 1753 w = wid->width();
1754 h = wid->height(); 1754 h = wid->height();
1755 list.clear(); 1755 list.clear();
1756 list << QString::number( x ); 1756 list << QString::number( x );
1757 list << QString::number( y ); 1757 list << QString::number( y );
1758 list << QString::number( w ); 1758 list << QString::number( w );
1759 list << QString::number( h ); 1759 list << QString::number( h );
1760 config->writeEntry("EditTodoLayout",list ); 1760 config->writeEntry("EditTodoLayout",list );
1761 wid = getEventViewerDialog(); 1761 wid = getEventViewerDialog();
1762 x = wid->geometry().x(); 1762 x = wid->geometry().x();
1763 y = wid->geometry().y(); 1763 y = wid->geometry().y();
1764 w = wid->width(); 1764 w = wid->width();
1765 h = wid->height(); 1765 h = wid->height();
1766 list.clear(); 1766 list.clear();
1767 list << QString::number( x ); 1767 list << QString::number( x );
1768 list << QString::number( y ); 1768 list << QString::number( y );
1769 list << QString::number( w ); 1769 list << QString::number( w );
1770 list << QString::number( h ); 1770 list << QString::number( h );
diff --git a/libkcal/sharpformat.cpp b/libkcal/sharpformat.cpp
index 89eb72f..a53b3f8 100644
--- a/libkcal/sharpformat.cpp
+++ b/libkcal/sharpformat.cpp
@@ -1,1019 +1,1019 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2003 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#include <qdatetime.h> 22#include <qdatetime.h>
23#include <qstring.h> 23#include <qstring.h>
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26#include <qregexp.h> 26#include <qregexp.h>
27#include <qmessagebox.h> 27#include <qmessagebox.h>
28#include <qclipboard.h> 28#include <qclipboard.h>
29#include <qfile.h> 29#include <qfile.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qtextcodec.h> 31#include <qtextcodec.h>
32#include <qxml.h> 32#include <qxml.h>
33#include <qlabel.h> 33#include <qlabel.h>
34 34
35#include <kdebug.h> 35#include <kdebug.h>
36#include <klocale.h> 36#include <klocale.h>
37#include <kglobal.h> 37#include <kglobal.h>
38 38
39#include "calendar.h" 39#include "calendar.h"
40#include "alarm.h" 40#include "alarm.h"
41#include "recurrence.h" 41#include "recurrence.h"
42#include "calendarlocal.h" 42#include "calendarlocal.h"
43 43
44#include "sharpformat.h" 44#include "sharpformat.h"
45#include "syncdefines.h" 45#include "syncdefines.h"
46 46
47using namespace KCal; 47using namespace KCal;
48 48
49//CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY 49//CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY
50// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 50// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
51 51
52//ARSD silentalarm = 0 52//ARSD silentalarm = 0
53// 11 RTYP 225 no /0 dialy/ 1 weekly/ 3 month by date/ 2 month by day(pos)/ yearly 53// 11 RTYP 225 no /0 dialy/ 1 weekly/ 3 month by date/ 2 month by day(pos)/ yearly
54// 12 RFRQ 54// 12 RFRQ
55// 13 RPOS pos = 4. monday in month 55// 13 RPOS pos = 4. monday in month
56// 14 RDYS days: 1 mon/ 2 tue .. 64 sun 56// 14 RDYS days: 1 mon/ 2 tue .. 64 sun
57// 15 REND 0 = no end/ 1 = end 57// 15 REND 0 = no end/ 1 = end
58// 16 REDT rec end dt 58// 16 REDT rec end dt
59//ALSD 59//ALSD
60//ALED 60//ALED
61//MDAY 61//MDAY
62 62
63class SharpParser : public QObject 63class SharpParser : public QObject
64{ 64{
65 public: 65 public:
66 SharpParser( Calendar *calendar ) : mCalendar( calendar ) { 66 SharpParser( Calendar *calendar ) : mCalendar( calendar ) {
67 oldCategories = 0; 67 oldCategories = 0;
68 } 68 }
69 69
70 bool startElement( Calendar *existingCalendar, const QStringList & attList, QString qName ) 70 bool startElement( Calendar *existingCalendar, const QStringList & attList, QString qName )
71 { 71 {
72 int i = 1; 72 int i = 1;
73 bool skip = true; 73 bool skip = true;
74 int max = attList.count() -2; 74 int max = attList.count() -2;
75 while ( i < max ) { 75 while ( i < max ) {
76 if ( !attList[i].isEmpty() ) { 76 if ( !attList[i].isEmpty() ) {
77 skip = false; 77 skip = false;
78 break; 78 break;
79 } 79 }
80 ++i ; 80 ++i ;
81 } 81 }
82 if ( skip ) 82 if ( skip )
83 return false; 83 return false;
84 ulong cSum = SharpFormat::getCsum(attList ); 84 ulong cSum = SharpFormat::getCsum(attList );
85 85
86 if ( qName == "Event" ) { 86 if ( qName == "Event" ) {
87 Event *event; 87 Event *event;
88 event = existingCalendar->event( "Sharp_DTM",attList[0] ); 88 event = existingCalendar->event( "Sharp_DTM",attList[0] );
89 if ( event ) 89 if ( event )
90 event = (Event*)event->clone(); 90 event = (Event*)event->clone();
91 else 91 else
92 event = new Event; 92 event = new Event;
93 event->setID("Sharp_DTM", attList[0] ); 93 event->setID("Sharp_DTM", attList[0] );
94 event->setCsum( "Sharp_DTM", QString::number( cSum )); 94 event->setCsum( "Sharp_DTM", QString::number( cSum ));
95 event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL ); 95 event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL );
96 96
97 event->setSummary( attList[2] ); 97 event->setSummary( attList[2] );
98 event->setLocation( attList[3] ); 98 event->setLocation( attList[3] );
99 event->setDescription( attList[4] ); 99 event->setDescription( attList[4] );
100 if ( attList[7] == "1" ) { 100 if ( attList[7] == "1" ) {
101 event->setDtStart( QDateTime(fromString( attList[17]+"T000000", false ).date(),QTime(0,0,0 ) )); 101 event->setDtStart( QDateTime(fromString( attList[17]+"T000000", false ).date(),QTime(0,0,0 ) ));
102 event->setDtEnd( QDateTime(fromString( attList[18]+"T000000", false ).date(),QTime(0,0,0 ))); 102 event->setDtEnd( QDateTime(fromString( attList[18]+"T000000", false ).date(),QTime(0,0,0 )));
103 event->setFloats( true ); 103 event->setFloats( true );
104 } else { 104 } else {
105 event->setFloats( false ); 105 event->setFloats( false );
106 event->setDtStart( fromString( attList[5] ) ); 106 event->setDtStart( fromString( attList[5] ) );
107 event->setDtEnd( fromString( attList[6] )); 107 event->setDtEnd( fromString( attList[6] ));
108 } 108 }
109 109
110 QString rtype = attList[11]; 110 QString rtype = attList[11];
111 if ( rtype != "255" ) { 111 if ( rtype != "255" ) {
112 // qDebug("recurs "); 112 // qDebug("recurs ");
113 QDate startDate = event->dtStart().date(); 113 QDate startDate = event->dtStart().date();
114 114
115 QString freqStr = attList[12]; 115 QString freqStr = attList[12];
116 int freq = freqStr.toInt(); 116 int freq = freqStr.toInt();
117 117
118 QString hasEndDateStr = attList[15] ; 118 QString hasEndDateStr = attList[15] ;
119 bool hasEndDate = hasEndDateStr == "1"; 119 bool hasEndDate = hasEndDateStr == "1";
120 120
121 QString endDateStr = attList[16]; 121 QString endDateStr = attList[16];
122 QDate endDate = fromString( endDateStr ).date(); 122 QDate endDate = fromString( endDateStr ).date();
123 123
124 QString weekDaysStr = attList[14]; 124 QString weekDaysStr = attList[14];
125 uint weekDaysNum = weekDaysStr.toInt(); 125 uint weekDaysNum = weekDaysStr.toInt();
126 126
127 QBitArray weekDays( 7 ); 127 QBitArray weekDays( 7 );
128 int i; 128 int i;
129 int bb = 1; 129 int bb = 1;
130 for( i = 1; i <= 7; ++i ) { 130 for( i = 1; i <= 7; ++i ) {
131 weekDays.setBit( i - 1, ( bb & weekDaysNum )); 131 weekDays.setBit( i - 1, ( bb & weekDaysNum ));
132 bb = 2 << (i-1); 132 bb = 2 << (i-1);
133 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) ); 133 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) );
134 } 134 }
135 // qDebug("next "); 135 // qDebug("next ");
136 QString posStr = attList[13]; 136 QString posStr = attList[13];
137 int pos = posStr.toInt(); 137 int pos = posStr.toInt();
138 Recurrence *r = event->recurrence(); 138 Recurrence *r = event->recurrence();
139 139
140 if ( rtype == "0" ) { 140 if ( rtype == "0" ) {
141 if ( hasEndDate ) r->setDaily( freq, endDate ); 141 if ( hasEndDate ) r->setDaily( freq, endDate );
142 else r->setDaily( freq, -1 ); 142 else r->setDaily( freq, -1 );
143 } else if ( rtype == "1" ) { 143 } else if ( rtype == "1" ) {
144 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate ); 144 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate );
145 else r->setWeekly( freq, weekDays, -1 ); 145 else r->setWeekly( freq, weekDays, -1 );
146 } else if ( rtype == "3" ) { 146 } else if ( rtype == "3" ) {
147 if ( hasEndDate ) 147 if ( hasEndDate )
148 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate ); 148 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate );
149 else 149 else
150 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 ); 150 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 );
151 r->addMonthlyDay( startDate.day() ); 151 r->addMonthlyDay( startDate.day() );
152 } else if ( rtype == "2" ) { 152 } else if ( rtype == "2" ) {
153 if ( hasEndDate ) 153 if ( hasEndDate )
154 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 154 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
155 else 155 else
156 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 ); 156 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 );
157 QBitArray days( 7 ); 157 QBitArray days( 7 );
158 days.fill( false ); 158 days.fill( false );
159 days.setBit( startDate.dayOfWeek() - 1 ); 159 days.setBit( startDate.dayOfWeek() - 1 );
160 r->addMonthlyPos( pos, days ); 160 r->addMonthlyPos( pos, days );
161 } else if ( rtype == "4" ) { 161 } else if ( rtype == "4" ) {
162 if ( hasEndDate ) 162 if ( hasEndDate )
163 r->setYearly( Recurrence::rYearlyMonth, freq, endDate ); 163 r->setYearly( Recurrence::rYearlyMonth, freq, endDate );
164 else 164 else
165 r->setYearly( Recurrence::rYearlyMonth, freq, -1 ); 165 r->setYearly( Recurrence::rYearlyMonth, freq, -1 );
166 r->addYearlyNum( startDate.month() ); 166 r->addYearlyNum( startDate.month() );
167 } 167 }
168 } else { 168 } else {
169 event->recurrence()->unsetRecurs(); 169 event->recurrence()->unsetRecurs();
170 } 170 }
171 171
172 QString categoryList = attList[1] ; 172 QString categoryList = attList[1] ;
173 event->setCategories( lookupCategories( categoryList ) ); 173 event->setCategories( lookupCategories( categoryList ) );
174 174
175 // strange 0 semms to mean: alarm enabled 175 // strange 0 semms to mean: alarm enabled
176 if ( attList[8] == "0" ) { 176 if ( attList[8] == "0" ) {
177 Alarm *alarm; 177 Alarm *alarm;
178 if ( event->alarms().count() > 0 ) 178 if ( event->alarms().count() > 0 )
179 alarm = event->alarms().first(); 179 alarm = event->alarms().first();
180 else { 180 else {
181 alarm = new Alarm( event ); 181 alarm = new Alarm( event );
182 event->addAlarm( alarm ); 182 event->addAlarm( alarm );
183 alarm->setType( Alarm::Audio ); 183 alarm->setType( Alarm::Audio );
184 } 184 }
185 //alarm->setType( Alarm::Audio ); 185 //alarm->setType( Alarm::Audio );
186 alarm->setEnabled( true ); 186 alarm->setEnabled( true );
187 int alarmOffset = attList[9].toInt(); 187 int alarmOffset = attList[9].toInt();
188 alarm->setStartOffset( alarmOffset * -60 ); 188 alarm->setStartOffset( alarmOffset * -60 );
189 } else { 189 } else {
190 Alarm *alarm; 190 Alarm *alarm;
191 if ( event->alarms().count() > 0 ) { 191 if ( event->alarms().count() > 0 ) {
192 alarm = event->alarms().first(); 192 alarm = event->alarms().first();
193 alarm->setType( Alarm::Audio ); 193 alarm->setType( Alarm::Audio );
194 alarm->setStartOffset( -60*15 ); 194 alarm->setStartOffset( -60*15 );
195 alarm->setEnabled( false ); 195 alarm->setEnabled( false );
196 } 196 }
197 } 197 }
198 198
199 mCalendar->addEvent( event); 199 mCalendar->addEvent( event);
200 } else if ( qName == "Todo" ) { 200 } else if ( qName == "Todo" ) {
201 Todo *todo; 201 Todo *todo;
202 202
203 todo = existingCalendar->todo( "Sharp_DTM", attList[0] ); 203 todo = existingCalendar->todo( "Sharp_DTM", attList[0] );
204 if (todo ) 204 if (todo )
205 todo = (Todo*)todo->clone(); 205 todo = (Todo*)todo->clone();
206 else 206 else
207 todo = new Todo; 207 todo = new Todo;
208 208
209//CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1 209//CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1
210// 0 1 2 3 4 5 6 7 8 210// 0 1 2 3 4 5 6 7 8
211//1,,,,,1,4,Loch zumachen,"" 211//1,,,,,1,4,Loch zumachen,""
212//3,Privat,20040317T000000,20040318T000000,20040319T000000,0,5,Call bbb,"notes123 bbb gggg ""bb "" " 212//3,Privat,20040317T000000,20040318T000000,20040319T000000,0,5,Call bbb,"notes123 bbb gggg ""bb "" "
213//2,"Familie,Freunde,Holiday",20040318T000000,20040324T000000,20040317T000000,1,2,tod2,notes 213//2,"Familie,Freunde,Holiday",20040318T000000,20040324T000000,20040317T000000,1,2,tod2,notes
214 214
215 todo->setID( "Sharp_DTM", attList[0]); 215 todo->setID( "Sharp_DTM", attList[0]);
216 todo->setCsum( "Sharp_DTM", QString::number( cSum )); 216 todo->setCsum( "Sharp_DTM", QString::number( cSum ));
217 todo->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 217 todo->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
218 218
219 todo->setSummary( attList[7] ); 219 todo->setSummary( attList[7] );
220 todo->setDescription( attList[8]); 220 todo->setDescription( attList[8]);
221 221
222 int priority = attList[6].toInt(); 222 int priority = attList[6].toInt();
223 if ( priority == 0 ) priority = 3; 223 if ( priority == 0 ) priority = 3;
224 todo->setPriority( priority ); 224 todo->setPriority( priority );
225 225
226 QString categoryList = attList[1]; 226 QString categoryList = attList[1];
227 todo->setCategories( lookupCategories( categoryList ) ); 227 todo->setCategories( lookupCategories( categoryList ) );
228 228
229 229
230 230
231 QString hasDateStr = attList[3]; // due 231 QString hasDateStr = attList[3]; // due
232 if ( !hasDateStr.isEmpty() ) { 232 if ( !hasDateStr.isEmpty() ) {
233 if ( hasDateStr.right(6) == "000000" ) { 233 if ( hasDateStr.right(6) == "000000" ) {
234 todo->setDtDue( QDateTime(fromString( hasDateStr, false ).date(), QTime(0,0,0 )) ); 234 todo->setDtDue( QDateTime(fromString( hasDateStr, false ).date(), QTime(0,0,0 )) );
235 todo->setFloats( true ); 235 todo->setFloats( true );
236 } 236 }
237 else { 237 else {
238 todo->setDtDue( fromString( hasDateStr ) ); 238 todo->setDtDue( fromString( hasDateStr ) );
239 todo->setFloats( false ); 239 todo->setFloats( false );
240 } 240 }
241 241
242 todo->setHasDueDate( true ); 242 todo->setHasDueDate( true );
243 } 243 }
244 hasDateStr = attList[2];//start 244 hasDateStr = attList[2];//start
245 if ( !hasDateStr.isEmpty() ) { 245 if ( !hasDateStr.isEmpty() ) {
246 246
247 todo->setDtStart( fromString( hasDateStr ) ); 247 todo->setDtStart( fromString( hasDateStr ) );
248 todo->setHasStartDate( true); 248 todo->setHasStartDate( true);
249 } else 249 } else
250 todo->setHasStartDate( false ); 250 todo->setHasStartDate( false );
251 hasDateStr = attList[4];//completed 251 hasDateStr = attList[4];//completed
252 if ( !hasDateStr.isEmpty() ) { 252 if ( !hasDateStr.isEmpty() ) {
253 todo->setCompleted(fromString( hasDateStr ) ); 253 todo->setCompleted(fromString( hasDateStr ) );
254 } 254 }
255 QString completedStr = attList[5]; 255 QString completedStr = attList[5];
256 if ( completedStr == "0" ) 256 if ( completedStr == "0" )
257 todo->setCompleted( true ); 257 todo->setCompleted( true );
258 else 258 else
259 todo->setCompleted( false ); 259 todo->setCompleted( false );
260 mCalendar->addTodo( todo ); 260 mCalendar->addTodo( todo );
261 261
262 } else if ( qName == "Category" ) { 262 } else if ( qName == "Category" ) {
263 /* 263 /*
264 QString id = attributes.value( "id" ); 264 QString id = attributes.value( "id" );
265 QString name = attributes.value( "name" ); 265 QString name = attributes.value( "name" );
266 setCategory( id, name ); 266 setCategory( id, name );
267 */ 267 */
268 } 268 }
269 //qDebug("end "); 269 //qDebug("end ");
270 return true; 270 return true;
271 } 271 }
272 272
273 273
274 void setCategoriesList ( QStringList * c ) 274 void setCategoriesList ( QStringList * c )
275 { 275 {
276 oldCategories = c; 276 oldCategories = c;
277 } 277 }
278 278
279 QDateTime fromString ( QString s, bool useTz = true ) { 279 QDateTime fromString ( QString s, bool useTz = true ) {
280 QDateTime dt; 280 QDateTime dt;
281 int y,m,t,h,min,sec; 281 int y,m,t,h,min,sec;
282 y = s.mid(0,4).toInt(); 282 y = s.mid(0,4).toInt();
283 m = s.mid(4,2).toInt(); 283 m = s.mid(4,2).toInt();
284 t = s.mid(6,2).toInt(); 284 t = s.mid(6,2).toInt();
285 h = s.mid(9,2).toInt(); 285 h = s.mid(9,2).toInt();
286 min = s.mid(11,2).toInt(); 286 min = s.mid(11,2).toInt();
287 sec = s.mid(13,2).toInt(); 287 sec = s.mid(13,2).toInt();
288 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec)); 288 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec));
289 int offset = KGlobal::locale()->localTimeOffset( dt ); 289 int offset = KGlobal::locale()->localTimeOffset( dt );
290 if ( useTz ) 290 if ( useTz )
291 dt = dt.addSecs ( offset*60); 291 dt = dt.addSecs ( offset*60);
292 return dt; 292 return dt;
293 293
294 } 294 }
295 protected: 295 protected:
296 QDateTime toDateTime( const QString &value ) 296 QDateTime toDateTime( const QString &value )
297 { 297 {
298 QDateTime dt; 298 QDateTime dt;
299 dt.setTime_t( value.toUInt() ); 299 dt.setTime_t( value.toUInt() );
300 300
301 return dt; 301 return dt;
302 } 302 }
303 303
304 QStringList lookupCategories( const QString &categoryList ) 304 QStringList lookupCategories( const QString &categoryList )
305 { 305 {
306 QStringList categoryIds = QStringList::split( ";", categoryList ); 306 QStringList categoryIds = QStringList::split( ";", categoryList );
307 QStringList categories; 307 QStringList categories;
308 QStringList::ConstIterator it; 308 QStringList::ConstIterator it;
309 for( it = categoryIds.begin(); it != categoryIds.end(); ++it ) { 309 for( it = categoryIds.begin(); it != categoryIds.end(); ++it ) {
310 QString cate = category( *it ); 310 QString cate = category( *it );
311 if ( oldCategories ) { 311 if ( oldCategories ) {
312 if ( ! oldCategories->contains( cate ) ) 312 if ( ! oldCategories->contains( cate ) )
313 oldCategories->append( cate ); 313 oldCategories->append( cate );
314 } 314 }
315 categories.append(cate ); 315 categories.append(cate );
316 } 316 }
317 return categories; 317 return categories;
318 } 318 }
319 319
320 private: 320 private:
321 Calendar *mCalendar; 321 Calendar *mCalendar;
322 QStringList * oldCategories; 322 QStringList * oldCategories;
323 static QString category( const QString &id ) 323 static QString category( const QString &id )
324 { 324 {
325 QMap<QString,QString>::ConstIterator it = mCategoriesMap.find( id ); 325 QMap<QString,QString>::ConstIterator it = mCategoriesMap.find( id );
326 if ( it == mCategoriesMap.end() ) return id; 326 if ( it == mCategoriesMap.end() ) return id;
327 else return *it; 327 else return *it;
328 } 328 }
329 329
330 static void setCategory( const QString &id, const QString &name ) 330 static void setCategory( const QString &id, const QString &name )
331 { 331 {
332 mCategoriesMap.insert( id, name ); 332 mCategoriesMap.insert( id, name );
333 } 333 }
334 334
335 static QMap<QString,QString> mCategoriesMap; 335 static QMap<QString,QString> mCategoriesMap;
336}; 336};
337 337
338QMap<QString,QString> SharpParser::mCategoriesMap; 338QMap<QString,QString> SharpParser::mCategoriesMap;
339 339
340SharpFormat::SharpFormat() 340SharpFormat::SharpFormat()
341{ 341{
342 mCategories = 0; 342 mCategories = 0;
343} 343}
344 344
345SharpFormat::~SharpFormat() 345SharpFormat::~SharpFormat()
346{ 346{
347} 347}
348ulong SharpFormat::getCsum( const QStringList & attList) 348ulong SharpFormat::getCsum( const QStringList & attList)
349{ 349{
350 int max = attList.count() -1; 350 int max = attList.count() -1;
351 ulong cSum = 0; 351 ulong cSum = 0;
352 int j,k,i; 352 int j,k,i;
353 int add; 353 int add;
354 for ( i = 1; i < max ; ++i ) { 354 for ( i = 1; i < max ; ++i ) {
355 QString s = attList[i]; 355 QString s = attList[i];
356 if ( ! s.isEmpty() ){ 356 if ( ! s.isEmpty() ){
357 j = s.length(); 357 j = s.length();
358 for ( k = 0; k < j; ++k ) { 358 for ( k = 0; k < j; ++k ) {
359 int mul = k +1; 359 int mul = k +1;
360 add = s[k].unicode (); 360 add = s[k].unicode ();
361 if ( k < 16 ) 361 if ( k < 16 )
362 mul = mul * mul; 362 mul = mul * mul;
363 add = add * mul *i*i*i; 363 add = add * mul *i*i*i;
364 cSum += add; 364 cSum += add;
365 } 365 }
366 } 366 }
367 } 367 }
368 return cSum; 368 return cSum;
369 369
370} 370}
371#include <stdlib.h> 371#include <stdlib.h>
372//#define DEBUGMODE false 372#define DEBUGMODE false
373#define DEBUGMODE true 373//#define DEBUGMODE true
374bool SharpFormat::load( Calendar *calendar, Calendar *existngCal ) 374bool SharpFormat::load( Calendar *calendar, Calendar *existngCal )
375{ 375{
376 376
377 377
378 bool debug = DEBUGMODE; 378 bool debug = DEBUGMODE;
379 QString text; 379 QString text;
380 QString codec = "utf8"; 380 QString codec = "utf8";
381 QLabel status ( i18n("Reading events ..."), 0 ); 381 QLabel status ( i18n("Reading events ..."), 0 );
382 382
383 int w = status.sizeHint().width()+20 ; 383 int w = status.sizeHint().width()+20 ;
384 if ( w < 200 ) w = 200; 384 if ( w < 200 ) w = 200;
385 int h = status.sizeHint().height()+20 ; 385 int h = status.sizeHint().height()+20 ;
386 int dw = QApplication::desktop()->width(); 386 int dw = QApplication::desktop()->width();
387 int dh = QApplication::desktop()->height(); 387 int dh = QApplication::desktop()->height();
388 status.setCaption(i18n("Reading DTM Data") ); 388 status.setCaption(i18n("Reading DTM Data") );
389 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 389 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
390 status.show(); 390 status.show();
391 status.raise(); 391 status.raise();
392 qApp->processEvents(); 392 qApp->processEvents();
393 QString fileName; 393 QString fileName;
394 if ( ! debug ) { 394 if ( ! debug ) {
395 fileName = "/tmp/kopitempout"; 395 fileName = "/tmp/kopitempout";
396 QString command ="db2file datebook -r -c "+ codec + " > " + fileName; 396 QString command ="db2file datebook -r -c "+ codec + " > " + fileName;
397 system ( command.latin1() ); 397 system ( command.latin1() );
398 } else { 398 } else {
399 fileName = "/tmp/events.txt"; 399 fileName = "/tmp/events.txt";
400 400
401 } 401 }
402 QFile file( fileName ); 402 QFile file( fileName );
403 if (!file.open( IO_ReadOnly ) ) { 403 if (!file.open( IO_ReadOnly ) ) {
404 return false; 404 return false;
405 405
406 } 406 }
407 QTextStream ts( &file ); 407 QTextStream ts( &file );
408 ts.setCodec( QTextCodec::codecForName("utf8") ); 408 ts.setCodec( QTextCodec::codecForName("utf8") );
409 text = ts.read(); 409 text = ts.read();
410 file.close(); 410 file.close();
411 status.setText( i18n("Processing events ...") ); 411 status.setText( i18n("Processing events ...") );
412 status.raise(); 412 status.raise();
413 qApp->processEvents(); 413 qApp->processEvents();
414 fromString2Cal( calendar, existngCal, text, "Event" ); 414 fromString2Cal( calendar, existngCal, text, "Event" );
415 status.setText( i18n("Reading todos ...") ); 415 status.setText( i18n("Reading todos ...") );
416 qApp->processEvents(); 416 qApp->processEvents();
417 if ( ! debug ) { 417 if ( ! debug ) {
418 fileName = "/tmp/kopitempout"; 418 fileName = "/tmp/kopitempout";
419 QString command = "db2file todo -r -c " + codec+ " > " + fileName; 419 QString command = "db2file todo -r -c " + codec+ " > " + fileName;
420 system ( command.latin1() ); 420 system ( command.latin1() );
421 } else { 421 } else {
422 fileName = "/tmp/todo.txt"; 422 fileName = "/tmp/todo.txt";
423 } 423 }
424 file.setName( fileName ); 424 file.setName( fileName );
425 if (!file.open( IO_ReadOnly ) ) { 425 if (!file.open( IO_ReadOnly ) ) {
426 return false; 426 return false;
427 427
428 } 428 }
429 ts.setDevice( &file ); 429 ts.setDevice( &file );
430 text = ts.read(); 430 text = ts.read();
431 file.close(); 431 file.close();
432 432
433 status.setText( i18n("Processing todos ...") ); 433 status.setText( i18n("Processing todos ...") );
434 status.raise(); 434 status.raise();
435 qApp->processEvents(); 435 qApp->processEvents();
436 fromString2Cal( calendar, existngCal, text, "Todo" ); 436 fromString2Cal( calendar, existngCal, text, "Todo" );
437 return true; 437 return true;
438} 438}
439int SharpFormat::getNumFromRecord( QString answer, Incidence* inc ) 439int SharpFormat::getNumFromRecord( QString answer, Incidence* inc )
440{ 440{
441 int retval = -1; 441 int retval = -1;
442 QStringList templist; 442 QStringList templist;
443 QString tempString; 443 QString tempString;
444 int start = 0; 444 int start = 0;
445 int len = answer.length(); 445 int len = answer.length();
446 int end = answer.find ("\n",start)+1; 446 int end = answer.find ("\n",start)+1;
447 bool ok = true; 447 bool ok = true;
448 start = end; 448 start = end;
449 int ccc = 0; 449 int ccc = 0;
450 while ( start > 0 ) { 450 while ( start > 0 ) {
451 templist.clear(); 451 templist.clear();
452 ok = true; 452 ok = true;
453 int loopCount = 0; 453 int loopCount = 0;
454 while ( ok ) { 454 while ( ok ) {
455 ++loopCount; 455 ++loopCount;
456 if ( loopCount > 25 ) { 456 if ( loopCount > 25 ) {
457 qDebug("KO: Error in while loop"); 457 qDebug("KO: Error in while loop");
458 ok = false; 458 ok = false;
459 start = 0; 459 start = 0;
460 break; 460 break;
461 } 461 }
462 if ( ok ) 462 if ( ok )
463 tempString = getPart( answer, ok, start ); 463 tempString = getPart( answer, ok, start );
464 if ( start >= len || start == 0 ) { 464 if ( start >= len || start == 0 ) {
465 start = 0; 465 start = 0;
466 ok = false; 466 ok = false;
467 } 467 }
468 if ( tempString.right(1) =="\n" ) 468 if ( tempString.right(1) =="\n" )
469 tempString = tempString.left( tempString.length()-1); 469 tempString = tempString.left( tempString.length()-1);
470 470
471 templist.append( tempString ); 471 templist.append( tempString );
472 } 472 }
473 ++ccc; 473 ++ccc;
474 if ( ccc == 2 && loopCount < 25 ) { 474 if ( ccc == 2 && loopCount < 25 ) {
475 start = 0; 475 start = 0;
476 bool ok; 476 bool ok;
477 int newnum = templist[0].toInt( &ok ); 477 int newnum = templist[0].toInt( &ok );
478 if ( ok && newnum > 0) { 478 if ( ok && newnum > 0) {
479 retval = newnum; 479 retval = newnum;
480 inc->setID( "Sharp_DTM",templist[0] ); 480 inc->setID( "Sharp_DTM",templist[0] );
481 inc->setCsum( "Sharp_DTM", QString::number( getCsum( templist ) )); 481 inc->setCsum( "Sharp_DTM", QString::number( getCsum( templist ) ));
482 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 482 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
483 } 483 }
484 } 484 }
485 } 485 }
486 //qDebug("getNumFromRecord returning : %d ", retval); 486 //qDebug("getNumFromRecord returning : %d ", retval);
487 return retval; 487 return retval;
488} 488}
489bool SharpFormat::save( Calendar *calendar) 489bool SharpFormat::save( Calendar *calendar)
490{ 490{
491 491
492 QLabel status ( i18n("Processing/adding events ..."), 0 ); 492 QLabel status ( i18n("Processing/adding events ..."), 0 );
493 int w = status.sizeHint().width()+20 ; 493 int w = status.sizeHint().width()+20 ;
494 if ( w < 200 ) w = 200; 494 if ( w < 200 ) w = 200;
495 int h = status.sizeHint().height()+20 ; 495 int h = status.sizeHint().height()+20 ;
496 int dw = QApplication::desktop()->width(); 496 int dw = QApplication::desktop()->width();
497 int dh = QApplication::desktop()->height(); 497 int dh = QApplication::desktop()->height();
498 status.setCaption(i18n("Writing DTM Data") ); 498 status.setCaption(i18n("Writing DTM Data") );
499 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 499 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
500 status.show(); 500 status.show();
501 status.raise(); 501 status.raise();
502 qApp->processEvents(); 502 qApp->processEvents();
503 bool debug = DEBUGMODE; 503 bool debug = DEBUGMODE;
504 QString codec = "utf8"; 504 QString codec = "utf8";
505 QString answer; 505 QString answer;
506 QString ePrefix = "CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY\n"; 506 QString ePrefix = "CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY\n";
507 QString tPrefix = "CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1\n"; 507 QString tPrefix = "CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1\n";
508 QString command; 508 QString command;
509 QPtrList<Event> er = calendar->rawEvents(); 509 QPtrList<Event> er = calendar->rawEvents();
510 Event* ev = er.first(); 510 Event* ev = er.first();
511 QString fileName = "/tmp/kopitempout"; 511 QString fileName = "/tmp/kopitempout";
512 int i = 0; 512 int i = 0;
513 QString changeString = ePrefix; 513 QString changeString = ePrefix;
514 QString deleteString = ePrefix; 514 QString deleteString = ePrefix;
515 bool deleteEnt = false; 515 bool deleteEnt = false;
516 bool changeEnt = false; 516 bool changeEnt = false;
517 QString message = i18n("Processing event # "); 517 QString message = i18n("Processing event # ");
518 int procCount = 0; 518 int procCount = 0;
519 while ( ev ) { 519 while ( ev ) {
520 //qDebug("i %d ", ++i); 520 //qDebug("i %d ", ++i);
521 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 521 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
522 status.setText ( message + QString::number ( ++procCount ) ); 522 status.setText ( message + QString::number ( ++procCount ) );
523 qApp->processEvents(); 523 qApp->processEvents();
524 QString eString = getEventString( ev ); 524 QString eString = getEventString( ev );
525 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 525 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
526 // deleting empty strings does not work. 526 // deleting empty strings does not work.
527 // we write first and x and then delete the record with the x 527 // we write first and x and then delete the record with the x
528 eString = eString.replace( QRegExp(",\"\""),",\"x\"" ); 528 eString = eString.replace( QRegExp(",\"\""),",\"x\"" );
529 changeString += eString + "\n"; 529 changeString += eString + "\n";
530 deleteString += eString + "\n"; 530 deleteString += eString + "\n";
531 deleteEnt = true; 531 deleteEnt = true;
532 changeEnt = true; 532 changeEnt = true;
533 } 533 }
534 else if ( ev->getID("Sharp_DTM").isEmpty() ) { // add new 534 else if ( ev->getID("Sharp_DTM").isEmpty() ) { // add new
535 command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 535 command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
536 system ( command.utf8() ); 536 system ( command.utf8() );
537 QFile file( fileName ); 537 QFile file( fileName );
538 if (!file.open( IO_ReadOnly ) ) { 538 if (!file.open( IO_ReadOnly ) ) {
539 return false; 539 return false;
540 540
541 } 541 }
542 QTextStream ts( &file ); 542 QTextStream ts( &file );
543 ts.setCodec( QTextCodec::codecForName("utf8") ); 543 ts.setCodec( QTextCodec::codecForName("utf8") );
544 answer = ts.read(); 544 answer = ts.read();
545 file.close(); 545 file.close();
546 //qDebug("answer \n%s ", answer.latin1()); 546 //qDebug("answer \n%s ", answer.latin1());
547 getNumFromRecord( answer, ev ) ; 547 getNumFromRecord( answer, ev ) ;
548 548
549 } 549 }
550 else { // change existing 550 else { // change existing
551 //qDebug("canging %d %d",ev->zaurusStat() ,ev->zaurusId() ); 551 //qDebug("canging %d %d",ev->zaurusStat() ,ev->zaurusId() );
552 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 552 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
553 changeString += eString + "\n"; 553 changeString += eString + "\n";
554 changeEnt = true; 554 changeEnt = true;
555 555
556 } 556 }
557 } 557 }
558 ev = er.next(); 558 ev = er.next();
559 } 559 }
560 status.setText ( i18n("Changing events ...") ); 560 status.setText ( i18n("Changing events ...") );
561 qApp->processEvents(); 561 qApp->processEvents();
562 //qDebug("changing... "); 562 //qDebug("changing... ");
563 if ( changeEnt ) { 563 if ( changeEnt ) {
564 QFile file( fileName ); 564 QFile file( fileName );
565 if (!file.open( IO_WriteOnly ) ) { 565 if (!file.open( IO_WriteOnly ) ) {
566 return false; 566 return false;
567 567
568 } 568 }
569 QTextStream ts( &file ); 569 QTextStream ts( &file );
570 ts.setCodec( QTextCodec::codecForName("utf8") ); 570 ts.setCodec( QTextCodec::codecForName("utf8") );
571 ts << changeString ; 571 ts << changeString ;
572 file.close(); 572 file.close();
573 command = "db2file datebook -w -g -c " + codec+ " < "+ fileName; 573 command = "db2file datebook -w -g -c " + codec+ " < "+ fileName;
574 system ( command.latin1() ); 574 system ( command.latin1() );
575 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1()); 575 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1());
576 576
577 } 577 }
578 status.setText ( i18n("Deleting events ...") ); 578 status.setText ( i18n("Deleting events ...") );
579 qApp->processEvents(); 579 qApp->processEvents();
580 //qDebug("deleting... "); 580 //qDebug("deleting... ");
581 if ( deleteEnt ) { 581 if ( deleteEnt ) {
582 QFile file( fileName ); 582 QFile file( fileName );
583 if (!file.open( IO_WriteOnly ) ) { 583 if (!file.open( IO_WriteOnly ) ) {
584 return false; 584 return false;
585 585
586 } 586 }
587 QTextStream ts( &file ); 587 QTextStream ts( &file );
588 ts.setCodec( QTextCodec::codecForName("utf8") ); 588 ts.setCodec( QTextCodec::codecForName("utf8") );
589 ts << deleteString; 589 ts << deleteString;
590 file.close(); 590 file.close();
591 command = "db2file datebook -d -c " + codec+ " < "+ fileName; 591 command = "db2file datebook -d -c " + codec+ " < "+ fileName;
592 system ( command.latin1() ); 592 system ( command.latin1() );
593 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1()); 593 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1());
594 } 594 }
595 595
596 596
597 changeString = tPrefix; 597 changeString = tPrefix;
598 deleteString = tPrefix; 598 deleteString = tPrefix;
599 status.setText ( i18n("Processing todos ...") ); 599 status.setText ( i18n("Processing todos ...") );
600 qApp->processEvents(); 600 qApp->processEvents();
601 QPtrList<Todo> tl = calendar->rawTodos(); 601 QPtrList<Todo> tl = calendar->rawTodos();
602 Todo* to = tl.first(); 602 Todo* to = tl.first();
603 i = 0; 603 i = 0;
604 message = i18n("Processing todo # "); 604 message = i18n("Processing todo # ");
605 procCount = 0; 605 procCount = 0;
606 while ( to ) { 606 while ( to ) {
607 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 607 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
608 status.setText ( message + QString::number ( ++procCount ) ); 608 status.setText ( message + QString::number ( ++procCount ) );
609 qApp->processEvents(); 609 qApp->processEvents();
610 QString eString = getTodoString( to ); 610 QString eString = getTodoString( to );
611 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 611 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
612 // deleting empty strings does not work. 612 // deleting empty strings does not work.
613 // we write first and x and then delete the record with the x 613 // we write first and x and then delete the record with the x
614 eString = eString.replace( QRegExp(",\"\""),",\"x\"" ); 614 eString = eString.replace( QRegExp(",\"\""),",\"x\"" );
615 changeString += eString + "\n"; 615 changeString += eString + "\n";
616 deleteString += eString + "\n"; 616 deleteString += eString + "\n";
617 deleteEnt = true; 617 deleteEnt = true;
618 changeEnt = true; 618 changeEnt = true;
619 } 619 }
620 else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new 620 else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new
621 command = "(echo \"" + tPrefix + eString + "\" ) | db2file todo -w -g -c " + codec+ " > "+ fileName; 621 command = "(echo \"" + tPrefix + eString + "\" ) | db2file todo -w -g -c " + codec+ " > "+ fileName;
622 system ( command.utf8() ); 622 system ( command.utf8() );
623 QFile file( fileName ); 623 QFile file( fileName );
624 if (!file.open( IO_ReadOnly ) ) { 624 if (!file.open( IO_ReadOnly ) ) {
625 return false; 625 return false;
626 626
627 } 627 }
628 QTextStream ts( &file ); 628 QTextStream ts( &file );
629 ts.setCodec( QTextCodec::codecForName("utf8") ); 629 ts.setCodec( QTextCodec::codecForName("utf8") );
630 answer = ts.read(); 630 answer = ts.read();
631 file.close(); 631 file.close();
632 //qDebug("answer \n%s ", answer.latin1()); 632 //qDebug("answer \n%s ", answer.latin1());
633 getNumFromRecord( answer, to ) ; 633 getNumFromRecord( answer, to ) ;
634 634
635 } 635 }
636 else { // change existing 636 else { // change existing
637 //qDebug("canging %d %d",to->zaurusStat() ,to->zaurusId() ); 637 //qDebug("canging %d %d",to->zaurusStat() ,to->zaurusId() );
638 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 638 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
639 changeString += eString + "\n"; 639 changeString += eString + "\n";
640 changeEnt = true; 640 changeEnt = true;
641 641
642 } 642 }
643 } 643 }
644 644
645 to = tl.next(); 645 to = tl.next();
646 } 646 }
647 status.setText ( i18n("Changing todos ...") ); 647 status.setText ( i18n("Changing todos ...") );
648 qApp->processEvents(); 648 qApp->processEvents();
649 //qDebug("changing... "); 649 //qDebug("changing... ");
650 if ( changeEnt ) { 650 if ( changeEnt ) {
651 QFile file( fileName ); 651 QFile file( fileName );
652 if (!file.open( IO_WriteOnly ) ) { 652 if (!file.open( IO_WriteOnly ) ) {
653 return false; 653 return false;
654 654
655 } 655 }
656 QTextStream ts( &file ); 656 QTextStream ts( &file );
657 ts.setCodec( QTextCodec::codecForName("utf8") ); 657 ts.setCodec( QTextCodec::codecForName("utf8") );
658 ts << changeString ; 658 ts << changeString ;
659 file.close(); 659 file.close();
660 command = "db2file todo -w -g -c " + codec+ " < "+ fileName; 660 command = "db2file todo -w -g -c " + codec+ " < "+ fileName;
661 system ( command.latin1() ); 661 system ( command.latin1() );
662 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1()); 662 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1());
663 663
664 } 664 }
665 status.setText ( i18n("Deleting todos ...") ); 665 status.setText ( i18n("Deleting todos ...") );
666 qApp->processEvents(); 666 qApp->processEvents();
667 //qDebug("deleting... "); 667 //qDebug("deleting... ");
668 if ( deleteEnt ) { 668 if ( deleteEnt ) {
669 QFile file( fileName ); 669 QFile file( fileName );
670 if (!file.open( IO_WriteOnly ) ) { 670 if (!file.open( IO_WriteOnly ) ) {
671 return false; 671 return false;
672 672
673 } 673 }
674 QTextStream ts( &file ); 674 QTextStream ts( &file );
675 ts.setCodec( QTextCodec::codecForName("utf8") ); 675 ts.setCodec( QTextCodec::codecForName("utf8") );
676 ts << deleteString; 676 ts << deleteString;
677 file.close(); 677 file.close();
678 command = "db2file todo -d -c " + codec+ " < "+ fileName; 678 command = "db2file todo -d -c " + codec+ " < "+ fileName;
679 system ( command.latin1() ); 679 system ( command.latin1() );
680 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1()); 680 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1());
681 } 681 }
682 682
683 return true; 683 return true;
684} 684}
685QString SharpFormat::dtToString( const QDateTime& dti, bool useTZ ) 685QString SharpFormat::dtToString( const QDateTime& dti, bool useTZ )
686{ 686{
687 QString datestr; 687 QString datestr;
688 QString timestr; 688 QString timestr;
689 int offset = KGlobal::locale()->localTimeOffset( dti ); 689 int offset = KGlobal::locale()->localTimeOffset( dti );
690 QDateTime dt; 690 QDateTime dt;
691 if (useTZ) 691 if (useTZ)
692 dt = dti.addSecs ( -(offset*60)); 692 dt = dti.addSecs ( -(offset*60));
693 else 693 else
694 dt = dti; 694 dt = dti;
695 if(dt.date().isValid()){ 695 if(dt.date().isValid()){
696 const QDate& date = dt.date(); 696 const QDate& date = dt.date();
697 datestr.sprintf("%04d%02d%02d", 697 datestr.sprintf("%04d%02d%02d",
698 date.year(), date.month(), date.day()); 698 date.year(), date.month(), date.day());
699 } 699 }
700 if(dt.time().isValid()){ 700 if(dt.time().isValid()){
701 const QTime& time = dt.time(); 701 const QTime& time = dt.time();
702 timestr.sprintf("T%02d%02d%02d", 702 timestr.sprintf("T%02d%02d%02d",
703 time.hour(), time.minute(), time.second()); 703 time.hour(), time.minute(), time.second());
704 } 704 }
705 return datestr + timestr; 705 return datestr + timestr;
706} 706}
707QString SharpFormat::getEventString( Event* event ) 707QString SharpFormat::getEventString( Event* event )
708{ 708{
709 QStringList list; 709 QStringList list;
710 list.append( event->getID("Sharp_DTM") ); 710 list.append( event->getID("Sharp_DTM") );
711 list.append( event->categories().join(",") ); 711 list.append( event->categories().join(",") );
712 if ( !event->summary().isEmpty() ) 712 if ( !event->summary().isEmpty() )
713 list.append( event->summary() ); 713 list.append( event->summary() );
714 else 714 else
715 list.append("" ); 715 list.append("" );
716 if ( !event->location().isEmpty() ) 716 if ( !event->location().isEmpty() )
717 list.append( event->location() ); 717 list.append( event->location() );
718 else 718 else
719 list.append("" ); 719 list.append("" );
720 if ( !event->description().isEmpty() ) 720 if ( !event->description().isEmpty() )
721 list.append( event->description() ); 721 list.append( event->description() );
722 else 722 else
723 list.append( "" ); 723 list.append( "" );
724 if ( event->doesFloat () ) { 724 if ( event->doesFloat () ) {
725 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false )); 725 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false ));
726 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6 726 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6
727 list.append( "1" ); 727 list.append( "1" );
728 728
729 } 729 }
730 else { 730 else {
731 list.append( dtToString( event->dtStart()) ); 731 list.append( dtToString( event->dtStart()) );
732 list.append( dtToString( event->dtEnd()) ); //6 732 list.append( dtToString( event->dtEnd()) ); //6
733 list.append( "0" ); 733 list.append( "0" );
734 } 734 }
735 bool noAlarm = true; 735 bool noAlarm = true;
736 if ( event->alarms().count() > 0 ) { 736 if ( event->alarms().count() > 0 ) {
737 Alarm * al = event->alarms().first(); 737 Alarm * al = event->alarms().first();
738 if ( al->enabled() ) { 738 if ( al->enabled() ) {
739 noAlarm = false; 739 noAlarm = false;
740 list.append( "0" ); // yes, 0 == alarm 740 list.append( "0" ); // yes, 0 == alarm
741 list.append( QString::number( al->startOffset().asSeconds()/(-60) ) ); 741 list.append( QString::number( al->startOffset().asSeconds()/(-60) ) );
742 if ( al->type() == Alarm::Audio ) 742 if ( al->type() == Alarm::Audio )
743 list.append( "1" ); // type audio 743 list.append( "1" ); // type audio
744 else 744 else
745 list.append( "0" ); // type silent 745 list.append( "0" ); // type silent
746 } 746 }
747 } 747 }
748 if ( noAlarm ) { 748 if ( noAlarm ) {
749 list.append( "1" ); // yes, 1 == no alarm 749 list.append( "1" ); // yes, 1 == no alarm
750 list.append( "0" ); // no alarm offset 750 list.append( "0" ); // no alarm offset
751 list.append( "1" ); // type 751 list.append( "1" ); // type
752 } 752 }
753 // next is: 11 753 // next is: 11
754 // next is: 11-16 are recurrence 754 // next is: 11-16 are recurrence
755 Recurrence* rec = event->recurrence(); 755 Recurrence* rec = event->recurrence();
756 756
757 bool writeEndDate = false; 757 bool writeEndDate = false;
758 switch ( rec->doesRecur() ) 758 switch ( rec->doesRecur() )
759 { 759 {
760 case Recurrence::rDaily: // 0 760 case Recurrence::rDaily: // 0
761 list.append( "0" ); 761 list.append( "0" );
762 list.append( QString::number( rec->frequency() ));//12 762 list.append( QString::number( rec->frequency() ));//12
763 list.append( "0" ); 763 list.append( "0" );
764 list.append( "0" ); 764 list.append( "0" );
765 writeEndDate = true; 765 writeEndDate = true;
766 break; 766 break;
767 case Recurrence::rWeekly:// 1 767 case Recurrence::rWeekly:// 1
768 list.append( "1" ); 768 list.append( "1" );
769 list.append( QString::number( rec->frequency()) );//12 769 list.append( QString::number( rec->frequency()) );//12
770 list.append( "0" ); 770 list.append( "0" );
771 { 771 {
772 int days = 0; 772 int days = 0;
773 QBitArray weekDays = rec->days(); 773 QBitArray weekDays = rec->days();
774 int i; 774 int i;
775 for( i = 1; i <= 7; ++i ) { 775 for( i = 1; i <= 7; ++i ) {
776 if ( weekDays[i-1] ) { 776 if ( weekDays[i-1] ) {
777 days += 1 << (i-1); 777 days += 1 << (i-1);
778 } 778 }
779 } 779 }
780 list.append( QString::number( days ) ); 780 list.append( QString::number( days ) );
781 } 781 }
782 //pending weekdays 782 //pending weekdays
783 writeEndDate = true; 783 writeEndDate = true;
784 784
785 break; 785 break;
786 case Recurrence::rMonthlyPos:// 2 786 case Recurrence::rMonthlyPos:// 2
787 list.append( "2" ); 787 list.append( "2" );
788 list.append( QString::number( rec->frequency()) );//12 788 list.append( QString::number( rec->frequency()) );//12
789 789
790 writeEndDate = true; 790 writeEndDate = true;
791 { 791 {
792 int count = 1; 792 int count = 1;
793 QPtrList<Recurrence::rMonthPos> rmp; 793 QPtrList<Recurrence::rMonthPos> rmp;
794 rmp = rec->monthPositions(); 794 rmp = rec->monthPositions();
795 if ( rmp.first()->negative ) 795 if ( rmp.first()->negative )
796 count = 5 - rmp.first()->rPos - 1; 796 count = 5 - rmp.first()->rPos - 1;
797 else 797 else
798 count = rmp.first()->rPos - 1; 798 count = rmp.first()->rPos - 1;
799 list.append( QString::number( count ) ); 799 list.append( QString::number( count ) );
800 800
801 } 801 }
802 802
803 list.append( "0" ); 803 list.append( "0" );
804 break; 804 break;
805 case Recurrence::rMonthlyDay:// 3 805 case Recurrence::rMonthlyDay:// 3
806 list.append( "3" ); 806 list.append( "3" );
807 list.append( QString::number( rec->frequency()) );//12 807 list.append( QString::number( rec->frequency()) );//12
808 list.append( "0" ); 808 list.append( "0" );
809 list.append( "0" ); 809 list.append( "0" );
810 writeEndDate = true; 810 writeEndDate = true;
811 break; 811 break;
812 case Recurrence::rYearlyMonth://4 812 case Recurrence::rYearlyMonth://4
813 list.append( "4" ); 813 list.append( "4" );
814 list.append( QString::number( rec->frequency()) );//12 814 list.append( QString::number( rec->frequency()) );//12
815 list.append( "0" ); 815 list.append( "0" );
816 list.append( "0" ); 816 list.append( "0" );
817 writeEndDate = true; 817 writeEndDate = true;
818 break; 818 break;
819 819
820 default: 820 default:
821 list.append( "255" ); 821 list.append( "255" );
822 list.append( QString() ); 822 list.append( QString() );
823 list.append( "0" ); 823 list.append( "0" );
824 list.append( QString() ); 824 list.append( QString() );
825 list.append( "0" ); 825 list.append( "0" );
826 list.append( "20991231T000000" ); 826 list.append( "20991231T000000" );
827 break; 827 break;
828 } 828 }
829 if ( writeEndDate ) { 829 if ( writeEndDate ) {
830 830
831 if ( rec->endDate().isValid() ) { // 15 + 16 831 if ( rec->endDate().isValid() ) { // 15 + 16
832 list.append( "1" ); 832 list.append( "1" );
833 list.append( dtToString( rec->endDate()) ); 833 list.append( dtToString( rec->endDate()) );
834 } else { 834 } else {
835 list.append( "0" ); 835 list.append( "0" );
836 list.append( "20991231T000000" ); 836 list.append( "20991231T000000" );
837 } 837 }
838 838
839 } 839 }
840 if ( event->doesFloat () ) { 840 if ( event->doesFloat () ) {
841 list.append( dtToString( event->dtStart(), false ).left( 8 )); 841 list.append( dtToString( event->dtStart(), false ).left( 8 ));
842 list.append( dtToString( event->dtEnd(), false ).left( 8 )); //6 842 list.append( dtToString( event->dtEnd(), false ).left( 8 )); //6
843 843
844 } 844 }
845 else { 845 else {
846 list.append( QString() ); 846 list.append( QString() );
847 list.append( QString() ); 847 list.append( QString() );
848 848
849 } 849 }
850 if (event->dtStart().date() == event->dtEnd().date() ) 850 if (event->dtStart().date() == event->dtEnd().date() )
851 list.append( "0" ); 851 list.append( "0" );
852 else 852 else
853 list.append( "1" ); 853 list.append( "1" );
854 854
855 855
856 for(QStringList::Iterator it=list.begin(); 856 for(QStringList::Iterator it=list.begin();
857 it!=list.end(); ++it){ 857 it!=list.end(); ++it){
858 QString& s = (*it); 858 QString& s = (*it);
859 s.replace(QRegExp("\""), "\"\""); 859 s.replace(QRegExp("\""), "\"\"");
860 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 860 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
861 s.prepend('\"'); 861 s.prepend('\"');
862 s.append('\"'); 862 s.append('\"');
863 } else if(s.isEmpty() && !s.isNull()){ 863 } else if(s.isEmpty() && !s.isNull()){
864 s = "\"\""; 864 s = "\"\"";
865 } 865 }
866 } 866 }
867 return list.join(","); 867 return list.join(",");
868 868
869 869
870} 870}
871QString SharpFormat::getTodoString( Todo* todo ) 871QString SharpFormat::getTodoString( Todo* todo )
872{ 872{
873 QStringList list; 873 QStringList list;
874 list.append( todo->getID("Sharp_DTM") ); 874 list.append( todo->getID("Sharp_DTM") );
875 list.append( todo->categories().join(",") ); 875 list.append( todo->categories().join(",") );
876 876
877 if ( todo->hasStartDate() ) { 877 if ( todo->hasStartDate() ) {
878 list.append( dtToString( todo->dtStart()) ); 878 list.append( dtToString( todo->dtStart()) );
879 } else 879 } else
880 list.append( QString() ); 880 list.append( QString() );
881 881
882 if ( todo->hasDueDate() ) { 882 if ( todo->hasDueDate() ) {
883 QTime tim; 883 QTime tim;
884 if ( todo->doesFloat()) { 884 if ( todo->doesFloat()) {
885 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ; 885 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ;
886 } else { 886 } else {
887 list.append( dtToString(todo->dtDue() ) ); 887 list.append( dtToString(todo->dtDue() ) );
888 } 888 }
889 } else 889 } else
890 list.append( QString() ); 890 list.append( QString() );
891 891
892 if ( todo->isCompleted() ) { 892 if ( todo->isCompleted() ) {
893 list.append( dtToString( todo->completed()) ); 893 list.append( dtToString( todo->completed()) );
894 list.append( "0" ); // yes 0 == completed 894 list.append( "0" ); // yes 0 == completed
895 } else { 895 } else {
896 list.append( dtToString( todo->completed()) ); 896 list.append( dtToString( todo->completed()) );
897 list.append( "1" ); 897 list.append( "1" );
898 } 898 }
899 list.append( QString::number( todo->priority() )); 899 list.append( QString::number( todo->priority() ));
900 if( ! todo->summary().isEmpty() ) 900 if( ! todo->summary().isEmpty() )
901 list.append( todo->summary() ); 901 list.append( todo->summary() );
902 else 902 else
903 list.append( "" ); 903 list.append( "" );
904 if (! todo->description().isEmpty() ) 904 if (! todo->description().isEmpty() )
905 list.append( todo->description() ); 905 list.append( todo->description() );
906 else 906 else
907 list.append( "" ); 907 list.append( "" );
908 for(QStringList::Iterator it=list.begin(); 908 for(QStringList::Iterator it=list.begin();
909 it!=list.end(); ++it){ 909 it!=list.end(); ++it){
910 QString& s = (*it); 910 QString& s = (*it);
911 s.replace(QRegExp("\""), "\"\""); 911 s.replace(QRegExp("\""), "\"\"");
912 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 912 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
913 s.prepend('\"'); 913 s.prepend('\"');
914 s.append('\"'); 914 s.append('\"');
915 } else if(s.isEmpty() && !s.isNull()){ 915 } else if(s.isEmpty() && !s.isNull()){
916 s = "\"\""; 916 s = "\"\"";
917 } 917 }
918 } 918 }
919 return list.join(","); 919 return list.join(",");
920} 920}
921QString SharpFormat::getPart( const QString & text, bool &ok, int &start ) 921QString SharpFormat::getPart( const QString & text, bool &ok, int &start )
922{ 922{
923 //qDebug("start %d ", start); 923 //qDebug("start %d ", start);
924 924
925 QString retval =""; 925 QString retval ="";
926 if ( text.at(start) == '"' ) { 926 if ( text.at(start) == '"' ) {
927 if ( text.mid( start,2) == "\"\"" && !( text.mid( start+2,1) == "\"")) { 927 if ( text.mid( start,2) == "\"\"" && !( text.mid( start+2,1) == "\"")) {
928 start = start +2; 928 start = start +2;
929 if ( text.mid( start,1) == "," ) { 929 if ( text.mid( start,1) == "," ) {
930 start += 1; 930 start += 1;
931 } 931 }
932 retval = ""; 932 retval = "";
933 if ( text.mid( start,1) == "\n" ) { 933 if ( text.mid( start,1) == "\n" ) {
934 start += 1; 934 start += 1;
935 ok = false; 935 ok = false;
936 } 936 }
937 return retval; 937 return retval;
938 } 938 }
939 int hk = start+1; 939 int hk = start+1;
940 hk = text.find ('"',hk); 940 hk = text.find ('"',hk);
941 while ( text.at(hk+1) == '"' ) 941 while ( text.at(hk+1) == '"' )
942 hk = text.find ('"',hk+2); 942 hk = text.find ('"',hk+2);
943 retval = text.mid( start+1, hk-start-1); 943 retval = text.mid( start+1, hk-start-1);
944 start = hk+1; 944 start = hk+1;
945 retval.replace( QRegExp("\"\""), "\""); 945 retval.replace( QRegExp("\"\""), "\"");
946 if ( text.mid( start,1) == "," ) { 946 if ( text.mid( start,1) == "," ) {
947 start += 1; 947 start += 1;
948 } 948 }
949 if ( text.mid( start,1) == "\n" ) { 949 if ( text.mid( start,1) == "\n" ) {
950 start += 1; 950 start += 1;
951 ok = false; 951 ok = false;
952 } 952 }
953 //qDebug("retval***%s*** ",retval.latin1() ); 953 //qDebug("retval***%s*** ",retval.latin1() );
954 return retval; 954 return retval;
955 955
956 } else { 956 } else {
957 int nl = text.find ("\n",start); 957 int nl = text.find ("\n",start);
958 int kom = text.find (',',start); 958 int kom = text.find (',',start);
959 if ( kom < nl ) { 959 if ( kom < nl ) {
960 // qDebug("kom < nl %d ", kom); 960 // qDebug("kom < nl %d ", kom);
961 retval = text.mid(start, kom-start); 961 retval = text.mid(start, kom-start);
962 start = kom+1; 962 start = kom+1;
963 return retval; 963 return retval;
964 } else { 964 } else {
965 if ( nl == kom ) { 965 if ( nl == kom ) {
966 // qDebug(" nl == kom "); 966 // qDebug(" nl == kom ");
967 start = 0; 967 start = 0;
968 ok = false; 968 ok = false;
969 return "0"; 969 return "0";
970 } 970 }
971 // qDebug(" nl < kom ", nl); 971 // qDebug(" nl < kom ", nl);
972 retval = text.mid( start, nl-start); 972 retval = text.mid( start, nl-start);
973 ok = false; 973 ok = false;
974 start = nl+1; 974 start = nl+1;
975 return retval; 975 return retval;
976 } 976 }
977 } 977 }
978} 978}
979bool SharpFormat::fromString( Calendar *calendar, const QString & text) 979bool SharpFormat::fromString( Calendar *calendar, const QString & text)
980{ 980{
981 return false; 981 return false;
982} 982}
983bool SharpFormat::fromString2Cal( Calendar *calendar,Calendar *existingCalendar, const QString & text, const QString & type) 983bool SharpFormat::fromString2Cal( Calendar *calendar,Calendar *existingCalendar, const QString & text, const QString & type)
984{ 984{
985 // qDebug("test %s ", text.latin1()); 985 // qDebug("test %s ", text.latin1());
986 QStringList templist; 986 QStringList templist;
987 QString tempString; 987 QString tempString;
988 int start = 0; 988 int start = 0;
989 int len = text.length(); 989 int len = text.length();
990 int end = text.find ("\n",start)+1; 990 int end = text.find ("\n",start)+1;
991 bool ok = true; 991 bool ok = true;
992 start = end; 992 start = end;
993 SharpParser handler( calendar ); 993 SharpParser handler( calendar );
994 handler.setCategoriesList( mCategories ); 994 handler.setCategoriesList( mCategories );
995 while ( start > 0 ) { 995 while ( start > 0 ) {
996 templist.clear(); 996 templist.clear();
997 ok = true; 997 ok = true;
998 while ( ok ) { 998 while ( ok ) {
999 tempString = getPart( text, ok, start ); 999 tempString = getPart( text, ok, start );
1000 if ( start >= len || start == 0 ) { 1000 if ( start >= len || start == 0 ) {
1001 start = 0; 1001 start = 0;
1002 ok = false; 1002 ok = false;
1003 } 1003 }
1004 if ( tempString.right(1) =="\n" ) 1004 if ( tempString.right(1) =="\n" )
1005 tempString = tempString.left( tempString.length()-1); 1005 tempString = tempString.left( tempString.length()-1);
1006 //if ( ok ) 1006 //if ( ok )
1007 templist.append( tempString ); 1007 templist.append( tempString );
1008 //qDebug("%d ---%s---", templist.count(),tempString.latin1() ); 1008 //qDebug("%d ---%s---", templist.count(),tempString.latin1() );
1009 } 1009 }
1010 handler.startElement( existingCalendar, templist, type ); 1010 handler.startElement( existingCalendar, templist, type );
1011 } 1011 }
1012 1012
1013 return false; 1013 return false;
1014} 1014}
1015 1015
1016QString SharpFormat::toString( Calendar * ) 1016QString SharpFormat::toString( Calendar * )
1017{ 1017{
1018 return QString::null; 1018 return QString::null;
1019} 1019}