summaryrefslogtreecommitdiffabout
path: root/libkcal
Unidiff
Diffstat (limited to 'libkcal') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/alarm.cpp16
-rw-r--r--libkcal/alarm.h2
-rw-r--r--libkcal/phoneformat.cpp58
3 files changed, 45 insertions, 31 deletions
diff --git a/libkcal/alarm.cpp b/libkcal/alarm.cpp
index 07812c2..29e6205 100644
--- a/libkcal/alarm.cpp
+++ b/libkcal/alarm.cpp
@@ -255,96 +255,112 @@ void Alarm::addMailAttachment(const QString &mailAttachFile)
255 } 255 }
256} 256}
257 257
258QStringList Alarm::mailAttachments() const 258QStringList Alarm::mailAttachments() const
259{ 259{
260 return (mType == Email) ? mMailAttachFiles : QStringList(); 260 return (mType == Email) ? mMailAttachFiles : QStringList();
261} 261}
262 262
263void Alarm::setMailText(const QString &text) 263void Alarm::setMailText(const QString &text)
264{ 264{
265 if (mType == Email) { 265 if (mType == Email) {
266 mDescription = text; 266 mDescription = text;
267 mParent->updated(); 267 mParent->updated();
268 } 268 }
269} 269}
270 270
271QString Alarm::mailText() const 271QString Alarm::mailText() const
272{ 272{
273 return (mType == Email) ? mDescription : QString::null; 273 return (mType == Email) ? mDescription : QString::null;
274} 274}
275 275
276void Alarm::setDisplayAlarm(const QString &text) 276void Alarm::setDisplayAlarm(const QString &text)
277{ 277{
278 mType = Display; 278 mType = Display;
279 mDescription = text; 279 mDescription = text;
280 mParent->updated(); 280 mParent->updated();
281} 281}
282 282
283void Alarm::setText(const QString &text) 283void Alarm::setText(const QString &text)
284{ 284{
285 if (mType == Display) { 285 if (mType == Display) {
286 mDescription = text; 286 mDescription = text;
287 mParent->updated(); 287 mParent->updated();
288 } 288 }
289} 289}
290 290
291QString Alarm::text() const 291QString Alarm::text() const
292{ 292{
293 return (mType == Display) ? mDescription : QString::null; 293 return (mType == Display) ? mDescription : QString::null;
294} 294}
295 295
296void Alarm::setTime(const QDateTime &alarmTime) 296void Alarm::setTime(const QDateTime &alarmTime)
297{ 297{
298 mAlarmTime = alarmTime; 298 mAlarmTime = alarmTime;
299 mHasTime = true; 299 mHasTime = true;
300 300
301 mParent->updated(); 301 mParent->updated();
302} 302}
303int Alarm::offset()
304{
305 if ( hasTime() ) {
306 if (mParent->type()=="Todo") {
307 Todo *t = static_cast<Todo*>(mParent);
308 return t->dtDue().secsTo( mAlarmTime ) ;
309 } else
310 return mParent->dtStart().secsTo( mAlarmTime ) ;
311 }
312 else
313 {
314 return mOffset.asSeconds();
315 }
316
317}
318
303 319
304QDateTime Alarm::time() const 320QDateTime Alarm::time() const
305{ 321{
306 if ( hasTime() ) 322 if ( hasTime() )
307 return mAlarmTime; 323 return mAlarmTime;
308 else 324 else
309 { 325 {
310 if (mParent->type()=="Todo") { 326 if (mParent->type()=="Todo") {
311 Todo *t = static_cast<Todo*>(mParent); 327 Todo *t = static_cast<Todo*>(mParent);
312 return mOffset.end( t->dtDue() ); 328 return mOffset.end( t->dtDue() );
313 } else if (mEndOffset) { 329 } else if (mEndOffset) {
314 return mOffset.end( mParent->dtEnd() ); 330 return mOffset.end( mParent->dtEnd() );
315 } else { 331 } else {
316 return mOffset.end( mParent->dtStart() ); 332 return mOffset.end( mParent->dtStart() );
317 } 333 }
318 } 334 }
319} 335}
320 336
321bool Alarm::hasTime() const 337bool Alarm::hasTime() const
322{ 338{
323 return mHasTime; 339 return mHasTime;
324} 340}
325 341
326void Alarm::setSnoozeTime(int alarmSnoozeTime) 342void Alarm::setSnoozeTime(int alarmSnoozeTime)
327{ 343{
328 mAlarmSnoozeTime = alarmSnoozeTime; 344 mAlarmSnoozeTime = alarmSnoozeTime;
329 mParent->updated(); 345 mParent->updated();
330} 346}
331 347
332int Alarm::snoozeTime() const 348int Alarm::snoozeTime() const
333{ 349{
334 return mAlarmSnoozeTime; 350 return mAlarmSnoozeTime;
335} 351}
336 352
337void Alarm::setRepeatCount(int alarmRepeatCount) 353void Alarm::setRepeatCount(int alarmRepeatCount)
338{ 354{
339 kdDebug(5800) << "Alarm::setRepeatCount(): " << alarmRepeatCount << endl; 355 kdDebug(5800) << "Alarm::setRepeatCount(): " << alarmRepeatCount << endl;
340 356
341 mAlarmRepeatCount = alarmRepeatCount; 357 mAlarmRepeatCount = alarmRepeatCount;
342 mParent->updated(); 358 mParent->updated();
343} 359}
344 360
345int Alarm::repeatCount() const 361int Alarm::repeatCount() const
346{ 362{
347 kdDebug(5800) << "Alarm::repeatCount(): " << mAlarmRepeatCount << endl; 363 kdDebug(5800) << "Alarm::repeatCount(): " << mAlarmRepeatCount << endl;
348 return mAlarmRepeatCount; 364 return mAlarmRepeatCount;
349} 365}
350 366
diff --git a/libkcal/alarm.h b/libkcal/alarm.h
index ae2eca3..682b626 100644
--- a/libkcal/alarm.h
+++ b/libkcal/alarm.h
@@ -13,97 +13,97 @@
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#ifndef KCAL_ALARM_H 21#ifndef KCAL_ALARM_H
22#define KCAL_ALARM_H 22#define KCAL_ALARM_H
23 23
24#include <qstring.h> 24#include <qstring.h>
25#include <qvaluelist.h> 25#include <qvaluelist.h>
26 26
27#include "customproperties.h" 27#include "customproperties.h"
28#include "duration.h" 28#include "duration.h"
29#include "person.h" 29#include "person.h"
30 30
31namespace KCal { 31namespace KCal {
32 32
33class Incidence; 33class Incidence;
34 34
35/** 35/**
36 This class represents an alarm notification. 36 This class represents an alarm notification.
37*/ 37*/
38class Alarm : public CustomProperties 38class Alarm : public CustomProperties
39{ 39{
40 public: 40 public:
41 enum Type { Invalid, Display, Procedure, Email, Audio }; 41 enum Type { Invalid, Display, Procedure, Email, Audio };
42 typedef QValueList<Alarm *> List; 42 typedef QValueList<Alarm *> List;
43 43
44 /** Construct a new alarm with variables initialized to "sane" values. */ 44 /** Construct a new alarm with variables initialized to "sane" values. */
45 explicit Alarm(Incidence *parent); 45 explicit Alarm(Incidence *parent);
46 /** Destruct Alarm object. */ 46 /** Destruct Alarm object. */
47 ~Alarm(); 47 ~Alarm();
48 48
49 /** Compare this alarm with another one. */ 49 /** Compare this alarm with another one. */
50 bool operator==(const Alarm &) const; 50 bool operator==(const Alarm &) const;
51 bool operator!=(const Alarm &a) const { return !operator==(a); } 51 bool operator!=(const Alarm &a) const { return !operator==(a); }
52 52
53 /** Set the type of the alarm. 53 /** Set the type of the alarm.
54 If the specified type is different from the current type of the alarm, 54 If the specified type is different from the current type of the alarm,
55 the alarm's type-specific properties are initialised to null. 55 the alarm's type-specific properties are initialised to null.
56 @param type type of alarm. 56 @param type type of alarm.
57 */ 57 */
58 void setType(Type type); 58 void setType(Type type);
59 /** Return the type of the alarm */ 59 /** Return the type of the alarm */
60 Type type() const; 60 Type type() const;
61 61 int offset();
62 /** Set the alarm to be a display alarm. 62 /** Set the alarm to be a display alarm.
63 @param text text to display when the alarm is triggered. 63 @param text text to display when the alarm is triggered.
64 */ 64 */
65 void setDisplayAlarm(const QString &text); 65 void setDisplayAlarm(const QString &text);
66 /** Set the text to be displayed when the alarm is triggered. 66 /** Set the text to be displayed when the alarm is triggered.
67 Ignored if the alarm is not a display alarm. 67 Ignored if the alarm is not a display alarm.
68 */ 68 */
69 void setText(const QString &text); 69 void setText(const QString &text);
70 /** Return the text string that displays when the alarm is triggered. */ 70 /** Return the text string that displays when the alarm is triggered. */
71 QString text() const; 71 QString text() const;
72 72
73 /** Set the alarm to be an audio alarm. 73 /** Set the alarm to be an audio alarm.
74 @param audioFile optional file to play when the alarm is triggered. 74 @param audioFile optional file to play when the alarm is triggered.
75 */ 75 */
76 void setAudioAlarm(const QString &audioFile = QString::null); 76 void setAudioAlarm(const QString &audioFile = QString::null);
77 /** Set the file to play when the audio alarm is triggered. 77 /** Set the file to play when the audio alarm is triggered.
78 Ignored if the alarm is not an audio alarm. 78 Ignored if the alarm is not an audio alarm.
79 */ 79 */
80 void setAudioFile(const QString &audioFile); 80 void setAudioFile(const QString &audioFile);
81 /** Return the name of the audio file for the alarm. 81 /** Return the name of the audio file for the alarm.
82 @return The audio file for the alarm, or QString::null if not an audio alarm. 82 @return The audio file for the alarm, or QString::null if not an audio alarm.
83 */ 83 */
84 QString audioFile() const; 84 QString audioFile() const;
85 85
86 /** Set the alarm to be a procedure alarm. 86 /** Set the alarm to be a procedure alarm.
87 @param programFile program to execute when the alarm is triggered. 87 @param programFile program to execute when the alarm is triggered.
88 @param arguments arguments to supply to programFile. 88 @param arguments arguments to supply to programFile.
89 */ 89 */
90 void setProcedureAlarm(const QString &programFile, const QString &arguments = QString::null); 90 void setProcedureAlarm(const QString &programFile, const QString &arguments = QString::null);
91 /** Set the program file to execute when the alarm is triggered. 91 /** Set the program file to execute when the alarm is triggered.
92 Ignored if the alarm is not a procedure alarm. 92 Ignored if the alarm is not a procedure alarm.
93 */ 93 */
94 void setProgramFile(const QString &programFile); 94 void setProgramFile(const QString &programFile);
95 /** Return the name of the program file to execute when the alarm is triggered. 95 /** Return the name of the program file to execute when the alarm is triggered.
96 @return the program file name, or QString::null if not a procedure alarm. 96 @return the program file name, or QString::null if not a procedure alarm.
97 */ 97 */
98 QString programFile() const; 98 QString programFile() const;
99 /** Set the arguments to the program to execute when the alarm is triggered. 99 /** Set the arguments to the program to execute when the alarm is triggered.
100 Ignored if the alarm is not a procedure alarm. 100 Ignored if the alarm is not a procedure alarm.
101 */ 101 */
102 void setProgramArguments(const QString &arguments); 102 void setProgramArguments(const QString &arguments);
103 /** Return the arguments to the program to run when the alarm is triggered. 103 /** Return the arguments to the program to run when the alarm is triggered.
104 @return the program arguments, or QString::null if not a procedure alarm. 104 @return the program arguments, or QString::null if not a procedure alarm.
105 */ 105 */
106 QString programArguments() const; 106 QString programArguments() const;
107 107
108 /** Set the alarm to be an email alarm. 108 /** Set the alarm to be an email alarm.
109 @param subject subject line of email. 109 @param subject subject line of email.
diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp
index 6d0da5c..178a63e 100644
--- a/libkcal/phoneformat.cpp
+++ b/libkcal/phoneformat.cpp
@@ -93,118 +93,118 @@ PhoneFormat::~PhoneFormat()
93{ 93{
94} 94}
95#if 0 95#if 0
96int PhoneFormat::initDevice(GSM_StateMachine *s) 96int PhoneFormat::initDevice(GSM_StateMachine *s)
97{ 97{
98 GSM_ReadConfig(NULL, &s->Config[0], 0); 98 GSM_ReadConfig(NULL, &s->Config[0], 0);
99 s->ConfigNum = 1; 99 s->ConfigNum = 1;
100 GSM_Config *cfg = &s->Config[0]; 100 GSM_Config *cfg = &s->Config[0];
101 if ( ! mConnection.isEmpty() ) { 101 if ( ! mConnection.isEmpty() ) {
102 cfg->Connection = strdup(mConnection.latin1()); 102 cfg->Connection = strdup(mConnection.latin1());
103 cfg->DefaultConnection = false; 103 cfg->DefaultConnection = false;
104 qDebug("Connection set %s ", cfg->Connection ); 104 qDebug("Connection set %s ", cfg->Connection );
105 105
106 } 106 }
107 if ( ! mDevice.isEmpty() ) { 107 if ( ! mDevice.isEmpty() ) {
108 cfg->Device = strdup(mDevice.latin1()); 108 cfg->Device = strdup(mDevice.latin1());
109 cfg->DefaultDevice = false; 109 cfg->DefaultDevice = false;
110 qDebug("Device set %s ", cfg->Device); 110 qDebug("Device set %s ", cfg->Device);
111 111
112 } 112 }
113 if ( ! mModel.isEmpty() ) { 113 if ( ! mModel.isEmpty() ) {
114 strcpy(cfg->Model,mModel.latin1() ); 114 strcpy(cfg->Model,mModel.latin1() );
115 cfg->DefaultModel = false; 115 cfg->DefaultModel = false;
116 qDebug("Model set %s ",cfg->Model ); 116 qDebug("Model set %s ",cfg->Model );
117 } 117 }
118 int error=GSM_InitConnection(s,3); 118 int error=GSM_InitConnection(s,3);
119 return error; 119 return error;
120} 120}
121#endif 121#endif
122ulong PhoneFormat::getCsumTodo( Todo* todo ) 122ulong PhoneFormat::getCsumTodo( Todo* todo )
123{ 123{
124 QStringList attList; 124 QStringList attList;
125 if ( todo->hasDueDate() ) 125 if ( todo->hasDueDate() )
126 attList << PhoneParser::dtToString ( todo->dtDue() ); 126 attList << PhoneParser::dtToString ( todo->dtDue() );
127 attList << todo->summary(); 127 attList << todo->summary();
128 QString completedString = "no"; 128 QString completedString = "no";
129 if ( todo->isCompleted() ) 129 if ( todo->isCompleted() )
130 completedString = "yes"; 130 completedString = "yes";
131 attList << completedString; 131 attList << completedString;
132 int prio = todo->priority(); 132 int prio = todo->priority();
133 if( prio == 2 ) prio = 1; 133 if( prio == 2 ) prio = 1;
134 if (prio == 4 ) prio = 5 ; 134 if (prio == 4 ) prio = 5 ;
135 attList << QString::number( prio ); 135 attList << QString::number( prio );
136 QString alarmString = "na"; 136 QString alarmString = "na";
137 Alarm *alarm; 137 Alarm *alarm;
138 if ( todo->alarms().count() > 0 ) { 138 if ( todo->alarms().count() > 0 ) {
139 alarm = todo->alarms().first(); 139 alarm = todo->alarms().first();
140 if ( alarm->enabled() ) { 140 if ( alarm->enabled() ) {
141 alarmString = QString::number(alarm->startOffset().asSeconds() ); 141 alarmString = QString::number(alarm->offset() );
142 } 142 }
143 } 143 }
144 attList << alarmString; 144 attList << alarmString;
145 attList << todo->categoriesStr(); 145 attList << todo->categoriesStr();
146 attList << todo->secrecyStr(); 146 attList << todo->secrecyStr();
147 return PhoneFormat::getCsum(attList ); 147 return PhoneFormat::getCsum(attList );
148 148
149} 149}
150ulong PhoneFormat::getCsumEvent( Event* event ) 150ulong PhoneFormat::getCsumEvent( Event* event )
151{ 151{
152 QStringList attList; 152 QStringList attList;
153 attList << PhoneParser::dtToString ( event->dtStart() ); 153 attList << PhoneParser::dtToString ( event->dtStart() );
154 attList << PhoneParser::dtToString ( event->dtEnd() ); 154 attList << PhoneParser::dtToString ( event->dtEnd() );
155 attList << event->summary(); 155 attList << event->summary();
156 attList << event->location(); 156 attList << event->location();
157 QString alarmString = "na"; 157 QString alarmString = "na";
158 Alarm *alarm; 158 Alarm *alarm;
159 if ( event->alarms().count() > 0 ) { 159 if ( event->alarms().count() > 0 ) {
160 alarm = event->alarms().first(); 160 alarm = event->alarms().first();
161 if ( alarm->enabled() ) { 161 if ( alarm->enabled() ) {
162 alarmString = QString::number( alarm->startOffset().asSeconds() ); 162 alarmString = QString::number( alarm->offset() );
163 } 163 }
164 } 164 }
165 attList << alarmString; 165 attList << alarmString;
166 Recurrence* rec = event->recurrence(); 166 Recurrence* rec = event->recurrence();
167 QStringList list; 167 QStringList list;
168 bool writeEndDate = false; 168 bool writeEndDate = false;
169 switch ( rec->doesRecur() ) 169 switch ( rec->doesRecur() )
170 { 170 {
171 case Recurrence::rDaily: // 0 171 case Recurrence::rDaily: // 0
172 list.append( "0" ); 172 list.append( "0" );
173 list.append( QString::number( rec->frequency() ));//12 173 list.append( QString::number( rec->frequency() ));//12
174 list.append( "0" ); 174 list.append( "0" );
175 list.append( "0" ); 175 list.append( "0" );
176 writeEndDate = true; 176 writeEndDate = true;
177 break; 177 break;
178 case Recurrence::rWeekly:// 1 178 case Recurrence::rWeekly:// 1
179 list.append( "1" ); 179 list.append( "1" );
180 list.append( QString::number( rec->frequency()) );//12 180 list.append( QString::number( rec->frequency()) );//12
181 list.append( "0" ); 181 list.append( "0" );
182 { 182 {
183 int days = 0; 183 int days = 0;
184 QBitArray weekDays = rec->days(); 184 QBitArray weekDays = rec->days();
185 int i; 185 int i;
186 for( i = 1; i <= 7; ++i ) { 186 for( i = 1; i <= 7; ++i ) {
187 if ( weekDays[i-1] ) { 187 if ( weekDays[i-1] ) {
188 days += 1 << (i-1); 188 days += 1 << (i-1);
189 } 189 }
190 } 190 }
191 list.append( QString::number( days ) ); 191 list.append( QString::number( days ) );
192 } 192 }
193 //pending weekdays 193 //pending weekdays
194 writeEndDate = true; 194 writeEndDate = true;
195 195
196 break; 196 break;
197 case Recurrence::rMonthlyPos:// 2 197 case Recurrence::rMonthlyPos:// 2
198 list.append( "2" ); 198 list.append( "2" );
199 list.append( QString::number( rec->frequency()) );//12 199 list.append( QString::number( rec->frequency()) );//12
200 200
201 writeEndDate = true; 201 writeEndDate = true;
202 { 202 {
203 int count = 1; 203 int count = 1;
204 QPtrList<Recurrence::rMonthPos> rmp; 204 QPtrList<Recurrence::rMonthPos> rmp;
205 rmp = rec->monthPositions(); 205 rmp = rec->monthPositions();
206 if ( rmp.first()->negative ) 206 if ( rmp.first()->negative )
207 count = 5 - rmp.first()->rPos - 1; 207 count = 5 - rmp.first()->rPos - 1;
208 else 208 else
209 count = rmp.first()->rPos - 1; 209 count = rmp.first()->rPos - 1;
210 list.append( QString::number( count ) ); 210 list.append( QString::number( count ) );
@@ -232,249 +232,251 @@ ulong PhoneFormat::getCsumEvent( Event* event )
232 list.append( "255" ); 232 list.append( "255" );
233 list.append( QString() ); 233 list.append( QString() );
234 list.append( "0" ); 234 list.append( "0" );
235 list.append( QString() ); 235 list.append( QString() );
236 list.append( "0" ); 236 list.append( "0" );
237 list.append( "20991231T000000" ); 237 list.append( "20991231T000000" );
238 break; 238 break;
239 } 239 }
240 if ( writeEndDate ) { 240 if ( writeEndDate ) {
241 241
242 if ( rec->endDate().isValid() ) { // 15 + 16 242 if ( rec->endDate().isValid() ) { // 15 + 16
243 list.append( "1" ); 243 list.append( "1" );
244 list.append( PhoneParser::dtToString( rec->endDate()) ); 244 list.append( PhoneParser::dtToString( rec->endDate()) );
245 } else { 245 } else {
246 list.append( "0" ); 246 list.append( "0" );
247 list.append( "20991231T000000" ); 247 list.append( "20991231T000000" );
248 } 248 }
249 249
250 } 250 }
251 attList << list.join(""); 251 attList << list.join("");
252 attList << event->categoriesStr(); 252 attList << event->categoriesStr();
253 //qDebug("csum cat %s", event->categoriesStr().latin1()); 253 //qDebug("csum cat %s", event->categoriesStr().latin1());
254 254
255 attList << event->secrecyStr(); 255 attList << event->secrecyStr();
256 return PhoneFormat::getCsum(attList ); 256 return PhoneFormat::getCsum(attList );
257} 257}
258ulong PhoneFormat::getCsum( const QStringList & attList) 258ulong PhoneFormat::getCsum( const QStringList & attList)
259{ 259{
260 int max = attList.count(); 260 int max = attList.count();
261 ulong cSum = 0; 261 ulong cSum = 0;
262 int j,k,i; 262 int j,k,i;
263 int add; 263 int add;
264 for ( i = 0; i < max ; ++i ) { 264 for ( i = 0; i < max ; ++i ) {
265 QString s = attList[i]; 265 QString s = attList[i];
266 if ( ! s.isEmpty() ){ 266 if ( ! s.isEmpty() ){
267 j = s.length(); 267 j = s.length();
268 for ( k = 0; k < j; ++k ) { 268 for ( k = 0; k < j; ++k ) {
269 int mul = k +1; 269 int mul = k +1;
270 add = s[k].unicode (); 270 add = s[k].unicode ();
271 if ( k < 16 ) 271 if ( k < 16 )
272 mul = mul * mul; 272 mul = mul * mul;
273 int ii = i+1; 273 int ii = i+1;
274 add = add * mul *ii*ii*ii; 274 add = add * mul *ii*ii*ii;
275 cSum += add; 275 cSum += add;
276 } 276 }
277 } 277 }
278 278
279 } 279 }
280 QString dump = attList.join(","); 280 //QString dump = attList.join(",");
281 qDebug("csum: %d %s", cSum,dump.latin1()); 281 //qDebug("csum: %d %s", cSum,dump.latin1());
282 282
283 return cSum; 283 return cSum;
284 284
285} 285}
286//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum); 286//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum);
287#include <stdlib.h> 287#include <stdlib.h>
288#define DEBUGMODE false 288#define DEBUGMODE false
289bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) 289bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal)
290{ 290{
291 291
292 QString fileName; 292 QString fileName;
293#ifdef _WIN32_ 293#ifdef _WIN32_
294 fileName = locateLocal("data", "korganizer") + "\\tempfile.vcs"; 294 fileName = locateLocal("data", "korganizer") + "\\tempfile.vcs";
295#else 295#else
296 fileName = "/tmp/kdepimtemp.vcs"; 296 fileName = "/tmp/kdepimtemp.vcs";
297#endif 297#endif
298 QString command ="./kammu --backup " + fileName + " -yes" ; 298 QString command ="./kammu --backup " + fileName + " -yes" ;
299 int ret = system ( command.latin1() ); 299 int ret = system ( command.latin1() );
300 if ( ret != 0 ) { 300 if ( ret != 0 ) {
301 qDebug("Error::command returned %d", ret); 301 qDebug("Error::command returned %d", ret);
302 return false; 302 return false;
303 } 303 }
304 qDebug("Command returned %d", ret);
305 VCalFormat vfload; 304 VCalFormat vfload;
306 vfload.setLocalTime ( true ); 305 vfload.setLocalTime ( true );
307 qDebug("loading file ..."); 306 qDebug("loading file ...");
308 307
309 if ( ! vfload.load( calendar, fileName ) ) 308 if ( ! vfload.load( calendar, fileName ) )
310 return false; 309 return false;
311 QPtrList<Event> er = calendar->rawEvents(); 310 QPtrList<Event> er = calendar->rawEvents();
312 Event* ev = er.first(); 311 Event* ev = er.first();
313 qDebug("reading events... "); 312 qDebug("reading events... ");
314 while ( ev ) { 313 while ( ev ) {
315 QStringList cat = ev->categories(); 314 QStringList cat = ev->categories();
316 if ( cat.contains( "MeetingDEF" )) { 315 if ( cat.contains( "MeetingDEF" )) {
317 ev->setCategories( QStringList() ); 316 ev->setCategories( QStringList() );
318 } 317 }
319 int id = ev->pilotId(); 318 int id = ev->pilotId();
320 Event *event; 319 Event *event;
321 event = existingCal->event( mProfileName ,QString::number( id ) ); 320 event = existingCal->event( mProfileName ,QString::number( id ) );
322 if ( event ) { 321 if ( event ) {
323 event = (Event*)event->clone(); 322 event = (Event*)event->clone();
324 copyEvent( event, ev ); 323 copyEvent( event, ev );
325 calendar->deleteEvent( ev ); 324 calendar->deleteEvent( ev );
326 calendar->addEvent( event); 325 calendar->addEvent( event);
327 } 326 }
328 else 327 else
329 event = ev; 328 event = ev;
330 uint cSum; 329 uint cSum;
331 cSum = PhoneFormat::getCsumEvent( event ); 330 cSum = PhoneFormat::getCsumEvent( event );
332 event->setCsum( mProfileName, QString::number( cSum )); 331 event->setCsum( mProfileName, QString::number( cSum ));
333 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 332 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
334 event->setID( mProfileName,QString::number( id ) ); 333 event->setID( mProfileName,QString::number( id ) );
335 ev = er.next(); 334 ev = er.next();
336 } 335 }
337 { 336 {
338 qDebug("reading todos... "); 337 qDebug("reading todos... ");
339 QPtrList<Todo> tr = calendar->rawTodos(); 338 QPtrList<Todo> tr = calendar->rawTodos();
340 Todo* ev = tr.first(); 339 Todo* ev = tr.first();
341 while ( ev ) { 340 while ( ev ) {
342 341
343 QStringList cat = ev->categories(); 342 QStringList cat = ev->categories();
344 if ( cat.contains( "MeetingDEF" )) { 343 if ( cat.contains( "MeetingDEF" )) {
345 ev->setCategories( QStringList() ); 344 ev->setCategories( QStringList() );
346 } 345 }
347 int id = ev->pilotId(); 346 int id = ev->pilotId();
348 Todo *event; 347 Todo *event;
349 event = existingCal->todo( mProfileName ,QString::number( id ) ); 348 event = existingCal->todo( mProfileName ,QString::number( id ) );
350 if ( event ) { 349 if ( event ) {
351 qDebug("copy todo %s ", event->summary().latin1()); 350 //qDebug("copy todo %s ", event->summary().latin1());
352 351
353 event = (Todo*)event->clone(); 352 event = (Todo*)event->clone();
354 copyTodo( event, ev ); 353 copyTodo( event, ev );
355 calendar->deleteTodo( ev ); 354 calendar->deleteTodo( ev );
356 calendar->addTodo( event); 355 calendar->addTodo( event);
357 } 356 }
358 else 357 else
359 event = ev; 358 event = ev;
360 uint cSum; 359 uint cSum;
361 cSum = PhoneFormat::getCsumTodo( event ); 360 cSum = PhoneFormat::getCsumTodo( event );
362 event->setCsum( mProfileName, QString::number( cSum )); 361 event->setCsum( mProfileName, QString::number( cSum ));
363 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 362 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
364 event->setID( mProfileName,QString::number( id ) ); 363 event->setID( mProfileName,QString::number( id ) );
365 ev = tr.next(); 364 ev = tr.next();
366 } 365 }
367 } 366 }
368 return true; 367 return true;
369} 368}
370void PhoneFormat::copyEvent( Event* to, Event* from ) 369void PhoneFormat::copyEvent( Event* to, Event* from )
371{ 370{
372 if ( from->dtStart().isValid() ) 371 if ( from->dtStart().isValid() )
373 to->setDtStart( from->dtStart() ); 372 to->setDtStart( from->dtStart() );
374 if ( from->dtEnd().isValid() ) 373 if ( from->dtEnd().isValid() )
375 to->setDtEnd( from->dtEnd() ); 374 to->setDtEnd( from->dtEnd() );
376 if ( !from->location().isEmpty() ) 375 if ( !from->location().isEmpty() )
377 to->setLocation( from->location() ); 376 to->setLocation( from->location() );
378 if ( !from->description().isEmpty() ) 377 if ( !from->description().isEmpty() )
379 to->setDescription( from->description() ); 378 to->setDescription( from->description() );
380 if ( !from->summary().isEmpty() ) 379 if ( !from->summary().isEmpty() )
381 to->setSummary( from->summary() ); 380 to->setSummary( from->summary() );
382 381
383 QPtrListIterator<Alarm> it( from->alarms() ); 382 if ( from->alarms().count() ) {
384 if ( it.current() )
385 to->clearAlarms(); 383 to->clearAlarms();
386 const Alarm *a; 384 Alarm *a = from->alarms().first();
387 while( (a = it.current()) ) { 385 Alarm *b = to->newAlarm( );
388 Alarm *b = new Alarm( *a ); 386 b->setEnabled( a->enabled() );
389 b->setParent( to ); 387 if ( a->hasStartOffset() ) {
390 to->addAlarm( b ); 388 b->setStartOffset( a->startOffset() );
391 ++it; 389 }
390 if ( a->hasTime() )
391 b->setTime( a->time() );
392
392 } 393 }
393 QStringList cat = to->categories(); 394 QStringList cat = to->categories();
394 QStringList catFrom = from->categories(); 395 QStringList catFrom = from->categories();
395 QString nCat; 396 QString nCat;
396 int iii; 397 int iii;
397 for ( iii = 0; iii < catFrom.count();++iii ) { 398 for ( iii = 0; iii < catFrom.count();++iii ) {
398 nCat = catFrom[iii]; 399 nCat = catFrom[iii];
399 if ( !nCat.isEmpty() ) 400 if ( !nCat.isEmpty() )
400 if ( !cat.contains( nCat )) { 401 if ( !cat.contains( nCat )) {
401 cat << nCat; 402 cat << nCat;
402 } 403 }
403 } 404 }
404 to->setCategories( cat ); 405 to->setCategories( cat );
405 Recurrence * r = new Recurrence( *from->recurrence(),to); 406 Recurrence * r = new Recurrence( *from->recurrence(),to);
406 to->setRecurrence( r ) ; 407 to->setRecurrence( r ) ;
407 408
408 409
409} 410}
410void PhoneFormat::copyTodo( Todo* to, Todo* from ) 411void PhoneFormat::copyTodo( Todo* to, Todo* from )
411{ 412{
412 if ( from->dtStart().isValid() ) 413 if ( from->dtStart().isValid() )
413 to->setDtStart( from->dtStart() ); 414 to->setDtStart( from->dtStart() );
414 if ( from->dtDue().isValid() ) 415 if ( from->dtDue().isValid() )
415 to->setDtDue( from->dtDue() ); 416 to->setDtDue( from->dtDue() );
416 if ( !from->location().isEmpty() ) 417 if ( !from->location().isEmpty() )
417 to->setLocation( from->location() ); 418 to->setLocation( from->location() );
418 if ( !from->description().isEmpty() ) 419 if ( !from->description().isEmpty() )
419 to->setDescription( from->description() ); 420 to->setDescription( from->description() );
420 if ( !from->summary().isEmpty() ) 421 if ( !from->summary().isEmpty() )
421 to->setSummary( from->summary() ); 422 to->setSummary( from->summary() );
422 423
423 QPtrListIterator<Alarm> it( from->alarms() ); 424 if ( from->alarms().count() ) {
424 if ( it.current() )
425 to->clearAlarms(); 425 to->clearAlarms();
426 const Alarm *a; 426 Alarm *a = from->alarms().first();
427 while( (a = it.current()) ) { 427 Alarm *b = to->newAlarm( );
428 Alarm *b = new Alarm( *a ); 428 b->setEnabled( a->enabled() );
429 b->setParent( to ); 429 if ( a->hasStartOffset() )
430 to->addAlarm( b ); 430 b->setStartOffset( a->startOffset() );
431 ++it; 431 if ( a->hasTime() )
432 b->setTime( a->time() );
432 } 433 }
434
433 QStringList cat = to->categories(); 435 QStringList cat = to->categories();
434 QStringList catFrom = from->categories(); 436 QStringList catFrom = from->categories();
435 QString nCat; 437 QString nCat;
436 int iii; 438 int iii;
437 for ( iii = 0; iii < catFrom.count();++iii ) { 439 for ( iii = 0; iii < catFrom.count();++iii ) {
438 nCat = catFrom[iii]; 440 nCat = catFrom[iii];
439 if ( !nCat.isEmpty() ) 441 if ( !nCat.isEmpty() )
440 if ( !cat.contains( nCat )) { 442 if ( !cat.contains( nCat )) {
441 cat << nCat; 443 cat << nCat;
442 } 444 }
443 } 445 }
444 to->setCategories( cat ); 446 to->setCategories( cat );
445 if ( from->isCompleted() ) { 447 if ( from->isCompleted() ) {
446 to->setCompleted( true ); 448 to->setCompleted( true );
447 if( from->completed().isValid() ) 449 if( from->completed().isValid() )
448 to->setCompleted( from->completed() ); 450 to->setCompleted( from->completed() );
449 } else { 451 } else {
450 // set percentcomplete only, if to->isCompleted() 452 // set percentcomplete only, if to->isCompleted()
451 if ( to->isCompleted() ) 453 if ( to->isCompleted() )
452 to->setPercentComplete(from->percentComplete()); 454 to->setPercentComplete(from->percentComplete());
453 } 455 }
454 if( to->priority() == 2 && from->priority() == 1 ) 456 if( to->priority() == 2 && from->priority() == 1 )
455 ; //skip 457 ; //skip
456 else if (to->priority() == 4 && from->priority() == 5 ) 458 else if (to->priority() == 4 && from->priority() == 5 )
457 ; 459 ;
458 else 460 else
459 to->setPriority(from->priority()); 461 to->setPriority(from->priority());
460 462
461} 463}
462#include <qcstring.h> 464#include <qcstring.h>
463 465
464void PhoneFormat::afterSave( Incidence* inc) 466void PhoneFormat::afterSave( Incidence* inc)
465{ 467{
466 uint csum; 468 uint csum;
467 inc->removeID( mProfileName ); 469 inc->removeID( mProfileName );
468 if ( inc->type() == "Event") 470 if ( inc->type() == "Event")
469 csum = PhoneFormat::getCsumEvent( (Event*) inc ); 471 csum = PhoneFormat::getCsumEvent( (Event*) inc );
470 else 472 else
471 csum = PhoneFormat::getCsumTodo( (Todo*) inc ); 473 csum = PhoneFormat::getCsumTodo( (Todo*) inc );
472 inc->setCsum( mProfileName, QString::number( csum )); 474 inc->setCsum( mProfileName, QString::number( csum ));
473 475
474 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 476 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
475 477
476} 478}
477bool PhoneFormat::save( Calendar *calendar) 479bool PhoneFormat::save( Calendar *calendar)
478{ 480{
479 QLabel status ( i18n(" Opening device ..."), 0 ); 481 QLabel status ( i18n(" Opening device ..."), 0 );
480 int w = status.sizeHint().width()+20 ; 482 int w = status.sizeHint().width()+20 ;
@@ -488,150 +490,146 @@ bool PhoneFormat::save( Calendar *calendar)
488 status.raise(); 490 status.raise();
489 qApp->processEvents(); 491 qApp->processEvents();
490 QString message; 492 QString message;
491#ifdef _WIN32_ 493#ifdef _WIN32_
492 QString fileName = locateLocal("data", "korganizer") + "\\tempfile.vcs"; 494 QString fileName = locateLocal("data", "korganizer") + "\\tempfile.vcs";
493#else 495#else
494 QString fileName = "/tmp/kdepimtemp.vcs"; 496 QString fileName = "/tmp/kdepimtemp.vcs";
495#endif 497#endif
496 498
497 // 1 remove events which should be deleted 499 // 1 remove events which should be deleted
498 QPtrList<Event> er = calendar->rawEvents(); 500 QPtrList<Event> er = calendar->rawEvents();
499 Event* ev = er.first(); 501 Event* ev = er.first();
500 while ( ev ) { 502 while ( ev ) {
501 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { 503 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
502 calendar->deleteEvent( ev ); 504 calendar->deleteEvent( ev );
503 } else { 505 } else {
504 506
505 } 507 }
506 ev = er.next(); 508 ev = er.next();
507 } 509 }
508 // 2 remove todos which should be deleted 510 // 2 remove todos which should be deleted
509 QPtrList<Todo> tl = calendar->rawTodos(); 511 QPtrList<Todo> tl = calendar->rawTodos();
510 Todo* to = tl.first(); 512 Todo* to = tl.first();
511 while ( to ) { 513 while ( to ) {
512 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { 514 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
513 calendar->deleteTodo( to ); 515 calendar->deleteTodo( to );
514 } else { 516 } else {
515 if ( to->isCompleted()) { 517 if ( to->isCompleted()) {
516 calendar->deleteTodo( to ); 518 calendar->deleteTodo( to );
517 } 519 }
518 } 520 }
519 to = tl.next(); 521 to = tl.next();
520 } 522 }
521 // 3 save file 523 // 3 save file
522 VCalFormat vfsave; 524 VCalFormat vfsave;
523 vfsave.setLocalTime ( true ); 525 vfsave.setLocalTime ( true );
524 if ( ! vfsave.save( calendar, fileName ) ) 526 if ( ! vfsave.save( calendar, fileName ) )
525 return false; 527 return false;
526 // 4 call kammu 528 // 4 call kammu
527 QString command ="./kammu --restore " + fileName ; 529 QString command ="./kammu --restore " + fileName ;
528 int ret; 530 int ret;
529 while ( (ret = system ( command.latin1())) != 0 ) { 531 while ( (ret = system ( command.latin1())) != 0 ) {
530 qDebug("Error S::command returned %d. asking users", ret); 532 qDebug("Error S::command returned %d. asking users", ret);
531 int retval = KMessageBox::warningContinueCancel(0, 533 int retval = KMessageBox::warningContinueCancel(0,
532 i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone sync"),i18n("Retry"),i18n("Cancel")); 534 i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone sync"),i18n("Retry"),i18n("Cancel"));
533 if ( retval != KMessageBox::Continue ) 535 if ( retval != KMessageBox::Continue )
534 return false; 536 return false;
535 } 537 }
536 if ( ret != 0 ) { 538
537 qDebug("Error S::command returned %d", ret);
538 return false;
539 }
540 // 5 reread data 539 // 5 reread data
541 message = i18n(" Rereading all data ... "); 540 message = i18n(" Rereading all data ... ");
542 status.setText ( message ); 541 status.setText ( message );
543 qApp->processEvents(); 542 qApp->processEvents();
544 CalendarLocal* calendarTemp = new CalendarLocal(); 543 CalendarLocal* calendarTemp = new CalendarLocal();
545 calendarTemp->setTimeZoneId( calendar->timeZoneId()); 544 calendarTemp->setTimeZoneId( calendar->timeZoneId());
546 if ( ! load( calendarTemp,calendar) ){ 545 if ( ! load( calendarTemp,calendar) ){
547 qDebug("error reloading calendar "); 546 qDebug("error reloading calendar ");
548 delete calendarTemp; 547 delete calendarTemp;
549 return false; 548 return false;
550 } 549 }
551 // 6 compare data 550 // 6 compare data
552 551
553//algo 6 compare event 552//algo 6 compare event
554 er = calendar->rawEvents(); 553 er = calendar->rawEvents();
555 ev = er.first(); 554 ev = er.first();
556 message = i18n(" Comparing event # "); 555 message = i18n(" Comparing event # ");
557 QPtrList<Event> er1 = calendarTemp->rawEvents(); 556 QPtrList<Event> er1 = calendarTemp->rawEvents();
558 Event* ev1; 557 Event* ev1;
559 int procCount = 0; 558 int procCount = 0;
560 while ( ev ) { 559 while ( ev ) {
561 //qDebug("event new ID %s",ev->summary().latin1()); 560 //qDebug("event new ID %s",ev->summary().latin1());
562 status.setText ( message + QString::number ( ++procCount ) ); 561 status.setText ( message + QString::number ( ++procCount ) );
563 qApp->processEvents(); 562 qApp->processEvents();
564 uint csum; 563 uint csum;
565 csum = PhoneFormat::getCsumEvent( ev ); 564 csum = PhoneFormat::getCsumEvent( ev );
566 QString cSum = QString::number( csum ); 565 QString cSum = QString::number( csum );
567 //ev->setCsum( mProfileName, cSum ); 566 //ev->setCsum( mProfileName, cSum );
568 //qDebug("Event cSum %s ", cSum.latin1()); 567 //qDebug("Event cSum %s ", cSum.latin1());
569 ev1 = er1.first(); 568 ev1 = er1.first();
570 while ( ev1 ) { 569 while ( ev1 ) {
571 if ( ev1->getCsum( mProfileName ) == cSum ) { 570 if ( ev1->getCsum( mProfileName ) == cSum ) {
572 er1.remove( ev1 ); 571 er1.remove( ev1 );
573 afterSave( ev ); 572 afterSave( ev );
574 ev->setID(mProfileName, ev1->getID(mProfileName) ); 573 ev->setID(mProfileName, ev1->getID(mProfileName) );
575 //qDebug("Event found on phone for %s ", ev->summary().latin1()); 574 //qDebug("Event found on phone for %s ", ev->summary().latin1());
576 575
577 break; 576 break;
578 } 577 }
579 ev1 = er1.next(); 578 ev1 = er1.next();
580 } 579 }
581 if ( ! ev1 ) { 580 if ( ! ev1 ) {
582 ev->removeID(mProfileName); 581 // ev->removeID(mProfileName);
583 qDebug("ERROR: No event found on phone for %s ", ev->summary().latin1()); 582 qDebug("ERROR: No event found on phone for %s ", ev->summary().latin1());
584 } 583 }
585 584
586 585
587 ev = er.next(); 586 ev = er.next();
588 } 587 }
589 //algo 6 compare todo 588 //algo 6 compare todo
590 tl = calendar->rawTodos(); 589 tl = calendar->rawTodos();
591 to = tl.first(); 590 to = tl.first();
592 procCount = 0; 591 procCount = 0;
593 QPtrList<Todo> tl1 = calendarTemp->rawTodos(); 592 QPtrList<Todo> tl1 = calendarTemp->rawTodos();
594 Todo* to1 ; 593 Todo* to1 ;
595 message = i18n(" Comparing todo # "); 594 message = i18n(" Comparing todo # ");
596 while ( to ) { 595 while ( to ) {
597 qDebug("todo2 %d ", procCount);
598 status.setText ( message + QString::number ( ++procCount ) ); 596 status.setText ( message + QString::number ( ++procCount ) );
599 qApp->processEvents(); 597 qApp->processEvents();
600 uint csum; 598 uint csum;
601 csum = PhoneFormat::getCsumTodo( to ); 599 csum = PhoneFormat::getCsumTodo( to );
602 QString cSum = QString::number( csum ); 600 QString cSum = QString::number( csum );
603 //to->setCsum( mProfileName, cSum ); 601 //to->setCsum( mProfileName, cSum );
604 qDebug("Todo cSum %s ", cSum.latin1()); 602 //qDebug("Todo cSum %s ", cSum.latin1());
605 Todo* to1 = tl1.first(); 603 Todo* to1 = tl1.first();
606 while ( to1 ) { 604 while ( to1 ) {
607 if ( to1->getCsum( mProfileName ) == cSum ) { 605 if ( to1->getCsum( mProfileName ) == cSum ) {
608 tl1.remove( to1 ); 606 tl1.remove( to1 );
609 afterSave( to ); 607 afterSave( to );
610 to->setID(mProfileName, to1->getID(mProfileName) ); 608 to->setID(mProfileName, to1->getID(mProfileName) );
611 break; 609 break;
612 } 610 }
613 to1 = tl1.next(); 611 to1 = tl1.next();
614 } 612 }
615 if ( ! to1 ) { 613 if ( ! to1 ) {
616 to->removeID(mProfileName); 614 //to->removeID(mProfileName);
617 qDebug("ERROR: No todo found on phone for %s ", to->summary().latin1()); 615 qDebug("ERROR: No todo found on phone for %s ", to->summary().latin1());
618 } 616 }
619 617
620 to = tl.next(); 618 to = tl.next();
621 } 619 }
622 delete calendarTemp; 620 delete calendarTemp;
623 return true; 621 return true;
624 622
625 623
626 624
627} 625}
628 626
629 627
630QString PhoneFormat::toString( Calendar * ) 628QString PhoneFormat::toString( Calendar * )
631{ 629{
632 return QString::null; 630 return QString::null;
633} 631}
634bool PhoneFormat::fromString( Calendar *calendar, const QString & text) 632bool PhoneFormat::fromString( Calendar *calendar, const QString & text)
635{ 633{
636 return false; 634 return false;
637} 635}