summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/calendar.cpp15
-rw-r--r--libkcal/calendar.h1
-rw-r--r--libkcal/incidencebase.cpp3
-rw-r--r--libkcal/phoneformat.cpp227
-rw-r--r--libkcal/phoneformat.h4
-rw-r--r--libkcal/vcalformat.cpp7
-rw-r--r--libkcal/vcalformat.h4
7 files changed, 221 insertions, 40 deletions
diff --git a/libkcal/calendar.cpp b/libkcal/calendar.cpp
index 32aac7a..a3977d7 100644
--- a/libkcal/calendar.cpp
+++ b/libkcal/calendar.cpp
@@ -1,64 +1,65 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <stdlib.h> 22#include <stdlib.h>
23#include <time.h> 23#include <time.h>
24 24
25#include <kdebug.h> 25#include <kdebug.h>
26#include <kglobal.h> 26#include <kglobal.h>
27#include <klocale.h> 27#include <klocale.h>
28 28
29#include "exceptions.h" 29#include "exceptions.h"
30#include "calfilter.h" 30#include "calfilter.h"
31 31
32#include "calendar.h" 32#include "calendar.h"
33#include "syncdefines.h"
33 34
34using namespace KCal; 35using namespace KCal;
35 36
36Calendar::Calendar() 37Calendar::Calendar()
37{ 38{
38 39
39 init(); 40 init();
40 setTimeZoneId( i18n (" 00:00 Europe/London(UTC)") ); 41 setTimeZoneId( i18n (" 00:00 Europe/London(UTC)") );
41} 42}
42 43
43Calendar::Calendar( const QString &timeZoneId ) 44Calendar::Calendar( const QString &timeZoneId )
44{ 45{
45 46
46 init(); 47 init();
47 setTimeZoneId(timeZoneId); 48 setTimeZoneId(timeZoneId);
48} 49}
49 50
50void Calendar::init() 51void Calendar::init()
51{ 52{
52 mObserver = 0; 53 mObserver = 0;
53 mNewObserver = false; 54 mNewObserver = false;
54 55
55 mModified = false; 56 mModified = false;
56 57
57 // Setup default filter, which does nothing 58 // Setup default filter, which does nothing
58 mDefaultFilter = new CalFilter; 59 mDefaultFilter = new CalFilter;
59 mFilter = mDefaultFilter; 60 mFilter = mDefaultFilter;
60 mFilter->setEnabled(false); 61 mFilter->setEnabled(false);
61 62
62 // initialize random numbers. This is a hack, and not 63 // initialize random numbers. This is a hack, and not
63 // even that good of one at that. 64 // even that good of one at that.
64// srandom(time(0)); 65// srandom(time(0));
@@ -218,65 +219,79 @@ void Calendar::setEmail(const QString &e)
218 mOwnerEmail = e; 219 mOwnerEmail = e;
219 220
220 setModified( true ); 221 setModified( true );
221} 222}
222 223
223void Calendar::setFilter(CalFilter *filter) 224void Calendar::setFilter(CalFilter *filter)
224{ 225{
225 mFilter = filter; 226 mFilter = filter;
226} 227}
227 228
228CalFilter *Calendar::filter() 229CalFilter *Calendar::filter()
229{ 230{
230 return mFilter; 231 return mFilter;
231} 232}
232 233
233QPtrList<Incidence> Calendar::incidences() 234QPtrList<Incidence> Calendar::incidences()
234{ 235{
235 QPtrList<Incidence> incidences; 236 QPtrList<Incidence> incidences;
236 237
237 Incidence *i; 238 Incidence *i;
238 239
239 QPtrList<Event> e = events(); 240 QPtrList<Event> e = events();
240 for( i = e.first(); i; i = e.next() ) incidences.append( i ); 241 for( i = e.first(); i; i = e.next() ) incidences.append( i );
241 242
242 QPtrList<Todo> t = todos(); 243 QPtrList<Todo> t = todos();
243 for( i = t.first(); i; i = t.next() ) incidences.append( i ); 244 for( i = t.first(); i; i = t.next() ) incidences.append( i );
244 245
245 QPtrList<Journal> j = journals(); 246 QPtrList<Journal> j = journals();
246 for( i = j.first(); i; i = j.next() ) incidences.append( i ); 247 for( i = j.first(); i; i = j.next() ) incidences.append( i );
247 248
248 return incidences; 249 return incidences;
249} 250}
251void Calendar::resetTempSyncStat()
252{
253 QPtrList<Incidence> incidences;
254
255 Incidence *i;
256
257 QPtrList<Event> e = rawEvents();
258 for( i = e.first(); i; i = e.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
250 259
260 QPtrList<Todo> t = rawTodos();
261 for( i = t.first(); i; i = t.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
262
263 QPtrList<Journal> j = journals();
264 for( i = j.first(); i; i = j.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
265}
251QPtrList<Incidence> Calendar::rawIncidences() 266QPtrList<Incidence> Calendar::rawIncidences()
252{ 267{
253 QPtrList<Incidence> incidences; 268 QPtrList<Incidence> incidences;
254 269
255 Incidence *i; 270 Incidence *i;
256 271
257 QPtrList<Event> e = rawEvents(); 272 QPtrList<Event> e = rawEvents();
258 for( i = e.first(); i; i = e.next() ) incidences.append( i ); 273 for( i = e.first(); i; i = e.next() ) incidences.append( i );
259 274
260 QPtrList<Todo> t = rawTodos(); 275 QPtrList<Todo> t = rawTodos();
261 for( i = t.first(); i; i = t.next() ) incidences.append( i ); 276 for( i = t.first(); i; i = t.next() ) incidences.append( i );
262 277
263 QPtrList<Journal> j = journals(); 278 QPtrList<Journal> j = journals();
264 for( i = j.first(); i; i = j.next() ) incidences.append( i ); 279 for( i = j.first(); i; i = j.next() ) incidences.append( i );
265 280
266 return incidences; 281 return incidences;
267} 282}
268 283
269QPtrList<Event> Calendar::events( const QDate &date, bool sorted ) 284QPtrList<Event> Calendar::events( const QDate &date, bool sorted )
270{ 285{
271 QPtrList<Event> el = rawEventsForDate(date,sorted); 286 QPtrList<Event> el = rawEventsForDate(date,sorted);
272 mFilter->apply(&el); 287 mFilter->apply(&el);
273 return el; 288 return el;
274} 289}
275 290
276QPtrList<Event> Calendar::events( const QDateTime &qdt ) 291QPtrList<Event> Calendar::events( const QDateTime &qdt )
277{ 292{
278 QPtrList<Event> el = rawEventsForDate(qdt); 293 QPtrList<Event> el = rawEventsForDate(qdt);
279 mFilter->apply(&el); 294 mFilter->apply(&el);
280 return el; 295 return el;
281} 296}
282 297
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index 4a3223c..06a911c 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -37,64 +37,65 @@
37 37
38class KConfig; 38class KConfig;
39 39
40namespace KCal { 40namespace KCal {
41 41
42class CalFilter; 42class CalFilter;
43 43
44/** 44/**
45 This is the main "calendar" object class for KOrganizer. It holds 45 This is the main "calendar" object class for KOrganizer. It holds
46 information like all appointments/events, user information, etc. etc. 46 information like all appointments/events, user information, etc. etc.
47 one calendar is associated with each CalendarView (@see calendarview.h). 47 one calendar is associated with each CalendarView (@see calendarview.h).
48 This is an abstract base class defining the interface to a calendar. It is 48 This is an abstract base class defining the interface to a calendar. It is
49 implemented by subclasses like @see CalendarLocal, which use different 49 implemented by subclasses like @see CalendarLocal, which use different
50 methods to store and access the data. 50 methods to store and access the data.
51 51
52 Ownership of events etc. is handled by the following policy: As soon as an 52 Ownership of events etc. is handled by the following policy: As soon as an
53 event (or any other subclass of IncidenceBase) object is added to the 53 event (or any other subclass of IncidenceBase) object is added to the
54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes 54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes
55 care of deleting it. All Events returned by the query functions are returned 55 care of deleting it. All Events returned by the query functions are returned
56 as pointers, that means all changes to the returned events are immediately 56 as pointers, that means all changes to the returned events are immediately
57 visible in the Calendar. You shouldn't delete any Event object you get from 57 visible in the Calendar. You shouldn't delete any Event object you get from
58 Calendar. 58 Calendar.
59*/ 59*/
60class Calendar : public QObject, public CustomProperties, 60class Calendar : public QObject, public CustomProperties,
61 public IncidenceBase::Observer 61 public IncidenceBase::Observer
62{ 62{
63 Q_OBJECT 63 Q_OBJECT
64public: 64public:
65 Calendar(); 65 Calendar();
66 Calendar(const QString &timeZoneId); 66 Calendar(const QString &timeZoneId);
67 virtual ~Calendar(); 67 virtual ~Calendar();
68 void deleteIncidence(Incidence *in); 68 void deleteIncidence(Incidence *in);
69 void resetTempSyncStat();
69 /** 70 /**
70 Clears out the current calendar, freeing all used memory etc. 71 Clears out the current calendar, freeing all used memory etc.
71 */ 72 */
72 virtual void close() = 0; 73 virtual void close() = 0;
73 74
74 /** 75 /**
75 Sync changes in memory to persistant storage. 76 Sync changes in memory to persistant storage.
76 */ 77 */
77 virtual void save() = 0; 78 virtual void save() = 0;
78 virtual QPtrList<Event> getExternLastSyncEvents() = 0; 79 virtual QPtrList<Event> getExternLastSyncEvents() = 0;
79 virtual bool isSaving() { return false; } 80 virtual bool isSaving() { return false; }
80 81
81 /** 82 /**
82 Return the owner of the calendar's full name. 83 Return the owner of the calendar's full name.
83 */ 84 */
84 const QString &getOwner() const; 85 const QString &getOwner() const;
85 /** 86 /**
86 Set the owner of the calendar. Should be owner's full name. 87 Set the owner of the calendar. Should be owner's full name.
87 */ 88 */
88 void setOwner( const QString &os ); 89 void setOwner( const QString &os );
89 /** 90 /**
90 Return the email address of the calendar owner. 91 Return the email address of the calendar owner.
91 */ 92 */
92 const QString &getEmail(); 93 const QString &getEmail();
93 /** 94 /**
94 Set the email address of the calendar owner. 95 Set the email address of the calendar owner.
95 */ 96 */
96 void setEmail( const QString & ); 97 void setEmail( const QString & );
97 98
98 /** 99 /**
99 Set time zone from a timezone string (e.g. -2:00) 100 Set time zone from a timezone string (e.g. -2:00)
100 */ 101 */
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp
index 15c4fa8..64a343c 100644
--- a/libkcal/incidencebase.cpp
+++ b/libkcal/incidencebase.cpp
@@ -1,75 +1,76 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
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#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24#include <kidmanager.h> 24#include <kidmanager.h>
25 25
26#include "calformat.h" 26#include "calformat.h"
27#include "syncdefines.h"
27 28
28#include "incidencebase.h" 29#include "incidencebase.h"
29 30
30using namespace KCal; 31using namespace KCal;
31 32
32IncidenceBase::IncidenceBase() : 33IncidenceBase::IncidenceBase() :
33 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), 34 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false),
34 mPilotId(0), mSyncStatus(SYNCMOD) 35 mPilotId(0), mSyncStatus(SYNCMOD)
35{ 36{
36 setUid(CalFormat::createUniqueId()); 37 setUid(CalFormat::createUniqueId());
37 mOrganizer = ""; 38 mOrganizer = "";
38 mFloats = false; 39 mFloats = false;
39 mDuration = 0; 40 mDuration = 0;
40 mHasDuration = false; 41 mHasDuration = false;
41 mPilotId = 0; 42 mPilotId = 0;
42 mExternalId = ":"; 43 mExternalId = ":";
43 mTempSyncStat = 0; 44 mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
44 mSyncStatus = 0; 45 mSyncStatus = 0;
45 mAttendees.setAutoDelete( true ); 46 mAttendees.setAutoDelete( true );
46} 47}
47 48
48IncidenceBase::IncidenceBase(const IncidenceBase &i) : 49IncidenceBase::IncidenceBase(const IncidenceBase &i) :
49 CustomProperties( i ) 50 CustomProperties( i )
50{ 51{
51 mReadOnly = i.mReadOnly; 52 mReadOnly = i.mReadOnly;
52 mDtStart = i.mDtStart; 53 mDtStart = i.mDtStart;
53 mDuration = i.mDuration; 54 mDuration = i.mDuration;
54 mHasDuration = i.mHasDuration; 55 mHasDuration = i.mHasDuration;
55 mOrganizer = i.mOrganizer; 56 mOrganizer = i.mOrganizer;
56 mUid = i.mUid; 57 mUid = i.mUid;
57 QPtrList<Attendee> attendees = i.attendees(); 58 QPtrList<Attendee> attendees = i.attendees();
58 for( Attendee *a = attendees.first(); a; a = attendees.next() ) { 59 for( Attendee *a = attendees.first(); a; a = attendees.next() ) {
59 mAttendees.append( new Attendee( *a ) ); 60 mAttendees.append( new Attendee( *a ) );
60 } 61 }
61 mFloats = i.mFloats; 62 mFloats = i.mFloats;
62 mLastModified = i.mLastModified; 63 mLastModified = i.mLastModified;
63 mPilotId = i.mPilotId; 64 mPilotId = i.mPilotId;
64 mTempSyncStat = i.mTempSyncStat; 65 mTempSyncStat = i.mTempSyncStat;
65 mSyncStatus = i.mSyncStatus; 66 mSyncStatus = i.mSyncStatus;
66 mExternalId = i.mExternalId; 67 mExternalId = i.mExternalId;
67 // The copied object is a new one, so it isn't observed by the observer 68 // The copied object is a new one, so it isn't observed by the observer
68 // of the original object. 69 // of the original object.
69 mObservers.clear(); 70 mObservers.clear();
70 71
71 mAttendees.setAutoDelete( true ); 72 mAttendees.setAutoDelete( true );
72} 73}
73 74
74IncidenceBase::~IncidenceBase() 75IncidenceBase::~IncidenceBase()
75{ 76{
diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp
index e6d4879..6bbc0a3 100644
--- a/libkcal/phoneformat.cpp
+++ b/libkcal/phoneformat.cpp
@@ -37,67 +37,67 @@
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 "phoneformat.h" 44#include "phoneformat.h"
45#include "syncdefines.h" 45#include "syncdefines.h"
46 46
47using namespace KCal; 47using namespace KCal;
48 48
49class PhoneParser : public QObject 49class PhoneParser : public QObject
50{ 50{
51public: 51public:
52 PhoneParser( Calendar *calendar, QString profileName ) : mCalendar( calendar ), mProfileName ( profileName ) { 52 PhoneParser( Calendar *calendar, QString profileName ) : mCalendar( calendar ), mProfileName ( profileName ) {
53 ; 53 ;
54 } 54 }
55 bool readTodo( Calendar *existingCalendar,GSM_ToDoEntry *ToDo, GSM_StateMachine* s) 55 bool readTodo( Calendar *existingCalendar,GSM_ToDoEntry *ToDo, GSM_StateMachine* s)
56 { 56 {
57 57
58 int id = ToDo->Location; 58 int id = ToDo->Location;
59 Todo *todo; 59 Todo *todo;
60 todo = existingCalendar->todo( mProfileName ,QString::number( id ) ); 60 todo = existingCalendar->todo( mProfileName ,QString::number( id ) );
61 if (todo ) 61 if (todo )
62 todo = (Todo *)todo->clone(); 62 todo = (Todo *)todo->clone();
63 else 63 else
64 todo = new Todo; 64 todo = new Todo;
65 todo->setID( mProfileName,QString::number( id ) ); 65 todo->setID( mProfileName,QString::number( id ) );
66 todo->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL ); 66 todo->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL );
67 int priority; 67 int priority;
68 switch (ToDo->Priority) { 68 switch (ToDo->Priority) {
69 case GSM_Priority_Low : priority = 1; break; 69 case GSM_Priority_Low : priority = 5; break;
70 case GSM_Priority_Medium : priority = 3; break; 70 case GSM_Priority_Medium : priority = 3; break;
71 case GSM_Priority_High : priority = 5; break; 71 case GSM_Priority_High : priority = 1; break;
72 default :priority = 3 ;break; 72 default :priority = 3 ;break;
73 } 73 }
74 todo->setPriority( priority ); 74 todo->setPriority( priority );
75 GSM_Phone_Functions*Phone; 75 GSM_Phone_Functions*Phone;
76 Phone=s->Phone.Functions; 76 Phone=s->Phone.Functions;
77 int j; 77 int j;
78 GSM_DateTime* dtp; 78 GSM_DateTime* dtp;
79 bool alarm = false; 79 bool alarm = false;
80 QDateTime alarmDt; 80 QDateTime alarmDt;
81 GSM_Category Category; 81 GSM_Category Category;
82 int error; 82 int error;
83 for (j=0;j<ToDo->EntriesNum;j++) { 83 for (j=0;j<ToDo->EntriesNum;j++) {
84 84
85 //qDebug(" for todo %d",ToDo->Location ); 85 //qDebug(" for todo %d",ToDo->Location );
86 switch (ToDo->Entries[j].EntryType) { 86 switch (ToDo->Entries[j].EntryType) {
87 case TODO_END_DATETIME: 87 case TODO_END_DATETIME:
88 dtp = &ToDo->Entries[j].Date ; 88 dtp = &ToDo->Entries[j].Date ;
89 todo->setDtDue (fromGSM ( dtp )); 89 todo->setDtDue (fromGSM ( dtp ));
90 break; 90 break;
91 case TODO_COMPLETED: 91 case TODO_COMPLETED:
92 if ( ToDo->Entries[j].Number == 1 ) { 92 if ( ToDo->Entries[j].Number == 1 ) {
93 todo->setCompleted( true ); 93 todo->setCompleted( true );
94 } 94 }
95 else { 95 else {
96 todo->setCompleted( false ); 96 todo->setCompleted( false );
97 } 97 }
98 break; 98 break;
99 case TODO_ALARM_DATETIME: 99 case TODO_ALARM_DATETIME:
100 dtp = &ToDo->Entries[j].Date ; 100 dtp = &ToDo->Entries[j].Date ;
101 alarm = true; 101 alarm = true;
102 alarmDt = fromGSM ( dtp ); 102 alarmDt = fromGSM ( dtp );
103 break; 103 break;
@@ -201,64 +201,65 @@ public:
201 event->setID( mProfileName,QString::number( id ) ); 201 event->setID( mProfileName,QString::number( id ) );
202 event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL ); 202 event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL );
203 203
204 204
205 int i = 0; 205 int i = 0;
206 bool repeating = false; 206 bool repeating = false;
207 int repeat_dayofweek = -1; 207 int repeat_dayofweek = -1;
208 int repeat_day = -1; 208 int repeat_day = -1;
209 int repeat_weekofmonth = -1; 209 int repeat_weekofmonth = -1;
210 int repeat_month = -1; 210 int repeat_month = -1;
211 int repeat_frequency = -1; 211 int repeat_frequency = -1;
212 int rec_type = -1; 212 int rec_type = -1;
213 GSM_DateTime repeat_startdate = {0,0,0,0,0,0,0}; 213 GSM_DateTime repeat_startdate = {0,0,0,0,0,0,0};
214 GSM_DateTime repeat_stopdate = {0,0,0,0,0,0,0}; 214 GSM_DateTime repeat_stopdate = {0,0,0,0,0,0,0};
215 GSM_DateTime* dtp; 215 GSM_DateTime* dtp;
216 bool alarm = false; 216 bool alarm = false;
217 QDateTime alarmDt; 217 QDateTime alarmDt;
218 repeat_startdate.Day= 0; 218 repeat_startdate.Day= 0;
219 repeat_stopdate.Day = 0; 219 repeat_stopdate.Day = 0;
220 for (i=0;i<Note->EntriesNum;i++) { 220 for (i=0;i<Note->EntriesNum;i++) {
221 221
222 //qDebug(" for ev"); 222 //qDebug(" for ev");
223 switch (Note->Entries[i].EntryType) { 223 switch (Note->Entries[i].EntryType) {
224 case CAL_START_DATETIME: 224 case CAL_START_DATETIME:
225 dtp = &Note->Entries[i].Date ; 225 dtp = &Note->Entries[i].Date ;
226 if ( dtp->Hour > 24 ) { 226 if ( dtp->Hour > 24 ) {
227 event->setFloats( true ); 227 event->setFloats( true );
228 event->setDtStart( QDateTime (datefromGSM ( dtp ), QTime(0,0,0 ))); 228 event->setDtStart( QDateTime (datefromGSM ( dtp ), QTime(0,0,0 )));
229 } else { 229 } else {
230 event->setDtStart (fromGSM ( dtp )); 230 event->setDtStart (fromGSM ( dtp ));
231 231
232 } 232 }
233 //Note->Entries[i].Date.Hour = 5;
233 break; 234 break;
234 case CAL_END_DATETIME: 235 case CAL_END_DATETIME:
235 dtp = &Note->Entries[i].Date ; 236 dtp = &Note->Entries[i].Date ;
236 if ( dtp->Hour > 24 ) { 237 if ( dtp->Hour > 24 ) {
237 event->setFloats( true ); 238 event->setFloats( true );
238 event->setDtEnd( QDateTime (datefromGSM ( dtp ), QTime(0,0,0 ))); 239 event->setDtEnd( QDateTime (datefromGSM ( dtp ), QTime(0,0,0 )));
239 } else { 240 } else {
240 event->setDtEnd (fromGSM ( dtp )); 241 event->setDtEnd (fromGSM ( dtp ));
241 } 242 }
242 break; 243 break;
243 case CAL_ALARM_DATETIME: 244 case CAL_ALARM_DATETIME:
244 dtp = &Note->Entries[i].Date ; 245 dtp = &Note->Entries[i].Date ;
245 alarm = true; 246 alarm = true;
246 alarmDt = fromGSM ( dtp ); 247 alarmDt = fromGSM ( dtp );
247 break; 248 break;
248 case CAL_SILENT_ALARM_DATETIME: 249 case CAL_SILENT_ALARM_DATETIME:
249 dtp = &Note->Entries[i].Date ; 250 dtp = &Note->Entries[i].Date ;
250 alarm = true; 251 alarm = true;
251 alarmDt = fromGSM ( dtp ); 252 alarmDt = fromGSM ( dtp );
252 break; 253 break;
253 case CAL_RECURRANCE: 254 case CAL_RECURRANCE:
254 rec_type = Note->Entries[i].Number; 255 rec_type = Note->Entries[i].Number;
255 //printmsg("Repeat : %d day%s\n",Note->Entries[i].Number/24,((Note->Entries[i].Number/24)>1) ? "s":"" ); 256 //printmsg("Repeat : %d day%s\n",Note->Entries[i].Number/24,((Note->Entries[i].Number/24)>1) ? "s":"" );
256 break; 257 break;
257 case CAL_TEXT: 258 case CAL_TEXT:
258 //qDebug(" ev text %s", DecodeUnicodeConsole(Note->Entries[i].Text) ); 259 //qDebug(" ev text %s", DecodeUnicodeConsole(Note->Entries[i].Text) );
259 event->setSummary( QString::fromUtf8 ( (const char*)DecodeUnicodeConsole( Note->Entries[i].Text ))); 260 event->setSummary( QString::fromUtf8 ( (const char*)DecodeUnicodeConsole( Note->Entries[i].Text )));
260 break; 261 break;
261 case CAL_LOCATION: 262 case CAL_LOCATION:
262 event->setLocation(QString::fromUtf8 ((const char*) DecodeUnicodeConsole(Note->Entries[i].Text) )); 263 event->setLocation(QString::fromUtf8 ((const char*) DecodeUnicodeConsole(Note->Entries[i].Text) ));
263 break; 264 break;
264 case CAL_PHONE: 265 case CAL_PHONE:
@@ -741,305 +742,465 @@ ulong PhoneFormat::getCsum( const QStringList & attList)
741{ 742{
742 int max = attList.count() -1; 743 int max = attList.count() -1;
743 ulong cSum = 0; 744 ulong cSum = 0;
744 int j,k,i; 745 int j,k,i;
745 int add; 746 int add;
746 for ( i = 1; i < max ; ++i ) { 747 for ( i = 1; i < max ; ++i ) {
747 QString s = attList[i]; 748 QString s = attList[i];
748 if ( ! s.isEmpty() ){ 749 if ( ! s.isEmpty() ){
749 j = s.length(); 750 j = s.length();
750 for ( k = 0; k < j; ++k ) { 751 for ( k = 0; k < j; ++k ) {
751 int mul = k +1; 752 int mul = k +1;
752 add = s[k].unicode (); 753 add = s[k].unicode ();
753 if ( k < 16 ) 754 if ( k < 16 )
754 mul = mul * mul; 755 mul = mul * mul;
755 add = add * mul *i*i*i; 756 add = add * mul *i*i*i;
756 cSum += add; 757 cSum += add;
757 } 758 }
758 } 759 }
759 } 760 }
760 return cSum; 761 return cSum;
761 762
762} 763}
763//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum); 764//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum);
764#include <stdlib.h> 765#include <stdlib.h>
765#define DEBUGMODE false 766#define DEBUGMODE false
766bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) 767bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal)
767{ 768{
768 GSM_StateMachines; 769 GSM_StateMachines;
769 qDebug(" load "); 770 qDebug(" load ");
770 s.opened = false; 771 s.opened = false;
771 s.msg = NULL; 772 s.msg = NULL;
772 s.ConfigNum = 0; 773 s.ConfigNum = 0;
773 QLabel status ( i18n("Reading data. Opening device ..."), 0 ); 774 QLabel status ( i18n("Opening device ..."), 0 );
774 int w = status.sizeHint().width()+20 ; 775 int w = status.sizeHint().width()+20 ;
775 if ( w < 200 ) w = 200; 776 if ( w < 200 ) w = 230;
776 int h = status.sizeHint().height()+20 ; 777 int h = status.sizeHint().height()+20 ;
777 int dw = QApplication::desktop()->width(); 778 int dw = QApplication::desktop()->width();
778 int dh = QApplication::desktop()->height(); 779 int dh = QApplication::desktop()->height();
779 status.setCaption(i18n("Reading Phone Data") ); 780 status.setCaption(i18n("Reading phone...") );
780 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 781 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
781 status.show(); 782 status.show();
782 status.raise(); 783 status.raise();
783 qApp->processEvents(); 784 qApp->processEvents();
784#if 0 785#if 0
785 static char*cp; 786 static char*cp;
786 static INI_Section *cfg = NULL; 787 static INI_Section *cfg = NULL;
787 cfg=GSM_FindGammuRC(); 788 cfg=GSM_FindGammuRC();
788 int i; 789 int i;
789 for (i = 0; i <= MAX_CONFIG_NUM; i++) { 790 for (i = 0; i <= MAX_CONFIG_NUM; i++) {
790 if (cfg!=NULL) { 791 if (cfg!=NULL) {
791 cp = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*)"gammucoding", false); 792 cp = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*)"gammucoding", false);
792 if (cp) di.coding = cp; 793 if (cp) di.coding = cp;
793 794
794 s.Config[i].Localize = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*) "gammuloc", false); 795 s.Config[i].Localize = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*) "gammuloc", false);
795 if (s.Config[i].Localize) { 796 if (s.Config[i].Localize) {
796 s.msg=INI_ReadFile(s.Config[i].Localize, true); 797 s.msg=INI_ReadFile(s.Config[i].Localize, true);
797 } else { 798 } else {
798#if !defined(WIN32) && defined(LOCALE_PATH) 799#if !defined(WIN32) && defined(LOCALE_PATH)
799 locale = setlocale(LC_MESSAGES, NULL); 800 locale = setlocale(LC_MESSAGES, NULL);
800 if (locale != NULL) { 801 if (locale != NULL) {
801 snprintf(locale_file, 200, "%s/gammu_%c%c.txt", 802 snprintf(locale_file, 200, "%s/gammu_%c%c.txt",
802 LOCALE_PATH, 803 LOCALE_PATH,
803 tolower(locale[0]), 804 tolower(locale[0]),
804 tolower(locale[1])); 805 tolower(locale[1]));
805 s.msg = INI_ReadFile(locale_file, true); 806 s.msg = INI_ReadFile(locale_file, true);
806 } 807 }
807#endif 808#endif
808 } 809 }
809 } 810 }
810 811
811 /* Wanted user specific configuration? */ 812 /* Wanted user specific configuration? */
812 813
813 if (!GSM_ReadConfig(cfg, &s.Config[i], i) && i != 0) break; 814 if (!GSM_ReadConfig(cfg, &s.Config[i], i) && i != 0) break;
814 815
815 s.ConfigNum++; 816 s.ConfigNum++;
816 817
817 /* We want to use only one file descriptor for global and state machine debug output */ 818 /* We want to use only one file descriptor for global and state machine debug output */
818 s.Config[i].UseGlobalDebugFile = true; 819 s.Config[i].UseGlobalDebugFile = true;
819 820
820 821
821 822
822 /* We wanted to read just user specified configuration. */ 823 /* We wanted to read just user specified configuration. */
823 {break;} 824 {break;}
824 } 825 }
825 826
826#endif 827#endif
827 int error=initDevice(&s); 828 int error=initDevice(&s);
828 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE); 829 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE);
829 if ( error != ERR_NONE ) 830 if ( error != ERR_NONE )
830 return false; 831 return false;
831 GSM_Phone_Functions*Phone; 832 GSM_Phone_Functions*Phone;
832 GSM_CalendarEntrynote; 833 GSM_CalendarEntrynote;
833 bool start = true; 834 bool start = true;
834 Phone=s.Phone.Functions; 835 Phone=s.Phone.Functions;
835 bool gshutdown = false; 836 bool gshutdown = false;
836 PhoneParser handler( calendar, mProfileName ); 837 PhoneParser handler( calendar, mProfileName );
837 int ccc = 0; 838 int ccc = 0;
838 QString message = i18n("Processing event # "); 839 QString message = i18n(" Reading event # ");
839 int procCount = 0; 840 int procCount = 0;
840 qDebug("Debug: only 10 calender items are downloaded "); 841 qDebug("Debug: only 10 calender items are downloaded ");
841 while (!gshutdown && ccc++ < 10) { 842 while (!gshutdown && ccc++ < 10) {
842 status.setText ( message + QString::number ( ++procCount ) ); 843 status.setText ( message + QString::number ( ++procCount ) );
843 qApp->processEvents(); 844 qApp->processEvents();
844 qDebug("readEvent %d ", ccc); 845 qDebug("readEvent %d ", ccc);
845 error=Phone->GetNextCalendar(&s,&note,start); 846 error=Phone->GetNextCalendar(&s,&note,start);
846 if (error == ERR_EMPTY) break; 847 if (error == ERR_EMPTY) break;
847 start = false; 848 start = false;
848 handler.readEvent( existingCal, &note ); 849 handler.readEvent( existingCal, &note );
850 qDebug("Org loc %d ",note.Location);
851 //note.Location = 0;
852 error=Phone->SetCalendar(&s,&note);
853 qDebug("new loc %d ",note.Location);
849 } 854 }
850 855
851 start = true; 856 start = true;
852 GSM_ToDoEntry ToDo; 857 GSM_ToDoEntry ToDo;
853 ccc = 0; 858 ccc = 0;
854 message = i18n("Processing todo # "); 859 message = i18n(" Reading todo # ");
855 procCount = 0; 860 procCount = 0;
856 while (!gshutdown) { 861 while (!gshutdown && ccc++ < 10) {
857 status.setText ( message + QString::number ( ++procCount ) ); 862 status.setText ( message + QString::number ( ++procCount ) );
858 qApp->processEvents(); 863 qApp->processEvents();
859 error = Phone->GetNextToDo(&s, &ToDo, start); 864 error = Phone->GetNextToDo(&s, &ToDo, start);
860 if (error == ERR_EMPTY) break; 865 if (error == ERR_EMPTY) break;
861 start = false; 866 start = false;
862 qDebug("ReadTodo %d ", ++ccc); 867 qDebug("ReadTodo %d ", ccc);
863 handler.readTodo( existingCal, &ToDo, &s); 868 handler.readTodo( existingCal, &ToDo, &s);
864 869
865 } 870 }
866 871
867 error=GSM_TerminateConnection(&s); 872 error=GSM_TerminateConnection(&s);
868 873
869 return true; 874 return true;
870} 875}
871void PhoneFormat::event2GSM( Event* ev, GSM_CalendarEntry*Note ) 876#include <qcstring.h>
877void PhoneFormat::event2GSM( Calendar *cal,Event* ev, GSM_CalendarEntry*Note )
872{ 878{
873 QString eText = vfconverter.eventToString( ev ); 879 QString eText = vfconverter.eventToString( ev, cal );
874 int pos = 0; 880 int pos = 0;
875 GSM_ToDoEntry dummy; 881 GSM_ToDoEntry dummy;
876 GSM_DecodeVCALENDAR_VTODO( (unsigned char*)eText.latin1(), &pos, Note , &dummy, Nokia_VCalendar, Nokia_VToDo ); 882 qDebug( "Convert event");
883 QByteArray ba;
884 QDataStream s ( ba, IO_WriteOnly );
885 s << eText.utf8();
886 GSM_DecodeVCALENDAR_VTODO( (unsigned char*) ba.data(), &pos, Note , &dummy, Nokia_VCalendar, Nokia_VToDo );
887 qDebug( "Convert event done");
888 Note->Location = 0;
889 QString loc = ev->getID(mProfileName);
890 if ( !loc.isEmpty() ){
891 Note->Location = loc.toInt();
892 }
893
877} 894}
878void PhoneFormat::todo2GSM( Todo* todo, GSM_ToDoEntry *gsmTodo ) 895void PhoneFormat::todo2GSM( Calendar *cal, Todo* todo, GSM_ToDoEntry *gsmTodo )
879{ 896{
880 QString tText = vfconverter.todoToString( todo ); 897 qDebug( "Convert todo1");
898 QString tText = vfconverter.todoToString( todo, cal );
881 int pos = 0; 899 int pos = 0;
882 GSM_CalendarEntry dummy; 900 GSM_CalendarEntry dummy;
883 GSM_DecodeVCALENDAR_VTODO( (unsigned char*)tText.latin1(), &pos, &dummy, gsmTodo, Nokia_VCalendar, Nokia_VToDo ); 901 QByteArray ba;
902 QDataStream s ( ba, IO_WriteOnly );
903 s << tText.utf8();
904 GSM_DecodeVCALENDAR_VTODO( (unsigned char*) ba.data(), &pos, &dummy, gsmTodo, Nokia_VCalendar, Nokia_VToDo );
905 qDebug( "Convert todo done ");
906 gsmTodo->Location = 0;
907 QString loc = todo->getID(mProfileName);
908 if ( !loc.isEmpty() ){
909 gsmTodo->Location = loc.toInt();
910 }
911
884} 912}
885void PhoneFormat::afterSave( Incidence* inc) 913void PhoneFormat::afterSave( Incidence* inc)
886{ 914{
887 uint csum; 915 uint csum;
888 if ( inc->type() == "Event") 916 if ( inc->type() == "Event")
889 csum = PhoneFormat::getCsumEvent( (Event*) inc ); 917 csum = PhoneFormat::getCsumEvent( (Event*) inc );
890 else 918 else
891 csum = PhoneFormat::getCsumTodo( (Todo*) inc ); 919 csum = PhoneFormat::getCsumTodo( (Todo*) inc );
892 inc->setCsum( mProfileName, QString::number( csum )); 920 inc->setCsum( mProfileName, QString::number( csum ));
893 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 921 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
894 922
895} 923}
896bool PhoneFormat::save( Calendar *calendar) 924bool PhoneFormat::save( Calendar *calendar)
897{ 925{
926 return true;
898 GSM_StateMachines; 927 GSM_StateMachines;
899 qDebug(" save "); 928 qDebug(" save ");
900 s.opened = false; 929 s.opened = false;
901 s.msg = NULL; 930 s.msg = NULL;
902 s.ConfigNum = 0; 931 s.ConfigNum = 0;
903 QLabel status ( i18n("Writing data. Opening device ..."), 0 ); 932 QLabel status ( i18n(" Opening device ..."), 0 );
904 int w = status.sizeHint().width()+20 ; 933 int w = status.sizeHint().width()+20 ;
905 if ( w < 200 ) w = 200; 934 if ( w < 200 ) w = 230;
906 int h = status.sizeHint().height()+20 ; 935 int h = status.sizeHint().height()+20 ;
907 int dw = QApplication::desktop()->width(); 936 int dw = QApplication::desktop()->width();
908 int dh = QApplication::desktop()->height(); 937 int dh = QApplication::desktop()->height();
909 status.setCaption(i18n("Writing Phone Data") ); 938 status.setCaption(i18n("Writing to phone...") );
910 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 939 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
911 status.show(); 940 status.show();
912 status.raise(); 941 status.raise();
913 qApp->processEvents(); 942 qApp->processEvents();
914 943
915 int error=initDevice(&s); 944 int error=initDevice(&s);
916 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE); 945 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE);
917 if ( error != ERR_NONE ) 946 if ( error != ERR_NONE )
918 return false; 947 return false;
919 GSM_Phone_Functions*Phone; 948 GSM_Phone_Functions*Phone;
920 GSM_CalendarEntryNote; 949 GSM_CalendarEntryNote;
921 bool start = true; 950 bool start = true;
922 Phone=s.Phone.Functions; 951 Phone=s.Phone.Functions;
923 bool gshutdown = false; 952 bool gshutdown = false;
924 QPtrList<Event> er = calendar->rawEvents(); 953 QPtrList<Event> er = calendar->rawEvents();
925 Event* ev = er.first(); 954 Event* ev = er.first();
926 QString message = i18n("Processing event # "); 955 QString message = i18n(" Processing event # ");
927 int procCount = 0; 956 int procCount = 0;
928 while ( ev ) { 957 bool planB = true;// false;
929 //qDebug("i %d ", ++i); 958 while ( ev && ! planB) {
930 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { // event was changed during sync or is a new one 959 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { // event was changed during sync or is a new one
931 960
932 status.setText ( message + QString::number ( ++procCount ) ); 961 status.setText ( message + QString::number ( ++procCount ) );
933 qApp->processEvents(); 962 qApp->processEvents();
934 event2GSM( ev, &Note ); 963 qDebug("event1 %d ", procCount);
964 event2GSM( calendar, ev, &Note );
935 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 965 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
936 error = Phone->DeleteCalendar(&s, &Note); 966 error = Phone->DeleteCalendar(&s, &Note);
967 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
968 planB = true;
969 qDebug(" e delete planB %d ", error);
970 break;
971 }
937 } 972 }
938 else if ( ev->getID(mProfileName).isEmpty() ) { // add new 973 else if ( ev->getID(mProfileName).isEmpty() ) { // add new
939 // we have to do this later after deleting 974 // we have to do this later after deleting
940 975
941 } 976 }
942 else { // change existing 977 else { // change existing
943 error = Phone->SetCalendar(&s, &Note); 978 error = Phone->SetCalendar(&s, &Note);
979 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
980 planB = true;
981 qDebug(" e change planB %d ", error);
982 break;
983 }
984 qDebug("Change Calendar. Location %d status: %d",Note.Location, error );
944 } 985 }
945 } 986 }
946 ev = er.next(); 987 ev = er.next();
947 } 988 }
948 ev = er.first(); 989 ev = er.first();
949 // pending get empty slots 990 // pending get empty slots
950 while ( ev ) { 991 int loc = 0;
992 while ( ev && ! planB) {
951 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && ev->tempSyncStat() != SYNC_TEMPSTATE_DELETE) { 993 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && ev->tempSyncStat() != SYNC_TEMPSTATE_DELETE) {
994 qDebug("event2 %d ", procCount);
952 if ( ev->getID(mProfileName).isEmpty() ) { 995 if ( ev->getID(mProfileName).isEmpty() ) {
953 status.setText ( message + QString::number ( ++procCount ) ); 996 status.setText ( message + QString::number ( ++procCount ) );
954 qApp->processEvents(); 997 qApp->processEvents();
955 //int newID ;//= pending 998 //int newID ;//= pending
956 //ev->setID(mProfileName, QString::number( newID )); 999 //ev->setID(mProfileName, QString::number( newID ));
957 event2GSM( ev, &Note ); 1000 event2GSM( calendar, ev, &Note );
958 Note.Location = 0; 1001 ++loc;
1002 Note.Location = loc;
959 error = Phone->AddCalendar(&s, &Note); 1003 error = Phone->AddCalendar(&s, &Note);
1004 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1005 planB = true;
1006 qDebug(" e add planB %d ", error);
1007 break;
1008 }
960 ev->setID( mProfileName, QString::number( Note.Location ) ); 1009 ev->setID( mProfileName, QString::number( Note.Location ) );
961 qDebug("New Calendar. Location %d ",Note.Location ); 1010 qDebug("New Calendar. Location %d stat %d %d",Note.Location ,error, ERR_UNKNOWN);
962 afterSave( ev ); 1011 afterSave( ev );
963 } else { 1012 } else {
964 afterSave( ev ); // setting temp sync stat for changed items 1013 afterSave( ev ); // setting temp sync stat for changed items
965 } 1014 }
966 } 1015 }
967 ev = er.next(); 1016 ev = er.next();
968 } 1017 }
1018
1019
1020 if ( planB ) {
1021 qDebug("delete all calendar...");
1022 status.setText ( i18n("Deleting all calendar..."));
1023 qApp->processEvents();
1024 error=Phone->DeleteAllCalendar(&s);
1025 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1026 message = i18n(" Deleting event # ");
1027 procCount = 0;
1028 while (1) {
1029 status.setText ( message + QString::number ( ++procCount ) );
1030 qApp->processEvents();
1031 qDebug("deleting event ... %d", procCount);
1032 error = Phone->GetNextCalendar(&s,&Note,true);
1033 if (error != ERR_NONE) break;
1034 error = Phone->DeleteCalendar(&s,&Note);
1035 }
1036 qDebug("deleting calendar ... finished");
1037 } else {
1038 status.setText ( i18n("All calendar deleted!"));
1039 qDebug("all cal deleted");
1040 }
1041 bool planC = false;
1042 ev = er.first();
1043 procCount = 0;
1044 message = i18n(" Writing event # ");
1045 while ( ev && ! planC) {
1046 status.setText ( message + QString::number ( ++procCount ) );
1047 qApp->processEvents();
1048 event2GSM( calendar, ev, &Note );
1049 Note.Location = procCount;
1050 error=Phone->AddCalendar(&s,&Note);
1051 if (error != ERR_NONE ) {
1052 // we have currently no planC :-(
1053 // planC = true;
1054 //qDebug("add planC %d ", error);
1055 //break;
1056 // we remove the ID such that this todo is not deleted after next sync
1057 ev->removeID(mProfileName);
1058 ev->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
1059 qDebug("error :cal adding loc %d planB stat %d ", Note.Location ,error);
1060 } else {
1061 qDebug("cal adding loc %d planB stat %d ", Note.Location ,error);
1062 ev->setID(mProfileName, QString::number( Note.Location ));
1063 afterSave( ev );
1064 }
1065 ev = er.next();
1066 }
1067 if ( planC ) {
1068 qDebug("writing cal went wrong...");
1069
1070 // we have currently no planC :-(
1071 }
1072 }
969 GSM_ToDoEntry ToDoEntry; 1073 GSM_ToDoEntry ToDoEntry;
970 QPtrList<Todo> tl = calendar->rawTodos(); 1074 QPtrList<Todo> tl = calendar->rawTodos();
971 Todo* to = tl.first(); 1075 Todo* to = tl.first();
972 1076
973 message = i18n("Processing todo # "); 1077 message = i18n(" Processing todo # ");
974 procCount = 0; 1078 procCount = 0;
975 while ( to ) { 1079 planB = false;
1080 while ( to && ! planB ) {
976 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 1081 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
1082 qDebug("todo3 %d ", procCount);
977 status.setText ( message + QString::number ( ++procCount ) ); 1083 status.setText ( message + QString::number ( ++procCount ) );
978 qApp->processEvents(); 1084 qApp->processEvents();
979 todo2GSM( to, &ToDoEntry ); 1085 qDebug("todo5 %d ", procCount);
1086 todo2GSM( calendar, to, &ToDoEntry );
980 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 1087 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
981 error=Phone->DeleteToDo(&s,&ToDoEntry); 1088 error=Phone->DeleteToDo(&s,&ToDoEntry);
1089 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1090 planB = true;
1091 qDebug("delete planB %d ", error);
1092 }
982 } 1093 }
983 else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new 1094 else if ( to->getID(mProfileName).isEmpty() ) { // add new
984 ; 1095 ;
985 } 1096 }
986 else { // change existing 1097 else { // change existing
987 error=Phone->SetToDo(&s,&ToDoEntry); 1098 error=Phone->SetToDo(&s,&ToDoEntry);
1099 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1100 planB = true;
1101 qDebug("set planB %d ", error);
1102 }
1103 qDebug("Old Todo. Location %d %d",ToDoEntry.Location , error );
988 } 1104 }
989 } 1105 }
990 to = tl.next(); 1106 to = tl.next();
991 } 1107 }
992 1108
993 // pending get empty slots 1109 // pending get empty slots
994 to = tl.first(); 1110 to = tl.first();
995 while ( to ) { 1111 while ( to && ! planB ) {
1112 qDebug("todo2 %d ", procCount);
996 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && to->tempSyncStat() != SYNC_TEMPSTATE_DELETE) { 1113 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && to->tempSyncStat() != SYNC_TEMPSTATE_DELETE) {
1114 qDebug("todo4 %d ", procCount);
997 if ( to->getID(mProfileName).isEmpty() ) { 1115 if ( to->getID(mProfileName).isEmpty() ) {
998 status.setText ( message + QString::number ( ++procCount ) ); 1116 status.setText ( message + QString::number ( ++procCount ) );
999 qApp->processEvents(); 1117 qApp->processEvents();
1000 //int newID ;//= pending 1118 //int newID ;//= pending
1001 //to->setID(mProfileName, QString::number( newID )); 1119 //to->setID(mProfileName, QString::number( newID ));
1002 todo2GSM( to, &ToDoEntry ); 1120 todo2GSM( calendar,to, &ToDoEntry );
1003 ToDoEntry.Location = 0; 1121 ToDoEntry.Location = 0;
1004 error=Phone->AddToDo(&s,&ToDoEntry); 1122 error=Phone->AddToDo(&s,&ToDoEntry);
1123 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1124 planB = true;
1125 qDebug("new planB %d ", error);
1126 }
1005 to->setID(mProfileName, QString::number( ToDoEntry.Location )); 1127 to->setID(mProfileName, QString::number( ToDoEntry.Location ));
1006 afterSave( to ); 1128 afterSave( to );
1007 qDebug("New Todo. Location %d ",ToDoEntry.Location ); 1129 qDebug("New Todo. Location %d %d",ToDoEntry.Location, error );
1008 } else { 1130 } else {
1009 afterSave( to ); 1131 afterSave( to );
1010 } 1132 }
1011 } 1133 }
1012 to = tl.next(); 1134 to = tl.next();
1013 } 1135 }
1136 if ( planB ) {
1137 qDebug("delete all ...");
1138 error=Phone->DeleteAllToDo(&s);
1139 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1140 while (1) {
1141 qDebug("deleting todo ...");
1142 error = Phone->GetNextToDo(&s,&ToDoEntry,true);
1143 if (error != ERR_NONE) break;
1144 error = Phone->DeleteToDo(&s,&ToDoEntry);
1145 }
1146 qDebug("deleting todo ... finished");
1147 } else {
1148 qDebug("all todo deleted");
1149 }
1150 bool planC = false;
1151 to = tl.first();
1152 while ( to && ! planC ) {
1153 todo2GSM( calendar,to, &ToDoEntry );
1154 ToDoEntry.Location = 0;
1155 error=Phone->AddToDo(&s,&ToDoEntry);
1156 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1157 // we have currently no planC :-(
1158 // planC = true;
1159 //qDebug("add planC %d ", error);
1160 //break;
1161 // we remove the ID such that this todo is not deleted after next sync
1162 to->removeID(mProfileName);
1163 to->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
1164 } else {
1165 qDebug("adding %d planB %d ", ToDoEntry.Location ,error);
1166 to->setID(mProfileName, QString::number( ToDoEntry.Location ));
1167 afterSave( to );
1168 }
1169 to = tl.next();
1170 }
1171 if ( planC ) {
1172 // we have currently no planC :-(
1173 }
1174 }
1014 return true; 1175 return true;
1015} 1176}
1016QString PhoneFormat::dtToGSM( const QDateTime& dti, bool useTZ ) 1177QString PhoneFormat::dtToGSM( const QDateTime& dti, bool useTZ )
1017{ 1178{
1018 QString datestr; 1179 QString datestr;
1019 QString timestr; 1180 QString timestr;
1020 int offset = KGlobal::locale()->localTimeOffset( dti ); 1181 int offset = KGlobal::locale()->localTimeOffset( dti );
1021 QDateTime dt; 1182 QDateTime dt;
1022 if (useTZ) 1183 if (useTZ)
1023 dt = dti.addSecs ( -(offset*60)); 1184 dt = dti.addSecs ( -(offset*60));
1024 else 1185 else
1025 dt = dti; 1186 dt = dti;
1026 if(dt.date().isValid()){ 1187 if(dt.date().isValid()){
1027 const QDate& date = dt.date(); 1188 const QDate& date = dt.date();
1028 datestr.sprintf("%04d%02d%02d", 1189 datestr.sprintf("%04d%02d%02d",
1029 date.year(), date.month(), date.day()); 1190 date.year(), date.month(), date.day());
1030 } 1191 }
1031 if(dt.time().isValid()){ 1192 if(dt.time().isValid()){
1032 const QTime& time = dt.time(); 1193 const QTime& time = dt.time();
1033 timestr.sprintf("T%02d%02d%02d", 1194 timestr.sprintf("T%02d%02d%02d",
1034 time.hour(), time.minute(), time.second()); 1195 time.hour(), time.minute(), time.second());
1035 } 1196 }
1036 return datestr + timestr; 1197 return datestr + timestr;
1037} 1198}
1038QString PhoneFormat::getEventString( Event* event ) 1199QString PhoneFormat::getEventString( Event* event )
1039{ 1200{
1040#if 0 1201#if 0
1041 QStringList list; 1202 QStringList list;
1042 list.append( QString::number(event->zaurusId() ) ); 1203 list.append( QString::number(event->zaurusId() ) );
1043 list.append( event->categories().join(",") ); 1204 list.append( event->categories().join(",") );
1044 if ( !event->summary().isEmpty() ) 1205 if ( !event->summary().isEmpty() )
1045 list.append( event->summary() ); 1206 list.append( event->summary() );
diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h
index 33b2091..2c2e51c 100644
--- a/libkcal/phoneformat.h
+++ b/libkcal/phoneformat.h
@@ -23,45 +23,45 @@
23 23
24#include <qstring.h> 24#include <qstring.h>
25 25
26#include "scheduler.h" 26#include "scheduler.h"
27 27
28#include "vcalformat.h" 28#include "vcalformat.h"
29#include "calformat.h" 29#include "calformat.h"
30extern "C" { 30extern "C" {
31#include "../gammu/emb/common/gammu.h" 31#include "../gammu/emb/common/gammu.h"
32} 32}
33namespace KCal { 33namespace KCal {
34 34
35/** 35/**
36 This class implements the calendar format used by Phone. 36 This class implements the calendar format used by Phone.
37*/ 37*/
38 class Event; 38 class Event;
39 class Todo; 39 class Todo;
40class PhoneFormat : public QObject { 40class PhoneFormat : public QObject {
41 public: 41 public:
42 /** Create new iCalendar format. */ 42 /** Create new iCalendar format. */
43 PhoneFormat(QString profileName, QString device,QString connection, QString model); 43 PhoneFormat(QString profileName, QString device,QString connection, QString model);
44 virtual ~PhoneFormat(); 44 virtual ~PhoneFormat();
45 45
46 bool load( Calendar * ,Calendar * ); 46 bool load( Calendar * ,Calendar * );
47 bool save( Calendar * ); 47 bool save( Calendar * );
48 bool fromString( Calendar *, const QString & ); 48 bool fromString( Calendar *, const QString & );
49 QString toString( Calendar * ); 49 QString toString( Calendar * );
50 static ulong getCsum( const QStringList & ); 50 static ulong getCsum( const QStringList & );
51 static ulong getCsumTodo( Todo* to ); 51 static ulong getCsumTodo( Todo* to );
52 static ulong getCsumEvent( Event* ev ); 52 static ulong getCsumEvent( Event* ev );
53 private: 53 private:
54 VCalFormat vfconverter; 54 VCalFormat vfconverter;
55 void event2GSM( Event* ev, GSM_CalendarEntry*Note ); 55 void event2GSM( Calendar *, Event* ev, GSM_CalendarEntry*Note );
56 void todo2GSM( Todo* ev, GSM_ToDoEntry *ToDo ); 56 void todo2GSM( Calendar *, Todo* ev, GSM_ToDoEntry *ToDo );
57 int initDevice(GSM_StateMachine *s); 57 int initDevice(GSM_StateMachine *s);
58 QString getEventString( Event* ); 58 QString getEventString( Event* );
59 QString getTodoString( Todo* ); 59 QString getTodoString( Todo* );
60 QString dtToGSM( const QDateTime& dt, bool useTZ = true ); 60 QString dtToGSM( const QDateTime& dt, bool useTZ = true );
61 QString mProfileName, mDevice, mConnection, mModel; 61 QString mProfileName, mDevice, mConnection, mModel;
62 void afterSave( Incidence* ); 62 void afterSave( Incidence* );
63}; 63};
64 64
65} 65}
66 66
67#endif 67#endif
diff --git a/libkcal/vcalformat.cpp b/libkcal/vcalformat.cpp
index 1167e58..076cd3f 100644
--- a/libkcal/vcalformat.cpp
+++ b/libkcal/vcalformat.cpp
@@ -16,64 +16,65 @@
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 <qapplication.h> 22#include <qapplication.h>
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26#include <qregexp.h> 26#include <qregexp.h>
27#include <qclipboard.h> 27#include <qclipboard.h>
28#include <qdialog.h> 28#include <qdialog.h>
29#include <qfile.h> 29#include <qfile.h>
30 30
31#include <kdebug.h> 31#include <kdebug.h>
32#include <kmessagebox.h> 32#include <kmessagebox.h>
33#include <kiconloader.h> 33#include <kiconloader.h>
34#include <klocale.h> 34#include <klocale.h>
35 35
36#include "vcc.h" 36#include "vcc.h"
37#include "vobject.h" 37#include "vobject.h"
38 38
39#include "vcaldrag.h" 39#include "vcaldrag.h"
40#include "calendar.h" 40#include "calendar.h"
41 41
42#include "vcalformat.h" 42#include "vcalformat.h"
43 43
44using namespace KCal; 44using namespace KCal;
45 45
46VCalFormat::VCalFormat() 46VCalFormat::VCalFormat()
47{ 47{
48 mCalendar = 0;
48} 49}
49 50
50VCalFormat::~VCalFormat() 51VCalFormat::~VCalFormat()
51{ 52{
52} 53}
53 54
54bool VCalFormat::load(Calendar *calendar, const QString &fileName) 55bool VCalFormat::load(Calendar *calendar, const QString &fileName)
55{ 56{
56 mCalendar = calendar; 57 mCalendar = calendar;
57 58
58 clearException(); 59 clearException();
59 60
60 kdDebug(5800) << "VCalFormat::load() " << fileName << endl; 61 kdDebug(5800) << "VCalFormat::load() " << fileName << endl;
61 62
62 VObject *vcal = 0; 63 VObject *vcal = 0;
63 64
64 // this is not necessarily only 1 vcal. Could be many vcals, or include 65 // this is not necessarily only 1 vcal. Could be many vcals, or include
65 // a vcard... 66 // a vcard...
66 vcal = Parse_MIME_FromFileName(const_cast<char *>(QFile::encodeName(fileName).data())); 67 vcal = Parse_MIME_FromFileName(const_cast<char *>(QFile::encodeName(fileName).data()));
67 68
68 if (!vcal) { 69 if (!vcal) {
69 setException(new ErrorFormat(ErrorFormat::CalVersionUnknown)); 70 setException(new ErrorFormat(ErrorFormat::CalVersionUnknown));
70 return FALSE; 71 return FALSE;
71 } 72 }
72 73
73 // any other top-level calendar stuff should be added/initialized here 74 // any other top-level calendar stuff should be added/initialized here
74 75
75 // put all vobjects into their proper places 76 // put all vobjects into their proper places
76 populate(vcal); 77 populate(vcal);
77 78
78 // clean up from vcal API stuff 79 // clean up from vcal API stuff
79 cleanVObjects(vcal); 80 cleanVObjects(vcal);
@@ -136,76 +137,78 @@ bool VCalFormat::fromString( Calendar *calendar, const QString &text )
136 137
137 QCString data = text.utf8(); 138 QCString data = text.utf8();
138 139
139 if ( !data.size() ) return false; 140 if ( !data.size() ) return false;
140 141
141 VObject *vcal = Parse_MIME( data.data(), data.size()); 142 VObject *vcal = Parse_MIME( data.data(), data.size());
142 if ( !vcal ) return false; 143 if ( !vcal ) return false;
143 144
144 VObjectIterator i; 145 VObjectIterator i;
145 VObject *curvo; 146 VObject *curvo;
146 initPropIterator( &i, vcal ); 147 initPropIterator( &i, vcal );
147 148
148 // we only take the first object. TODO: parse all incidences. 149 // we only take the first object. TODO: parse all incidences.
149 do { 150 do {
150 curvo = nextVObject( &i ); 151 curvo = nextVObject( &i );
151 } while ( strcmp( vObjectName( curvo ), VCEventProp ) && 152 } while ( strcmp( vObjectName( curvo ), VCEventProp ) &&
152 strcmp( vObjectName( curvo ), VCTodoProp ) ); 153 strcmp( vObjectName( curvo ), VCTodoProp ) );
153 154
154 if ( strcmp( vObjectName( curvo ), VCEventProp ) == 0 ) { 155 if ( strcmp( vObjectName( curvo ), VCEventProp ) == 0 ) {
155 Event *event = VEventToEvent( curvo ); 156 Event *event = VEventToEvent( curvo );
156 calendar->addEvent( event ); 157 calendar->addEvent( event );
157 } else { 158 } else {
158 kdDebug(5800) << "VCalFormat::fromString(): Unknown object type." << endl; 159 kdDebug(5800) << "VCalFormat::fromString(): Unknown object type." << endl;
159 deleteVObject( vcal ); 160 deleteVObject( vcal );
160 return false; 161 return false;
161 } 162 }
162 163
163 deleteVObject( vcal ); 164 deleteVObject( vcal );
164 165
165 return true; 166 return true;
166} 167}
167 168
168QString VCalFormat::eventToString( Event * event) 169QString VCalFormat::eventToString( Event * event, Calendar *calendar)
169{ 170{
170 if ( !event ) return QString::null; 171 if ( !event ) return QString::null;
172 mCalendar = calendar;
171 VObject *vevent = eventToVEvent( event ); 173 VObject *vevent = eventToVEvent( event );
172 char *buf = writeMemVObject( 0, 0, vevent ); 174 char *buf = writeMemVObject( 0, 0, vevent );
173 QString result( buf ); 175 QString result( buf );
174 cleanVObject( vevent ); 176 cleanVObject( vevent );
175 return result; 177 return result;
176} 178}
177QString VCalFormat::todoToString( Todo * todo ) 179QString VCalFormat::todoToString( Todo * todo, Calendar *calendar )
178{ 180{
179 if ( !todo ) return QString::null; 181 if ( !todo ) return QString::null;
182 mCalendar = calendar;
180 VObject *vevent = eventToVTodo( todo ); 183 VObject *vevent = eventToVTodo( todo );
181 char *buf = writeMemVObject( 0, 0, vevent ); 184 char *buf = writeMemVObject( 0, 0, vevent );
182 QString result( buf ); 185 QString result( buf );
183 cleanVObject( vevent ); 186 cleanVObject( vevent );
184 return result; 187 return result;
185} 188}
186 189
187QString VCalFormat::toString( Calendar *calendar ) 190QString VCalFormat::toString( Calendar *calendar )
188{ 191{
189 // TODO: Factor out VCalFormat::asString() 192 // TODO: Factor out VCalFormat::asString()
190 193
191 VObject *vcal = newVObject(VCCalProp); 194 VObject *vcal = newVObject(VCCalProp);
192 195
193 addPropValue( vcal, VCProdIdProp, CalFormat::productId() ); 196 addPropValue( vcal, VCProdIdProp, CalFormat::productId() );
194 QString tmpStr = mCalendar->getTimeZoneStr(); 197 QString tmpStr = mCalendar->getTimeZoneStr();
195 addPropValue( vcal, VCTimeZoneProp, tmpStr.local8Bit() ); 198 addPropValue( vcal, VCTimeZoneProp, tmpStr.local8Bit() );
196 addPropValue( vcal, VCVersionProp, _VCAL_VERSION ); 199 addPropValue( vcal, VCVersionProp, _VCAL_VERSION );
197 200
198 // TODO: Use all data. 201 // TODO: Use all data.
199 QPtrList<Event> events = calendar->events(); 202 QPtrList<Event> events = calendar->events();
200 Event *event = events.first(); 203 Event *event = events.first();
201 if ( !event ) return QString::null; 204 if ( !event ) return QString::null;
202 205
203 VObject *vevent = eventToVEvent( event ); 206 VObject *vevent = eventToVEvent( event );
204 207
205 addVObjectProp( vcal, vevent ); 208 addVObjectProp( vcal, vevent );
206 209
207 char *buf = writeMemVObject( 0, 0, vcal ); 210 char *buf = writeMemVObject( 0, 0, vcal );
208 211
209 QString result( buf ); 212 QString result( buf );
210 213
211 cleanVObject( vcal ); 214 cleanVObject( vcal );
diff --git a/libkcal/vcalformat.h b/libkcal/vcalformat.h
index 8490125..7b9ca26 100644
--- a/libkcal/vcalformat.h
+++ b/libkcal/vcalformat.h
@@ -33,66 +33,66 @@ namespace KCal {
33/** 33/**
34 This class implements the vCalendar format. It provides methods for 34 This class implements the vCalendar format. It provides methods for
35 loading/saving/converting vCalendar format data into the internal KOrganizer 35 loading/saving/converting vCalendar format data into the internal KOrganizer
36 representation as Calendar and Events. 36 representation as Calendar and Events.
37 37
38 @short vCalendar format implementation 38 @short vCalendar format implementation
39*/ 39*/
40class VCalFormat : public CalFormat { 40class VCalFormat : public CalFormat {
41 public: 41 public:
42 VCalFormat(); 42 VCalFormat();
43 virtual ~VCalFormat(); 43 virtual ~VCalFormat();
44 44
45 /** loads a calendar on disk in vCalendar format into the current calendar. 45 /** loads a calendar on disk in vCalendar format into the current calendar.
46 * any information already present is lost. Returns TRUE if successful, 46 * any information already present is lost. Returns TRUE if successful,
47 * else returns FALSE. 47 * else returns FALSE.
48 * @param fileName the name of the calendar on disk. 48 * @param fileName the name of the calendar on disk.
49 */ 49 */
50 bool load(Calendar *,const QString &fileName); 50 bool load(Calendar *,const QString &fileName);
51 /** writes out the calendar to disk in vCalendar format. Returns true if 51 /** writes out the calendar to disk in vCalendar format. Returns true if
52 * successful and false on error. 52 * successful and false on error.
53 * @param fileName the name of the file 53 * @param fileName the name of the file
54 */ 54 */
55 bool save(Calendar *,const QString &fileName); 55 bool save(Calendar *,const QString &fileName);
56 56
57 /** 57 /**
58 Parse string and populate calendar with that information. 58 Parse string and populate calendar with that information.
59 */ 59 */
60 bool fromString( Calendar *, const QString & ); 60 bool fromString( Calendar *, const QString & );
61 /** 61 /**
62 Return calendar information as string. 62 Return calendar information as string.
63 */ 63 */
64 QString toString( Calendar * ); 64 QString toString( Calendar * );
65 QString eventToString( Event * ); 65 QString eventToString( Event *, Calendar *calendar );
66 QString todoToString( Todo * ); 66 QString todoToString( Todo * ,Calendar *calendar );
67 67
68 protected: 68 protected:
69 /** translates a VObject of the TODO type into a Event */ 69 /** translates a VObject of the TODO type into a Event */
70 Todo *VTodoToEvent(VObject *vtodo); 70 Todo *VTodoToEvent(VObject *vtodo);
71 /** translates a VObject into a Event and returns a pointer to it. */ 71 /** translates a VObject into a Event and returns a pointer to it. */
72 Event *VEventToEvent(VObject *vevent); 72 Event *VEventToEvent(VObject *vevent);
73 /** translate a Event into a VTodo-type VObject and return pointer */ 73 /** translate a Event into a VTodo-type VObject and return pointer */
74 VObject *eventToVTodo(const Todo *anEvent); 74 VObject *eventToVTodo(const Todo *anEvent);
75 /** translate a Event into a VObject and returns a pointer to it. */ 75 /** translate a Event into a VObject and returns a pointer to it. */
76 VObject* eventToVEvent(const Event *anEvent); 76 VObject* eventToVEvent(const Event *anEvent);
77 77
78 /** takes a QDate and returns a string in the format YYYYMMDDTHHMMSS */ 78 /** takes a QDate and returns a string in the format YYYYMMDDTHHMMSS */
79 QString qDateToISO(const QDate &); 79 QString qDateToISO(const QDate &);
80 /** takes a QDateTime and returns a string in format YYYYMMDDTHHMMSS */ 80 /** takes a QDateTime and returns a string in format YYYYMMDDTHHMMSS */
81 QString qDateTimeToISO(const QDateTime &, bool zulu=TRUE); 81 QString qDateTimeToISO(const QDateTime &, bool zulu=TRUE);
82 /** takes a string in the format YYYYMMDDTHHMMSS and returns a 82 /** takes a string in the format YYYYMMDDTHHMMSS and returns a
83 * valid QDateTime. */ 83 * valid QDateTime. */
84 QDateTime ISOToQDateTime(const QString & dtStr); 84 QDateTime ISOToQDateTime(const QString & dtStr);
85 /** takes a string in the format YYYYMMDD and returns a 85 /** takes a string in the format YYYYMMDD and returns a
86 * valid QDate. */ 86 * valid QDate. */
87 QDate ISOToQDate(const QString & dtStr); 87 QDate ISOToQDate(const QString & dtStr);
88 /** takes a vCalendar tree of VObjects, and puts all of them that have 88 /** takes a vCalendar tree of VObjects, and puts all of them that have
89 * the "event" property into the dictionary, todos in the todo-list, etc. */ 89 * the "event" property into the dictionary, todos in the todo-list, etc. */
90 void populate(VObject *vcal); 90 void populate(VObject *vcal);
91 91
92 /** takes a number 0 - 6 and returns the two letter string of that day, 92 /** takes a number 0 - 6 and returns the two letter string of that day,
93 * i.e. MO, TU, WE, etc. */ 93 * i.e. MO, TU, WE, etc. */
94 const char *dayFromNum(int day); 94 const char *dayFromNum(int day);
95 /** the reverse of the above function. */ 95 /** the reverse of the above function. */
96 int numFromDay(const QString &day); 96 int numFromDay(const QString &day);
97 97
98 Attendee::PartStat readStatus(const char *s) const; 98 Attendee::PartStat readStatus(const char *s) const;