-rw-r--r-- | bin/kdepim/WhatsNew.txt | 37 | ||||
-rw-r--r-- | kabc/vcardformatimpl.cpp | 28 | ||||
-rw-r--r-- | kaddressbook/xxport/vcard_xxport.cpp | 17 |
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 | ||
5 | Fixed a problem in KA/Pi search. | 5 | Fixed a problem in KA/Pi search. |
6 | Fixed some minor problems in KO/Pi. | 6 | Fixed some minor problems in KO/Pi. |
7 | Added calendar selection possibility to the todo view popup and to the event/todo editor. | 7 | Added calendar selection possibility to the todo view popup and to the event/todo/journal editor. |
8 | 8 | ||
9 | Fixed memory usage problems in KA/Pi: | ||
10 | When loading data KA/Pi did load the file data twice. | ||
11 | Example: | ||
12 | A 600k file did consume 1200k memory during loading process. | ||
13 | This is fixed, it does now consume only 600k during loading process. | ||
14 | When saving data KA/Pi did consume a lot of memory for the data parsing during the save process. | ||
15 | This is fixed. | ||
16 | Example: | ||
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. | ||
20 | Note: The memory usage of KA/Pi after the data is loaded/saved has not changed. | ||
21 | |||
22 | Fixed memory usage problems in KO/Pi: | ||
23 | When KO/Pi did save the data to file, it did not release the used buffers after saving. | ||
24 | The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation. | ||
25 | This is fixed. | ||
26 | Example: | ||
27 | When saving a 400k file KO/Pi do now use 400k less memory now. | ||
28 | |||
29 | Optimized memory usage in KO/Pi Agenda view: | ||
30 | KO/Pi is storing some paint information in extra buffers for faster repainting of the agenda view. | ||
31 | These buffers were not made smaller (i.e. downsized) because of performance reasons. | ||
32 | The handling of these buffers are now much smarter: | ||
33 | Two (of six) buffers are removed completely. | ||
34 | The remaing four buffers are now downsized after not using the agenda view for 45 seconds. | ||
35 | Such 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 | |||
37 | Worst 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 | |||
40 | Summary: | ||
41 | Many 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> | ||
72 | bool VCardFormatImpl::loadAll( AddressBook *addressBook, Resource *resource, QFile *file ) | 75 | bool 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 | ||
116 | void VCardFormatImpl::saveAll( AddressBook *ab, Resource *resource, QFile *file ) | 115 | void 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 | ||
138 | bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCard *v ) | 130 | bool 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 | } |