summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-07-04 19:17:50 (UTC)
committer zautrix <zautrix>2005-07-04 19:17:50 (UTC)
commit2710cddd5b0b69efc1c5a7f8516d5b451ff258f1 (patch) (unidiff)
treeabcfa306ccfcdf7aba536cc3f476c0bdbe9ef12b
parent4f3238355f67a256f338986ca13322ef23960895 (diff)
downloadkdepimpi-2710cddd5b0b69efc1c5a7f8516d5b451ff258f1.zip
kdepimpi-2710cddd5b0b69efc1c5a7f8516d5b451ff258f1.tar.gz
kdepimpi-2710cddd5b0b69efc1c5a7f8516d5b451ff258f1.tar.bz2
free ring buffer
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libical/src/libical/icalmemory.c2
-rw-r--r--libkcal/icalformat.cpp4
2 files changed, 4 insertions, 2 deletions
diff --git a/libical/src/libical/icalmemory.c b/libical/src/libical/icalmemory.c
index 18d7ef9..3ed38ad 100644
--- a/libical/src/libical/icalmemory.c
+++ b/libical/src/libical/icalmemory.c
@@ -1,168 +1,168 @@
1/* -*- Mode: C -*- 1/* -*- Mode: C -*-
2 ====================================================================== 2 ======================================================================
3 FILE: icalmemory.c 3 FILE: icalmemory.c
4 CREATOR: eric 30 June 1999 4 CREATOR: eric 30 June 1999
5 5
6 $Id$ 6 $Id$
7 $Locker$ 7 $Locker$
8 8
9 The contents of this file are subject to the Mozilla Public License 9 The contents of this file are subject to the Mozilla Public License
10 Version 1.0 (the "License"); you may not use this file except in 10 Version 1.0 (the "License"); you may not use this file except in
11 compliance with the License. You may obtain a copy of the License at 11 compliance with the License. You may obtain a copy of the License at
12 http://www.mozilla.org/MPL/ 12 http://www.mozilla.org/MPL/
13 13
14 Software distributed under the License is distributed on an "AS IS" 14 Software distributed under the License is distributed on an "AS IS"
15 basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 15 basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
16 the License for the specific language governing rights and 16 the License for the specific language governing rights and
17 limitations under the License. 17 limitations under the License.
18 18
19 19
20 This program is free software; you can redistribute it and/or modify 20 This program is free software; you can redistribute it and/or modify
21 it under the terms of either: 21 it under the terms of either:
22 22
23 The LGPL as published by the Free Software Foundation, version 23 The LGPL as published by the Free Software Foundation, version
24 2.1, available at: http://www.fsf.org/copyleft/lesser.html 24 2.1, available at: http://www.fsf.org/copyleft/lesser.html
25 25
26 Or: 26 Or:
27 27
28 The Mozilla Public License Version 1.0. You may obtain a copy of 28 The Mozilla Public License Version 1.0. You may obtain a copy of
29 the License at http://www.mozilla.org/MPL/ 29 the License at http://www.mozilla.org/MPL/
30 30
31 The Original Code is icalmemory.h 31 The Original Code is icalmemory.h
32 32
33 ======================================================================*/ 33 ======================================================================*/
34 34
35/** 35/**
36 * @file icalmemory.c 36 * @file icalmemory.c
37 * @brief Common memory management routines. 37 * @brief Common memory management routines.
38 * 38 *
39 * libical often passes strings back to the caller. To make these 39 * libical often passes strings back to the caller. To make these
40 * interfaces simple, I did not want the caller to have to pass in a 40 * interfaces simple, I did not want the caller to have to pass in a
41 * memory buffer, but having libical pass out newly allocated memory 41 * memory buffer, but having libical pass out newly allocated memory
42 * makes it difficult to de-allocate the memory. 42 * makes it difficult to de-allocate the memory.
43 * 43 *
44 * The ring buffer in this scheme makes it possible for libical to pass 44 * The ring buffer in this scheme makes it possible for libical to pass
45 * out references to memory which the caller does not own, and be able 45 * out references to memory which the caller does not own, and be able
46 * to de-allocate the memory later. The ring allows libical to have 46 * to de-allocate the memory later. The ring allows libical to have
47 * several buffers active simultaneously, which is handy when creating 47 * several buffers active simultaneously, which is handy when creating
48 * string representations of components. 48 * string representations of components.
49 */ 49 */
50 50
51#define ICALMEMORY_C 51#define ICALMEMORY_C
52 52
53#ifdef HAVE_CONFIG_H 53#ifdef HAVE_CONFIG_H
54#include "config.h" 54#include "config.h"
55#endif 55#endif
56 56
57#ifdef DMALLOC 57#ifdef DMALLOC
58#include "dmalloc.h" 58#include "dmalloc.h"
59#endif 59#endif
60 60
61#include "icalmemory.h" 61#include "icalmemory.h"
62#include "icalerror.h" 62#include "icalerror.h"
63 63
64#include <stdio.h> /* for printf (debugging) */ 64#include <stdio.h> /* for printf (debugging) */
65#include <stdlib.h> /* for malloc, realloc */ 65#include <stdlib.h> /* for malloc, realloc */
66#include <string.h> /* for memset(), strdup */ 66#include <string.h> /* for memset(), strdup */
67 67
68#ifdef WIN32 68#ifdef WIN32
69#include <windows.h> 69#include <windows.h>
70#endif 70#endif
71 71
72#define BUFFER_RING_SIZE 50 72#define BUFFER_RING_SIZE 100
73#define MIN_BUFFER_SIZE 64 73#define MIN_BUFFER_SIZE 64
74 74
75 75
76/* HACK. Not threadsafe */ 76/* HACK. Not threadsafe */
77 77
78typedef struct { 78typedef struct {
79 int pos; 79 int pos;
80 void *ring[BUFFER_RING_SIZE]; 80 void *ring[BUFFER_RING_SIZE];
81} buffer_ring; 81} buffer_ring;
82 82
83void icalmemory_free_tmp_buffer (void* buf); 83void icalmemory_free_tmp_buffer (void* buf);
84void icalmemory_free_ring_byval(buffer_ring *br); 84void icalmemory_free_ring_byval(buffer_ring *br);
85 85
86static buffer_ring* global_buffer_ring = 0; 86static buffer_ring* global_buffer_ring = 0;
87 87
88#ifdef HAVE_PTHREAD 88#ifdef HAVE_PTHREAD
89#include <pthread.h> 89#include <pthread.h>
90 90
91static pthread_key_t ring_key; 91static pthread_key_t ring_key;
92static pthread_once_t ring_key_once = PTHREAD_ONCE_INIT; 92static pthread_once_t ring_key_once = PTHREAD_ONCE_INIT;
93 93
94static void ring_destroy(void * buf) { 94static void ring_destroy(void * buf) {
95 if (buf) icalmemory_free_ring_byval((buffer_ring *) buf); 95 if (buf) icalmemory_free_ring_byval((buffer_ring *) buf);
96 pthread_setspecific(ring_key, NULL); 96 pthread_setspecific(ring_key, NULL);
97} 97}
98 98
99static void ring_key_alloc(void) { 99static void ring_key_alloc(void) {
100 pthread_key_create(&ring_key, ring_destroy); 100 pthread_key_create(&ring_key, ring_destroy);
101} 101}
102#endif 102#endif
103 103
104 104
105static buffer_ring * buffer_ring_new(void) { 105static buffer_ring * buffer_ring_new(void) {
106 buffer_ring *br; 106 buffer_ring *br;
107 int i; 107 int i;
108 108
109 br = (buffer_ring *)malloc(sizeof(buffer_ring)); 109 br = (buffer_ring *)malloc(sizeof(buffer_ring));
110 110
111 for(i=0; i<BUFFER_RING_SIZE; i++){ 111 for(i=0; i<BUFFER_RING_SIZE; i++){
112 br->ring[i] = 0; 112 br->ring[i] = 0;
113 } 113 }
114 br->pos = 0; 114 br->pos = 0;
115 return(br); 115 return(br);
116} 116}
117 117
118 118
119#ifdef HAVE_PTHREAD 119#ifdef HAVE_PTHREAD
120static buffer_ring* get_buffer_ring_pthread(void) { 120static buffer_ring* get_buffer_ring_pthread(void) {
121 buffer_ring *br; 121 buffer_ring *br;
122 122
123 pthread_once(&ring_key_once, ring_key_alloc); 123 pthread_once(&ring_key_once, ring_key_alloc);
124 124
125 br = pthread_getspecific(ring_key); 125 br = pthread_getspecific(ring_key);
126 126
127 if (!br) { 127 if (!br) {
128 br = buffer_ring_new(); 128 br = buffer_ring_new();
129 pthread_setspecific(ring_key, br); 129 pthread_setspecific(ring_key, br);
130 } 130 }
131 return(br); 131 return(br);
132} 132}
133#endif 133#endif
134 134
135/* get buffer ring via a single global for a non-threaded program */ 135/* get buffer ring via a single global for a non-threaded program */
136static buffer_ring* get_buffer_ring_global(void) { 136static buffer_ring* get_buffer_ring_global(void) {
137 if (global_buffer_ring == 0) { 137 if (global_buffer_ring == 0) {
138 global_buffer_ring = buffer_ring_new(); 138 global_buffer_ring = buffer_ring_new();
139 } 139 }
140 return(global_buffer_ring); 140 return(global_buffer_ring);
141} 141}
142 142
143static buffer_ring *get_buffer_ring(void) { 143static buffer_ring *get_buffer_ring(void) {
144#ifdef HAVE_PTHREAD 144#ifdef HAVE_PTHREAD
145 return(get_buffer_ring_pthread()); 145 return(get_buffer_ring_pthread());
146#else 146#else
147 return get_buffer_ring_global(); 147 return get_buffer_ring_global();
148#endif 148#endif
149} 149}
150 150
151 151
152/** Add an existing buffer to the buffer ring */ 152/** Add an existing buffer to the buffer ring */
153void icalmemory_add_tmp_buffer(void* buf) 153void icalmemory_add_tmp_buffer(void* buf)
154{ 154{
155 buffer_ring *br = get_buffer_ring(); 155 buffer_ring *br = get_buffer_ring();
156 156
157 157
158 /* Wrap around the ring */ 158 /* Wrap around the ring */
159 if(++(br->pos) == BUFFER_RING_SIZE){ 159 if(++(br->pos) == BUFFER_RING_SIZE){
160 br->pos = 0; 160 br->pos = 0;
161 } 161 }
162 162
163 /* Free buffers as their slots are overwritten */ 163 /* Free buffers as their slots are overwritten */
164 if ( br->ring[br->pos] != 0){ 164 if ( br->ring[br->pos] != 0){
165 free( br->ring[br->pos]); 165 free( br->ring[br->pos]);
166 } 166 }
167 167
168 /* Assign the buffer to a slot */ 168 /* Assign the buffer to a slot */
diff --git a/libkcal/icalformat.cpp b/libkcal/icalformat.cpp
index d9fe40b..5877406 100644
--- a/libkcal/icalformat.cpp
+++ b/libkcal/icalformat.cpp
@@ -51,276 +51,278 @@ extern "C" {
51using namespace KCal; 51using namespace KCal;
52 52
53ICalFormat::ICalFormat( ) 53ICalFormat::ICalFormat( )
54{ 54{
55 mImpl = new ICalFormatImpl( this ); 55 mImpl = new ICalFormatImpl( this );
56 tzOffsetMin = 0; 56 tzOffsetMin = 0;
57 //qDebug("new ICalFormat() "); 57 //qDebug("new ICalFormat() ");
58} 58}
59 59
60ICalFormat::~ICalFormat() 60ICalFormat::~ICalFormat()
61{ 61{
62 delete mImpl; 62 delete mImpl;
63 //qDebug("delete ICalFormat "); 63 //qDebug("delete ICalFormat ");
64} 64}
65 65
66bool ICalFormat::load( Calendar *calendar, const QString &fileName) 66bool ICalFormat::load( Calendar *calendar, const QString &fileName)
67{ 67{
68 68
69 clearException(); 69 clearException();
70 70
71 QFile file( fileName ); 71 QFile file( fileName );
72 if (!file.open( IO_ReadOnly ) ) { 72 if (!file.open( IO_ReadOnly ) ) {
73 setException(new ErrorFormat(ErrorFormat::LoadError)); 73 setException(new ErrorFormat(ErrorFormat::LoadError));
74 return false; 74 return false;
75 } 75 }
76 QTextStream ts( &file ); 76 QTextStream ts( &file );
77 QString text; 77 QString text;
78 78
79 ts.setEncoding( QTextStream::Latin1 ); 79 ts.setEncoding( QTextStream::Latin1 );
80 text = ts.read(); 80 text = ts.read();
81 file.close(); 81 file.close();
82 82
83 return fromString( calendar, text ); 83 return fromString( calendar, text );
84} 84}
85 85
86//#include <qdatetime.h> 86//#include <qdatetime.h>
87bool ICalFormat::save( Calendar *calendar, const QString &fileName ) 87bool ICalFormat::save( Calendar *calendar, const QString &fileName )
88{ 88{
89 //kdDebug(5800) << "ICalFormat::save(): " << fileName << endl; 89 //kdDebug(5800) << "ICalFormat::save(): " << fileName << endl;
90 //qDebug("ICalFormat::save "); 90 //qDebug("ICalFormat::save ");
91 clearException(); 91 clearException();
92 QString text = toString( calendar ); 92 QString text = toString( calendar );
93 //return false; 93 //return false;
94 // qDebug("to string takes ms: %d ",is.elapsed() ); 94 // qDebug("to string takes ms: %d ",is.elapsed() );
95 if ( text.isNull() ) return false; 95 if ( text.isNull() ) return false;
96 96
97 // TODO: write backup file 97 // TODO: write backup file
98 //is.restart(); 98 //is.restart();
99 QFile file( fileName ); 99 QFile file( fileName );
100 if (!file.open( IO_WriteOnly ) ) { 100 if (!file.open( IO_WriteOnly ) ) {
101 setException(new ErrorFormat(ErrorFormat::SaveError, 101 setException(new ErrorFormat(ErrorFormat::SaveError,
102 i18n("Could not open file '%1'").arg(fileName))); 102 i18n("Could not open file '%1'").arg(fileName)));
103 return false; 103 return false;
104 } 104 }
105 QTextStream ts( &file ); 105 QTextStream ts( &file );
106 106
107 ts.setEncoding( QTextStream::Latin1 ); 107 ts.setEncoding( QTextStream::Latin1 );
108 ts << text; 108 ts << text;
109 file.close(); 109 file.close();
110 //qDebug("saving file takes ms: %d ", is.elapsed() ); 110 //qDebug("saving file takes ms: %d ", is.elapsed() );
111 return true; 111 return true;
112} 112}
113 113
114bool ICalFormat::fromString( Calendar *cal, const QString &text ) 114bool ICalFormat::fromString( Calendar *cal, const QString &text )
115{ 115{
116 setTimeZone( cal->timeZoneId(), !cal->isLocalTime() ); 116 setTimeZone( cal->timeZoneId(), !cal->isLocalTime() );
117 // qDebug("ICalFormat::fromString tz: %s ", cal->timeZoneId().latin1()); 117 // qDebug("ICalFormat::fromString tz: %s ", cal->timeZoneId().latin1());
118 // Get first VCALENDAR component. 118 // Get first VCALENDAR component.
119 // TODO: Handle more than one VCALENDAR or non-VCALENDAR top components 119 // TODO: Handle more than one VCALENDAR or non-VCALENDAR top components
120 icalcomponent *calendar; 120 icalcomponent *calendar;
121 121
122 //calendar = icalcomponent_new_from_string( text.local8Bit().data()); 122 //calendar = icalcomponent_new_from_string( text.local8Bit().data());
123 // good calendar = icalcomponent_new_from_string( text.utf8().data()); 123 // good calendar = icalcomponent_new_from_string( text.utf8().data());
124 calendar = icalcomponent_new_from_string( (char*)text.latin1()); 124 calendar = icalcomponent_new_from_string( (char*)text.latin1());
125 if (!calendar) { 125 if (!calendar) {
126 setException(new ErrorFormat(ErrorFormat::ParseErrorIcal)); 126 setException(new ErrorFormat(ErrorFormat::ParseErrorIcal));
127 return false; 127 return false;
128 } 128 }
129 129
130 bool success = true; 130 bool success = true;
131 131
132 if (icalcomponent_isa(calendar) != ICAL_VCALENDAR_COMPONENT) { 132 if (icalcomponent_isa(calendar) != ICAL_VCALENDAR_COMPONENT) {
133 setException(new ErrorFormat(ErrorFormat::NoCalendar)); 133 setException(new ErrorFormat(ErrorFormat::NoCalendar));
134 success = false; 134 success = false;
135 } else { 135 } else {
136 // put all objects into their proper places 136 // put all objects into their proper places
137 if ( !mImpl->populate( cal, calendar ) ) { 137 if ( !mImpl->populate( cal, calendar ) ) {
138 if ( !exception() ) { 138 if ( !exception() ) {
139 setException(new ErrorFormat(ErrorFormat::ParseErrorKcal)); 139 setException(new ErrorFormat(ErrorFormat::ParseErrorKcal));
140 } 140 }
141 success = false; 141 success = false;
142 } else 142 } else
143 mLoadedProductId = mImpl->loadedProductId(); 143 mLoadedProductId = mImpl->loadedProductId();
144 } 144 }
145 145
146 icalcomponent_free( calendar ); 146 icalcomponent_free( calendar );
147 icalmemory_free_ring();
147 148
148 return success; 149 return success;
149} 150}
150 151
151Incidence *ICalFormat::fromString( const QString &text ) 152Incidence *ICalFormat::fromString( const QString &text )
152{ 153{
153 CalendarLocal cal( mTimeZoneId ); 154 CalendarLocal cal( mTimeZoneId );
154 fromString(&cal, text); 155 fromString(&cal, text);
155 156
156 Incidence *ical = 0; 157 Incidence *ical = 0;
157 QPtrList<Event> elist = cal.events(); 158 QPtrList<Event> elist = cal.events();
158 if ( elist.count() > 0 ) { 159 if ( elist.count() > 0 ) {
159 ical = elist.first(); 160 ical = elist.first();
160 } else { 161 } else {
161 QPtrList<Todo> tlist = cal.todos(); 162 QPtrList<Todo> tlist = cal.todos();
162 if ( tlist.count() > 0 ) { 163 if ( tlist.count() > 0 ) {
163 ical = tlist.first(); 164 ical = tlist.first();
164 } else { 165 } else {
165 QPtrList<Journal> jlist = cal.journals(); 166 QPtrList<Journal> jlist = cal.journals();
166 if ( jlist.count() > 0 ) { 167 if ( jlist.count() > 0 ) {
167 ical = jlist.first(); 168 ical = jlist.first();
168 } 169 }
169 } 170 }
170 } 171 }
171 return ical; 172 return ical;
172} 173}
173#include <qapp.h> 174#include <qapp.h>
174 175
175QString ICalFormat::toString( Calendar *cal ) 176QString ICalFormat::toString( Calendar *cal )
176{ 177{
177 178
178 setTimeZone( cal->timeZoneId(), !cal->isLocalTime() ); 179 setTimeZone( cal->timeZoneId(), !cal->isLocalTime() );
179 180
180 icalcomponent *calendar = mImpl->createCalendarComponent(cal); 181 icalcomponent *calendar = mImpl->createCalendarComponent(cal);
181 182
182 icalcomponent *component; 183 icalcomponent *component;
183 184
184 // todos 185 // todos
185 QPtrList<Todo> todoList = cal->rawTodos(); 186 QPtrList<Todo> todoList = cal->rawTodos();
186 QPtrListIterator<Todo> qlt(todoList); 187 QPtrListIterator<Todo> qlt(todoList);
187 for (; qlt.current(); ++qlt) { 188 for (; qlt.current(); ++qlt) {
188 component = mImpl->writeTodo(qlt.current()); 189 component = mImpl->writeTodo(qlt.current());
189 icalcomponent_add_component(calendar,component); 190 icalcomponent_add_component(calendar,component);
190 //qDebug(" todos "); 191 //qDebug(" todos ");
191 qApp->processEvents(); 192 qApp->processEvents();
192 } 193 }
193 // events 194 // events
194 QPtrList<Event> events = cal->rawEvents(); 195 QPtrList<Event> events = cal->rawEvents();
195 Event *ev; 196 Event *ev;
196 for(ev=events.first();ev;ev=events.next()) { 197 for(ev=events.first();ev;ev=events.next()) {
197 component = mImpl->writeEvent(ev); 198 component = mImpl->writeEvent(ev);
198 icalcomponent_add_component(calendar,component); 199 icalcomponent_add_component(calendar,component);
199 //qDebug("events "); 200 //qDebug("events ");
200 qApp->processEvents(); 201 qApp->processEvents();
201 } 202 }
202 203
203 // journals 204 // journals
204 QPtrList<Journal> journals = cal->journals(); 205 QPtrList<Journal> journals = cal->journals();
205 Journal *j; 206 Journal *j;
206 for(j=journals.first();j;j=journals.next()) { 207 for(j=journals.first();j;j=journals.next()) {
207 component = mImpl->writeJournal(j); 208 component = mImpl->writeJournal(j);
208 icalcomponent_add_component(calendar,component); 209 icalcomponent_add_component(calendar,component);
209 //qDebug("journals "); 210 //qDebug("journals ");
210 qApp->processEvents(); 211 qApp->processEvents();
211 } 212 }
212 const char *text; 213 const char *text;
213 QString ret =""; 214 QString ret ="";
214 text = icalcomponent_as_ical_string( calendar ); 215 text = icalcomponent_as_ical_string( calendar );
215 qApp->processEvents(); 216 qApp->processEvents();
216 217
217 // text = "BEGIN:VCALENDAR\nPRODID\n :-//K Desktop Environment//NONSGML libkcal 3.1//EN\nVERSION\n :2.0\nBEGIN:VEVENT\nDTSTAMP\n :20031231T213514Z\nORGANIZER\n :MAILTO:lutz@putz.de\nCREATED\n :20031231T213513Z\nUID\n :libkcal-1295166342.120\nSEQUENCE\n :0\nLAST-MODIFIED\n :20031231T213513Z\nSUMMARY\n :test1\nCLASS\n :PUBLIC\nPRIORITY\n :3\nDTSTART\n :20040101T090000Z\nDTEND\n :20040101T110000Z\nTRANSP\n :OPAQUE\nEND:VEVENT\nEND:VCALENDAR\n"; 218 // text = "BEGIN:VCALENDAR\nPRODID\n :-//K Desktop Environment//NONSGML libkcal 3.1//EN\nVERSION\n :2.0\nBEGIN:VEVENT\nDTSTAMP\n :20031231T213514Z\nORGANIZER\n :MAILTO:lutz@putz.de\nCREATED\n :20031231T213513Z\nUID\n :libkcal-1295166342.120\nSEQUENCE\n :0\nLAST-MODIFIED\n :20031231T213513Z\nSUMMARY\n :test1\nCLASS\n :PUBLIC\nPRIORITY\n :3\nDTSTART\n :20040101T090000Z\nDTEND\n :20040101T110000Z\nTRANSP\n :OPAQUE\nEND:VEVENT\nEND:VCALENDAR\n";
218 219
219 220
220 if ( text ) { 221 if ( text ) {
221 ret = QString ( text ); 222 ret = QString ( text );
222 } 223 }
223 icalcomponent_free( calendar ); 224 icalcomponent_free( calendar );
224 225
225 if (!text) { 226 if (!text) {
226 setException(new ErrorFormat(ErrorFormat::SaveError, 227 setException(new ErrorFormat(ErrorFormat::SaveError,
227 i18n("libical error"))); 228 i18n("libical error")));
229 icalmemory_free_ring();
228 return QString::null; 230 return QString::null;
229 } 231 }
230 232 icalmemory_free_ring();
231 return ret; 233 return ret;
232} 234}
233 235
234QString ICalFormat::toICalString( Incidence *incidence ) 236QString ICalFormat::toICalString( Incidence *incidence )
235{ 237{
236 CalendarLocal cal( mTimeZoneId ); 238 CalendarLocal cal( mTimeZoneId );
237 cal.addIncidence( incidence->clone() ); 239 cal.addIncidence( incidence->clone() );
238 return toString( &cal ); 240 return toString( &cal );
239} 241}
240 242
241QString ICalFormat::toString( Incidence *incidence ) 243QString ICalFormat::toString( Incidence *incidence )
242{ 244{
243 icalcomponent *component; 245 icalcomponent *component;
244 246
245 component = mImpl->writeIncidence( incidence ); 247 component = mImpl->writeIncidence( incidence );
246 248
247 const char *text = icalcomponent_as_ical_string( component ); 249 const char *text = icalcomponent_as_ical_string( component );
248 250
249 icalcomponent_free( component ); 251 icalcomponent_free( component );
250 252
251 return QString::fromLocal8Bit( text ); 253 return QString::fromLocal8Bit( text );
252} 254}
253 255
254QString ICalFormat::toString( Recurrence *recurrence ) 256QString ICalFormat::toString( Recurrence *recurrence )
255{ 257{
256 icalproperty *property; 258 icalproperty *property;
257 property = mImpl->writeRecurrenceRule( recurrence ); 259 property = mImpl->writeRecurrenceRule( recurrence );
258 const char *text = icalproperty_as_ical_string( property ); 260 const char *text = icalproperty_as_ical_string( property );
259 icalproperty_free( property ); 261 icalproperty_free( property );
260 return QString::fromLocal8Bit( text ); 262 return QString::fromLocal8Bit( text );
261} 263}
262/* 264/*
263bool ICalFormat::fromString( Recurrence * recurrence, const QString& rrule ) 265bool ICalFormat::fromString( Recurrence * recurrence, const QString& rrule )
264{ 266{
265 bool success = true; 267 bool success = true;
266 icalerror_clear_errno(); 268 icalerror_clear_errno();
267 struct icalrecurrencetype recur = icalrecurrencetype_from_string( rrule ); 269 struct icalrecurrencetype recur = icalrecurrencetype_from_string( rrule );
268 if ( icalerrno != ICAL_NO_ERROR ) { 270 if ( icalerrno != ICAL_NO_ERROR ) {
269 kdDebug() << "Recurrence parsing error: " << icalerror_strerror( icalerrno ) << endl; 271 kdDebug() << "Recurrence parsing error: " << icalerror_strerror( icalerrno ) << endl;
270 success = false; 272 success = false;
271 } 273 }
272 274
273 if ( success ) { 275 if ( success ) {
274 mImpl->readRecurrence( recur, recurrence ); 276 mImpl->readRecurrence( recur, recurrence );
275 } 277 }
276 278
277 return success; 279 return success;
278} 280}
279*/ 281*/
280 282
281QString ICalFormat::createScheduleMessage(IncidenceBase *incidence, 283QString ICalFormat::createScheduleMessage(IncidenceBase *incidence,
282 Scheduler::Method method) 284 Scheduler::Method method)
283{ 285{
284 icalcomponent *message = mImpl->createScheduleComponent(incidence,method); 286 icalcomponent *message = mImpl->createScheduleComponent(incidence,method);
285 287
286 QString messageText = icalcomponent_as_ical_string(message); 288 QString messageText = icalcomponent_as_ical_string(message);
287 289
288 290
289 291
290 return messageText; 292 return messageText;
291} 293}
292 294
293ScheduleMessage *ICalFormat::parseScheduleMessage( Calendar *cal, 295ScheduleMessage *ICalFormat::parseScheduleMessage( Calendar *cal,
294 const QString &messageText ) 296 const QString &messageText )
295{ 297{
296 setTimeZone( cal->timeZoneId(), !cal->isLocalTime() ); 298 setTimeZone( cal->timeZoneId(), !cal->isLocalTime() );
297 clearException(); 299 clearException();
298 300
299 if (messageText.isEmpty()) return 0; 301 if (messageText.isEmpty()) return 0;
300 302
301 icalcomponent *message; 303 icalcomponent *message;
302 message = icalparser_parse_string(messageText.local8Bit()); 304 message = icalparser_parse_string(messageText.local8Bit());
303 305
304 if (!message) return 0; 306 if (!message) return 0;
305 307
306 icalproperty *m = icalcomponent_get_first_property(message, 308 icalproperty *m = icalcomponent_get_first_property(message,
307 ICAL_METHOD_PROPERTY); 309 ICAL_METHOD_PROPERTY);
308 310
309 if (!m) return 0; 311 if (!m) return 0;
310 312
311 icalcomponent *c; 313 icalcomponent *c;
312 314
313 IncidenceBase *incidence = 0; 315 IncidenceBase *incidence = 0;
314 c = icalcomponent_get_first_component(message,ICAL_VEVENT_COMPONENT); 316 c = icalcomponent_get_first_component(message,ICAL_VEVENT_COMPONENT);
315 if (c) { 317 if (c) {
316 incidence = mImpl->readEvent(c); 318 incidence = mImpl->readEvent(c);
317 } 319 }
318 320
319 if (!incidence) { 321 if (!incidence) {
320 c = icalcomponent_get_first_component(message,ICAL_VTODO_COMPONENT); 322 c = icalcomponent_get_first_component(message,ICAL_VTODO_COMPONENT);
321 if (c) { 323 if (c) {
322 incidence = mImpl->readTodo(c); 324 incidence = mImpl->readTodo(c);
323 } 325 }
324 } 326 }
325 327
326 if (!incidence) { 328 if (!incidence) {