summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt37
-rw-r--r--kabc/vcardformatimpl.cpp28
-rw-r--r--kaddressbook/xxport/vcard_xxport.cpp17
3 files changed, 59 insertions, 23 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 27d37c4..ea49c2c 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -4,8 +4,41 @@ Info about the changes in new versions of KDE-Pim/Pi
4 4
5Fixed a problem in KA/Pi search. 5Fixed a problem in KA/Pi search.
6Fixed some minor problems in KO/Pi. 6Fixed some minor problems in KO/Pi.
7Added calendar selection possibility to the todo view popup and to the event/todo editor. 7Added calendar selection possibility to the todo view popup and to the event/todo/journal editor.
8 8
9Fixed memory usage problems in KA/Pi:
10When loading data KA/Pi did load the file data twice.
11Example:
12 A 600k file did consume 1200k memory during loading process.
13 This is fixed, it does now consume only 600k during loading process.
14When saving data KA/Pi did consume a lot of memory for the data parsing during the save process.
15This is fixed.
16Example:
17 Before saving a 600k file KA/Pi did consume 21.7 Meg of Ram.
18 When saving KA/Pi did consume 28.6 Meg of Ram. That causes a crash on the Zaurus because there was no memeory left in the system.
19 Now KA/Pi is consuming on saving the same data 22.0 Meg of Ram during the save process.
20Note: The memory usage of KA/Pi after the data is loaded/saved has not changed.
21
22Fixed memory usage problems in KO/Pi:
23When KO/Pi did save the data to file, it did not release the used buffers after saving.
24The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation.
25This is fixed.
26Example:
27 When saving a 400k file KO/Pi do now use 400k less memory now.
28
29Optimized memory usage in KO/Pi Agenda view:
30KO/Pi is storing some paint information in extra buffers for faster repainting of the agenda view.
31These buffers were not made smaller (i.e. downsized) because of performance reasons.
32The handling of these buffers are now much smarter:
33Two (of six) buffers are removed completely.
34The remaing four buffers are now downsized after not using the agenda view for 45 seconds.
35Such that the memory usage of KO/Pi is smaller now in general ( because 2 buffers are removed) and is much smaller when not using the agenda view. That is very important when using fastload for KO/Pi.
36
37Worst case example ( for a maximum size agenda content):
38 When resizing the agenda content to a large scale, KO/Pi did use 17Meg of mem ( and did not use less memory until it was stopped). Now KO/Pi is using on the same operation only 14.3 Meg of mem and after 45 seconds not using the agenda view it uses only 9.4 Meg of mem.
39
40Summary:
41Many memory wasting problems of KA/Pi and KO/Pi fixed such that it is better to use on the Zaurus.
9 42
10********** VERSION 2.1.12 ************ 43********** VERSION 2.1.12 ************
11 44
diff --git a/kabc/vcardformatimpl.cpp b/kabc/vcardformatimpl.cpp
index b9fe6ff..ec5ed80 100644
--- a/kabc/vcardformatimpl.cpp
+++ b/kabc/vcardformatimpl.cpp
@@ -27,6 +27,7 @@ $Id$
27 27
28#include <qfile.h> 28#include <qfile.h>
29#include <qregexp.h> 29#include <qregexp.h>
30#include <qapplication.h>
30 31
31#include <kdebug.h> 32#include <kdebug.h>
32#include <kmdcodec.h> 33#include <kmdcodec.h>
@@ -69,13 +70,12 @@ bool VCardFormatImpl::load( Addressee &addressee, QFile *file )
69 return false; 70 return false;
70} 71}
71 72
73
74#include <kmessagebox.h>
72bool VCardFormatImpl::loadAll( AddressBook *addressBook, Resource *resource, QFile *file ) 75bool VCardFormatImpl::loadAll( AddressBook *addressBook, Resource *resource, QFile *file )
73{ 76{
74 kdDebug(5700) << "VCardFormat::loadAll()" << endl; 77
75 78 QCString data(file->readAll().data(), file->size()+1);
76 QByteArray fdata = file->readAll();
77 QCString data(fdata.data(), fdata.size()+1);
78
79 VCardEntity e( data ); 79 VCardEntity e( data );
80 80
81 VCardListIterator it( e.cardList() ); 81 VCardListIterator it( e.cardList() );
@@ -92,7 +92,6 @@ bool VCardFormatImpl::loadAll( AddressBook *addressBook, Resource *resource, QFi
92 printf("address %s loaded successfully\n", addressee.formattedName().latin1()); 92 printf("address %s loaded successfully\n", addressee.formattedName().latin1());
93 } 93 }
94 } 94 }
95
96 return true; 95 return true;
97} 96}
98 97
@@ -115,24 +114,17 @@ void VCardFormatImpl::save( const Addressee &addressee, QFile *file )
115 114
116void VCardFormatImpl::saveAll( AddressBook *ab, Resource *resource, QFile *file ) 115void VCardFormatImpl::saveAll( AddressBook *ab, Resource *resource, QFile *file )
117{ 116{
118 VCardEntity vcards;
119 VCardList vcardlist;
120 vcardlist.setAutoDelete( true );
121 117
122 AddressBook::Iterator it; 118 AddressBook::Iterator it;
123 for ( it = ab->begin(); it != ab->end(); ++it ) { 119 for ( it = ab->begin(); it != ab->end(); ++it ) {
124 if ( (*it).resource() == resource ) { 120 if ( (*it).resource() == resource ) {
125 VCard *v = new VCard; 121 save((*it),file);
126 saveAddressee( (*it), v, true ); 122 qApp->processEvents();
127 (*it).setChanged( false ); 123 (*it).setChanged( false );
128 vcardlist.append( v );
129 } 124 }
130 } 125 }
131 126 // for memory usage status test only
132 vcards.setCardList( vcardlist ); 127 // KMessageBox::information ( 0, "Stoppppp", QString("Stop ") );
133
134 QCString vcardData = vcards.asString();
135 file->writeBlock( (const char*)vcardData, vcardData.length() );
136} 128}
137 129
138bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCard *v ) 130bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCard *v )
diff --git a/kaddressbook/xxport/vcard_xxport.cpp b/kaddressbook/xxport/vcard_xxport.cpp
index c56be8b..91df96d 100644
--- a/kaddressbook/xxport/vcard_xxport.cpp
+++ b/kaddressbook/xxport/vcard_xxport.cpp
@@ -197,10 +197,21 @@ KABC::AddresseeList VCardXXPort::importContacts( const QString& ) const
197 } 197 }
198 QFile file( fileName ); 198 QFile file( fileName );
199 if ( file.open( IO_ReadOnly ) ) { 199 if ( file.open( IO_ReadOnly ) ) {
200 QByteArray rawData = file.readAll(); 200 QCString rawData ( file.readAll().data(),file.size()+1);
201 file.close(); 201 file.close();
202 QString data = QString::fromUtf8( rawData.data(), rawData.size() + 1 ); 202 int start = 0;
203 addrList = parseVCard( data ); 203#ifndef DESKTOP_VERSION
204 while ( start < rawData.size()-2 ) {
205 if ( rawData.at( start ) == '\r' )
206 if ( rawData.at( start+1 ) == '\n' )
207 if ( rawData.at( start+2 ) == ' ' ) {
208 rawData.remove(start,3);
209 --start;
210 }
211 ++start;
212 }
213#endif
214 addrList = parseVCard( QString::fromUtf8( rawData.data() ) );
204 } 215 }
205 216
206 } 217 }