author | zautrix <zautrix> | 2004-06-26 19:01:18 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-06-26 19:01:18 (UTC) |
commit | b9aad1f15dc600e4dbe4c62d3fcced6363188ba3 (patch) (unidiff) | |
tree | 2c3d4004fb21c72cba65793859f9bcd8ffd3a49c /kabc | |
download | kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.zip kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.gz kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.bz2 |
Initial revision
199 files changed, 26169 insertions, 0 deletions
diff --git a/kabc/address.cpp b/kabc/address.cpp new file mode 100644 index 0000000..26e0b6a --- a/dev/null +++ b/kabc/address.cpp | |||
@@ -0,0 +1,630 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | //US added kglobal.h | ||
29 | #include <kglobal.h> | ||
30 | |||
31 | #include <kapplication.h> | ||
32 | #include <kdebug.h> | ||
33 | #include <klocale.h> | ||
34 | #include <ksimpleconfig.h> | ||
35 | #include <kstandarddirs.h> | ||
36 | |||
37 | #include <qfile.h> | ||
38 | |||
39 | #include "address.h" | ||
40 | |||
41 | using namespace KABC; | ||
42 | |||
43 | QMap<QString, QString> Address::mISOMap; | ||
44 | |||
45 | Address::Address() : | ||
46 | mEmpty( true ), mType( 0 ) | ||
47 | { | ||
48 | mId = KApplication::randomString( 10 ); | ||
49 | } | ||
50 | |||
51 | Address::Address( int type ) : | ||
52 | mEmpty( true ), mType( type ) | ||
53 | { | ||
54 | mId = KApplication::randomString( 10 ); | ||
55 | } | ||
56 | |||
57 | bool Address::operator==( const Address &a ) const | ||
58 | { | ||
59 | if ( mPostOfficeBox != a.mPostOfficeBox ) return false; | ||
60 | if ( mExtended != a.mExtended ) return false; | ||
61 | if ( mStreet != a.mStreet ) return false; | ||
62 | if ( mLocality != a.mLocality ) return false; | ||
63 | if ( mRegion != a.mRegion ) return false; | ||
64 | if ( mPostalCode != a.mPostalCode ) return false; | ||
65 | if ( mCountry != a.mCountry ) return false; | ||
66 | if ( mLabel != a.mLabel ) return false; | ||
67 | |||
68 | return true; | ||
69 | } | ||
70 | |||
71 | bool Address::operator!=( const Address &a ) const | ||
72 | { | ||
73 | return !( a == *this ); | ||
74 | } | ||
75 | |||
76 | bool Address::isEmpty() const | ||
77 | { | ||
78 | if ( mPostOfficeBox.isEmpty() && | ||
79 | mExtended.isEmpty() && | ||
80 | mStreet.isEmpty() && | ||
81 | mLocality.isEmpty() && | ||
82 | mRegion.isEmpty() && | ||
83 | mPostalCode.isEmpty() && | ||
84 | mCountry.isEmpty() && | ||
85 | mLabel.isEmpty() ) { | ||
86 | return true; | ||
87 | } | ||
88 | return false; | ||
89 | } | ||
90 | |||
91 | void Address::clear() | ||
92 | { | ||
93 | *this = Address(); | ||
94 | } | ||
95 | |||
96 | void Address::setId( const QString &id ) | ||
97 | { | ||
98 | mEmpty = false; | ||
99 | |||
100 | mId = id; | ||
101 | } | ||
102 | |||
103 | QString Address::id() const | ||
104 | { | ||
105 | return mId; | ||
106 | } | ||
107 | |||
108 | void Address::setType( int type ) | ||
109 | { | ||
110 | mEmpty = false; | ||
111 | |||
112 | mType = type; | ||
113 | } | ||
114 | |||
115 | int Address::type() const | ||
116 | { | ||
117 | return mType; | ||
118 | } | ||
119 | |||
120 | QString Address::typeLabel() const | ||
121 | { | ||
122 | QString label; | ||
123 | bool first = true; | ||
124 | |||
125 | TypeList list = typeList(); | ||
126 | |||
127 | TypeList::Iterator it; | ||
128 | for ( it = list.begin(); it != list.end(); ++it ) { | ||
129 | if ( ( type() & (*it) ) && ( (*it) != Pref ) ) { | ||
130 | label.append( ( first ? "" : "/" ) + typeLabel( *it ) ); | ||
131 | if ( first ) | ||
132 | first = false; | ||
133 | } | ||
134 | } | ||
135 | |||
136 | return label; | ||
137 | } | ||
138 | |||
139 | void Address::setPostOfficeBox( const QString &s ) | ||
140 | { | ||
141 | mEmpty = false; | ||
142 | |||
143 | mPostOfficeBox = s; | ||
144 | } | ||
145 | |||
146 | QString Address::postOfficeBox() const | ||
147 | { | ||
148 | return mPostOfficeBox; | ||
149 | } | ||
150 | |||
151 | QString Address::postOfficeBoxLabel() | ||
152 | { | ||
153 | return i18n("Post Office Box"); | ||
154 | } | ||
155 | |||
156 | |||
157 | void Address::setExtended( const QString &s ) | ||
158 | { | ||
159 | mEmpty = false; | ||
160 | |||
161 | mExtended = s; | ||
162 | } | ||
163 | |||
164 | QString Address::extended() const | ||
165 | { | ||
166 | return mExtended; | ||
167 | } | ||
168 | |||
169 | QString Address::extendedLabel() | ||
170 | { | ||
171 | return i18n("Extended Address Information"); | ||
172 | } | ||
173 | |||
174 | |||
175 | void Address::setStreet( const QString &s ) | ||
176 | { | ||
177 | mEmpty = false; | ||
178 | |||
179 | mStreet = s; | ||
180 | } | ||
181 | |||
182 | QString Address::street() const | ||
183 | { | ||
184 | return mStreet; | ||
185 | } | ||
186 | |||
187 | QString Address::streetLabel() | ||
188 | { | ||
189 | return i18n("Street"); | ||
190 | } | ||
191 | |||
192 | |||
193 | void Address::setLocality( const QString &s ) | ||
194 | { | ||
195 | mEmpty = false; | ||
196 | |||
197 | mLocality = s; | ||
198 | } | ||
199 | |||
200 | QString Address::locality() const | ||
201 | { | ||
202 | return mLocality; | ||
203 | } | ||
204 | |||
205 | QString Address::localityLabel() | ||
206 | { | ||
207 | return i18n("Locality"); | ||
208 | } | ||
209 | |||
210 | |||
211 | void Address::setRegion( const QString &s ) | ||
212 | { | ||
213 | mEmpty = false; | ||
214 | |||
215 | mRegion = s; | ||
216 | } | ||
217 | |||
218 | QString Address::region() const | ||
219 | { | ||
220 | return mRegion; | ||
221 | } | ||
222 | |||
223 | QString Address::regionLabel() | ||
224 | { | ||
225 | return i18n("Region"); | ||
226 | } | ||
227 | |||
228 | |||
229 | void Address::setPostalCode( const QString &s ) | ||
230 | { | ||
231 | mEmpty = false; | ||
232 | |||
233 | mPostalCode = s; | ||
234 | } | ||
235 | |||
236 | QString Address::postalCode() const | ||
237 | { | ||
238 | return mPostalCode; | ||
239 | } | ||
240 | |||
241 | QString Address::postalCodeLabel() | ||
242 | { | ||
243 | return i18n("Postal Code"); | ||
244 | } | ||
245 | |||
246 | |||
247 | void Address::setCountry( const QString &s ) | ||
248 | { | ||
249 | mEmpty = false; | ||
250 | |||
251 | mCountry = s; | ||
252 | } | ||
253 | |||
254 | QString Address::country() const | ||
255 | { | ||
256 | return mCountry; | ||
257 | } | ||
258 | |||
259 | QString Address::countryLabel() | ||
260 | { | ||
261 | return i18n("Country"); | ||
262 | } | ||
263 | |||
264 | |||
265 | void Address::setLabel( const QString &s ) | ||
266 | { | ||
267 | mEmpty = false; | ||
268 | |||
269 | mLabel = s; | ||
270 | } | ||
271 | |||
272 | QString Address::label() const | ||
273 | { | ||
274 | return mLabel; | ||
275 | } | ||
276 | |||
277 | QString Address::labelLabel() | ||
278 | { | ||
279 | return i18n("Delivery Label"); | ||
280 | } | ||
281 | |||
282 | Address::TypeList Address::typeList() | ||
283 | { | ||
284 | TypeList list; | ||
285 | |||
286 | list << Dom << Intl << Postal << Parcel << Home << Work << Pref; | ||
287 | |||
288 | return list; | ||
289 | } | ||
290 | |||
291 | QString Address::typeLabel( int type ) | ||
292 | { | ||
293 | switch ( type ) { | ||
294 | case Dom: | ||
295 | return i18n("Domestic"); | ||
296 | break; | ||
297 | case Intl: | ||
298 | return i18n("International"); | ||
299 | break; | ||
300 | case Postal: | ||
301 | return i18n("Postal"); | ||
302 | break; | ||
303 | case Parcel: | ||
304 | return i18n("Parcel"); | ||
305 | break; | ||
306 | case Home: | ||
307 | return i18n("Home Address", "Home"); | ||
308 | break; | ||
309 | case Work: | ||
310 | return i18n("Work Address", "Work"); | ||
311 | break; | ||
312 | case Pref: | ||
313 | return i18n("Preferred Address"); | ||
314 | break; | ||
315 | default: | ||
316 | return i18n("Other"); | ||
317 | break; | ||
318 | } | ||
319 | } | ||
320 | |||
321 | void Address::dump() const | ||
322 | { | ||
323 | qDebug("Address::dump() +++++++++++++++++ "); | ||
324 | #if 0 | ||
325 | kdDebug(5700) << " Address {" << endl; | ||
326 | kdDebug(5700) << " Id: " << id() << endl; | ||
327 | kdDebug(5700) << " Extended: " << extended() << endl; | ||
328 | kdDebug(5700) << " Street: " << street() << endl; | ||
329 | kdDebug(5700) << " Postal Code: " << postalCode() << endl; | ||
330 | kdDebug(5700) << " Locality: " << locality() << endl; | ||
331 | kdDebug(5700) << " }" << endl; | ||
332 | #endif | ||
333 | } | ||
334 | |||
335 | |||
336 | QString Address::formattedAddress( const QString &realName | ||
337 | , const QString &orgaName ) const | ||
338 | { | ||
339 | QString ciso; | ||
340 | QString addrTemplate; | ||
341 | QString ret; | ||
342 | |||
343 | // ************************************************************** | ||
344 | // LR: currently we have no iso handling - we will format the address manually here | ||
345 | |||
346 | QString text; | ||
347 | if ( !street().isEmpty() ) | ||
348 | text += street() + "\n"; | ||
349 | |||
350 | if ( !postOfficeBox().isEmpty() ) | ||
351 | text += postOfficeBox() + "\n"; | ||
352 | |||
353 | text += locality() + QString(" ") + region(); | ||
354 | |||
355 | if ( !postalCode().isEmpty() ) | ||
356 | text += QString(", ") + postalCode(); | ||
357 | |||
358 | text += "\n"; | ||
359 | |||
360 | if ( !country().isEmpty() ) | ||
361 | text += country() + "\n"; | ||
362 | |||
363 | text += extended(); | ||
364 | |||
365 | |||
366 | return text; | ||
367 | // ************************************************************** | ||
368 | |||
369 | // FIXME: first check for iso-country-field and prefer that one | ||
370 | if ( !country().isEmpty() ) { | ||
371 | ciso = countryToISO( country() ); | ||
372 | } else { | ||
373 | // fall back to our own country | ||
374 | ciso = KGlobal::locale()->country(); | ||
375 | } | ||
376 | //qDebug("ciso %s ",ciso.latin1() ); | ||
377 | KSimpleConfig entry( locate( "locale", | ||
378 | QString( "l10n/" ) + ciso + QString( "/entry.desktop" ) ) ); | ||
379 | entry.setGroup( "KCM Locale" ); | ||
380 | |||
381 | // decide whether this needs special business address formatting | ||
382 | if ( orgaName.isNull() ) { | ||
383 | addrTemplate = entry.readEntry( "AddressFormat" ); | ||
384 | } else { | ||
385 | addrTemplate = entry.readEntry( "BusinessAddressFormat" ); | ||
386 | if ( addrTemplate.isEmpty() ) | ||
387 | addrTemplate = entry.readEntry( "AddressFormat" ); | ||
388 | } | ||
389 | |||
390 | // in the case there's no format found at all, default to what we've always | ||
391 | // used: | ||
392 | if ( addrTemplate.isEmpty() ) { | ||
393 | qDebug("address format database incomplete****************** "); | ||
394 | kdWarning(5700) << "address format database incomplete " | ||
395 | << "(no format for locale " << ciso | ||
396 | << " found). Using default address formatting." << endl; | ||
397 | addrTemplate = "%0(%n\\n)%0(%cm\\n)%0(%s\\n)%0(PO BOX %p\\n)%0(%l%w%r)%,%z"; | ||
398 | } | ||
399 | |||
400 | // scan | ||
401 | parseAddressTemplateSection( addrTemplate, ret, realName, orgaName ); | ||
402 | |||
403 | // now add the country line if needed (formatting this time according to | ||
404 | // the rules of our own system country ) | ||
405 | if ( !country().isEmpty() ) { | ||
406 | KSimpleConfig entry( locate( "locale", QString( "l10n/" ) | ||
407 | + KGlobal::locale()->country() + QString( "/entry.desktop" ) ) ); | ||
408 | entry.setGroup( "KCM Locale" ); | ||
409 | QString cpos = entry.readEntry( "AddressCountryPosition" ); | ||
410 | if ( "BELOW" == cpos || cpos.isEmpty() ) { | ||
411 | ret = ret + "\n\n" + country().upper(); | ||
412 | } else if ( "below" == cpos ) { | ||
413 | ret = ret + "\n\n" + country(); | ||
414 | } else if ( "ABOVE" == cpos ) { | ||
415 | ret = country().upper() + "\n\n" + ret; | ||
416 | } else if ( "above" == cpos ) { | ||
417 | ret = country() + "\n\n" + ret; | ||
418 | } | ||
419 | } | ||
420 | |||
421 | return ret; | ||
422 | } | ||
423 | |||
424 | bool Address::parseAddressTemplateSection( const QString &tsection, | ||
425 | QString &result, const QString &realName, const QString &orgaName ) const | ||
426 | { | ||
427 | // This method first parses and substitutes any bracketed sections and | ||
428 | // after that replaces any tags with their values. If a bracketed section | ||
429 | // or a tag evaluate to zero, they are not just removed but replaced | ||
430 | // with a placeholder. This is because in the last step conditionals are | ||
431 | // resolved which depend on information about zero-evaluations. | ||
432 | result = tsection; | ||
433 | int stpos = 0; | ||
434 | bool ret = false; | ||
435 | |||
436 | // first check for brackets that have to be evaluated first | ||
437 | int fpos = result.find( KABC_FMTTAG_purgeempty, stpos ); | ||
438 | while ( -1 != fpos ) { | ||
439 | int bpos1 = fpos + KABC_FMTTAG_purgeempty.length(); | ||
440 | int bpos2; | ||
441 | // expect opening bracket and find next balanced closing bracket. If | ||
442 | // next char is no opening bracket, continue parsing (no valid tag) | ||
443 | if ( '(' == result[bpos1] ) { | ||
444 | bpos2 = findBalancedBracket( result, bpos1 ); | ||
445 | if ( -1 != bpos2 ) { | ||
446 | // we have balanced brackets, recursively parse: | ||
447 | QString rplstr; | ||
448 | bool purge = !parseAddressTemplateSection( result.mid( bpos1+1, | ||
449 | bpos2-bpos1-1 ), rplstr, | ||
450 | realName, orgaName ); | ||
451 | if ( purge ) { | ||
452 | // purge -> remove all | ||
453 | // replace with !_P_!, so conditional tags work later | ||
454 | result.replace( fpos, bpos2 - fpos + 1, "!_P_!" ); | ||
455 | // leave stpos as it is | ||
456 | } else { | ||
457 | // no purge -> replace with recursively parsed string | ||
458 | result.replace( fpos, bpos2 - fpos + 1, rplstr ); | ||
459 | ret = true; | ||
460 | stpos = fpos + rplstr.length(); | ||
461 | } | ||
462 | } else { | ||
463 | // unbalanced brackets: keep on parsing (should not happen | ||
464 | // and will result in bad formatting) | ||
465 | stpos = bpos1; | ||
466 | } | ||
467 | } | ||
468 | fpos = result.find( KABC_FMTTAG_purgeempty, stpos ); | ||
469 | } | ||
470 | |||
471 | // after sorting out all purge tags, we just search'n'replace the rest, | ||
472 | // keeping track of whether at least one tag evaluates to something. | ||
473 | // The following macro needs QString for R_FIELD | ||
474 | // It substitutes !_P_! for empty fields so conditional tags work later | ||
475 | #define REPLTAG(R_TAG,R_FIELD) \ | ||
476 | if ( result.contains(R_TAG, false) ) { \ | ||
477 | QString rpl = R_FIELD.isEmpty() ? QString("!_P_!") : R_FIELD; \ | ||
478 | result.replace( R_TAG, rpl ); \ | ||
479 | if ( !R_FIELD.isEmpty() ) { \ | ||
480 | ret = true; \ | ||
481 | } \ | ||
482 | } | ||
483 | REPLTAG( KABC_FMTTAG_realname, realName ); | ||
484 | REPLTAG( KABC_FMTTAG_REALNAME, realName.upper() ); | ||
485 | REPLTAG( KABC_FMTTAG_company, orgaName ); | ||
486 | REPLTAG( KABC_FMTTAG_COMPANY, orgaName.upper() ); | ||
487 | REPLTAG( KABC_FMTTAG_pobox, postOfficeBox() ); | ||
488 | REPLTAG( KABC_FMTTAG_street, street() ); | ||
489 | REPLTAG( KABC_FMTTAG_STREET, street().upper() ); | ||
490 | REPLTAG( KABC_FMTTAG_zipcode, postalCode() ); | ||
491 | REPLTAG( KABC_FMTTAG_location, locality() ); | ||
492 | REPLTAG( KABC_FMTTAG_LOCATION, locality().upper() ); | ||
493 | REPLTAG( KABC_FMTTAG_region, region() ); | ||
494 | REPLTAG( KABC_FMTTAG_REGION, region().upper() ); | ||
495 | result.replace( KABC_FMTTAG_newline, "\n" ); | ||
496 | #undef REPLTAG | ||
497 | |||
498 | // conditional comma | ||
499 | fpos = result.find( KABC_FMTTAG_condcomma, 0 ); | ||
500 | while ( -1 != fpos ) { | ||
501 | QString str1 = result.mid( fpos - 5, 5 ); | ||
502 | QString str2 = result.mid( fpos + 2, 5 ); | ||
503 | if ( str1 != "!_P_!" && str2 != "!_P_!" ) { | ||
504 | result.replace( fpos, 2, ", " ); | ||
505 | } else { | ||
506 | result.remove( fpos, 2 ); | ||
507 | } | ||
508 | fpos = result.find( KABC_FMTTAG_condcomma, fpos ); | ||
509 | } | ||
510 | // conditional whitespace | ||
511 | fpos = result.find( KABC_FMTTAG_condwhite, 0 ); | ||
512 | while ( -1 != fpos ) { | ||
513 | QString str1 = result.mid( fpos - 5, 5 ); | ||
514 | QString str2 = result.mid( fpos + 2, 5 ); | ||
515 | if ( str1 != "!_P_!" && str2 != "!_P_!" ) { | ||
516 | result.replace( fpos, 2, " " ); | ||
517 | } else { | ||
518 | result.remove( fpos, 2 ); | ||
519 | } | ||
520 | fpos = result.find( KABC_FMTTAG_condwhite, fpos ); | ||
521 | } | ||
522 | |||
523 | // remove purged: | ||
524 | //US my QT version does not support remove. So lets do it the old fashioned way. | ||
525 | //US result.remove( "!_P_!" ); | ||
526 | int n = result.find("!_P_!"); | ||
527 | if (n >= 0) | ||
528 | result.remove( n, 5 ); | ||
529 | |||
530 | return ret; | ||
531 | } | ||
532 | |||
533 | int Address::findBalancedBracket( const QString &tsection, int pos ) const | ||
534 | { | ||
535 | int balancecounter = 0; | ||
536 | for( unsigned int i = pos + 1; i < tsection.length(); i++ ) { | ||
537 | if ( ')' == tsection.at(i) && 0 == balancecounter ) { | ||
538 | // found end of brackets | ||
539 | return i; | ||
540 | } else | ||
541 | if ( '(' == tsection.at(i) ) { | ||
542 | // nested brackets | ||
543 | balancecounter++; | ||
544 | } | ||
545 | } | ||
546 | return -1; | ||
547 | } | ||
548 | |||
549 | QString Address::countryToISO( const QString &cname ) | ||
550 | { | ||
551 | // we search a map file for translations from country names to | ||
552 | // iso codes, storing caching things in a QMap for faster future | ||
553 | // access. | ||
554 | /*US | ||
555 | |||
556 | QString isoCode = mISOMap[ cname ]; | ||
557 | if ( !isoCode.isEmpty() ) | ||
558 | return isoCode; | ||
559 | |||
560 | QString mapfile = KGlobal::dirs()->findResource( "data", | ||
561 | QString::fromLatin1( "kabc/countrytransl.map" ) ); | ||
562 | |||
563 | QFile file( mapfile ); | ||
564 | if ( file.open( IO_ReadOnly ) ) { | ||
565 | QTextStream s( &file ); | ||
566 | QString strbuf = s.readLine(); | ||
567 | while( !strbuf.isNull() ) { | ||
568 | if ( strbuf.startsWith( cname ) ) { | ||
569 | int index = strbuf.findRev('\t'); | ||
570 | strbuf = strbuf.mid(index+1, 2); | ||
571 | file.close(); | ||
572 | mISOMap[ cname ] = strbuf; | ||
573 | return strbuf; | ||
574 | } | ||
575 | strbuf = s.readLine(); | ||
576 | } | ||
577 | file.close(); | ||
578 | } | ||
579 | */ | ||
580 | // fall back to system country | ||
581 | mISOMap[ cname ] = KGlobal::locale()->country(); | ||
582 | return KGlobal::locale()->country(); | ||
583 | } | ||
584 | |||
585 | QString Address::ISOtoCountry( const QString &ISOname ) | ||
586 | { | ||
587 | /*US | ||
588 | // get country name from ISO country code (e.g. "no" -> i18n("Norway")) | ||
589 | QString mapfile = KGlobal::dirs()->findResource( "data", | ||
590 | QString::fromLatin1( "kabc/countrytransl.map" ) ); | ||
591 | |||
592 | kdWarning() << "MAPFILE : " << mapfile << endl; | ||
593 | QFile file( mapfile ); | ||
594 | if ( file.open( IO_ReadOnly ) ) { | ||
595 | QTextStream s( &file ); | ||
596 | QString searchStr = "\t" + ISOname.simplifyWhiteSpace().lower(); | ||
597 | kdWarning() << "Suche : " << searchStr << endl; | ||
598 | QString strbuf = s.readLine(); | ||
599 | int pos; | ||
600 | while( !strbuf.isNull() ) { | ||
601 | if ( (pos=strbuf.find( searchStr )) != -1 ) { | ||
602 | file.close(); | ||
603 | return i18n(strbuf.left(pos).utf8()); | ||
604 | } | ||
605 | strbuf = s.readLine(); | ||
606 | } | ||
607 | file.close(); | ||
608 | } | ||
609 | */ | ||
610 | return ISOname; | ||
611 | } | ||
612 | |||
613 | QDataStream &KABC::operator<<( QDataStream &s, const Address &addr ) | ||
614 | { | ||
615 | return s << addr.mId << addr.mType << addr.mPostOfficeBox << | ||
616 | addr.mExtended << addr.mStreet << addr.mLocality << | ||
617 | addr.mRegion << addr.mPostalCode << addr.mCountry << | ||
618 | addr.mLabel; | ||
619 | } | ||
620 | |||
621 | QDataStream &KABC::operator>>( QDataStream &s, Address &addr ) | ||
622 | { | ||
623 | s >> addr.mId >> addr.mType >> addr.mPostOfficeBox >> addr.mExtended >> | ||
624 | addr.mStreet >> addr.mLocality >> addr.mRegion >> | ||
625 | addr.mPostalCode >> addr.mCountry >> addr.mLabel; | ||
626 | |||
627 | addr.mEmpty = false; | ||
628 | |||
629 | return s; | ||
630 | } | ||
diff --git a/kabc/address.h b/kabc/address.h new file mode 100644 index 0000000..ad132a7 --- a/dev/null +++ b/kabc/address.h | |||
@@ -0,0 +1,346 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_ADDRESS_H | ||
29 | #define KABC_ADDRESS_H | ||
30 | |||
31 | #include <qmap.h> | ||
32 | #include <qstring.h> | ||
33 | #include <qvaluelist.h> | ||
34 | |||
35 | // template tags for address formatting localization | ||
36 | #define KABC_FMTTAG_realname QString("%n") | ||
37 | #define KABC_FMTTAG_REALNAME QString("%N") | ||
38 | #define KABC_FMTTAG_company QString("%cm") | ||
39 | #define KABC_FMTTAG_COMPANY QString("%CM") | ||
40 | #define KABC_FMTTAG_pobox QString("%p") | ||
41 | #define KABC_FMTTAG_street QString("%s") | ||
42 | #define KABC_FMTTAG_STREET QString("%S") | ||
43 | #define KABC_FMTTAG_zipcode QString("%z") | ||
44 | #define KABC_FMTTAG_location QString("%l") | ||
45 | #define KABC_FMTTAG_LOCATION QString("%L") | ||
46 | #define KABC_FMTTAG_region QString("%r") | ||
47 | #define KABC_FMTTAG_REGION QString("%R") | ||
48 | #define KABC_FMTTAG_newline QString("\\n") | ||
49 | #define KABC_FMTTAG_condcomma QString("%,") | ||
50 | #define KABC_FMTTAG_condwhite QString("%w") | ||
51 | #define KABC_FMTTAG_purgeempty QString("%0") | ||
52 | |||
53 | namespace KABC { | ||
54 | |||
55 | /** | ||
56 | @short Postal address information. | ||
57 | |||
58 | This class represents information about a postal address. | ||
59 | */ | ||
60 | class Address | ||
61 | { | ||
62 | friend QDataStream &operator<<( QDataStream &, const Address & ); | ||
63 | friend QDataStream &operator>>( QDataStream &, Address & ); | ||
64 | |||
65 | public: | ||
66 | /** | ||
67 | List of addresses. | ||
68 | */ | ||
69 | typedef QValueList<Address> List; | ||
70 | typedef QValueList<int> TypeList; | ||
71 | |||
72 | /** | ||
73 | Address types: | ||
74 | |||
75 | @li @p Dom - domestic | ||
76 | @li @p Intl - international | ||
77 | @li @p Postal - postal | ||
78 | @li @p Parcel - parcel | ||
79 | @li @p Home - home address | ||
80 | @li @p Work - address at work | ||
81 | @li @p Pref - preferred address | ||
82 | */ | ||
83 | enum Type { Dom = 1, Intl = 2, Postal = 4, Parcel = 8, Home = 16, Work = 32, | ||
84 | Pref = 64 }; | ||
85 | |||
86 | /** | ||
87 | Constructor that creates an empty Address, which is initialized | ||
88 | with a unique id (see @ref id()). | ||
89 | */ | ||
90 | Address(); | ||
91 | |||
92 | /** | ||
93 | This is like @ref Address() just above, with the difference | ||
94 | that you can specify the type. | ||
95 | */ | ||
96 | Address( int ); | ||
97 | |||
98 | bool operator==( const Address & ) const; | ||
99 | bool operator!=( const Address & ) const; | ||
100 | |||
101 | /** | ||
102 | Returns true, if the address is empty. | ||
103 | */ | ||
104 | bool isEmpty() const; | ||
105 | |||
106 | /** | ||
107 | Clears all entries of the address. | ||
108 | */ | ||
109 | void clear(); | ||
110 | |||
111 | /** | ||
112 | Sets the unique id. | ||
113 | */ | ||
114 | void setId( const QString & ); | ||
115 | |||
116 | /* | ||
117 | Returns the unique id. | ||
118 | */ | ||
119 | QString id() const; | ||
120 | |||
121 | /** | ||
122 | Sets the type of address. See enum for definiton of types. | ||
123 | |||
124 | @param type type, can be a bitwise or of multiple types. | ||
125 | */ | ||
126 | void setType( int type ); | ||
127 | |||
128 | /** | ||
129 | Returns the type of address. Can be a bitwise or of multiple types. | ||
130 | */ | ||
131 | int type() const; | ||
132 | |||
133 | /** | ||
134 | Returns a translated string of all types the address has. | ||
135 | */ | ||
136 | QString typeLabel() const; | ||
137 | |||
138 | /** | ||
139 | Sets the post office box. | ||
140 | */ | ||
141 | void setPostOfficeBox( const QString & ); | ||
142 | |||
143 | /** | ||
144 | Returns the post office box. | ||
145 | */ | ||
146 | QString postOfficeBox() const; | ||
147 | |||
148 | /** | ||
149 | Returns the translated label for post office box field. | ||
150 | */ | ||
151 | static QString postOfficeBoxLabel(); | ||
152 | |||
153 | /** | ||
154 | Sets the extended address information. | ||
155 | */ | ||
156 | void setExtended( const QString & ); | ||
157 | |||
158 | /** | ||
159 | Returns the extended address information. | ||
160 | */ | ||
161 | QString extended() const; | ||
162 | |||
163 | /** | ||
164 | Returns the translated label for extended field. | ||
165 | */ | ||
166 | static QString extendedLabel(); | ||
167 | |||
168 | /** | ||
169 | Sets the street (including number). | ||
170 | */ | ||
171 | void setStreet( const QString & ); | ||
172 | |||
173 | /** | ||
174 | Returns the street. | ||
175 | */ | ||
176 | QString street() const; | ||
177 | |||
178 | /** | ||
179 | Returns the translated label for street field. | ||
180 | */ | ||
181 | static QString streetLabel(); | ||
182 | |||
183 | /** | ||
184 | Sets the locality, e.g. city. | ||
185 | */ | ||
186 | void setLocality( const QString & ); | ||
187 | |||
188 | /** | ||
189 | Returns the locality. | ||
190 | */ | ||
191 | QString locality() const; | ||
192 | |||
193 | /** | ||
194 | Returns the translated label for locality field. | ||
195 | */ | ||
196 | static QString localityLabel(); | ||
197 | |||
198 | /** | ||
199 | Sets the region, e.g. state. | ||
200 | */ | ||
201 | void setRegion( const QString & ); | ||
202 | |||
203 | /** | ||
204 | Returns the region. | ||
205 | */ | ||
206 | QString region() const; | ||
207 | |||
208 | /** | ||
209 | Returns the translated label for region field. | ||
210 | */ | ||
211 | static QString regionLabel(); | ||
212 | |||
213 | /** | ||
214 | Sets the postal code. | ||
215 | */ | ||
216 | void setPostalCode( const QString & ); | ||
217 | |||
218 | /** | ||
219 | Returns the postal code. | ||
220 | */ | ||
221 | QString postalCode() const; | ||
222 | |||
223 | /** | ||
224 | Returns the translated label for postal code field. | ||
225 | */ | ||
226 | static QString postalCodeLabel(); | ||
227 | |||
228 | /** | ||
229 | Sets the country. | ||
230 | */ | ||
231 | void setCountry( const QString & ); | ||
232 | |||
233 | /** | ||
234 | Returns the country. | ||
235 | */ | ||
236 | QString country() const; | ||
237 | |||
238 | /** | ||
239 | Returns the translated label for country field. | ||
240 | */ | ||
241 | static QString countryLabel(); | ||
242 | |||
243 | /** | ||
244 | Sets the delivery label. This is the literal text to be used as label. | ||
245 | */ | ||
246 | void setLabel( const QString & ); | ||
247 | |||
248 | /** | ||
249 | Returns the delivery label. | ||
250 | */ | ||
251 | QString label() const; | ||
252 | |||
253 | /** | ||
254 | Returns the translated label for delivery label field. | ||
255 | */ | ||
256 | static QString labelLabel(); | ||
257 | |||
258 | /** | ||
259 | Returns the list of available types. | ||
260 | */ | ||
261 | static TypeList typeList(); | ||
262 | |||
263 | /** | ||
264 | Returns the translated label for a special type. | ||
265 | */ | ||
266 | static QString typeLabel( int type ); | ||
267 | |||
268 | /** | ||
269 | Used for debug output. | ||
270 | */ | ||
271 | void dump() const; | ||
272 | |||
273 | /** | ||
274 | Returns this address formatted according to the country-specific | ||
275 | address formatting rules. The formatting rules applied depend on | ||
276 | either the addresses {@link #country country} field, or (if the | ||
277 | latter is empty) on the system country setting. If companyName is | ||
278 | provided, an available business address format will be preferred. | ||
279 | |||
280 | @param realName the formatted name of the contact | ||
281 | @param orgaName the name of the organization or company | ||
282 | @return the formatted address (containing newline characters) | ||
283 | */ | ||
284 | QString formattedAddress( const QString &realName=QString::null | ||
285 | , const QString &orgaName=QString::null ) const; | ||
286 | |||
287 | /** | ||
288 | Returns ISO code for a localized country name. Only localized country | ||
289 | names will be understood. This might be replaced by a KLocale method in | ||
290 | the future. | ||
291 | @param cname name of the country | ||
292 | @return two digit ISO code | ||
293 | */ | ||
294 | static QString countryToISO( const QString &cname ); | ||
295 | |||
296 | /** | ||
297 | Returns a localized country name for a ISO code. | ||
298 | This might be replaced by a KLocale method in the future. | ||
299 | @param ISOname two digit ISO code | ||
300 | @return localized name of the country | ||
301 | @since 3.2 | ||
302 | */ | ||
303 | static QString ISOtoCountry( const QString &ISOname ); | ||
304 | |||
305 | private: | ||
306 | /** | ||
307 | Parses a snippet of an address template | ||
308 | @param tsection the template string to be parsed | ||
309 | @param result QString reference in which the result will be stored | ||
310 | @return true if at least one tag evaluated positively, else false | ||
311 | */ | ||
312 | bool parseAddressTemplateSection( const QString &tsection | ||
313 | , QString &result | ||
314 | , const QString &realName | ||
315 | , const QString &orgaName ) const; | ||
316 | |||
317 | /** | ||
318 | Finds the balanced closing bracket starting from the opening bracket at | ||
319 | pos in tsection. | ||
320 | @return position of closing bracket, -1 for unbalanced brackets | ||
321 | */ | ||
322 | int findBalancedBracket( const QString &tsection, int pos ) const; | ||
323 | |||
324 | bool mEmpty; | ||
325 | |||
326 | QString mId; | ||
327 | int mType; | ||
328 | |||
329 | QString mPostOfficeBox; | ||
330 | QString mExtended; | ||
331 | QString mStreet; | ||
332 | QString mLocality; | ||
333 | QString mRegion; | ||
334 | QString mPostalCode; | ||
335 | QString mCountry; | ||
336 | QString mLabel; | ||
337 | |||
338 | static QMap<QString, QString> mISOMap; | ||
339 | }; | ||
340 | |||
341 | QDataStream &operator<<( QDataStream &, const Address & ); | ||
342 | QDataStream &operator>>( QDataStream &, Address & ); | ||
343 | |||
344 | } | ||
345 | |||
346 | #endif | ||
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp new file mode 100644 index 0000000..203efc2 --- a/dev/null +++ b/kabc/addressbook.cpp | |||
@@ -0,0 +1,655 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KAB_EMBEDDED | ||
29 | |||
30 | #include <qfile.h> | ||
31 | #include <qregexp.h> | ||
32 | #include <qtimer.h> | ||
33 | |||
34 | #include <kapplication.h> | ||
35 | #include <kinstance.h> | ||
36 | #include <kstandarddirs.h> | ||
37 | |||
38 | #include "errorhandler.h" | ||
39 | |||
40 | #else //KAB_EMBEDDED | ||
41 | #include <qptrlist.h> | ||
42 | #endif //KAB_EMBEDDED | ||
43 | |||
44 | #include <kglobal.h> | ||
45 | #include <klocale.h> | ||
46 | #include <kdebug.h> | ||
47 | #include "addressbook.h" | ||
48 | #include "resource.h" | ||
49 | |||
50 | #ifndef KAB_EMBEDDED | ||
51 | #include "addressbook.moc" | ||
52 | #endif //KAB_EMBEDDED | ||
53 | |||
54 | using namespace KABC; | ||
55 | |||
56 | struct AddressBook::AddressBookData | ||
57 | { | ||
58 | Addressee::List mAddressees; | ||
59 | Addressee::List mRemovedAddressees; | ||
60 | Field::List mAllFields; | ||
61 | KConfig *mConfig; | ||
62 | KRES::Manager<Resource> *mManager; | ||
63 | #ifndef KAB_EMBEDDED | ||
64 | ErrorHandler *mErrorHandler; | ||
65 | #endif //KAB_EMBEDDED | ||
66 | }; | ||
67 | |||
68 | struct AddressBook::Iterator::IteratorData | ||
69 | { | ||
70 | Addressee::List::Iterator mIt; | ||
71 | }; | ||
72 | |||
73 | struct AddressBook::ConstIterator::ConstIteratorData | ||
74 | { | ||
75 | Addressee::List::ConstIterator mIt; | ||
76 | }; | ||
77 | |||
78 | AddressBook::Iterator::Iterator() | ||
79 | { | ||
80 | d = new IteratorData; | ||
81 | } | ||
82 | |||
83 | AddressBook::Iterator::Iterator( const AddressBook::Iterator &i ) | ||
84 | { | ||
85 | d = new IteratorData; | ||
86 | d->mIt = i.d->mIt; | ||
87 | } | ||
88 | |||
89 | AddressBook::Iterator &AddressBook::Iterator::operator=( const AddressBook::Iterator &i ) | ||
90 | { | ||
91 | if( this == &i ) return *this; // guard against self assignment | ||
92 | delete d; // delete the old data the Iterator was completely constructed before | ||
93 | d = new IteratorData; | ||
94 | d->mIt = i.d->mIt; | ||
95 | return *this; | ||
96 | } | ||
97 | |||
98 | AddressBook::Iterator::~Iterator() | ||
99 | { | ||
100 | delete d; | ||
101 | } | ||
102 | |||
103 | const Addressee &AddressBook::Iterator::operator*() const | ||
104 | { | ||
105 | return *(d->mIt); | ||
106 | } | ||
107 | |||
108 | Addressee &AddressBook::Iterator::operator*() | ||
109 | { | ||
110 | return *(d->mIt); | ||
111 | } | ||
112 | |||
113 | Addressee *AddressBook::Iterator::operator->() | ||
114 | { | ||
115 | return &(*(d->mIt)); | ||
116 | } | ||
117 | |||
118 | AddressBook::Iterator &AddressBook::Iterator::operator++() | ||
119 | { | ||
120 | (d->mIt)++; | ||
121 | return *this; | ||
122 | } | ||
123 | |||
124 | AddressBook::Iterator &AddressBook::Iterator::operator++(int) | ||
125 | { | ||
126 | (d->mIt)++; | ||
127 | return *this; | ||
128 | } | ||
129 | |||
130 | AddressBook::Iterator &AddressBook::Iterator::operator--() | ||
131 | { | ||
132 | (d->mIt)--; | ||
133 | return *this; | ||
134 | } | ||
135 | |||
136 | AddressBook::Iterator &AddressBook::Iterator::operator--(int) | ||
137 | { | ||
138 | (d->mIt)--; | ||
139 | return *this; | ||
140 | } | ||
141 | |||
142 | bool AddressBook::Iterator::operator==( const Iterator &it ) | ||
143 | { | ||
144 | return ( d->mIt == it.d->mIt ); | ||
145 | } | ||
146 | |||
147 | bool AddressBook::Iterator::operator!=( const Iterator &it ) | ||
148 | { | ||
149 | return ( d->mIt != it.d->mIt ); | ||
150 | } | ||
151 | |||
152 | |||
153 | AddressBook::ConstIterator::ConstIterator() | ||
154 | { | ||
155 | d = new ConstIteratorData; | ||
156 | } | ||
157 | |||
158 | AddressBook::ConstIterator::ConstIterator( const AddressBook::ConstIterator &i ) | ||
159 | { | ||
160 | d = new ConstIteratorData; | ||
161 | d->mIt = i.d->mIt; | ||
162 | } | ||
163 | |||
164 | AddressBook::ConstIterator &AddressBook::ConstIterator::operator=( const AddressBook::ConstIterator &i ) | ||
165 | { | ||
166 | if( this == &i ) return *this; // guard for self assignment | ||
167 | delete d; // delete the old data because the Iterator was really constructed before | ||
168 | d = new ConstIteratorData; | ||
169 | d->mIt = i.d->mIt; | ||
170 | return *this; | ||
171 | } | ||
172 | |||
173 | AddressBook::ConstIterator::~ConstIterator() | ||
174 | { | ||
175 | delete d; | ||
176 | } | ||
177 | |||
178 | const Addressee &AddressBook::ConstIterator::operator*() const | ||
179 | { | ||
180 | return *(d->mIt); | ||
181 | } | ||
182 | |||
183 | const Addressee* AddressBook::ConstIterator::operator->() const | ||
184 | { | ||
185 | return &(*(d->mIt)); | ||
186 | } | ||
187 | |||
188 | AddressBook::ConstIterator &AddressBook::ConstIterator::operator++() | ||
189 | { | ||
190 | (d->mIt)++; | ||
191 | return *this; | ||
192 | } | ||
193 | |||
194 | AddressBook::ConstIterator &AddressBook::ConstIterator::operator++(int) | ||
195 | { | ||
196 | (d->mIt)++; | ||
197 | return *this; | ||
198 | } | ||
199 | |||
200 | AddressBook::ConstIterator &AddressBook::ConstIterator::operator--() | ||
201 | { | ||
202 | (d->mIt)--; | ||
203 | return *this; | ||
204 | } | ||
205 | |||
206 | AddressBook::ConstIterator &AddressBook::ConstIterator::operator--(int) | ||
207 | { | ||
208 | (d->mIt)--; | ||
209 | return *this; | ||
210 | } | ||
211 | |||
212 | bool AddressBook::ConstIterator::operator==( const ConstIterator &it ) | ||
213 | { | ||
214 | return ( d->mIt == it.d->mIt ); | ||
215 | } | ||
216 | |||
217 | bool AddressBook::ConstIterator::operator!=( const ConstIterator &it ) | ||
218 | { | ||
219 | return ( d->mIt != it.d->mIt ); | ||
220 | } | ||
221 | |||
222 | |||
223 | AddressBook::AddressBook() | ||
224 | { | ||
225 | init(0); | ||
226 | } | ||
227 | |||
228 | AddressBook::AddressBook( const QString &config ) | ||
229 | { | ||
230 | init(config); | ||
231 | } | ||
232 | |||
233 | void AddressBook::init(const QString &config) | ||
234 | { | ||
235 | d = new AddressBookData; | ||
236 | if (config != 0) { | ||
237 | d->mConfig = new KConfig( config ); | ||
238 | // qDebug("AddressBook::init 1 config=%s",config.latin1() ); | ||
239 | } | ||
240 | else { | ||
241 | d->mConfig = 0; | ||
242 | // qDebug("AddressBook::init 1 config=0"); | ||
243 | } | ||
244 | |||
245 | #ifndef KAB_EMBEDDED | ||
246 | d->mErrorHandler = 0; | ||
247 | #endif //KAB_EMBEDDED | ||
248 | d->mManager = new KRES::Manager<Resource>( "contact" ); | ||
249 | d->mManager->readConfig( d->mConfig ); | ||
250 | } | ||
251 | |||
252 | AddressBook::~AddressBook() | ||
253 | { | ||
254 | delete d->mConfig; d->mConfig = 0; | ||
255 | delete d->mManager; d->mManager = 0; | ||
256 | #ifndef KAB_EMBEDDED | ||
257 | delete d->mErrorHandler; d->mErrorHandler = 0; | ||
258 | #endif //KAB_EMBEDDED | ||
259 | delete d; d = 0; | ||
260 | } | ||
261 | |||
262 | bool AddressBook::load() | ||
263 | { | ||
264 | kdDebug(5700) << "AddressBook::load()" << endl; | ||
265 | |||
266 | clear(); | ||
267 | |||
268 | KRES::Manager<Resource>::ActiveIterator it; | ||
269 | bool ok = true; | ||
270 | for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) | ||
271 | if ( !(*it)->load() ) { | ||
272 | error( i18n("Unable to load resource '%1'").arg( (*it)->resourceName() ) ); | ||
273 | ok = false; | ||
274 | } | ||
275 | |||
276 | // mark all addressees as unchanged | ||
277 | Addressee::List::Iterator addrIt; | ||
278 | for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt ) | ||
279 | (*addrIt).setChanged( false ); | ||
280 | |||
281 | return ok; | ||
282 | } | ||
283 | |||
284 | bool AddressBook::save( Ticket *ticket ) | ||
285 | { | ||
286 | kdDebug(5700) << "AddressBook::save()"<< endl; | ||
287 | |||
288 | if ( ticket->resource() ) { | ||
289 | deleteRemovedAddressees(); | ||
290 | |||
291 | return ticket->resource()->save( ticket ); | ||
292 | } | ||
293 | |||
294 | return false; | ||
295 | } | ||
296 | |||
297 | AddressBook::Iterator AddressBook::begin() | ||
298 | { | ||
299 | Iterator it = Iterator(); | ||
300 | it.d->mIt = d->mAddressees.begin(); | ||
301 | return it; | ||
302 | } | ||
303 | |||
304 | AddressBook::ConstIterator AddressBook::begin() const | ||
305 | { | ||
306 | ConstIterator it = ConstIterator(); | ||
307 | it.d->mIt = d->mAddressees.begin(); | ||
308 | return it; | ||
309 | } | ||
310 | |||
311 | AddressBook::Iterator AddressBook::end() | ||
312 | { | ||
313 | Iterator it = Iterator(); | ||
314 | it.d->mIt = d->mAddressees.end(); | ||
315 | return it; | ||
316 | } | ||
317 | |||
318 | AddressBook::ConstIterator AddressBook::end() const | ||
319 | { | ||
320 | ConstIterator it = ConstIterator(); | ||
321 | it.d->mIt = d->mAddressees.end(); | ||
322 | return it; | ||
323 | } | ||
324 | |||
325 | void AddressBook::clear() | ||
326 | { | ||
327 | d->mAddressees.clear(); | ||
328 | } | ||
329 | |||
330 | Ticket *AddressBook::requestSaveTicket( Resource *resource ) | ||
331 | { | ||
332 | kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl; | ||
333 | |||
334 | if ( !resource ) | ||
335 | { | ||
336 | qDebug("AddressBook::requestSaveTicket no resource" ); | ||
337 | resource = standardResource(); | ||
338 | } | ||
339 | |||
340 | KRES::Manager<Resource>::ActiveIterator it; | ||
341 | for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { | ||
342 | if ( (*it) == resource ) { | ||
343 | if ( (*it)->readOnly() || !(*it)->isOpen() ) | ||
344 | return 0; | ||
345 | else | ||
346 | return (*it)->requestSaveTicket(); | ||
347 | } | ||
348 | } | ||
349 | |||
350 | return 0; | ||
351 | } | ||
352 | |||
353 | void AddressBook::insertAddressee( const Addressee &a ) | ||
354 | { | ||
355 | Addressee::List::Iterator it; | ||
356 | for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) { | ||
357 | if ( a.uid() == (*it).uid() ) { | ||
358 | bool changed = false; | ||
359 | Addressee addr = a; | ||
360 | if ( addr != (*it) ) | ||
361 | changed = true; | ||
362 | |||
363 | (*it) = a; | ||
364 | if ( (*it).resource() == 0 ) | ||
365 | (*it).setResource( standardResource() ); | ||
366 | |||
367 | if ( changed ) { | ||
368 | (*it).setRevision( QDateTime::currentDateTime() ); | ||
369 | (*it).setChanged( true ); | ||
370 | } | ||
371 | |||
372 | return; | ||
373 | } | ||
374 | } | ||
375 | d->mAddressees.append( a ); | ||
376 | Addressee& addr = d->mAddressees.last(); | ||
377 | if ( addr.resource() == 0 ) | ||
378 | addr.setResource( standardResource() ); | ||
379 | |||
380 | addr.setChanged( true ); | ||
381 | } | ||
382 | |||
383 | void AddressBook::removeAddressee( const Addressee &a ) | ||
384 | { | ||
385 | Iterator it; | ||
386 | for ( it = begin(); it != end(); ++it ) { | ||
387 | if ( a.uid() == (*it).uid() ) { | ||
388 | removeAddressee( it ); | ||
389 | return; | ||
390 | } | ||
391 | } | ||
392 | } | ||
393 | |||
394 | void AddressBook::removeAddressee( const Iterator &it ) | ||
395 | { | ||
396 | d->mRemovedAddressees.append( (*it) ); | ||
397 | d->mAddressees.remove( it.d->mIt ); | ||
398 | } | ||
399 | |||
400 | AddressBook::Iterator AddressBook::find( const Addressee &a ) | ||
401 | { | ||
402 | Iterator it; | ||
403 | for ( it = begin(); it != end(); ++it ) { | ||
404 | if ( a.uid() == (*it).uid() ) { | ||
405 | return it; | ||
406 | } | ||
407 | } | ||
408 | return end(); | ||
409 | } | ||
410 | |||
411 | Addressee AddressBook::findByUid( const QString &uid ) | ||
412 | { | ||
413 | Iterator it; | ||
414 | for ( it = begin(); it != end(); ++it ) { | ||
415 | if ( uid == (*it).uid() ) { | ||
416 | return *it; | ||
417 | } | ||
418 | } | ||
419 | return Addressee(); | ||
420 | } | ||
421 | |||
422 | Addressee::List AddressBook::allAddressees() | ||
423 | { | ||
424 | return d->mAddressees; | ||
425 | } | ||
426 | |||
427 | Addressee::List AddressBook::findByName( const QString &name ) | ||
428 | { | ||
429 | Addressee::List results; | ||
430 | |||
431 | Iterator it; | ||
432 | for ( it = begin(); it != end(); ++it ) { | ||
433 | if ( name == (*it).name() ) { | ||
434 | results.append( *it ); | ||
435 | } | ||
436 | } | ||
437 | |||
438 | return results; | ||
439 | } | ||
440 | |||
441 | Addressee::List AddressBook::findByEmail( const QString &email ) | ||
442 | { | ||
443 | Addressee::List results; | ||
444 | QStringList mailList; | ||
445 | |||
446 | Iterator it; | ||
447 | for ( it = begin(); it != end(); ++it ) { | ||
448 | mailList = (*it).emails(); | ||
449 | for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) { | ||
450 | if ( email == (*ite) ) { | ||
451 | results.append( *it ); | ||
452 | } | ||
453 | } | ||
454 | } | ||
455 | |||
456 | return results; | ||
457 | } | ||
458 | |||
459 | Addressee::List AddressBook::findByCategory( const QString &category ) | ||
460 | { | ||
461 | Addressee::List results; | ||
462 | |||
463 | Iterator it; | ||
464 | for ( it = begin(); it != end(); ++it ) { | ||
465 | if ( (*it).hasCategory( category) ) { | ||
466 | results.append( *it ); | ||
467 | } | ||
468 | } | ||
469 | |||
470 | return results; | ||
471 | } | ||
472 | |||
473 | void AddressBook::dump() const | ||
474 | { | ||
475 | kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl; | ||
476 | |||
477 | ConstIterator it; | ||
478 | for( it = begin(); it != end(); ++it ) { | ||
479 | (*it).dump(); | ||
480 | } | ||
481 | |||
482 | kdDebug(5700) << "AddressBook::dump() --- end ---" << endl; | ||
483 | } | ||
484 | |||
485 | QString AddressBook::identifier() | ||
486 | { | ||
487 | QStringList identifier; | ||
488 | |||
489 | |||
490 | KRES::Manager<Resource>::ActiveIterator it; | ||
491 | for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { | ||
492 | if ( !(*it)->identifier().isEmpty() ) | ||
493 | identifier.append( (*it)->identifier() ); | ||
494 | } | ||
495 | |||
496 | return identifier.join( ":" ); | ||
497 | } | ||
498 | |||
499 | Field::List AddressBook::fields( int category ) | ||
500 | { | ||
501 | if ( d->mAllFields.isEmpty() ) { | ||
502 | d->mAllFields = Field::allFields(); | ||
503 | } | ||
504 | |||
505 | if ( category == Field::All ) return d->mAllFields; | ||
506 | |||
507 | Field::List result; | ||
508 | Field::List::ConstIterator it; | ||
509 | for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) { | ||
510 | if ( (*it)->category() & category ) result.append( *it ); | ||
511 | } | ||
512 | |||
513 | return result; | ||
514 | } | ||
515 | |||
516 | bool AddressBook::addCustomField( const QString &label, int category, | ||
517 | const QString &key, const QString &app ) | ||
518 | { | ||
519 | if ( d->mAllFields.isEmpty() ) { | ||
520 | d->mAllFields = Field::allFields(); | ||
521 | } | ||
522 | #ifndef KAB_EMBEDDED | ||
523 | QString a = app.isNull() ? KGlobal::instance()->instanceName() : app; | ||
524 | #else //KAB_EMBEDDED | ||
525 | QString a = app.isNull() ? KGlobal::getAppName() : app; | ||
526 | #endif //KAB_EMBEDDED | ||
527 | |||
528 | QString k = key.isNull() ? label : key; | ||
529 | |||
530 | Field *field = Field::createCustomField( label, category, k, a ); | ||
531 | |||
532 | if ( !field ) return false; | ||
533 | |||
534 | d->mAllFields.append( field ); | ||
535 | |||
536 | return true; | ||
537 | } | ||
538 | |||
539 | QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab ) | ||
540 | { | ||
541 | if (!ab.d) return s; | ||
542 | |||
543 | return s << ab.d->mAddressees; | ||
544 | } | ||
545 | |||
546 | QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab ) | ||
547 | { | ||
548 | if (!ab.d) return s; | ||
549 | |||
550 | s >> ab.d->mAddressees; | ||
551 | |||
552 | return s; | ||
553 | } | ||
554 | |||
555 | bool AddressBook::addResource( Resource *resource ) | ||
556 | { | ||
557 | qDebug("AddressBook::addResource 1"); | ||
558 | |||
559 | if ( !resource->open() ) { | ||
560 | kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl; | ||
561 | return false; | ||
562 | } | ||
563 | |||
564 | resource->setAddressBook( this ); | ||
565 | |||
566 | d->mManager->add( resource ); | ||
567 | return true; | ||
568 | } | ||
569 | |||
570 | bool AddressBook::removeResource( Resource *resource ) | ||
571 | { | ||
572 | resource->close(); | ||
573 | |||
574 | if ( resource == standardResource() ) | ||
575 | d->mManager->setStandardResource( 0 ); | ||
576 | |||
577 | resource->setAddressBook( 0 ); | ||
578 | |||
579 | d->mManager->remove( resource ); | ||
580 | return true; | ||
581 | } | ||
582 | |||
583 | QPtrList<Resource> AddressBook::resources() | ||
584 | { | ||
585 | QPtrList<Resource> list; | ||
586 | |||
587 | // qDebug("AddressBook::resources() 1"); | ||
588 | |||
589 | KRES::Manager<Resource>::ActiveIterator it; | ||
590 | for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) | ||
591 | list.append( *it ); | ||
592 | |||
593 | return list; | ||
594 | } | ||
595 | |||
596 | #ifndef KAB_EMBEDDED | ||
597 | void AddressBook::setErrorHandler( ErrorHandler *handler ) | ||
598 | { | ||
599 | delete d->mErrorHandler; | ||
600 | d->mErrorHandler = handler; | ||
601 | } | ||
602 | #endif //KAB_EMBEDDED | ||
603 | |||
604 | void AddressBook::error( const QString& msg ) | ||
605 | { | ||
606 | #ifndef KAB_EMBEDDED | ||
607 | if ( !d->mErrorHandler ) // create default error handler | ||
608 | d->mErrorHandler = new ConsoleErrorHandler; | ||
609 | |||
610 | if ( d->mErrorHandler ) | ||
611 | d->mErrorHandler->error( msg ); | ||
612 | else | ||
613 | kdError(5700) << "no error handler defined" << endl; | ||
614 | #else //KAB_EMBEDDED | ||
615 | kdDebug(5700) << "msg" << endl; | ||
616 | qDebug(msg); | ||
617 | #endif //KAB_EMBEDDED | ||
618 | } | ||
619 | |||
620 | void AddressBook::deleteRemovedAddressees() | ||
621 | { | ||
622 | Addressee::List::Iterator it; | ||
623 | for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) { | ||
624 | Resource *resource = (*it).resource(); | ||
625 | if ( resource && !resource->readOnly() && resource->isOpen() ) | ||
626 | resource->removeAddressee( *it ); | ||
627 | } | ||
628 | |||
629 | d->mRemovedAddressees.clear(); | ||
630 | } | ||
631 | |||
632 | void AddressBook::setStandardResource( Resource *resource ) | ||
633 | { | ||
634 | // qDebug("AddressBook::setStandardResource 1"); | ||
635 | d->mManager->setStandardResource( resource ); | ||
636 | } | ||
637 | |||
638 | Resource *AddressBook::standardResource() | ||
639 | { | ||
640 | return d->mManager->standardResource(); | ||
641 | } | ||
642 | |||
643 | KRES::Manager<Resource> *AddressBook::resourceManager() | ||
644 | { | ||
645 | return d->mManager; | ||
646 | } | ||
647 | |||
648 | void AddressBook::cleanUp() | ||
649 | { | ||
650 | KRES::Manager<Resource>::ActiveIterator it; | ||
651 | for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { | ||
652 | if ( !(*it)->readOnly() && (*it)->isOpen() ) | ||
653 | (*it)->cleanUp(); | ||
654 | } | ||
655 | } | ||
diff --git a/kabc/addressbook.h b/kabc/addressbook.h new file mode 100644 index 0000000..3383fc0 --- a/dev/null +++ b/kabc/addressbook.h | |||
@@ -0,0 +1,337 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_ADDRESSBOOK_H | ||
29 | #define KABC_ADDRESSBOOK_H | ||
30 | |||
31 | #include <qobject.h> | ||
32 | |||
33 | #include <kresources/manager.h> | ||
34 | #include <qptrlist.h> | ||
35 | |||
36 | #ifndef KAB_EMBEDDED | ||
37 | |||
38 | #else //KAB_EMBEDDED | ||
39 | #endif //KAB_EMBEDDED | ||
40 | |||
41 | |||
42 | #include "addressee.h" | ||
43 | #include "field.h" | ||
44 | |||
45 | namespace KABC { | ||
46 | |||
47 | class ErrorHandler; | ||
48 | class Resource; | ||
49 | class Ticket; | ||
50 | |||
51 | /** | ||
52 | @short Address Book | ||
53 | |||
54 | This class provides access to a collection of address book entries. | ||
55 | */ | ||
56 | class AddressBook : public QObject | ||
57 | { | ||
58 | Q_OBJECT | ||
59 | |||
60 | friend QDataStream &operator<<( QDataStream &, const AddressBook & ); | ||
61 | friend QDataStream &operator>>( QDataStream &, AddressBook & ); | ||
62 | friend class StdAddressBook; | ||
63 | |||
64 | public: | ||
65 | /** | ||
66 | @short Address Book Iterator | ||
67 | |||
68 | This class provides an iterator for address book entries. | ||
69 | */ | ||
70 | class Iterator | ||
71 | { | ||
72 | public: | ||
73 | Iterator(); | ||
74 | Iterator( const Iterator & ); | ||
75 | ~Iterator(); | ||
76 | |||
77 | Iterator &operator=( const Iterator & ); | ||
78 | const Addressee &operator*() const; | ||
79 | Addressee &operator*(); | ||
80 | Addressee* operator->(); | ||
81 | Iterator &operator++(); | ||
82 | Iterator &operator++(int); | ||
83 | Iterator &operator--(); | ||
84 | Iterator &operator--(int); | ||
85 | bool operator==( const Iterator &it ); | ||
86 | bool operator!=( const Iterator &it ); | ||
87 | |||
88 | struct IteratorData; | ||
89 | IteratorData *d; | ||
90 | }; | ||
91 | |||
92 | /** | ||
93 | @short Address Book Const Iterator | ||
94 | |||
95 | This class provides a const iterator for address book entries. | ||
96 | */ | ||
97 | class ConstIterator | ||
98 | { | ||
99 | public: | ||
100 | ConstIterator(); | ||
101 | ConstIterator( const ConstIterator & ); | ||
102 | ~ConstIterator(); | ||
103 | |||
104 | ConstIterator &operator=( const ConstIterator & ); | ||
105 | const Addressee &operator*() const; | ||
106 | const Addressee* operator->() const; | ||
107 | ConstIterator &operator++(); | ||
108 | ConstIterator &operator++(int); | ||
109 | ConstIterator &operator--(); | ||
110 | ConstIterator &operator--(int); | ||
111 | bool operator==( const ConstIterator &it ); | ||
112 | bool operator!=( const ConstIterator &it ); | ||
113 | |||
114 | struct ConstIteratorData; | ||
115 | ConstIteratorData *d; | ||
116 | }; | ||
117 | |||
118 | /** | ||
119 | Constructs a address book object. | ||
120 | |||
121 | @param format File format class. | ||
122 | */ | ||
123 | AddressBook(); | ||
124 | AddressBook( const QString &config ); | ||
125 | virtual ~AddressBook(); | ||
126 | |||
127 | /** | ||
128 | Requests a ticket for saving the addressbook. Calling this function locks | ||
129 | the addressbook for all other processes. If the address book is already | ||
130 | locked the function returns 0. You need the returned @ref Ticket object | ||
131 | for calling the @ref save() function. | ||
132 | |||
133 | @see save() | ||
134 | */ | ||
135 | Ticket *requestSaveTicket( Resource *resource=0 ); | ||
136 | |||
137 | /** | ||
138 | Load address book from file. | ||
139 | */ | ||
140 | bool load(); | ||
141 | |||
142 | /** | ||
143 | Save address book. The address book is saved to the file, the Ticket | ||
144 | object has been requested for by @ref requestSaveTicket(). | ||
145 | |||
146 | @param ticket a ticket object returned by @ref requestSaveTicket() | ||
147 | */ | ||
148 | bool save( Ticket *ticket ); | ||
149 | |||
150 | /** | ||
151 | Returns a iterator for first entry of address book. | ||
152 | */ | ||
153 | Iterator begin(); | ||
154 | |||
155 | /** | ||
156 | Returns a const iterator for first entry of address book. | ||
157 | */ | ||
158 | ConstIterator begin() const; | ||
159 | |||
160 | /** | ||
161 | Returns a iterator for first entry of address book. | ||
162 | */ | ||
163 | Iterator end(); | ||
164 | |||
165 | /** | ||
166 | Returns a const iterator for first entry of address book. | ||
167 | */ | ||
168 | ConstIterator end() const; | ||
169 | |||
170 | /** | ||
171 | Removes all entries from address book. | ||
172 | */ | ||
173 | void clear(); | ||
174 | |||
175 | /** | ||
176 | Insert an Addressee object into address book. If an object with the same | ||
177 | unique id already exists in the address book it it replaced by the new | ||
178 | one. If not the new object is appended to the address book. | ||
179 | */ | ||
180 | void insertAddressee( const Addressee & ); | ||
181 | |||
182 | /** | ||
183 | Removes entry from the address book. | ||
184 | */ | ||
185 | void removeAddressee( const Addressee & ); | ||
186 | |||
187 | /** | ||
188 | This is like @ref removeAddressee() just above, with the difference that | ||
189 | the first element is a iterator, returned by @ref begin(). | ||
190 | */ | ||
191 | void removeAddressee( const Iterator & ); | ||
192 | |||
193 | /** | ||
194 | Find the specified entry in address book. Returns end(), if the entry | ||
195 | couldn't be found. | ||
196 | */ | ||
197 | Iterator find( const Addressee & ); | ||
198 | |||
199 | /** | ||
200 | Find the entry specified by an unique id. Returns an empty Addressee | ||
201 | object, if the address book does not contain an entry with this id. | ||
202 | */ | ||
203 | Addressee findByUid( const QString & ); | ||
204 | |||
205 | |||
206 | /** | ||
207 | Returns a list of all addressees in the address book. This list can | ||
208 | be sorted with @ref KABC::AddresseeList for example. | ||
209 | */ | ||
210 | Addressee::List allAddressees(); | ||
211 | |||
212 | /** | ||
213 | Find all entries with the specified name in the address book. Returns | ||
214 | an empty list, if no entries could be found. | ||
215 | */ | ||
216 | Addressee::List findByName( const QString & ); | ||
217 | |||
218 | /** | ||
219 | Find all entries with the specified email address in the address book. | ||
220 | Returns an empty list, if no entries could be found. | ||
221 | */ | ||
222 | Addressee::List findByEmail( const QString & ); | ||
223 | |||
224 | /** | ||
225 | Find all entries wich have the specified category in the address book. | ||
226 | Returns an empty list, if no entries could be found. | ||
227 | */ | ||
228 | Addressee::List findByCategory( const QString & ); | ||
229 | |||
230 | /** | ||
231 | Return a string identifying this addressbook. | ||
232 | */ | ||
233 | virtual QString identifier(); | ||
234 | |||
235 | /** | ||
236 | Used for debug output. | ||
237 | */ | ||
238 | void dump() const; | ||
239 | |||
240 | void emitAddressBookLocked() { emit addressBookLocked( this ); } | ||
241 | void emitAddressBookUnlocked() { emit addressBookUnlocked( this ); } | ||
242 | void emitAddressBookChanged() { emit addressBookChanged( this ); } | ||
243 | |||
244 | /** | ||
245 | Return list of all Fields known to the address book which are associated | ||
246 | with the given field category. | ||
247 | */ | ||
248 | Field::List fields( int category = Field::All ); | ||
249 | |||
250 | /** | ||
251 | Add custom field to address book. | ||
252 | |||
253 | @param label User visible label of the field. | ||
254 | @param category Ored list of field categories. | ||
255 | @param key Identifier used as key for reading and writing the field. | ||
256 | @param app String used as application key for reading and writing | ||
257 | the field. | ||
258 | */ | ||
259 | bool addCustomField( const QString &label, int category = Field::All, | ||
260 | const QString &key = QString::null, | ||
261 | const QString &app = QString::null ); | ||
262 | |||
263 | |||
264 | /** | ||
265 | Add address book resource. | ||
266 | */ | ||
267 | bool addResource( Resource * ); | ||
268 | |||
269 | /** | ||
270 | Remove address book resource. | ||
271 | */ | ||
272 | bool removeResource( Resource * ); | ||
273 | |||
274 | /** | ||
275 | Return pointer list of all resources. | ||
276 | */ | ||
277 | QPtrList<Resource> resources(); | ||
278 | |||
279 | /** | ||
280 | Set the @p ErrorHandler, that is used by @ref error() to | ||
281 | provide gui-independend error messages. | ||
282 | */ | ||
283 | void setErrorHandler( ErrorHandler * ); | ||
284 | |||
285 | /** | ||
286 | Shows gui independend error messages. | ||
287 | */ | ||
288 | void error( const QString& ); | ||
289 | |||
290 | /** | ||
291 | Query all resources to clean up their lock files | ||
292 | */ | ||
293 | void cleanUp(); | ||
294 | |||
295 | signals: | ||
296 | /** | ||
297 | Emitted, when the address book has changed on disk. | ||
298 | */ | ||
299 | void addressBookChanged( AddressBook * ); | ||
300 | |||
301 | /** | ||
302 | Emitted, when the address book has been locked for writing. | ||
303 | */ | ||
304 | void addressBookLocked( AddressBook * ); | ||
305 | |||
306 | /** | ||
307 | Emitted, when the address book has been unlocked. | ||
308 | */ | ||
309 | void addressBookUnlocked( AddressBook * ); | ||
310 | |||
311 | protected: | ||
312 | void deleteRemovedAddressees(); | ||
313 | void setStandardResource( Resource * ); | ||
314 | Resource *standardResource(); | ||
315 | KRES::Manager<Resource> *resourceManager(); | ||
316 | |||
317 | private: | ||
318 | #ifndef KAB_EMBEDDED | ||
319 | QPtrList<Resource> mDummy; // Remove in KDE 4 | ||
320 | #endif //KAB_EMBEDDED | ||
321 | |||
322 | #ifdef KAB_EMBEDDED | ||
323 | //US optimization | ||
324 | void init(const QString &config); | ||
325 | #endif //KAB_EMBEDDED | ||
326 | |||
327 | |||
328 | struct AddressBookData; | ||
329 | AddressBookData *d; | ||
330 | }; | ||
331 | |||
332 | QDataStream &operator<<( QDataStream &, const AddressBook & ); | ||
333 | QDataStream &operator>>( QDataStream &, AddressBook & ); | ||
334 | |||
335 | } | ||
336 | |||
337 | #endif | ||
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp new file mode 100644 index 0000000..5cb194a --- a/dev/null +++ b/kabc/addressee.cpp | |||
@@ -0,0 +1,1616 @@ | |||
1 | /*** Warning! This file has been generated by the script makeaddressee ***/ | ||
2 | /* | ||
3 | This file is part of libkabc. | ||
4 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
5 | |||
6 | This library is free software; you can redistribute it and/or | ||
7 | modify it under the terms of the GNU Library General Public | ||
8 | License as published by the Free Software Foundation; either | ||
9 | version 2 of the License, or (at your option) any later version. | ||
10 | |||
11 | This library is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | Library General Public License for more details. | ||
15 | |||
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 | ||
18 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
19 | Boston, MA 02111-1307, USA. | ||
20 | */ | ||
21 | |||
22 | /* | ||
23 | Enhanced Version of the file for platform independent KDE tools. | ||
24 | Copyright (c) 2004 Ulf Schenk | ||
25 | |||
26 | $Id$ | ||
27 | */ | ||
28 | |||
29 | #include <kconfig.h> | ||
30 | |||
31 | #include <ksharedptr.h> | ||
32 | #include <kdebug.h> | ||
33 | #include <kapplication.h> | ||
34 | #include <klocale.h> | ||
35 | //US | ||
36 | #include <kstandarddirs.h> | ||
37 | |||
38 | //US #include "resource.h" | ||
39 | #include "addressee.h" | ||
40 | |||
41 | using namespace KABC; | ||
42 | |||
43 | static bool matchBinaryPattern( int value, int pattern ); | ||
44 | |||
45 | struct Addressee::AddresseeData : public KShared | ||
46 | { | ||
47 | QString uid; | ||
48 | QString name; | ||
49 | QString formattedName; | ||
50 | QString familyName; | ||
51 | QString givenName; | ||
52 | QString additionalName; | ||
53 | QString prefix; | ||
54 | QString suffix; | ||
55 | QString nickName; | ||
56 | QDateTime birthday; | ||
57 | QString mailer; | ||
58 | TimeZone timeZone; | ||
59 | Geo geo; | ||
60 | QString title; | ||
61 | QString role; | ||
62 | QString organization; | ||
63 | QString note; | ||
64 | QString productId; | ||
65 | QDateTime revision; | ||
66 | QString sortString; | ||
67 | KURL url; | ||
68 | Secrecy secrecy; | ||
69 | Picture logo; | ||
70 | Picture photo; | ||
71 | Sound sound; | ||
72 | Agent agent; | ||
73 | |||
74 | PhoneNumber::List phoneNumbers; | ||
75 | Address::List addresses; | ||
76 | Key::List keys; | ||
77 | QStringList emails; | ||
78 | QStringList categories; | ||
79 | QStringList custom; | ||
80 | |||
81 | Resource *resource; | ||
82 | |||
83 | bool empty :1; | ||
84 | bool changed :1; | ||
85 | }; | ||
86 | |||
87 | Addressee::Addressee() | ||
88 | { | ||
89 | mData = new AddresseeData; | ||
90 | mData->empty = true; | ||
91 | mData->changed = false; | ||
92 | mData->resource = 0; | ||
93 | } | ||
94 | |||
95 | Addressee::~Addressee() | ||
96 | { | ||
97 | } | ||
98 | |||
99 | Addressee::Addressee( const Addressee &a ) | ||
100 | { | ||
101 | mData = a.mData; | ||
102 | } | ||
103 | |||
104 | Addressee &Addressee::operator=( const Addressee &a ) | ||
105 | { | ||
106 | mData = a.mData; | ||
107 | return (*this); | ||
108 | } | ||
109 | |||
110 | Addressee Addressee::copy() | ||
111 | { | ||
112 | Addressee a; | ||
113 | *(a.mData) = *mData; | ||
114 | return a; | ||
115 | } | ||
116 | |||
117 | void Addressee::detach() | ||
118 | { | ||
119 | if ( mData.count() == 1 ) return; | ||
120 | *this = copy(); | ||
121 | } | ||
122 | |||
123 | bool Addressee::operator==( const Addressee &a ) const | ||
124 | { | ||
125 | if ( uid() != a.uid() ) return false; | ||
126 | if ( mData->name != a.mData->name ) return false; | ||
127 | if ( mData->formattedName != a.mData->formattedName ) return false; | ||
128 | if ( mData->familyName != a.mData->familyName ) return false; | ||
129 | if ( mData->givenName != a.mData->givenName ) return false; | ||
130 | if ( mData->additionalName != a.mData->additionalName ) return false; | ||
131 | if ( mData->prefix != a.mData->prefix ) return false; | ||
132 | if ( mData->suffix != a.mData->suffix ) return false; | ||
133 | if ( mData->nickName != a.mData->nickName ) return false; | ||
134 | if ( mData->birthday != a.mData->birthday ) return false; | ||
135 | if ( mData->mailer != a.mData->mailer ) return false; | ||
136 | if ( mData->timeZone != a.mData->timeZone ) return false; | ||
137 | if ( mData->geo != a.mData->geo ) return false; | ||
138 | if ( mData->title != a.mData->title ) return false; | ||
139 | if ( mData->role != a.mData->role ) return false; | ||
140 | if ( mData->organization != a.mData->organization ) return false; | ||
141 | if ( mData->note != a.mData->note ) return false; | ||
142 | if ( mData->productId != a.mData->productId ) return false; | ||
143 | if ( mData->revision != a.mData->revision ) return false; | ||
144 | if ( mData->sortString != a.mData->sortString ) return false; | ||
145 | if ( mData->secrecy != a.mData->secrecy ) return false; | ||
146 | if ( mData->logo != a.mData->logo ) return false; | ||
147 | if ( mData->photo != a.mData->photo ) return false; | ||
148 | if ( mData->sound != a.mData->sound ) return false; | ||
149 | if ( mData->agent != a.mData->agent ) return false; | ||
150 | if ( ( mData->url.isValid() || a.mData->url.isValid() ) && | ||
151 | ( mData->url != a.mData->url ) ) return false; | ||
152 | if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false; | ||
153 | if ( mData->addresses != a.mData->addresses ) return false; | ||
154 | if ( mData->keys != a.mData->keys ) return false; | ||
155 | if ( mData->emails != a.mData->emails ) return false; | ||
156 | if ( mData->categories != a.mData->categories ) return false; | ||
157 | if ( mData->custom != a.mData->custom ) return false; | ||
158 | |||
159 | return true; | ||
160 | } | ||
161 | |||
162 | bool Addressee::operator!=( const Addressee &a ) const | ||
163 | { | ||
164 | return !( a == *this ); | ||
165 | } | ||
166 | |||
167 | bool Addressee::isEmpty() const | ||
168 | { | ||
169 | return mData->empty; | ||
170 | } | ||
171 | |||
172 | void Addressee::setUid( const QString &id ) | ||
173 | { | ||
174 | if ( id == mData->uid ) return; | ||
175 | detach(); | ||
176 | mData->empty = false; | ||
177 | mData->uid = id; | ||
178 | } | ||
179 | |||
180 | QString Addressee::uid() const | ||
181 | { | ||
182 | if ( mData->uid.isEmpty() ) | ||
183 | mData->uid = KApplication::randomString( 10 ); | ||
184 | |||
185 | return mData->uid; | ||
186 | } | ||
187 | |||
188 | QString Addressee::uidLabel() | ||
189 | { | ||
190 | return i18n("Unique Identifier"); | ||
191 | } | ||
192 | |||
193 | void Addressee::setName( const QString &name ) | ||
194 | { | ||
195 | if ( name == mData->name ) return; | ||
196 | detach(); | ||
197 | mData->empty = false; | ||
198 | mData->name = name; | ||
199 | } | ||
200 | |||
201 | QString Addressee::name() const | ||
202 | { | ||
203 | return mData->name; | ||
204 | } | ||
205 | |||
206 | QString Addressee::nameLabel() | ||
207 | { | ||
208 | return i18n("Name"); | ||
209 | } | ||
210 | |||
211 | |||
212 | void Addressee::setFormattedName( const QString &formattedName ) | ||
213 | { | ||
214 | if ( formattedName == mData->formattedName ) return; | ||
215 | detach(); | ||
216 | mData->empty = false; | ||
217 | mData->formattedName = formattedName; | ||
218 | } | ||
219 | |||
220 | QString Addressee::formattedName() const | ||
221 | { | ||
222 | return mData->formattedName; | ||
223 | } | ||
224 | |||
225 | QString Addressee::formattedNameLabel() | ||
226 | { | ||
227 | return i18n("Formatted Name"); | ||
228 | } | ||
229 | |||
230 | |||
231 | void Addressee::setFamilyName( const QString &familyName ) | ||
232 | { | ||
233 | if ( familyName == mData->familyName ) return; | ||
234 | detach(); | ||
235 | mData->empty = false; | ||
236 | mData->familyName = familyName; | ||
237 | } | ||
238 | |||
239 | QString Addressee::familyName() const | ||
240 | { | ||
241 | return mData->familyName; | ||
242 | } | ||
243 | |||
244 | QString Addressee::familyNameLabel() | ||
245 | { | ||
246 | return i18n("Family Name"); | ||
247 | } | ||
248 | |||
249 | |||
250 | void Addressee::setGivenName( const QString &givenName ) | ||
251 | { | ||
252 | if ( givenName == mData->givenName ) return; | ||
253 | detach(); | ||
254 | mData->empty = false; | ||
255 | mData->givenName = givenName; | ||
256 | } | ||
257 | |||
258 | QString Addressee::givenName() const | ||
259 | { | ||
260 | return mData->givenName; | ||
261 | } | ||
262 | |||
263 | QString Addressee::givenNameLabel() | ||
264 | { | ||
265 | return i18n("Given Name"); | ||
266 | } | ||
267 | |||
268 | |||
269 | void Addressee::setAdditionalName( const QString &additionalName ) | ||
270 | { | ||
271 | if ( additionalName == mData->additionalName ) return; | ||
272 | detach(); | ||
273 | mData->empty = false; | ||
274 | mData->additionalName = additionalName; | ||
275 | } | ||
276 | |||
277 | QString Addressee::additionalName() const | ||
278 | { | ||
279 | return mData->additionalName; | ||
280 | } | ||
281 | |||
282 | QString Addressee::additionalNameLabel() | ||
283 | { | ||
284 | return i18n("Additional Names"); | ||
285 | } | ||
286 | |||
287 | |||
288 | void Addressee::setPrefix( const QString &prefix ) | ||
289 | { | ||
290 | if ( prefix == mData->prefix ) return; | ||
291 | detach(); | ||
292 | mData->empty = false; | ||
293 | mData->prefix = prefix; | ||
294 | } | ||
295 | |||
296 | QString Addressee::prefix() const | ||
297 | { | ||
298 | return mData->prefix; | ||
299 | } | ||
300 | |||
301 | QString Addressee::prefixLabel() | ||
302 | { | ||
303 | return i18n("Honorific Prefixes"); | ||
304 | } | ||
305 | |||
306 | |||
307 | void Addressee::setSuffix( const QString &suffix ) | ||
308 | { | ||
309 | if ( suffix == mData->suffix ) return; | ||
310 | detach(); | ||
311 | mData->empty = false; | ||
312 | mData->suffix = suffix; | ||
313 | } | ||
314 | |||
315 | QString Addressee::suffix() const | ||
316 | { | ||
317 | return mData->suffix; | ||
318 | } | ||
319 | |||
320 | QString Addressee::suffixLabel() | ||
321 | { | ||
322 | return i18n("Honorific Suffixes"); | ||
323 | } | ||
324 | |||
325 | |||
326 | void Addressee::setNickName( const QString &nickName ) | ||
327 | { | ||
328 | if ( nickName == mData->nickName ) return; | ||
329 | detach(); | ||
330 | mData->empty = false; | ||
331 | mData->nickName = nickName; | ||
332 | } | ||
333 | |||
334 | QString Addressee::nickName() const | ||
335 | { | ||
336 | return mData->nickName; | ||
337 | } | ||
338 | |||
339 | QString Addressee::nickNameLabel() | ||
340 | { | ||
341 | return i18n("Nick Name"); | ||
342 | } | ||
343 | |||
344 | |||
345 | void Addressee::setBirthday( const QDateTime &birthday ) | ||
346 | { | ||
347 | if ( birthday == mData->birthday ) return; | ||
348 | detach(); | ||
349 | mData->empty = false; | ||
350 | mData->birthday = birthday; | ||
351 | } | ||
352 | |||
353 | QDateTime Addressee::birthday() const | ||
354 | { | ||
355 | return mData->birthday; | ||
356 | } | ||
357 | |||
358 | QString Addressee::birthdayLabel() | ||
359 | { | ||
360 | return i18n("Birthday"); | ||
361 | } | ||
362 | |||
363 | |||
364 | QString Addressee::homeAddressStreetLabel() | ||
365 | { | ||
366 | return i18n("Home Address Street"); | ||
367 | } | ||
368 | |||
369 | |||
370 | QString Addressee::homeAddressLocalityLabel() | ||
371 | { | ||
372 | return i18n("Home Address Locality"); | ||
373 | } | ||
374 | |||
375 | |||
376 | QString Addressee::homeAddressRegionLabel() | ||
377 | { | ||
378 | return i18n("Home Address Region"); | ||
379 | } | ||
380 | |||
381 | |||
382 | QString Addressee::homeAddressPostalCodeLabel() | ||
383 | { | ||
384 | return i18n("Home Address Postal Code"); | ||
385 | } | ||
386 | |||
387 | |||
388 | QString Addressee::homeAddressCountryLabel() | ||
389 | { | ||
390 | return i18n("Home Address Country"); | ||
391 | } | ||
392 | |||
393 | |||
394 | QString Addressee::homeAddressLabelLabel() | ||
395 | { | ||
396 | return i18n("Home Address Label"); | ||
397 | } | ||
398 | |||
399 | |||
400 | QString Addressee::businessAddressStreetLabel() | ||
401 | { | ||
402 | return i18n("Business Address Street"); | ||
403 | } | ||
404 | |||
405 | |||
406 | QString Addressee::businessAddressLocalityLabel() | ||
407 | { | ||
408 | return i18n("Business Address Locality"); | ||
409 | } | ||
410 | |||
411 | |||
412 | QString Addressee::businessAddressRegionLabel() | ||
413 | { | ||
414 | return i18n("Business Address Region"); | ||
415 | } | ||
416 | |||
417 | |||
418 | QString Addressee::businessAddressPostalCodeLabel() | ||
419 | { | ||
420 | return i18n("Business Address Postal Code"); | ||
421 | } | ||
422 | |||
423 | |||
424 | QString Addressee::businessAddressCountryLabel() | ||
425 | { | ||
426 | return i18n("Business Address Country"); | ||
427 | } | ||
428 | |||
429 | |||
430 | QString Addressee::businessAddressLabelLabel() | ||
431 | { | ||
432 | return i18n("Business Address Label"); | ||
433 | } | ||
434 | |||
435 | |||
436 | QString Addressee::homePhoneLabel() | ||
437 | { | ||
438 | return i18n("Home Phone"); | ||
439 | } | ||
440 | |||
441 | |||
442 | QString Addressee::businessPhoneLabel() | ||
443 | { | ||
444 | return i18n("Business Phone"); | ||
445 | } | ||
446 | |||
447 | |||
448 | QString Addressee::mobilePhoneLabel() | ||
449 | { | ||
450 | return i18n("Mobile Phone"); | ||
451 | } | ||
452 | |||
453 | |||
454 | QString Addressee::homeFaxLabel() | ||
455 | { | ||
456 | return i18n("Home Fax"); | ||
457 | } | ||
458 | |||
459 | |||
460 | QString Addressee::businessFaxLabel() | ||
461 | { | ||
462 | return i18n("Business Fax"); | ||
463 | } | ||
464 | |||
465 | |||
466 | QString Addressee::carPhoneLabel() | ||
467 | { | ||
468 | return i18n("Car Phone"); | ||
469 | } | ||
470 | |||
471 | |||
472 | QString Addressee::isdnLabel() | ||
473 | { | ||
474 | return i18n("ISDN"); | ||
475 | } | ||
476 | |||
477 | |||
478 | QString Addressee::pagerLabel() | ||
479 | { | ||
480 | return i18n("Pager"); | ||
481 | } | ||
482 | |||
483 | |||
484 | QString Addressee::emailLabel() | ||
485 | { | ||
486 | return i18n("Email Address"); | ||
487 | } | ||
488 | |||
489 | |||
490 | void Addressee::setMailer( const QString &mailer ) | ||
491 | { | ||
492 | if ( mailer == mData->mailer ) return; | ||
493 | detach(); | ||
494 | mData->empty = false; | ||
495 | mData->mailer = mailer; | ||
496 | } | ||
497 | |||
498 | QString Addressee::mailer() const | ||
499 | { | ||
500 | return mData->mailer; | ||
501 | } | ||
502 | |||
503 | QString Addressee::mailerLabel() | ||
504 | { | ||
505 | return i18n("Mail Client"); | ||
506 | } | ||
507 | |||
508 | |||
509 | void Addressee::setTimeZone( const TimeZone &timeZone ) | ||
510 | { | ||
511 | if ( timeZone == mData->timeZone ) return; | ||
512 | detach(); | ||
513 | mData->empty = false; | ||
514 | mData->timeZone = timeZone; | ||
515 | } | ||
516 | |||
517 | TimeZone Addressee::timeZone() const | ||
518 | { | ||
519 | return mData->timeZone; | ||
520 | } | ||
521 | |||
522 | QString Addressee::timeZoneLabel() | ||
523 | { | ||
524 | return i18n("Time Zone"); | ||
525 | } | ||
526 | |||
527 | |||
528 | void Addressee::setGeo( const Geo &geo ) | ||
529 | { | ||
530 | if ( geo == mData->geo ) return; | ||
531 | detach(); | ||
532 | mData->empty = false; | ||
533 | mData->geo = geo; | ||
534 | } | ||
535 | |||
536 | Geo Addressee::geo() const | ||
537 | { | ||
538 | return mData->geo; | ||
539 | } | ||
540 | |||
541 | QString Addressee::geoLabel() | ||
542 | { | ||
543 | return i18n("Geographic Position"); | ||
544 | } | ||
545 | |||
546 | |||
547 | void Addressee::setTitle( const QString &title ) | ||
548 | { | ||
549 | if ( title == mData->title ) return; | ||
550 | detach(); | ||
551 | mData->empty = false; | ||
552 | mData->title = title; | ||
553 | } | ||
554 | |||
555 | QString Addressee::title() const | ||
556 | { | ||
557 | return mData->title; | ||
558 | } | ||
559 | |||
560 | QString Addressee::titleLabel() | ||
561 | { | ||
562 | return i18n("Title"); | ||
563 | } | ||
564 | |||
565 | |||
566 | void Addressee::setRole( const QString &role ) | ||
567 | { | ||
568 | if ( role == mData->role ) return; | ||
569 | detach(); | ||
570 | mData->empty = false; | ||
571 | mData->role = role; | ||
572 | } | ||
573 | |||
574 | QString Addressee::role() const | ||
575 | { | ||
576 | return mData->role; | ||
577 | } | ||
578 | |||
579 | QString Addressee::roleLabel() | ||
580 | { | ||
581 | return i18n("Role"); | ||
582 | } | ||
583 | |||
584 | |||
585 | void Addressee::setOrganization( const QString &organization ) | ||
586 | { | ||
587 | if ( organization == mData->organization ) return; | ||
588 | detach(); | ||
589 | mData->empty = false; | ||
590 | mData->organization = organization; | ||
591 | } | ||
592 | |||
593 | QString Addressee::organization() const | ||
594 | { | ||
595 | return mData->organization; | ||
596 | } | ||
597 | |||
598 | QString Addressee::organizationLabel() | ||
599 | { | ||
600 | return i18n("Organization"); | ||
601 | } | ||
602 | |||
603 | |||
604 | void Addressee::setNote( const QString ¬e ) | ||
605 | { | ||
606 | if ( note == mData->note ) return; | ||
607 | detach(); | ||
608 | mData->empty = false; | ||
609 | mData->note = note; | ||
610 | } | ||
611 | |||
612 | QString Addressee::note() const | ||
613 | { | ||
614 | return mData->note; | ||
615 | } | ||
616 | |||
617 | QString Addressee::noteLabel() | ||
618 | { | ||
619 | return i18n("Note"); | ||
620 | } | ||
621 | |||
622 | |||
623 | void Addressee::setProductId( const QString &productId ) | ||
624 | { | ||
625 | if ( productId == mData->productId ) return; | ||
626 | detach(); | ||
627 | mData->empty = false; | ||
628 | mData->productId = productId; | ||
629 | } | ||
630 | |||
631 | QString Addressee::productId() const | ||
632 | { | ||
633 | return mData->productId; | ||
634 | } | ||
635 | |||
636 | QString Addressee::productIdLabel() | ||
637 | { | ||
638 | return i18n("Product Identifier"); | ||
639 | } | ||
640 | |||
641 | |||
642 | void Addressee::setRevision( const QDateTime &revision ) | ||
643 | { | ||
644 | if ( revision == mData->revision ) return; | ||
645 | detach(); | ||
646 | mData->empty = false; | ||
647 | mData->revision = revision; | ||
648 | } | ||
649 | |||
650 | QDateTime Addressee::revision() const | ||
651 | { | ||
652 | return mData->revision; | ||
653 | } | ||
654 | |||
655 | QString Addressee::revisionLabel() | ||
656 | { | ||
657 | return i18n("Revision Date"); | ||
658 | } | ||
659 | |||
660 | |||
661 | void Addressee::setSortString( const QString &sortString ) | ||
662 | { | ||
663 | if ( sortString == mData->sortString ) return; | ||
664 | detach(); | ||
665 | mData->empty = false; | ||
666 | mData->sortString = sortString; | ||
667 | } | ||
668 | |||
669 | QString Addressee::sortString() const | ||
670 | { | ||
671 | return mData->sortString; | ||
672 | } | ||
673 | |||
674 | QString Addressee::sortStringLabel() | ||
675 | { | ||
676 | return i18n("Sort String"); | ||
677 | } | ||
678 | |||
679 | |||
680 | void Addressee::setUrl( const KURL &url ) | ||
681 | { | ||
682 | if ( url == mData->url ) return; | ||
683 | detach(); | ||
684 | mData->empty = false; | ||
685 | mData->url = url; | ||
686 | } | ||
687 | |||
688 | KURL Addressee::url() const | ||
689 | { | ||
690 | return mData->url; | ||
691 | } | ||
692 | |||
693 | QString Addressee::urlLabel() | ||
694 | { | ||
695 | return i18n("URL"); | ||
696 | } | ||
697 | |||
698 | |||
699 | void Addressee::setSecrecy( const Secrecy &secrecy ) | ||
700 | { | ||
701 | if ( secrecy == mData->secrecy ) return; | ||
702 | detach(); | ||
703 | mData->empty = false; | ||
704 | mData->secrecy = secrecy; | ||
705 | } | ||
706 | |||
707 | Secrecy Addressee::secrecy() const | ||
708 | { | ||
709 | return mData->secrecy; | ||
710 | } | ||
711 | |||
712 | QString Addressee::secrecyLabel() | ||
713 | { | ||
714 | return i18n("Security Class"); | ||
715 | } | ||
716 | |||
717 | |||
718 | void Addressee::setLogo( const Picture &logo ) | ||
719 | { | ||
720 | if ( logo == mData->logo ) return; | ||
721 | detach(); | ||
722 | mData->empty = false; | ||
723 | mData->logo = logo; | ||
724 | } | ||
725 | |||
726 | Picture Addressee::logo() const | ||
727 | { | ||
728 | return mData->logo; | ||
729 | } | ||
730 | |||
731 | QString Addressee::logoLabel() | ||
732 | { | ||
733 | return i18n("Logo"); | ||
734 | } | ||
735 | |||
736 | |||
737 | void Addressee::setPhoto( const Picture &photo ) | ||
738 | { | ||
739 | if ( photo == mData->photo ) return; | ||
740 | detach(); | ||
741 | mData->empty = false; | ||
742 | mData->photo = photo; | ||
743 | } | ||
744 | |||
745 | Picture Addressee::photo() const | ||
746 | { | ||
747 | return mData->photo; | ||
748 | } | ||
749 | |||
750 | QString Addressee::photoLabel() | ||
751 | { | ||
752 | return i18n("Photo"); | ||
753 | } | ||
754 | |||
755 | |||
756 | void Addressee::setSound( const Sound &sound ) | ||
757 | { | ||
758 | if ( sound == mData->sound ) return; | ||
759 | detach(); | ||
760 | mData->empty = false; | ||
761 | mData->sound = sound; | ||
762 | } | ||
763 | |||
764 | Sound Addressee::sound() const | ||
765 | { | ||
766 | return mData->sound; | ||
767 | } | ||
768 | |||
769 | QString Addressee::soundLabel() | ||
770 | { | ||
771 | return i18n("Sound"); | ||
772 | } | ||
773 | |||
774 | |||
775 | void Addressee::setAgent( const Agent &agent ) | ||
776 | { | ||
777 | if ( agent == mData->agent ) return; | ||
778 | detach(); | ||
779 | mData->empty = false; | ||
780 | mData->agent = agent; | ||
781 | } | ||
782 | |||
783 | Agent Addressee::agent() const | ||
784 | { | ||
785 | return mData->agent; | ||
786 | } | ||
787 | |||
788 | QString Addressee::agentLabel() | ||
789 | { | ||
790 | return i18n("Agent"); | ||
791 | } | ||
792 | |||
793 | |||
794 | |||
795 | void Addressee::setNameFromString( const QString &str ) | ||
796 | { | ||
797 | setFormattedName( str ); | ||
798 | setName( str ); | ||
799 | |||
800 | QStringList titles; | ||
801 | titles += i18n( "Dr." ); | ||
802 | titles += i18n( "Miss" ); | ||
803 | titles += i18n( "Mr." ); | ||
804 | titles += i18n( "Mrs." ); | ||
805 | titles += i18n( "Ms." ); | ||
806 | titles += i18n( "Prof." ); | ||
807 | |||
808 | QStringList suffixes; | ||
809 | suffixes += i18n( "I" ); | ||
810 | suffixes += i18n( "II" ); | ||
811 | suffixes += i18n( "III" ); | ||
812 | suffixes += i18n( "Jr." ); | ||
813 | suffixes += i18n( "Sr." ); | ||
814 | |||
815 | QStringList prefixes; | ||
816 | prefixes += "van"; | ||
817 | prefixes += "von"; | ||
818 | prefixes += "de"; | ||
819 | |||
820 | //US KConfig config( "kabcrc" ); | ||
821 | KConfig config( locateLocal( "config", "kabcrc") ); | ||
822 | config.setGroup( "General" ); | ||
823 | titles += config.readListEntry( "Prefixes" ); | ||
824 | titles.remove( "" ); | ||
825 | prefixes += config.readListEntry( "Inclusions" ); | ||
826 | prefixes.remove( "" ); | ||
827 | suffixes += config.readListEntry( "Suffixes" ); | ||
828 | suffixes.remove( "" ); | ||
829 | |||
830 | // clear all name parts | ||
831 | setPrefix( "" ); | ||
832 | setGivenName( "" ); | ||
833 | setAdditionalName( "" ); | ||
834 | setFamilyName( "" ); | ||
835 | setSuffix( "" ); | ||
836 | |||
837 | if ( str.isEmpty() ) | ||
838 | return; | ||
839 | |||
840 | int i = str.find(','); | ||
841 | if( i < 0 ) { | ||
842 | QStringList parts = QStringList::split( " ", str ); | ||
843 | int leftOffset = 0; | ||
844 | int rightOffset = parts.count() - 1; | ||
845 | |||
846 | QString suffix; | ||
847 | while ( rightOffset >= 0 ) { | ||
848 | if ( suffixes.contains( parts[ rightOffset ] ) ) { | ||
849 | suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); | ||
850 | rightOffset--; | ||
851 | } else | ||
852 | break; | ||
853 | } | ||
854 | setSuffix( suffix ); | ||
855 | |||
856 | if ( rightOffset < 0 ) | ||
857 | return; | ||
858 | |||
859 | if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { | ||
860 | setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); | ||
861 | rightOffset--; | ||
862 | } else | ||
863 | setFamilyName( parts[ rightOffset ] ); | ||
864 | |||
865 | QString prefix; | ||
866 | while ( leftOffset < rightOffset ) { | ||
867 | if ( titles.contains( parts[ leftOffset ] ) ) { | ||
868 | prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); | ||
869 | leftOffset++; | ||
870 | } else | ||
871 | break; | ||
872 | } | ||
873 | setPrefix( prefix ); | ||
874 | |||
875 | if ( leftOffset < rightOffset ) { | ||
876 | setGivenName( parts[ leftOffset ] ); | ||
877 | leftOffset++; | ||
878 | } | ||
879 | |||
880 | QString additionalName; | ||
881 | while ( leftOffset < rightOffset ) { | ||
882 | additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); | ||
883 | leftOffset++; | ||
884 | } | ||
885 | setAdditionalName( additionalName ); | ||
886 | } else { | ||
887 | QString part1 = str.left( i ); | ||
888 | QString part2 = str.mid( i + 1 ); | ||
889 | |||
890 | QStringList parts = QStringList::split( " ", part1 ); | ||
891 | int leftOffset = 0; | ||
892 | int rightOffset = parts.count() - 1; | ||
893 | |||
894 | QString suffix; | ||
895 | while ( rightOffset >= 0 ) { | ||
896 | if ( suffixes.contains( parts[ rightOffset ] ) ) { | ||
897 | suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); | ||
898 | rightOffset--; | ||
899 | } else | ||
900 | break; | ||
901 | } | ||
902 | setSuffix( suffix ); | ||
903 | |||
904 | if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { | ||
905 | setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); | ||
906 | rightOffset--; | ||
907 | } else | ||
908 | setFamilyName( parts[ rightOffset ] ); | ||
909 | |||
910 | QString prefix; | ||
911 | while ( leftOffset < rightOffset ) { | ||
912 | if ( titles.contains( parts[ leftOffset ] ) ) { | ||
913 | prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); | ||
914 | leftOffset++; | ||
915 | } else | ||
916 | break; | ||
917 | } | ||
918 | |||
919 | parts = QStringList::split( " ", part2 ); | ||
920 | |||
921 | leftOffset = 0; | ||
922 | rightOffset = parts.count(); | ||
923 | |||
924 | while ( leftOffset < rightOffset ) { | ||
925 | if ( titles.contains( parts[ leftOffset ] ) ) { | ||
926 | prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); | ||
927 | leftOffset++; | ||
928 | } else | ||
929 | break; | ||
930 | } | ||
931 | setPrefix( prefix ); | ||
932 | |||
933 | if ( leftOffset < rightOffset ) { | ||
934 | setGivenName( parts[ leftOffset ] ); | ||
935 | leftOffset++; | ||
936 | } | ||
937 | |||
938 | QString additionalName; | ||
939 | while ( leftOffset < rightOffset ) { | ||
940 | additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); | ||
941 | leftOffset++; | ||
942 | } | ||
943 | setAdditionalName( additionalName ); | ||
944 | } | ||
945 | } | ||
946 | |||
947 | QString Addressee::realName() const | ||
948 | { | ||
949 | if ( !formattedName().isEmpty() ) | ||
950 | return formattedName(); | ||
951 | |||
952 | QString n = assembledName(); | ||
953 | |||
954 | if ( n.isEmpty() ) | ||
955 | n = name(); | ||
956 | |||
957 | return n; | ||
958 | } | ||
959 | |||
960 | QString Addressee::assembledName() const | ||
961 | { | ||
962 | QString name = prefix() + " " + givenName() + " " + additionalName() + " " + | ||
963 | familyName() + " " + suffix(); | ||
964 | |||
965 | return name.simplifyWhiteSpace(); | ||
966 | } | ||
967 | |||
968 | QString Addressee::fullEmail( const QString &email ) const | ||
969 | { | ||
970 | QString e; | ||
971 | if ( email.isNull() ) { | ||
972 | e = preferredEmail(); | ||
973 | } else { | ||
974 | e = email; | ||
975 | } | ||
976 | if ( e.isEmpty() ) return QString::null; | ||
977 | |||
978 | QString text; | ||
979 | if ( realName().isEmpty() ) | ||
980 | text = e; | ||
981 | else | ||
982 | text = assembledName() + " <" + e + ">"; | ||
983 | |||
984 | return text; | ||
985 | } | ||
986 | |||
987 | void Addressee::insertEmail( const QString &email, bool preferred ) | ||
988 | { | ||
989 | detach(); | ||
990 | |||
991 | QStringList::Iterator it = mData->emails.find( email ); | ||
992 | |||
993 | if ( it != mData->emails.end() ) { | ||
994 | if ( !preferred || it == mData->emails.begin() ) return; | ||
995 | mData->emails.remove( it ); | ||
996 | mData->emails.prepend( email ); | ||
997 | } else { | ||
998 | if ( preferred ) { | ||
999 | mData->emails.prepend( email ); | ||
1000 | } else { | ||
1001 | mData->emails.append( email ); | ||
1002 | } | ||
1003 | } | ||
1004 | } | ||
1005 | |||
1006 | void Addressee::removeEmail( const QString &email ) | ||
1007 | { | ||
1008 | detach(); | ||
1009 | |||
1010 | QStringList::Iterator it = mData->emails.find( email ); | ||
1011 | if ( it == mData->emails.end() ) return; | ||
1012 | |||
1013 | mData->emails.remove( it ); | ||
1014 | } | ||
1015 | |||
1016 | QString Addressee::preferredEmail() const | ||
1017 | { | ||
1018 | if ( mData->emails.count() == 0 ) return QString::null; | ||
1019 | else return mData->emails.first(); | ||
1020 | } | ||
1021 | |||
1022 | QStringList Addressee::emails() const | ||
1023 | { | ||
1024 | return mData->emails; | ||
1025 | } | ||
1026 | void Addressee::setEmails( const QStringList& emails ) { | ||
1027 | detach(); | ||
1028 | mData->emails = emails; | ||
1029 | } | ||
1030 | void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber ) | ||
1031 | { | ||
1032 | detach(); | ||
1033 | mData->empty = false; | ||
1034 | |||
1035 | PhoneNumber::List::Iterator it; | ||
1036 | for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { | ||
1037 | if ( (*it).id() == phoneNumber.id() ) { | ||
1038 | *it = phoneNumber; | ||
1039 | return; | ||
1040 | } | ||
1041 | } | ||
1042 | mData->phoneNumbers.append( phoneNumber ); | ||
1043 | } | ||
1044 | |||
1045 | void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber ) | ||
1046 | { | ||
1047 | detach(); | ||
1048 | |||
1049 | PhoneNumber::List::Iterator it; | ||
1050 | for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { | ||
1051 | if ( (*it).id() == phoneNumber.id() ) { | ||
1052 | mData->phoneNumbers.remove( it ); | ||
1053 | return; | ||
1054 | } | ||
1055 | } | ||
1056 | } | ||
1057 | |||
1058 | PhoneNumber Addressee::phoneNumber( int type ) const | ||
1059 | { | ||
1060 | PhoneNumber phoneNumber( "", type ); | ||
1061 | PhoneNumber::List::ConstIterator it; | ||
1062 | for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { | ||
1063 | if ( matchBinaryPattern( (*it).type(), type ) ) { | ||
1064 | if ( (*it).type() & PhoneNumber::Pref ) | ||
1065 | return (*it); | ||
1066 | else if ( phoneNumber.number().isEmpty() ) | ||
1067 | phoneNumber = (*it); | ||
1068 | } | ||
1069 | } | ||
1070 | |||
1071 | return phoneNumber; | ||
1072 | } | ||
1073 | |||
1074 | PhoneNumber::List Addressee::phoneNumbers() const | ||
1075 | { | ||
1076 | return mData->phoneNumbers; | ||
1077 | } | ||
1078 | |||
1079 | PhoneNumber::List Addressee::phoneNumbers( int type ) const | ||
1080 | { | ||
1081 | PhoneNumber::List list; | ||
1082 | |||
1083 | PhoneNumber::List::ConstIterator it; | ||
1084 | for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { | ||
1085 | if ( matchBinaryPattern( (*it).type(), type ) ) { | ||
1086 | list.append( *it ); | ||
1087 | } | ||
1088 | } | ||
1089 | return list; | ||
1090 | } | ||
1091 | |||
1092 | PhoneNumber Addressee::findPhoneNumber( const QString &id ) const | ||
1093 | { | ||
1094 | PhoneNumber::List::ConstIterator it; | ||
1095 | for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { | ||
1096 | if ( (*it).id() == id ) { | ||
1097 | return *it; | ||
1098 | } | ||
1099 | } | ||
1100 | return PhoneNumber(); | ||
1101 | } | ||
1102 | |||
1103 | void Addressee::insertKey( const Key &key ) | ||
1104 | { | ||
1105 | detach(); | ||
1106 | mData->empty = false; | ||
1107 | |||
1108 | Key::List::Iterator it; | ||
1109 | for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { | ||
1110 | if ( (*it).id() == key.id() ) { | ||
1111 | *it = key; | ||
1112 | return; | ||
1113 | } | ||
1114 | } | ||
1115 | mData->keys.append( key ); | ||
1116 | } | ||
1117 | |||
1118 | void Addressee::removeKey( const Key &key ) | ||
1119 | { | ||
1120 | detach(); | ||
1121 | |||
1122 | Key::List::Iterator it; | ||
1123 | for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { | ||
1124 | if ( (*it).id() == key.id() ) { | ||
1125 | mData->keys.remove( key ); | ||
1126 | return; | ||
1127 | } | ||
1128 | } | ||
1129 | } | ||
1130 | |||
1131 | Key Addressee::key( int type, QString customTypeString ) const | ||
1132 | { | ||
1133 | Key::List::ConstIterator it; | ||
1134 | for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { | ||
1135 | if ( (*it).type() == type ) { | ||
1136 | if ( type == Key::Custom ) { | ||
1137 | if ( customTypeString.isEmpty() ) { | ||
1138 | return *it; | ||
1139 | } else { | ||
1140 | if ( (*it).customTypeString() == customTypeString ) | ||
1141 | return (*it); | ||
1142 | } | ||
1143 | } else { | ||
1144 | return *it; | ||
1145 | } | ||
1146 | } | ||
1147 | } | ||
1148 | return Key( QString(), type ); | ||
1149 | } | ||
1150 | void Addressee::setKeys( const Key::List& list ) { | ||
1151 | detach(); | ||
1152 | mData->keys = list; | ||
1153 | } | ||
1154 | |||
1155 | Key::List Addressee::keys() const | ||
1156 | { | ||
1157 | return mData->keys; | ||
1158 | } | ||
1159 | |||
1160 | Key::List Addressee::keys( int type, QString customTypeString ) const | ||
1161 | { | ||
1162 | Key::List list; | ||
1163 | |||
1164 | Key::List::ConstIterator it; | ||
1165 | for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { | ||
1166 | if ( (*it).type() == type ) { | ||
1167 | if ( type == Key::Custom ) { | ||
1168 | if ( customTypeString.isEmpty() ) { | ||
1169 | list.append(*it); | ||
1170 | } else { | ||
1171 | if ( (*it).customTypeString() == customTypeString ) | ||
1172 | list.append(*it); | ||
1173 | } | ||
1174 | } else { | ||
1175 | list.append(*it); | ||
1176 | } | ||
1177 | } | ||
1178 | } | ||
1179 | return list; | ||
1180 | } | ||
1181 | |||
1182 | Key Addressee::findKey( const QString &id ) const | ||
1183 | { | ||
1184 | Key::List::ConstIterator it; | ||
1185 | for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { | ||
1186 | if ( (*it).id() == id ) { | ||
1187 | return *it; | ||
1188 | } | ||
1189 | } | ||
1190 | return Key(); | ||
1191 | } | ||
1192 | |||
1193 | QString Addressee::asString() const | ||
1194 | { | ||
1195 | return "Smith, agent Smith..."; | ||
1196 | } | ||
1197 | |||
1198 | void Addressee::dump() const | ||
1199 | { | ||
1200 | return; | ||
1201 | kdDebug(5700) << "Addressee {" << endl; | ||
1202 | |||
1203 | kdDebug(5700) << " Uid: '" << uid() << "'" << endl; | ||
1204 | |||
1205 | kdDebug(5700) << " Name: '" << name() << "'" << endl; | ||
1206 | kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl; | ||
1207 | kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl; | ||
1208 | kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl; | ||
1209 | kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl; | ||
1210 | kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl; | ||
1211 | kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl; | ||
1212 | kdDebug(5700) << " NickName: '" << nickName() << "'" << endl; | ||
1213 | kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl; | ||
1214 | kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl; | ||
1215 | kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl; | ||
1216 | kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl; | ||
1217 | kdDebug(5700) << " Title: '" << title() << "'" << endl; | ||
1218 | kdDebug(5700) << " Role: '" << role() << "'" << endl; | ||
1219 | kdDebug(5700) << " Organization: '" << organization() << "'" << endl; | ||
1220 | kdDebug(5700) << " Note: '" << note() << "'" << endl; | ||
1221 | kdDebug(5700) << " ProductId: '" << productId() << "'" << endl; | ||
1222 | kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl; | ||
1223 | kdDebug(5700) << " SortString: '" << sortString() << "'" << endl; | ||
1224 | kdDebug(5700) << " Url: '" << url().url() << "'" << endl; | ||
1225 | kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl; | ||
1226 | kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl; | ||
1227 | kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl; | ||
1228 | kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl; | ||
1229 | kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl; | ||
1230 | |||
1231 | kdDebug(5700) << " Emails {" << endl; | ||
1232 | QStringList e = emails(); | ||
1233 | QStringList::ConstIterator it; | ||
1234 | for( it = e.begin(); it != e.end(); ++it ) { | ||
1235 | kdDebug(5700) << " " << (*it) << endl; | ||
1236 | } | ||
1237 | kdDebug(5700) << " }" << endl; | ||
1238 | |||
1239 | kdDebug(5700) << " PhoneNumbers {" << endl; | ||
1240 | PhoneNumber::List p = phoneNumbers(); | ||
1241 | PhoneNumber::List::ConstIterator it2; | ||
1242 | for( it2 = p.begin(); it2 != p.end(); ++it2 ) { | ||
1243 | kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl; | ||
1244 | } | ||
1245 | kdDebug(5700) << " }" << endl; | ||
1246 | |||
1247 | Address::List a = addresses(); | ||
1248 | Address::List::ConstIterator it3; | ||
1249 | for( it3 = a.begin(); it3 != a.end(); ++it3 ) { | ||
1250 | (*it3).dump(); | ||
1251 | } | ||
1252 | |||
1253 | kdDebug(5700) << " Keys {" << endl; | ||
1254 | Key::List k = keys(); | ||
1255 | Key::List::ConstIterator it4; | ||
1256 | for( it4 = k.begin(); it4 != k.end(); ++it4 ) { | ||
1257 | kdDebug(5700) << " Type: " << int((*it4).type()) << | ||
1258 | " Key: " << (*it4).textData() << | ||
1259 | " CustomString: " << (*it4).customTypeString() << endl; | ||
1260 | } | ||
1261 | kdDebug(5700) << " }" << endl; | ||
1262 | |||
1263 | kdDebug(5700) << "}" << endl; | ||
1264 | } | ||
1265 | |||
1266 | |||
1267 | void Addressee::insertAddress( const Address &address ) | ||
1268 | { | ||
1269 | detach(); | ||
1270 | mData->empty = false; | ||
1271 | |||
1272 | Address::List::Iterator it; | ||
1273 | for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { | ||
1274 | if ( (*it).id() == address.id() ) { | ||
1275 | *it = address; | ||
1276 | return; | ||
1277 | } | ||
1278 | } | ||
1279 | mData->addresses.append( address ); | ||
1280 | } | ||
1281 | |||
1282 | void Addressee::removeAddress( const Address &address ) | ||
1283 | { | ||
1284 | detach(); | ||
1285 | |||
1286 | Address::List::Iterator it; | ||
1287 | for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { | ||
1288 | if ( (*it).id() == address.id() ) { | ||
1289 | mData->addresses.remove( it ); | ||
1290 | return; | ||
1291 | } | ||
1292 | } | ||
1293 | } | ||
1294 | |||
1295 | Address Addressee::address( int type ) const | ||
1296 | { | ||
1297 | Address address( type ); | ||
1298 | Address::List::ConstIterator it; | ||
1299 | for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { | ||
1300 | if ( matchBinaryPattern( (*it).type(), type ) ) { | ||
1301 | if ( (*it).type() & Address::Pref ) | ||
1302 | return (*it); | ||
1303 | else if ( address.isEmpty() ) | ||
1304 | address = (*it); | ||
1305 | } | ||
1306 | } | ||
1307 | |||
1308 | return address; | ||
1309 | } | ||
1310 | |||
1311 | Address::List Addressee::addresses() const | ||
1312 | { | ||
1313 | return mData->addresses; | ||
1314 | } | ||
1315 | |||
1316 | Address::List Addressee::addresses( int type ) const | ||
1317 | { | ||
1318 | Address::List list; | ||
1319 | |||
1320 | Address::List::ConstIterator it; | ||
1321 | for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { | ||
1322 | if ( matchBinaryPattern( (*it).type(), type ) ) { | ||
1323 | list.append( *it ); | ||
1324 | } | ||
1325 | } | ||
1326 | |||
1327 | return list; | ||
1328 | } | ||
1329 | |||
1330 | Address Addressee::findAddress( const QString &id ) const | ||
1331 | { | ||
1332 | Address::List::ConstIterator it; | ||
1333 | for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { | ||
1334 | if ( (*it).id() == id ) { | ||
1335 | return *it; | ||
1336 | } | ||
1337 | } | ||
1338 | return Address(); | ||
1339 | } | ||
1340 | |||
1341 | void Addressee::insertCategory( const QString &c ) | ||
1342 | { | ||
1343 | detach(); | ||
1344 | mData->empty = false; | ||
1345 | |||
1346 | if ( mData->categories.contains( c ) ) return; | ||
1347 | |||
1348 | mData->categories.append( c ); | ||
1349 | } | ||
1350 | |||
1351 | void Addressee::removeCategory( const QString &c ) | ||
1352 | { | ||
1353 | detach(); | ||
1354 | |||
1355 | QStringList::Iterator it = mData->categories.find( c ); | ||
1356 | if ( it == mData->categories.end() ) return; | ||
1357 | |||
1358 | mData->categories.remove( it ); | ||
1359 | } | ||
1360 | |||
1361 | bool Addressee::hasCategory( const QString &c ) const | ||
1362 | { | ||
1363 | return ( mData->categories.contains( c ) ); | ||
1364 | } | ||
1365 | |||
1366 | void Addressee::setCategories( const QStringList &c ) | ||
1367 | { | ||
1368 | detach(); | ||
1369 | mData->empty = false; | ||
1370 | |||
1371 | mData->categories = c; | ||
1372 | } | ||
1373 | |||
1374 | QStringList Addressee::categories() const | ||
1375 | { | ||
1376 | return mData->categories; | ||
1377 | } | ||
1378 | |||
1379 | void Addressee::insertCustom( const QString &app, const QString &name, | ||
1380 | const QString &value ) | ||
1381 | { | ||
1382 | if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return; | ||
1383 | |||
1384 | detach(); | ||
1385 | mData->empty = false; | ||
1386 | |||
1387 | QString qualifiedName = app + "-" + name + ":"; | ||
1388 | |||
1389 | QStringList::Iterator it; | ||
1390 | for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { | ||
1391 | if ( (*it).startsWith( qualifiedName ) ) { | ||
1392 | (*it) = qualifiedName + value; | ||
1393 | return; | ||
1394 | } | ||
1395 | } | ||
1396 | |||
1397 | mData->custom.append( qualifiedName + value ); | ||
1398 | } | ||
1399 | |||
1400 | void Addressee::removeCustom( const QString &app, const QString &name) | ||
1401 | { | ||
1402 | detach(); | ||
1403 | |||
1404 | QString qualifiedName = app + "-" + name + ":"; | ||
1405 | |||
1406 | QStringList::Iterator it; | ||
1407 | for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { | ||
1408 | if ( (*it).startsWith( qualifiedName ) ) { | ||
1409 | mData->custom.remove( it ); | ||
1410 | return; | ||
1411 | } | ||
1412 | } | ||
1413 | } | ||
1414 | |||
1415 | QString Addressee::custom( const QString &app, const QString &name ) const | ||
1416 | { | ||
1417 | QString qualifiedName = app + "-" + name + ":"; | ||
1418 | QString value; | ||
1419 | |||
1420 | QStringList::ConstIterator it; | ||
1421 | for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { | ||
1422 | if ( (*it).startsWith( qualifiedName ) ) { | ||
1423 | value = (*it).mid( (*it).find( ":" ) + 1 ); | ||
1424 | break; | ||
1425 | } | ||
1426 | } | ||
1427 | |||
1428 | return value; | ||
1429 | } | ||
1430 | |||
1431 | void Addressee::setCustoms( const QStringList &l ) | ||
1432 | { | ||
1433 | detach(); | ||
1434 | mData->empty = false; | ||
1435 | |||
1436 | mData->custom = l; | ||
1437 | } | ||
1438 | |||
1439 | QStringList Addressee::customs() const | ||
1440 | { | ||
1441 | return mData->custom; | ||
1442 | } | ||
1443 | |||
1444 | void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName, | ||
1445 | QString &email) | ||
1446 | { | ||
1447 | int startPos, endPos, len; | ||
1448 | QString partA, partB, result; | ||
1449 | char endCh = '>'; | ||
1450 | |||
1451 | startPos = rawEmail.find('<'); | ||
1452 | if (startPos < 0) | ||
1453 | { | ||
1454 | startPos = rawEmail.find('('); | ||
1455 | endCh = ')'; | ||
1456 | } | ||
1457 | if (startPos < 0) | ||
1458 | { | ||
1459 | // We couldn't find any separators, so we assume the whole string | ||
1460 | // is the email address | ||
1461 | email = rawEmail; | ||
1462 | fullName = ""; | ||
1463 | } | ||
1464 | else | ||
1465 | { | ||
1466 | // We have a start position, try to find an end | ||
1467 | endPos = rawEmail.find(endCh, startPos+1); | ||
1468 | |||
1469 | if (endPos < 0) | ||
1470 | { | ||
1471 | // We couldn't find the end of the email address. We can only | ||
1472 | // assume the entire string is the email address. | ||
1473 | email = rawEmail; | ||
1474 | fullName = ""; | ||
1475 | } | ||
1476 | else | ||
1477 | { | ||
1478 | // We have a start and end to the email address | ||
1479 | |||
1480 | // Grab the name part | ||
1481 | fullName = rawEmail.left(startPos).stripWhiteSpace(); | ||
1482 | |||
1483 | // grab the email part | ||
1484 | email = rawEmail.mid(startPos+1, endPos-startPos-1).stripWhiteSpace(); | ||
1485 | |||
1486 | // Check that we do not have any extra characters on the end of the | ||
1487 | // strings | ||
1488 | len = fullName.length(); | ||
1489 | if (fullName[0]=='"' && fullName[len-1]=='"') | ||
1490 | fullName = fullName.mid(1, len-2); | ||
1491 | else if (fullName[0]=='<' && fullName[len-1]=='>') | ||
1492 | fullName = fullName.mid(1, len-2); | ||
1493 | else if (fullName[0]=='(' && fullName[len-1]==')') | ||
1494 | fullName = fullName.mid(1, len-2); | ||
1495 | } | ||
1496 | } | ||
1497 | } | ||
1498 | |||
1499 | void Addressee::setResource( Resource *resource ) | ||
1500 | { | ||
1501 | detach(); | ||
1502 | mData->resource = resource; | ||
1503 | } | ||
1504 | |||
1505 | Resource *Addressee::resource() const | ||
1506 | { | ||
1507 | return mData->resource; | ||
1508 | } | ||
1509 | |||
1510 | void Addressee::setChanged( bool value ) | ||
1511 | { | ||
1512 | detach(); | ||
1513 | mData->changed = value; | ||
1514 | } | ||
1515 | |||
1516 | bool Addressee::changed() const | ||
1517 | { | ||
1518 | return mData->changed; | ||
1519 | } | ||
1520 | |||
1521 | QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a ) | ||
1522 | { | ||
1523 | if (!a.mData) return s; | ||
1524 | |||
1525 | s << a.uid(); | ||
1526 | |||
1527 | s << a.mData->name; | ||
1528 | s << a.mData->formattedName; | ||
1529 | s << a.mData->familyName; | ||
1530 | s << a.mData->givenName; | ||
1531 | s << a.mData->additionalName; | ||
1532 | s << a.mData->prefix; | ||
1533 | s << a.mData->suffix; | ||
1534 | s << a.mData->nickName; | ||
1535 | s << a.mData->birthday; | ||
1536 | s << a.mData->mailer; | ||
1537 | s << a.mData->timeZone; | ||
1538 | s << a.mData->geo; | ||
1539 | s << a.mData->title; | ||
1540 | s << a.mData->role; | ||
1541 | s << a.mData->organization; | ||
1542 | s << a.mData->note; | ||
1543 | s << a.mData->productId; | ||
1544 | s << a.mData->revision; | ||
1545 | s << a.mData->sortString; | ||
1546 | s << a.mData->url; | ||
1547 | s << a.mData->secrecy; | ||
1548 | s << a.mData->logo; | ||
1549 | s << a.mData->photo; | ||
1550 | s << a.mData->sound; | ||
1551 | s << a.mData->agent; | ||
1552 | s << a.mData->phoneNumbers; | ||
1553 | s << a.mData->addresses; | ||
1554 | s << a.mData->emails; | ||
1555 | s << a.mData->categories; | ||
1556 | s << a.mData->custom; | ||
1557 | s << a.mData->keys; | ||
1558 | return s; | ||
1559 | } | ||
1560 | |||
1561 | QDataStream &KABC::operator>>( QDataStream &s, Addressee &a ) | ||
1562 | { | ||
1563 | if (!a.mData) return s; | ||
1564 | |||
1565 | s >> a.mData->uid; | ||
1566 | |||
1567 | s >> a.mData->name; | ||
1568 | s >> a.mData->formattedName; | ||
1569 | s >> a.mData->familyName; | ||
1570 | s >> a.mData->givenName; | ||
1571 | s >> a.mData->additionalName; | ||
1572 | s >> a.mData->prefix; | ||
1573 | s >> a.mData->suffix; | ||
1574 | s >> a.mData->nickName; | ||
1575 | s >> a.mData->birthday; | ||
1576 | s >> a.mData->mailer; | ||
1577 | s >> a.mData->timeZone; | ||
1578 | s >> a.mData->geo; | ||
1579 | s >> a.mData->title; | ||
1580 | s >> a.mData->role; | ||
1581 | s >> a.mData->organization; | ||
1582 | s >> a.mData->note; | ||
1583 | s >> a.mData->productId; | ||
1584 | s >> a.mData->revision; | ||
1585 | s >> a.mData->sortString; | ||
1586 | s >> a.mData->url; | ||
1587 | s >> a.mData->secrecy; | ||
1588 | s >> a.mData->logo; | ||
1589 | s >> a.mData->photo; | ||
1590 | s >> a.mData->sound; | ||
1591 | s >> a.mData->agent; | ||
1592 | s >> a.mData->phoneNumbers; | ||
1593 | s >> a.mData->addresses; | ||
1594 | s >> a.mData->emails; | ||
1595 | s >> a.mData->categories; | ||
1596 | s >> a.mData->custom; | ||
1597 | s >> a.mData->keys; | ||
1598 | |||
1599 | a.mData->empty = false; | ||
1600 | |||
1601 | return s; | ||
1602 | } | ||
1603 | |||
1604 | bool matchBinaryPattern( int value, int pattern ) | ||
1605 | { | ||
1606 | /** | ||
1607 | We want to match all telephonnumbers/addresses which have the bits in the | ||
1608 | pattern set. More are allowed. | ||
1609 | if pattern == 0 we have a special handling, then we want only those with | ||
1610 | exactly no bit set. | ||
1611 | */ | ||
1612 | if ( pattern == 0 ) | ||
1613 | return ( value == 0 ); | ||
1614 | else | ||
1615 | return ( pattern == ( pattern & value ) ); | ||
1616 | } | ||
diff --git a/kabc/addressee.h b/kabc/addressee.h new file mode 100644 index 0000000..ee98e03 --- a/dev/null +++ b/kabc/addressee.h | |||
@@ -0,0 +1,817 @@ | |||
1 | /*** Warning! This file has been generated by the script makeaddressee ***/ | ||
2 | /* | ||
3 | This file is part of libkabc. | ||
4 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
5 | |||
6 | This library is free software; you can redistribute it and/or | ||
7 | modify it under the terms of the GNU Library General Public | ||
8 | License as published by the Free Software Foundation; either | ||
9 | version 2 of the License, or (at your option) any later version. | ||
10 | |||
11 | This library is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | Library General Public License for more details. | ||
15 | |||
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 | ||
18 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
19 | Boston, MA 02111-1307, USA. | ||
20 | */ | ||
21 | |||
22 | /* | ||
23 | Enhanced Version of the file for platform independent KDE tools. | ||
24 | Copyright (c) 2004 Ulf Schenk | ||
25 | |||
26 | $Id$ | ||
27 | */ | ||
28 | |||
29 | #ifndef KABC_ADDRESSEE_H | ||
30 | #define KABC_ADDRESSEE_H | ||
31 | |||
32 | #include <qdatetime.h> | ||
33 | #include <qstring.h> | ||
34 | #include <qstringlist.h> | ||
35 | #include <qvaluelist.h> | ||
36 | |||
37 | #include <ksharedptr.h> | ||
38 | #include <kurl.h> | ||
39 | |||
40 | #include "address.h" | ||
41 | #include "agent.h" | ||
42 | #include "geo.h" | ||
43 | #include "key.h" | ||
44 | #include "phonenumber.h" | ||
45 | #include "picture.h" | ||
46 | #include "secrecy.h" | ||
47 | #include "sound.h" | ||
48 | #include "timezone.h" | ||
49 | |||
50 | namespace KABC { | ||
51 | |||
52 | class Resource; | ||
53 | |||
54 | /** | ||
55 | @short address book entry | ||
56 | |||
57 | This class represents an entry in the address book. | ||
58 | |||
59 | The data of this class is implicitly shared. You can pass this class by value. | ||
60 | |||
61 | If you need the name of a field for presenting it to the user you should use | ||
62 | the functions ending in Label(). They return a translated string which can be | ||
63 | used as label for the corresponding field. | ||
64 | |||
65 | About the name fields: | ||
66 | |||
67 | givenName() is the first name and familyName() the last name. In some | ||
68 | countries the family name comes first, that's the reason for the | ||
69 | naming. formattedName() is the full name with the correct formatting. | ||
70 | It is used as an override, when the correct formatting can't be generated | ||
71 | from the other name fields automatically. | ||
72 | |||
73 | realName() returns a fully formatted name(). It uses formattedName, if set, | ||
74 | otherwise it constucts the name from the name fields. As fallback, if | ||
75 | nothing else is set it uses name(). | ||
76 | |||
77 | name() is the NAME type of RFC2426. It can be used as internal name for the | ||
78 | data enty, but shouldn't be used for displaying the data to the user. | ||
79 | */ | ||
80 | class Addressee | ||
81 | { | ||
82 | friend QDataStream &operator<<( QDataStream &, const Addressee & ); | ||
83 | friend QDataStream &operator>>( QDataStream &, Addressee & ); | ||
84 | |||
85 | public: | ||
86 | typedef QValueList<Addressee> List; | ||
87 | |||
88 | /** | ||
89 | Construct an empty address book entry. | ||
90 | */ | ||
91 | Addressee(); | ||
92 | ~Addressee(); | ||
93 | |||
94 | Addressee( const Addressee & ); | ||
95 | Addressee &operator=( const Addressee & ); | ||
96 | |||
97 | bool operator==( const Addressee & ) const; | ||
98 | bool operator!=( const Addressee & ) const; | ||
99 | |||
100 | /** | ||
101 | Return, if the address book entry is empty. | ||
102 | */ | ||
103 | bool isEmpty() const; | ||
104 | |||
105 | /** | ||
106 | Set unique identifier. | ||
107 | */ | ||
108 | void setUid( const QString &uid ); | ||
109 | /** | ||
110 | Return unique identifier. | ||
111 | */ | ||
112 | QString uid() const; | ||
113 | /** | ||
114 | Return translated label for uid field. | ||
115 | */ | ||
116 | static QString uidLabel(); | ||
117 | |||
118 | /** | ||
119 | Set name. | ||
120 | */ | ||
121 | void setName( const QString &name ); | ||
122 | /** | ||
123 | Return name. | ||
124 | */ | ||
125 | QString name() const; | ||
126 | /** | ||
127 | Return translated label for name field. | ||
128 | */ | ||
129 | static QString nameLabel(); | ||
130 | |||
131 | /** | ||
132 | Set formatted name. | ||
133 | */ | ||
134 | void setFormattedName( const QString &formattedName ); | ||
135 | /** | ||
136 | Return formatted name. | ||
137 | */ | ||
138 | QString formattedName() const; | ||
139 | /** | ||
140 | Return translated label for formattedName field. | ||
141 | */ | ||
142 | static QString formattedNameLabel(); | ||
143 | |||
144 | /** | ||
145 | Set family name. | ||
146 | */ | ||
147 | void setFamilyName( const QString &familyName ); | ||
148 | /** | ||
149 | Return family name. | ||
150 | */ | ||
151 | QString familyName() const; | ||
152 | /** | ||
153 | Return translated label for familyName field. | ||
154 | */ | ||
155 | static QString familyNameLabel(); | ||
156 | |||
157 | /** | ||
158 | Set given name. | ||
159 | */ | ||
160 | void setGivenName( const QString &givenName ); | ||
161 | /** | ||
162 | Return given name. | ||
163 | */ | ||
164 | QString givenName() const; | ||
165 | /** | ||
166 | Return translated label for givenName field. | ||
167 | */ | ||
168 | static QString givenNameLabel(); | ||
169 | |||
170 | /** | ||
171 | Set additional names. | ||
172 | */ | ||
173 | void setAdditionalName( const QString &additionalName ); | ||
174 | /** | ||
175 | Return additional names. | ||
176 | */ | ||
177 | QString additionalName() const; | ||
178 | /** | ||
179 | Return translated label for additionalName field. | ||
180 | */ | ||
181 | static QString additionalNameLabel(); | ||
182 | |||
183 | /** | ||
184 | Set honorific prefixes. | ||
185 | */ | ||
186 | void setPrefix( const QString &prefix ); | ||
187 | /** | ||
188 | Return honorific prefixes. | ||
189 | */ | ||
190 | QString prefix() const; | ||
191 | /** | ||
192 | Return translated label for prefix field. | ||
193 | */ | ||
194 | static QString prefixLabel(); | ||
195 | |||
196 | /** | ||
197 | Set honorific suffixes. | ||
198 | */ | ||
199 | void setSuffix( const QString &suffix ); | ||
200 | /** | ||
201 | Return honorific suffixes. | ||
202 | */ | ||
203 | QString suffix() const; | ||
204 | /** | ||
205 | Return translated label for suffix field. | ||
206 | */ | ||
207 | static QString suffixLabel(); | ||
208 | |||
209 | /** | ||
210 | Set nick name. | ||
211 | */ | ||
212 | void setNickName( const QString &nickName ); | ||
213 | /** | ||
214 | Return nick name. | ||
215 | */ | ||
216 | QString nickName() const; | ||
217 | /** | ||
218 | Return translated label for nickName field. | ||
219 | */ | ||
220 | static QString nickNameLabel(); | ||
221 | |||
222 | /** | ||
223 | Set birthday. | ||
224 | */ | ||
225 | void setBirthday( const QDateTime &birthday ); | ||
226 | /** | ||
227 | Return birthday. | ||
228 | */ | ||
229 | QDateTime birthday() const; | ||
230 | /** | ||
231 | Return translated label for birthday field. | ||
232 | */ | ||
233 | static QString birthdayLabel(); | ||
234 | |||
235 | /** | ||
236 | Return translated label for homeAddressStreet field. | ||
237 | */ | ||
238 | static QString homeAddressStreetLabel(); | ||
239 | |||
240 | /** | ||
241 | Return translated label for homeAddressLocality field. | ||
242 | */ | ||
243 | static QString homeAddressLocalityLabel(); | ||
244 | |||
245 | /** | ||
246 | Return translated label for homeAddressRegion field. | ||
247 | */ | ||
248 | static QString homeAddressRegionLabel(); | ||
249 | |||
250 | /** | ||
251 | Return translated label for homeAddressPostalCode field. | ||
252 | */ | ||
253 | static QString homeAddressPostalCodeLabel(); | ||
254 | |||
255 | /** | ||
256 | Return translated label for homeAddressCountry field. | ||
257 | */ | ||
258 | static QString homeAddressCountryLabel(); | ||
259 | |||
260 | /** | ||
261 | Return translated label for homeAddressLabel field. | ||
262 | */ | ||
263 | static QString homeAddressLabelLabel(); | ||
264 | |||
265 | /** | ||
266 | Return translated label for businessAddressStreet field. | ||
267 | */ | ||
268 | static QString businessAddressStreetLabel(); | ||
269 | |||
270 | /** | ||
271 | Return translated label for businessAddressLocality field. | ||
272 | */ | ||
273 | static QString businessAddressLocalityLabel(); | ||
274 | |||
275 | /** | ||
276 | Return translated label for businessAddressRegion field. | ||
277 | */ | ||
278 | static QString businessAddressRegionLabel(); | ||
279 | |||
280 | /** | ||
281 | Return translated label for businessAddressPostalCode field. | ||
282 | */ | ||
283 | static QString businessAddressPostalCodeLabel(); | ||
284 | |||
285 | /** | ||
286 | Return translated label for businessAddressCountry field. | ||
287 | */ | ||
288 | static QString businessAddressCountryLabel(); | ||
289 | |||
290 | /** | ||
291 | Return translated label for businessAddressLabel field. | ||
292 | */ | ||
293 | static QString businessAddressLabelLabel(); | ||
294 | |||
295 | /** | ||
296 | Return translated label for homePhone field. | ||
297 | */ | ||
298 | static QString homePhoneLabel(); | ||
299 | |||
300 | /** | ||
301 | Return translated label for businessPhone field. | ||
302 | */ | ||
303 | static QString businessPhoneLabel(); | ||
304 | |||
305 | /** | ||
306 | Return translated label for mobilePhone field. | ||
307 | */ | ||
308 | static QString mobilePhoneLabel(); | ||
309 | |||
310 | /** | ||
311 | Return translated label for homeFax field. | ||
312 | */ | ||
313 | static QString homeFaxLabel(); | ||
314 | |||
315 | /** | ||
316 | Return translated label for businessFax field. | ||
317 | */ | ||
318 | static QString businessFaxLabel(); | ||
319 | |||
320 | /** | ||
321 | Return translated label for carPhone field. | ||
322 | */ | ||
323 | static QString carPhoneLabel(); | ||
324 | |||
325 | /** | ||
326 | Return translated label for isdn field. | ||
327 | */ | ||
328 | static QString isdnLabel(); | ||
329 | |||
330 | /** | ||
331 | Return translated label for pager field. | ||
332 | */ | ||
333 | static QString pagerLabel(); | ||
334 | |||
335 | /** | ||
336 | Return translated label for email field. | ||
337 | */ | ||
338 | static QString emailLabel(); | ||
339 | |||
340 | /** | ||
341 | Set mail client. | ||
342 | */ | ||
343 | void setMailer( const QString &mailer ); | ||
344 | /** | ||
345 | Return mail client. | ||
346 | */ | ||
347 | QString mailer() const; | ||
348 | /** | ||
349 | Return translated label for mailer field. | ||
350 | */ | ||
351 | static QString mailerLabel(); | ||
352 | |||
353 | /** | ||
354 | Set time zone. | ||
355 | */ | ||
356 | void setTimeZone( const TimeZone &timeZone ); | ||
357 | /** | ||
358 | Return time zone. | ||
359 | */ | ||
360 | TimeZone timeZone() const; | ||
361 | /** | ||
362 | Return translated label for timeZone field. | ||
363 | */ | ||
364 | static QString timeZoneLabel(); | ||
365 | |||
366 | /** | ||
367 | Set geographic position. | ||
368 | */ | ||
369 | void setGeo( const Geo &geo ); | ||
370 | /** | ||
371 | Return geographic position. | ||
372 | */ | ||
373 | Geo geo() const; | ||
374 | /** | ||
375 | Return translated label for geo field. | ||
376 | */ | ||
377 | static QString geoLabel(); | ||
378 | |||
379 | /** | ||
380 | Set title. | ||
381 | */ | ||
382 | void setTitle( const QString &title ); | ||
383 | /** | ||
384 | Return title. | ||
385 | */ | ||
386 | QString title() const; | ||
387 | /** | ||
388 | Return translated label for title field. | ||
389 | */ | ||
390 | static QString titleLabel(); | ||
391 | |||
392 | /** | ||
393 | Set role. | ||
394 | */ | ||
395 | void setRole( const QString &role ); | ||
396 | /** | ||
397 | Return role. | ||
398 | */ | ||
399 | QString role() const; | ||
400 | /** | ||
401 | Return translated label for role field. | ||
402 | */ | ||
403 | static QString roleLabel(); | ||
404 | |||
405 | /** | ||
406 | Set organization. | ||
407 | */ | ||
408 | void setOrganization( const QString &organization ); | ||
409 | /** | ||
410 | Return organization. | ||
411 | */ | ||
412 | QString organization() const; | ||
413 | /** | ||
414 | Return translated label for organization field. | ||
415 | */ | ||
416 | static QString organizationLabel(); | ||
417 | |||
418 | /** | ||
419 | Set note. | ||
420 | */ | ||
421 | void setNote( const QString ¬e ); | ||
422 | /** | ||
423 | Return note. | ||
424 | */ | ||
425 | QString note() const; | ||
426 | /** | ||
427 | Return translated label for note field. | ||
428 | */ | ||
429 | static QString noteLabel(); | ||
430 | |||
431 | /** | ||
432 | Set product identifier. | ||
433 | */ | ||
434 | void setProductId( const QString &productId ); | ||
435 | /** | ||
436 | Return product identifier. | ||
437 | */ | ||
438 | QString productId() const; | ||
439 | /** | ||
440 | Return translated label for productId field. | ||
441 | */ | ||
442 | static QString productIdLabel(); | ||
443 | |||
444 | /** | ||
445 | Set revision date. | ||
446 | */ | ||
447 | void setRevision( const QDateTime &revision ); | ||
448 | /** | ||
449 | Return revision date. | ||
450 | */ | ||
451 | QDateTime revision() const; | ||
452 | /** | ||
453 | Return translated label for revision field. | ||
454 | */ | ||
455 | static QString revisionLabel(); | ||
456 | |||
457 | /** | ||
458 | Set sort string. | ||
459 | */ | ||
460 | void setSortString( const QString &sortString ); | ||
461 | /** | ||
462 | Return sort string. | ||
463 | */ | ||
464 | QString sortString() const; | ||
465 | /** | ||
466 | Return translated label for sortString field. | ||
467 | */ | ||
468 | static QString sortStringLabel(); | ||
469 | |||
470 | /** | ||
471 | Set URL. | ||
472 | */ | ||
473 | void setUrl( const KURL &url ); | ||
474 | /** | ||
475 | Return URL. | ||
476 | */ | ||
477 | KURL url() const; | ||
478 | /** | ||
479 | Return translated label for url field. | ||
480 | */ | ||
481 | static QString urlLabel(); | ||
482 | |||
483 | /** | ||
484 | Set security class. | ||
485 | */ | ||
486 | void setSecrecy( const Secrecy &secrecy ); | ||
487 | /** | ||
488 | Return security class. | ||
489 | */ | ||
490 | Secrecy secrecy() const; | ||
491 | /** | ||
492 | Return translated label for secrecy field. | ||
493 | */ | ||
494 | static QString secrecyLabel(); | ||
495 | |||
496 | /** | ||
497 | Set logo. | ||
498 | */ | ||
499 | void setLogo( const Picture &logo ); | ||
500 | /** | ||
501 | Return logo. | ||
502 | */ | ||
503 | Picture logo() const; | ||
504 | /** | ||
505 | Return translated label for logo field. | ||
506 | */ | ||
507 | static QString logoLabel(); | ||
508 | |||
509 | /** | ||
510 | Set photo. | ||
511 | */ | ||
512 | void setPhoto( const Picture &photo ); | ||
513 | /** | ||
514 | Return photo. | ||
515 | */ | ||
516 | Picture photo() const; | ||
517 | /** | ||
518 | Return translated label for photo field. | ||
519 | */ | ||
520 | static QString photoLabel(); | ||
521 | |||
522 | /** | ||
523 | Set sound. | ||
524 | */ | ||
525 | void setSound( const Sound &sound ); | ||
526 | /** | ||
527 | Return sound. | ||
528 | */ | ||
529 | Sound sound() const; | ||
530 | /** | ||
531 | Return translated label for sound field. | ||
532 | */ | ||
533 | static QString soundLabel(); | ||
534 | |||
535 | /** | ||
536 | Set agent. | ||
537 | */ | ||
538 | void setAgent( const Agent &agent ); | ||
539 | /** | ||
540 | Return agent. | ||
541 | */ | ||
542 | Agent agent() const; | ||
543 | /** | ||
544 | Return translated label for agent field. | ||
545 | */ | ||
546 | static QString agentLabel(); | ||
547 | |||
548 | /** | ||
549 | Set name fields by parsing the given string and trying to associate the | ||
550 | parts of the string with according fields. This function should probably | ||
551 | be a bit more clever. | ||
552 | */ | ||
553 | void setNameFromString( const QString & ); | ||
554 | |||
555 | /** | ||
556 | Return the name of the addressee. This is calculated from all the name | ||
557 | fields. | ||
558 | */ | ||
559 | QString realName() const; | ||
560 | |||
561 | /** | ||
562 | Return the name that consists of all name parts. | ||
563 | */ | ||
564 | QString assembledName() const; | ||
565 | |||
566 | /** | ||
567 | Return email address including real name. | ||
568 | |||
569 | @param email Email address to be used to construct the full email string. | ||
570 | If this is QString::null the preferred email address is used. | ||
571 | */ | ||
572 | QString fullEmail( const QString &email=QString::null ) const; | ||
573 | |||
574 | /** | ||
575 | Insert an email address. If the email address already exists in this | ||
576 | addressee it is not duplicated. | ||
577 | |||
578 | @param email Email address | ||
579 | @param preferred Set to true, if this is the preferred email address of | ||
580 | the addressee. | ||
581 | */ | ||
582 | void insertEmail( const QString &email, bool preferred=false ); | ||
583 | |||
584 | /** | ||
585 | Remove email address. If the email address doesn't exist, nothing happens. | ||
586 | */ | ||
587 | void removeEmail( const QString &email ); | ||
588 | |||
589 | /** | ||
590 | Return preferred email address. This is the first email address or the | ||
591 | last one added with @ref insertEmail() with a set preferred parameter. | ||
592 | */ | ||
593 | QString preferredEmail() const; | ||
594 | |||
595 | /** | ||
596 | Return list of all email addresses. | ||
597 | */ | ||
598 | QStringList emails() const; | ||
599 | |||
600 | /** | ||
601 | Set the emails to @param. | ||
602 | The first email address gets the preferred one! | ||
603 | @param list The list of email addresses. | ||
604 | */ | ||
605 | void setEmails( const QStringList& list); | ||
606 | |||
607 | /** | ||
608 | Insert a phone number. If a phone number with the same id already exists | ||
609 | in this addressee it is not duplicated. | ||
610 | */ | ||
611 | void insertPhoneNumber( const PhoneNumber &phoneNumber ); | ||
612 | |||
613 | /** | ||
614 | Remove phone number. If no phone number with the given id exists for this | ||
615 | addresse nothing happens. | ||
616 | */ | ||
617 | void removePhoneNumber( const PhoneNumber &phoneNumber ); | ||
618 | |||
619 | /** | ||
620 | Return phone number, which matches the given type. | ||
621 | */ | ||
622 | PhoneNumber phoneNumber( int type ) const; | ||
623 | |||
624 | /** | ||
625 | Return list of all phone numbers. | ||
626 | */ | ||
627 | PhoneNumber::List phoneNumbers() const; | ||
628 | |||
629 | /** | ||
630 | Return list of phone numbers with a special type. | ||
631 | */ | ||
632 | PhoneNumber::List phoneNumbers( int type ) const; | ||
633 | |||
634 | /** | ||
635 | Return phone number with the given id. | ||
636 | */ | ||
637 | PhoneNumber findPhoneNumber( const QString &id ) const; | ||
638 | |||
639 | /** | ||
640 | Insert a key. If a key with the same id already exists | ||
641 | in this addressee it is not duplicated. | ||
642 | */ | ||
643 | void insertKey( const Key &key ); | ||
644 | |||
645 | /** | ||
646 | Remove a key. If no key with the given id exists for this | ||
647 | addresse nothing happens. | ||
648 | */ | ||
649 | void removeKey( const Key &key ); | ||
650 | |||
651 | /** | ||
652 | Return key, which matches the given type. | ||
653 | If @p type == Key::Custom you can specify a string | ||
654 | that should match. If you leave the string empty, the first | ||
655 | key with a custom value is returned. | ||
656 | */ | ||
657 | Key key( int type, QString customTypeString = QString::null ) const; | ||
658 | |||
659 | /** | ||
660 | Return list of all keys. | ||
661 | */ | ||
662 | Key::List keys() const; | ||
663 | |||
664 | /** | ||
665 | Set the list of keys | ||
666 | @param keys The keys to be set. | ||
667 | */ | ||
668 | void setKeys( const Key::List& keys); | ||
669 | |||
670 | /** | ||
671 | Return list of keys with a special type. | ||
672 | If @p type == Key::Custom you can specify a string | ||
673 | that should match. If you leave the string empty, all custom | ||
674 | keys will be returned. | ||
675 | */ | ||
676 | Key::List keys( int type, QString customTypeString = QString::null ) const; | ||
677 | |||
678 | /** | ||
679 | Return key with the given id. | ||
680 | */ | ||
681 | Key findKey( const QString &id ) const; | ||
682 | |||
683 | /** | ||
684 | Insert an address. If an address with the same id already exists | ||
685 | in this addressee it is not duplicated. | ||
686 | */ | ||
687 | void insertAddress( const Address &address ); | ||
688 | |||
689 | /** | ||
690 | Remove address. If no address with the given id exists for this | ||
691 | addresse nothing happens. | ||
692 | */ | ||
693 | void removeAddress( const Address &address ); | ||
694 | |||
695 | /** | ||
696 | Return address, which matches the given type. | ||
697 | */ | ||
698 | Address address( int type ) const; | ||
699 | |||
700 | /** | ||
701 | Return list of all addresses. | ||
702 | */ | ||
703 | Address::List addresses() const; | ||
704 | |||
705 | /** | ||
706 | Return list of addresses with a special type. | ||
707 | */ | ||
708 | Address::List addresses( int type ) const; | ||
709 | |||
710 | /** | ||
711 | Return address with the given id. | ||
712 | */ | ||
713 | Address findAddress( const QString &id ) const; | ||
714 | |||
715 | /** | ||
716 | Insert category. If the category already exists it is not duplicated. | ||
717 | */ | ||
718 | void insertCategory( const QString & ); | ||
719 | |||
720 | /** | ||
721 | Remove category. | ||
722 | */ | ||
723 | void removeCategory( const QString & ); | ||
724 | |||
725 | /** | ||
726 | Return, if addressee has the given category. | ||
727 | */ | ||
728 | bool hasCategory( const QString & ) const; | ||
729 | |||
730 | /** | ||
731 | Set categories to given value. | ||
732 | */ | ||
733 | void setCategories( const QStringList & ); | ||
734 | |||
735 | /** | ||
736 | Return list of all set categories. | ||
737 | */ | ||
738 | QStringList categories() const; | ||
739 | |||
740 | /** | ||
741 | Insert custom entry. The entry is identified by the name of the inserting | ||
742 | application and a unique name. If an entry with the given app and name | ||
743 | already exists its value is replaced with the new given value. | ||
744 | */ | ||
745 | void insertCustom( const QString &app, const QString &name, | ||
746 | const QString &value ); | ||
747 | |||
748 | /** | ||
749 | Remove custom entry. | ||
750 | */ | ||
751 | void removeCustom( const QString &app, const QString &name ); | ||
752 | |||
753 | /** | ||
754 | Return value of custom entry, identified by app and entry name. | ||
755 | */ | ||
756 | QString custom( const QString &app, const QString &name ) const; | ||
757 | |||
758 | /** | ||
759 | Set all custom entries. | ||
760 | */ | ||
761 | void setCustoms( const QStringList & ); | ||
762 | |||
763 | /** | ||
764 | Return list of all custom entries. | ||
765 | */ | ||
766 | QStringList customs() const; | ||
767 | |||
768 | /** | ||
769 | Parse full email address. The result is given back in fullName and email. | ||
770 | */ | ||
771 | static void parseEmailAddress( const QString &rawEmail, QString &fullName, | ||
772 | QString &email ); | ||
773 | |||
774 | /** | ||
775 | Debug output. | ||
776 | */ | ||
777 | void dump() const; | ||
778 | |||
779 | /** | ||
780 | Returns string representation of the addressee. | ||
781 | */ | ||
782 | QString asString() const; | ||
783 | |||
784 | /** | ||
785 | Set resource where the addressee is from. | ||
786 | */ | ||
787 | void setResource( Resource *resource ); | ||
788 | |||
789 | /** | ||
790 | Return pointer to resource. | ||
791 | */ | ||
792 | Resource *resource() const; | ||
793 | |||
794 | /** | ||
795 | Mark addressee as changed. | ||
796 | */ | ||
797 | void setChanged( bool value ); | ||
798 | |||
799 | /** | ||
800 | Return whether the addressee is changed. | ||
801 | */ | ||
802 | bool changed() const; | ||
803 | |||
804 | private: | ||
805 | Addressee copy(); | ||
806 | void detach(); | ||
807 | |||
808 | struct AddresseeData; | ||
809 | mutable KSharedPtr<AddresseeData> mData; | ||
810 | }; | ||
811 | |||
812 | QDataStream &operator<<( QDataStream &, const Addressee & ); | ||
813 | QDataStream &operator>>( QDataStream &, Addressee & ); | ||
814 | |||
815 | } | ||
816 | |||
817 | #endif | ||
diff --git a/kabc/addresseedialog.cpp b/kabc/addresseedialog.cpp new file mode 100644 index 0000000..033e857 --- a/dev/null +++ b/kabc/addresseedialog.cpp | |||
@@ -0,0 +1,264 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include <qlayout.h> | ||
22 | #include <qpushbutton.h> | ||
23 | #include <qgroupbox.h> | ||
24 | #include <qapplication.h> | ||
25 | #include <qregexp.h> | ||
26 | |||
27 | #include <klocale.h> | ||
28 | #include <kdebug.h> | ||
29 | #include <kglobalsettings.h> | ||
30 | |||
31 | #include "stdaddressbook.h" | ||
32 | |||
33 | #include "addresseedialog.h" | ||
34 | //#include "addresseedialog.moc" | ||
35 | |||
36 | using namespace KABC; | ||
37 | |||
38 | AddresseeItem::AddresseeItem( QListView *parent, const Addressee &addressee ) : | ||
39 | QListViewItem( parent ), | ||
40 | mAddressee( addressee ) | ||
41 | { | ||
42 | setText( Name, addressee.realName() ); | ||
43 | setText( Email, addressee.preferredEmail() ); | ||
44 | } | ||
45 | |||
46 | QString AddresseeItem::key( int column, bool ) const | ||
47 | { | ||
48 | /* LR | ||
49 | if (column == Email) { | ||
50 | QString value = text(Email); | ||
51 | QRegExp emailRe("<\\S*>"); | ||
52 | int match = emailRe.search(value); | ||
53 | if (match > -1) | ||
54 | value = value.mid(match + 1, emailRe.matchedLength() - 2); | ||
55 | |||
56 | return value.lower(); | ||
57 | } | ||
58 | */ | ||
59 | return text(column).lower(); | ||
60 | } | ||
61 | |||
62 | AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) : | ||
63 | KDialogBase( KDialogBase::Plain, i18n("Select Addressee"), | ||
64 | Ok|Cancel, Ok, parent ), mMultiple( multiple ) | ||
65 | { | ||
66 | QWidget *topWidget = plainPage(); | ||
67 | |||
68 | QBoxLayout *topLayout = new QHBoxLayout( topWidget ); | ||
69 | QBoxLayout *listLayout = new QVBoxLayout; | ||
70 | topLayout->addLayout( listLayout ); | ||
71 | |||
72 | mAddresseeList = new KListView( topWidget ); | ||
73 | mAddresseeList->addColumn( i18n("Name") ); | ||
74 | mAddresseeList->addColumn( i18n("Email") ); | ||
75 | mAddresseeList->setAllColumnsShowFocus( true ); | ||
76 | mAddresseeList->setFullWidth( true ); | ||
77 | listLayout->addWidget( mAddresseeList ); | ||
78 | connect( mAddresseeList, SIGNAL( doubleClicked( QListViewItem * ) ), | ||
79 | SLOT( slotOk() ) ); | ||
80 | connect( mAddresseeList, SIGNAL( selectionChanged( QListViewItem * ) ), | ||
81 | SLOT( updateEdit( QListViewItem * ) ) ); | ||
82 | |||
83 | mAddresseeEdit = new KLineEdit( topWidget ); | ||
84 | //mAddresseeEdit->setCompletionMode( KGlobalSettings::CompletionAuto ); | ||
85 | // connect( mAddresseeEdit->completionObject(), SIGNAL( match( const QString & ) ), | ||
86 | // SLOT( selectItem( const QString & ) ) ); | ||
87 | mAddresseeEdit->setFocus(); | ||
88 | //mAddresseeEdit->completionObject()->setIgnoreCase( true ); | ||
89 | listLayout->addWidget( mAddresseeEdit ); | ||
90 | |||
91 | //setInitialSize( QSize( 450, 300 ) ); | ||
92 | |||
93 | if ( mMultiple ) { | ||
94 | QBoxLayout *selectedLayout = new QVBoxLayout; | ||
95 | topLayout->addLayout( selectedLayout ); | ||
96 | topLayout->setSpacing( spacingHint() ); | ||
97 | |||
98 | QGroupBox *selectedGroup = new QGroupBox( 1, Horizontal, i18n("Selected"), | ||
99 | topWidget ); | ||
100 | selectedLayout->addWidget( selectedGroup ); | ||
101 | |||
102 | mSelectedList = new KListView( selectedGroup ); | ||
103 | mSelectedList->addColumn( i18n("Name") ); | ||
104 | mSelectedList->addColumn( i18n("Email") ); | ||
105 | mSelectedList->setAllColumnsShowFocus( true ); | ||
106 | mSelectedList->setFullWidth( true ); | ||
107 | connect( mSelectedList, SIGNAL( doubleClicked( QListViewItem * ) ), | ||
108 | SLOT( removeSelected() ) ); | ||
109 | |||
110 | QPushButton *unselectButton = new QPushButton( i18n("Unselect"), selectedGroup ); | ||
111 | connect ( unselectButton, SIGNAL( clicked() ), SLOT( removeSelected() ) ); | ||
112 | |||
113 | connect( mAddresseeList, SIGNAL( clicked( QListViewItem * ) ), | ||
114 | SLOT( addSelected( QListViewItem * ) ) ); | ||
115 | |||
116 | // setInitialSize( QSize( 650, 350 ) ); | ||
117 | } | ||
118 | |||
119 | mAddressBook = StdAddressBook::self( true ); | ||
120 | connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook* ) ), | ||
121 | SLOT( addressBookChanged() ) ); | ||
122 | connect( mAddressBook, SIGNAL( loadingFinished( Resource* ) ), | ||
123 | SLOT( addressBookChanged() ) ); | ||
124 | |||
125 | loadAddressBook(); | ||
126 | } | ||
127 | |||
128 | AddresseeDialog::~AddresseeDialog() | ||
129 | { | ||
130 | } | ||
131 | |||
132 | void AddresseeDialog::loadAddressBook() | ||
133 | { | ||
134 | mAddresseeList->clear(); | ||
135 | mItemDict.clear(); | ||
136 | //mAddresseeEdit->completionObject()->clear(); | ||
137 | |||
138 | AddressBook::Iterator it; | ||
139 | for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { | ||
140 | AddresseeItem *item = new AddresseeItem( mAddresseeList, (*it) ); | ||
141 | addCompletionItem( (*it).realName(), item ); | ||
142 | addCompletionItem( (*it).preferredEmail(), item ); | ||
143 | } | ||
144 | } | ||
145 | |||
146 | void AddresseeDialog::addCompletionItem( const QString &str, QListViewItem *item ) | ||
147 | { | ||
148 | if ( str.isEmpty() ) return; | ||
149 | |||
150 | mItemDict.insert( str, item ); | ||
151 | //mAddresseeEdit->completionObject()->addItem( str ); | ||
152 | } | ||
153 | |||
154 | void AddresseeDialog::selectItem( const QString &str ) | ||
155 | { | ||
156 | if ( str.isEmpty() ) return; | ||
157 | |||
158 | QListViewItem *item = mItemDict.find( str ); | ||
159 | if ( item ) { | ||
160 | mAddresseeList->blockSignals( true ); | ||
161 | mAddresseeList->setSelected( item, true ); | ||
162 | mAddresseeList->ensureItemVisible( item ); | ||
163 | mAddresseeList->blockSignals( false ); | ||
164 | } | ||
165 | } | ||
166 | |||
167 | void AddresseeDialog::updateEdit( QListViewItem *item ) | ||
168 | { | ||
169 | mAddresseeEdit->setText( item->text( 0 ) ); | ||
170 | mAddresseeEdit->setSelection( 0, item->text( 0 ).length() ); | ||
171 | } | ||
172 | |||
173 | void AddresseeDialog::addSelected( QListViewItem *item ) | ||
174 | { | ||
175 | AddresseeItem *addrItem = (AddresseeItem *)( item ); | ||
176 | if ( !addrItem ) return; | ||
177 | |||
178 | Addressee a = addrItem->addressee(); | ||
179 | |||
180 | QListViewItem *selectedItem = mSelectedDict.find( a.uid() ); | ||
181 | if ( !selectedItem ) { | ||
182 | selectedItem = new AddresseeItem( mSelectedList, a ); | ||
183 | mSelectedDict.insert( a.uid(), selectedItem ); | ||
184 | } | ||
185 | } | ||
186 | |||
187 | void AddresseeDialog::removeSelected() | ||
188 | { | ||
189 | QListViewItem *item = mSelectedList->selectedItem(); | ||
190 | AddresseeItem *addrItem = (AddresseeItem *)( item ); | ||
191 | if ( !addrItem ) return; | ||
192 | |||
193 | mSelectedDict.remove( addrItem->addressee().uid() ); | ||
194 | delete addrItem; | ||
195 | } | ||
196 | |||
197 | Addressee AddresseeDialog::addressee() | ||
198 | { | ||
199 | AddresseeItem *aItem = 0; | ||
200 | |||
201 | if ( mMultiple ) | ||
202 | aItem = (AddresseeItem *)( mSelectedList->firstChild() ); | ||
203 | else | ||
204 | aItem = (AddresseeItem *)( mAddresseeList->selectedItem() ); | ||
205 | |||
206 | if (aItem) return aItem->addressee(); | ||
207 | return Addressee(); | ||
208 | } | ||
209 | |||
210 | Addressee::List AddresseeDialog::addressees() | ||
211 | { | ||
212 | Addressee::List al; | ||
213 | AddresseeItem *aItem = 0; | ||
214 | |||
215 | if ( mMultiple ) { | ||
216 | QListViewItem *item = mSelectedList->firstChild(); | ||
217 | while( item ) { | ||
218 | aItem = (AddresseeItem *)( item ); | ||
219 | if ( aItem ) al.append( aItem->addressee() ); | ||
220 | item = item->nextSibling(); | ||
221 | } | ||
222 | } | ||
223 | else | ||
224 | { | ||
225 | aItem = (AddresseeItem *)( mAddresseeList->selectedItem() ); | ||
226 | if (aItem) al.append( aItem->addressee() ); | ||
227 | } | ||
228 | |||
229 | return al; | ||
230 | } | ||
231 | |||
232 | Addressee AddresseeDialog::getAddressee( QWidget *parent ) | ||
233 | { | ||
234 | AddresseeDialog *dlg = new AddresseeDialog( parent ); | ||
235 | Addressee addressee; | ||
236 | int result = dlg->exec(); | ||
237 | |||
238 | if ( result == QDialog::Accepted ) { | ||
239 | addressee = dlg->addressee(); | ||
240 | } | ||
241 | |||
242 | delete dlg; | ||
243 | return addressee; | ||
244 | } | ||
245 | |||
246 | Addressee::List AddresseeDialog::getAddressees( QWidget *parent ) | ||
247 | { | ||
248 | AddresseeDialog *dlg = new AddresseeDialog( parent, true ); | ||
249 | Addressee::List addressees; | ||
250 | if ( QApplication::desktop()->width() <= 640 ) | ||
251 | dlg->showMaximized(); | ||
252 | int result = dlg->exec(); | ||
253 | if ( result == QDialog::Accepted ) { | ||
254 | addressees = dlg->addressees(); | ||
255 | } | ||
256 | |||
257 | delete dlg; | ||
258 | return addressees; | ||
259 | } | ||
260 | |||
261 | void AddresseeDialog::addressBookChanged() | ||
262 | { | ||
263 | loadAddressBook(); | ||
264 | } | ||
diff --git a/kabc/addresseedialog.h b/kabc/addresseedialog.h new file mode 100644 index 0000000..74e7871 --- a/dev/null +++ b/kabc/addresseedialog.h | |||
@@ -0,0 +1,160 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef KABC_ADDRESSEEDIALOG_H | ||
22 | #define KABC_ADDRESSEEDIALOG_H | ||
23 | |||
24 | #include <qdict.h> | ||
25 | |||
26 | #include <kdialogbase.h> | ||
27 | #include <klineedit.h> | ||
28 | #include <klistview.h> | ||
29 | |||
30 | #include "addressbook.h" | ||
31 | |||
32 | namespace KABC { | ||
33 | |||
34 | /** | ||
35 | @short Special ListViewItem, that is used by the AddresseeDialog. | ||
36 | */ | ||
37 | class AddresseeItem : public QListViewItem | ||
38 | { | ||
39 | public: | ||
40 | |||
41 | /** | ||
42 | Type of column | ||
43 | @li @p Name - Name in Addressee | ||
44 | @li @p Email - Email in Addressee | ||
45 | */ | ||
46 | enum columns { Name = 0, Email = 1 }; | ||
47 | |||
48 | /** | ||
49 | Constructor. | ||
50 | |||
51 | @param parent The parent listview. | ||
52 | @param addressee The associated addressee. | ||
53 | */ | ||
54 | AddresseeItem( QListView *parent, const Addressee &addressee ); | ||
55 | |||
56 | /** | ||
57 | Returns the addressee. | ||
58 | */ | ||
59 | Addressee addressee() const { return mAddressee; } | ||
60 | |||
61 | /** | ||
62 | Method used by QListView to sort the items. | ||
63 | */ | ||
64 | virtual QString key( int column, bool ascending ) const; | ||
65 | |||
66 | private: | ||
67 | Addressee mAddressee; | ||
68 | }; | ||
69 | |||
70 | /** | ||
71 | @short Dialog for selecting address book entries. | ||
72 | |||
73 | This class provides a dialog for selecting entries from the standard KDE | ||
74 | address book. Use the getAddressee() function to open a modal dialog, | ||
75 | returning an address book entry. | ||
76 | |||
77 | In the dialog you can select an entry from the list with the mouse or type in | ||
78 | the first letters of the name or email address you are searching for. The | ||
79 | entry matching best is automatically selected. Use double click, pressing | ||
80 | return or pressing the ok button to return the selected addressee to the | ||
81 | application. | ||
82 | */ | ||
83 | class AddresseeDialog : public KDialogBase | ||
84 | { | ||
85 | Q_OBJECT | ||
86 | |||
87 | public: | ||
88 | /** | ||
89 | Construct addressbook entry select dialog. | ||
90 | |||
91 | @param parent parent widget | ||
92 | */ | ||
93 | AddresseeDialog( QWidget *parent=0, bool multiple=false ); | ||
94 | |||
95 | /** | ||
96 | Destructor. | ||
97 | */ | ||
98 | virtual ~AddresseeDialog(); | ||
99 | |||
100 | /** | ||
101 | Return the address chosen. | ||
102 | |||
103 | If it is a multiple select, this will return only the first address chosen | ||
104 | */ | ||
105 | Addressee addressee(); | ||
106 | |||
107 | /** | ||
108 | Return the list of addresses chosen | ||
109 | */ | ||
110 | Addressee::List addressees(); | ||
111 | |||
112 | /** | ||
113 | Select a single address book entry. | ||
114 | |||
115 | Open addressee select dialog and return the entry selected by the user. | ||
116 | If the user doesn't select an entry or presses cancel, the returned | ||
117 | addressee is empty. | ||
118 | */ | ||
119 | static Addressee getAddressee( QWidget *parent ); | ||
120 | |||
121 | /** | ||
122 | Select multiple address book entries. | ||
123 | |||
124 | Open addressee select dialog and return the entries selected by the user. | ||
125 | If the user doesn't select an entry or presses cancel, the returned | ||
126 | addressee list is empty. | ||
127 | */ | ||
128 | static Addressee::List getAddressees( QWidget *parent ); | ||
129 | |||
130 | private slots: | ||
131 | void selectItem( const QString & ); | ||
132 | void updateEdit( QListViewItem *item ); | ||
133 | void addSelected( QListViewItem *item ); | ||
134 | void removeSelected(); | ||
135 | |||
136 | protected slots: | ||
137 | void addressBookChanged(); | ||
138 | |||
139 | private: | ||
140 | void loadAddressBook(); | ||
141 | void addCompletionItem( const QString &str, QListViewItem *item ); | ||
142 | |||
143 | bool mMultiple; | ||
144 | |||
145 | KListView *mAddresseeList; | ||
146 | KLineEdit *mAddresseeEdit; | ||
147 | |||
148 | KListView *mSelectedList; | ||
149 | |||
150 | AddressBook *mAddressBook; | ||
151 | |||
152 | QDict<QListViewItem> mItemDict; | ||
153 | QDict<QListViewItem> mSelectedDict; | ||
154 | |||
155 | class AddresseeDialogPrivate; | ||
156 | AddresseeDialogPrivate *d; | ||
157 | }; | ||
158 | |||
159 | } | ||
160 | #endif | ||
diff --git a/kabc/addresseelist.cpp b/kabc/addresseelist.cpp new file mode 100644 index 0000000..097e162 --- a/dev/null +++ b/kabc/addresseelist.cpp | |||
@@ -0,0 +1,292 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Jost Schenck <jost@schenck.de> | ||
4 | 2003 Tobias Koenig <tokoe@kde.org> | ||
5 | |||
6 | This library is free software; you can redistribute it and/or | ||
7 | modify it under the terms of the GNU Library General Public | ||
8 | License as published by the Free Software Foundation; either | ||
9 | version 2 of the License, or (at your option) any later version. | ||
10 | |||
11 | This library is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | Library General Public License for more details. | ||
15 | |||
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 | ||
18 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
19 | Boston, MA 02111-1307, USA. | ||
20 | */ | ||
21 | |||
22 | /* | ||
23 | Enhanced Version of the file for platform independent KDE tools. | ||
24 | Copyright (c) 2004 Ulf Schenk | ||
25 | |||
26 | $Id$ | ||
27 | */ | ||
28 | |||
29 | #include <kdebug.h> | ||
30 | //US | ||
31 | #include <qtl.h> | ||
32 | |||
33 | |||
34 | #include "addresseelist.h" | ||
35 | #include "field.h" | ||
36 | |||
37 | using namespace KABC; | ||
38 | |||
39 | // | ||
40 | // | ||
41 | // Traits | ||
42 | // | ||
43 | // | ||
44 | |||
45 | bool SortingTraits::Uid::eq( const Addressee &a1, const Addressee &a2 ) | ||
46 | { | ||
47 | // locale awareness doesn't make sense sorting ids | ||
48 | return ( QString::compare( a1.uid(), a2.uid() ) == 0 ); | ||
49 | } | ||
50 | |||
51 | bool SortingTraits::Uid::lt( const Addressee &a1, const Addressee &a2 ) | ||
52 | { | ||
53 | // locale awareness doesn't make sense sorting ids | ||
54 | return ( QString::compare( a1.uid(), a2.uid() ) < 0 ); | ||
55 | } | ||
56 | |||
57 | bool SortingTraits::Name::eq( const Addressee &a1, const Addressee &a2 ) | ||
58 | { | ||
59 | //US QString::localeAwareCompare is not available in my distribution. Redefine it to compare | ||
60 | return ( QString::compare( a1.name(), a2.name() ) == 0 ); | ||
61 | } | ||
62 | |||
63 | bool SortingTraits::Name::lt( const Addressee &a1, const Addressee &a2 ) | ||
64 | { | ||
65 | //US QString::localeAwareCompare is not available in my distribution. Redefine it to compare | ||
66 | return ( QString::compare( a1.name(), a2.name() ) < 0 ); | ||
67 | } | ||
68 | |||
69 | bool SortingTraits::FormattedName::eq( const Addressee &a1, const Addressee &a2 ) | ||
70 | { | ||
71 | //US QString::localeAwareCompare is not available in my distribution. Redefine it to compare | ||
72 | return ( QString::compare( a1.formattedName(), a2.formattedName() ) == 0 ); | ||
73 | } | ||
74 | |||
75 | bool SortingTraits::FormattedName::lt( const Addressee &a1, const Addressee &a2 ) | ||
76 | { | ||
77 | //US QString::localeAwareCompare is not available in my distribution. Redefine it to compare | ||
78 | return ( QString::compare( a1.formattedName(), a2.formattedName() ) < 0 ); | ||
79 | } | ||
80 | |||
81 | bool SortingTraits::FamilyName::eq( const Addressee &a1, const Addressee &a2 ) | ||
82 | { | ||
83 | //US QString::localeAwareCompare is not available in my distribution. Redefine it to compare | ||
84 | return ( QString::compare( a1.familyName(), a2.familyName() ) == 0 | ||
85 | && QString::compare( a1.givenName(), a2.givenName() ) == 0 ); | ||
86 | } | ||
87 | |||
88 | bool SortingTraits::FamilyName::lt( const Addressee &a1, const Addressee &a2 ) | ||
89 | { | ||
90 | //US QString::localeAwareCompare is not available in my distribution. Redefine it to compare | ||
91 | int family = QString::compare( a1.familyName(), a2.familyName() ); | ||
92 | if ( 0 == family ) { | ||
93 | return ( QString::compare( a1.givenName(), a2.givenName() ) < 0 ); | ||
94 | } else { | ||
95 | return family < 0; | ||
96 | } | ||
97 | } | ||
98 | |||
99 | bool SortingTraits::GivenName::eq( const Addressee &a1, const Addressee &a2 ) | ||
100 | { | ||
101 | //US QString::localeAwareCompare is not available in my distribution. Redefine it to compare | ||
102 | return ( QString::compare( a1.givenName(), a2.givenName() ) == 0 | ||
103 | && QString::compare( a1.familyName(), a2.familyName() ) == 0 ); | ||
104 | } | ||
105 | |||
106 | bool SortingTraits::GivenName::lt( const Addressee &a1, const Addressee &a2 ) | ||
107 | { | ||
108 | //US QString::localeAwareCompare is not available in my distribution. Redefine it to compare | ||
109 | int given = QString::compare( a1.givenName(), a2.givenName() ); | ||
110 | if ( 0 == given ) { | ||
111 | return ( QString::compare( a1.familyName(), a2.familyName() ) < 0 ); | ||
112 | } else { | ||
113 | return given < 0; | ||
114 | } | ||
115 | } | ||
116 | |||
117 | // | ||
118 | // | ||
119 | // AddresseeList | ||
120 | // | ||
121 | // | ||
122 | |||
123 | AddresseeList::AddresseeList() | ||
124 | : QValueList<Addressee>() | ||
125 | { | ||
126 | mReverseSorting = false; | ||
127 | mActiveSortingCriterion = FormattedName; | ||
128 | mActiveSortingField = 0; | ||
129 | } | ||
130 | |||
131 | AddresseeList::~AddresseeList() | ||
132 | { | ||
133 | } | ||
134 | |||
135 | AddresseeList::AddresseeList( const AddresseeList &l ) | ||
136 | : QValueList<Addressee>( l ) | ||
137 | { | ||
138 | mReverseSorting = l.reverseSorting(); | ||
139 | mActiveSortingCriterion = l.sortingCriterion(); | ||
140 | } | ||
141 | |||
142 | AddresseeList::AddresseeList( const QValueList<Addressee> &l ) | ||
143 | : QValueList<Addressee>( l ) | ||
144 | { | ||
145 | mReverseSorting = false; | ||
146 | } | ||
147 | |||
148 | void AddresseeList::dump() const | ||
149 | { | ||
150 | kdDebug(5700) << "AddresseeList {" << endl; | ||
151 | kdDebug(5700) << "reverse order: " << ( mReverseSorting ? "true" : "false" ) << endl; | ||
152 | |||
153 | QString crit; | ||
154 | if ( Uid == mActiveSortingCriterion ) { | ||
155 | crit = "Uid"; | ||
156 | } else if ( Name == mActiveSortingCriterion ) { | ||
157 | crit = "Name"; | ||
158 | } else if ( FormattedName == mActiveSortingCriterion ) { | ||
159 | crit = "FormattedName"; | ||
160 | } else if ( FamilyName == mActiveSortingCriterion ) { | ||
161 | crit = "FamilyName"; | ||
162 | } else if ( GivenName == mActiveSortingCriterion ) { | ||
163 | crit = "GivenName"; | ||
164 | } else { | ||
165 | crit = "unknown -- update dump method"; | ||
166 | } | ||
167 | |||
168 | kdDebug(5700) << "sorting criterion: " << crit << endl; | ||
169 | |||
170 | //US | ||
171 | //US for ( const_iterator it = begin(); it != end(); ++it ) | ||
172 | for ( ConstIterator it = begin(); it != end(); ++it ) | ||
173 | (*it).dump(); | ||
174 | |||
175 | kdDebug(5700) << "}" << endl; | ||
176 | } | ||
177 | |||
178 | void AddresseeList::sortBy( SortingCriterion c ) | ||
179 | { | ||
180 | mActiveSortingCriterion = c; | ||
181 | if ( Uid == c ) { | ||
182 | sortByTrait<SortingTraits::Uid>(); | ||
183 | } else if ( Name == c ) { | ||
184 | sortByTrait<SortingTraits::Name>(); | ||
185 | } else if ( FormattedName == c ) { | ||
186 | sortByTrait<SortingTraits::FormattedName>(); | ||
187 | } else if ( FamilyName == c ) { | ||
188 | sortByTrait<SortingTraits::FamilyName>(); | ||
189 | } else if ( GivenName==c ) { | ||
190 | sortByTrait<SortingTraits::GivenName>(); | ||
191 | } else { | ||
192 | kdError(5700) << "AddresseeList sorting criterion passed for which a trait is not known. No sorting done." << endl; | ||
193 | } | ||
194 | } | ||
195 | |||
196 | void AddresseeList::sort() | ||
197 | { | ||
198 | sortBy( mActiveSortingCriterion ); | ||
199 | } | ||
200 | |||
201 | template<class Trait> | ||
202 | void AddresseeList::sortByTrait() | ||
203 | { | ||
204 | // FIXME: better sorting algorithm, bubblesort is not acceptable for larger lists. | ||
205 | // | ||
206 | // for i := 1 to n - 1 | ||
207 | // do for j := 1 to n - i | ||
208 | // do if A[j] > A[j+1] | ||
209 | // then temp := A[j] | ||
210 | // A[j] := A[j + 1] | ||
211 | // A[j + 1 ] := temp | ||
212 | |||
213 | //US iterator i1 = begin(); | ||
214 | Iterator i1 = begin(); | ||
215 | //US iterator endIt = end(); | ||
216 | Iterator endIt = end(); | ||
217 | --endIt; | ||
218 | if ( i1 == endIt ) // don't need sorting | ||
219 | return; | ||
220 | |||
221 | //US iterator i2 = endIt; | ||
222 | Iterator i2 = endIt; | ||
223 | while( i1 != endIt ) { | ||
224 | //US iterator j1 = begin(); | ||
225 | Iterator j1 = begin(); | ||
226 | //US iterator j2 = j1; | ||
227 | Iterator j2 = j1; | ||
228 | ++j2; | ||
229 | while( j1 != i2 ) { | ||
230 | if ( !mReverseSorting && Trait::lt( *j2, *j1 ) | ||
231 | || mReverseSorting && Trait::lt( *j1, *j2 ) ) { | ||
232 | qSwap( *j1, *j2 ); | ||
233 | } | ||
234 | ++j1; | ||
235 | ++j2; | ||
236 | } | ||
237 | ++i1; | ||
238 | --i2; | ||
239 | } | ||
240 | } | ||
241 | |||
242 | void AddresseeList::sortByField( Field *field ) | ||
243 | { | ||
244 | if ( field ) | ||
245 | mActiveSortingField = field; | ||
246 | |||
247 | if ( !mActiveSortingField ) { | ||
248 | kdWarning(5700) << "sortByField called with no active sort field" << endl; | ||
249 | return; | ||
250 | } | ||
251 | |||
252 | if ( count() == 0 ) | ||
253 | return; | ||
254 | |||
255 | quickSortByField( 0, count() - 1 ); | ||
256 | } | ||
257 | |||
258 | void AddresseeList::quickSortByField( int left, int right ) | ||
259 | { | ||
260 | int i = left; | ||
261 | int j = right; | ||
262 | int mid = ( left + right ) / 2; | ||
263 | |||
264 | //US iterator x = at( mid ); | ||
265 | ConstIterator x = at( mid ); | ||
266 | |||
267 | do { | ||
268 | if ( !mReverseSorting ) { | ||
269 | //US QString::localeAwareCompare was not available. Used compare instead. | ||
270 | while ( QString::compare( mActiveSortingField->value( *at( i ) ).upper(), mActiveSortingField->value( *x ).upper() ) < 0 ) | ||
271 | i++; | ||
272 | //US QString::localeAwareCompare was not available. Used compare instead. | ||
273 | while ( QString::compare( mActiveSortingField->value( *at( j ) ).upper(), mActiveSortingField->value( *x ).upper() ) > 0 ) | ||
274 | j--; | ||
275 | } else { | ||
276 | //US QString::localeAwareCompare was not available. Used compare instead. | ||
277 | while ( QString::compare( mActiveSortingField->value( *at( i ) ).upper(), mActiveSortingField->value( *x ).upper() ) > 0 ) | ||
278 | i++; | ||
279 | //US QString::localeAwareCompare was not available. Used compare instead. | ||
280 | while ( QString::compare( mActiveSortingField->value( *at( j ) ).upper(), mActiveSortingField->value( *x ).upper() ) < 0 ) | ||
281 | j--; | ||
282 | } | ||
283 | if ( i <= j ) { | ||
284 | qSwap( *at( i ), *at( j ) ); | ||
285 | i++; | ||
286 | j--; | ||
287 | } | ||
288 | } while ( i <= j ); | ||
289 | |||
290 | if ( left < j ) quickSortByField( left, j ); | ||
291 | if ( right > i ) quickSortByField( i, right ); | ||
292 | } | ||
diff --git a/kabc/addresseelist.h b/kabc/addresseelist.h new file mode 100644 index 0000000..2df252c --- a/dev/null +++ b/kabc/addresseelist.h | |||
@@ -0,0 +1,218 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Jost Schenck <jost@schenck.de> | ||
4 | 2003 Tobias Koenig <tokoe@kde.org> | ||
5 | |||
6 | This library is free software; you can redistribute it and/or | ||
7 | modify it under the terms of the GNU Library General Public | ||
8 | License as published by the Free Software Foundation; either | ||
9 | version 2 of the License, or (at your option) any later version. | ||
10 | |||
11 | This library is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | Library General Public License for more details. | ||
15 | |||
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 | ||
18 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
19 | Boston, MA 02111-1307, USA. | ||
20 | */ | ||
21 | |||
22 | /* | ||
23 | Enhanced Version of the file for platform independent KDE tools. | ||
24 | Copyright (c) 2004 Ulf Schenk | ||
25 | |||
26 | $Id$ | ||
27 | */ | ||
28 | |||
29 | #ifndef KABC_ADDRESSEELIST_H | ||
30 | #define KABC_ADDRESSEELIST_H | ||
31 | |||
32 | #include <qvaluelist.h> | ||
33 | |||
34 | #include "addressee.h" | ||
35 | |||
36 | namespace KABC { | ||
37 | |||
38 | class Field; | ||
39 | |||
40 | /** | ||
41 | * Each trait must implement one static function for equality, one for "less | ||
42 | * than". Class name should be the field name. A trait does not necessarily | ||
43 | * have to stick to just one field: a trait sorting by family name can e.g. | ||
44 | * sort addressees with equal family name by given name. | ||
45 | * | ||
46 | * If you want to implement reverse sorting, you do not have to write another | ||
47 | * trait, as AddresseeList takes care of that. | ||
48 | */ | ||
49 | namespace SortingTraits | ||
50 | { | ||
51 | |||
52 | class Uid | ||
53 | { | ||
54 | public: | ||
55 | static bool eq( const Addressee &, const Addressee & ); | ||
56 | static bool lt( const Addressee &, const Addressee & ); | ||
57 | }; | ||
58 | |||
59 | class Name | ||
60 | { | ||
61 | public: | ||
62 | static bool eq( const Addressee &, const Addressee & ); | ||
63 | static bool lt( const Addressee &, const Addressee & ); | ||
64 | }; | ||
65 | |||
66 | class FormattedName | ||
67 | { | ||
68 | public: | ||
69 | static bool eq( const Addressee &, const Addressee & ); | ||
70 | static bool lt( const Addressee &, const Addressee & ); | ||
71 | }; | ||
72 | |||
73 | class FamilyName // fallback to given name | ||
74 | { | ||
75 | public: | ||
76 | static bool eq( const Addressee &, const Addressee & ); | ||
77 | static bool lt( const Addressee &, const Addressee & ); | ||
78 | }; | ||
79 | |||
80 | class GivenName // fallback to family name | ||
81 | { | ||
82 | public: | ||
83 | static bool eq( const Addressee &, const Addressee & ); | ||
84 | static bool lt( const Addressee &, const Addressee & ); | ||
85 | }; | ||
86 | |||
87 | } | ||
88 | |||
89 | /** | ||
90 | * Addressee attribute used for sorting. | ||
91 | */ | ||
92 | typedef enum { Uid, Name, FormattedName, FamilyName, GivenName } SortingCriterion; | ||
93 | |||
94 | /** | ||
95 | * @short a QValueList of Addressee, with sorting functionality | ||
96 | * | ||
97 | * This class extends the functionality of QValueList with | ||
98 | * sorting methods specific to the Addressee class. It can be used | ||
99 | * just like any other QValueList but is no template class. | ||
100 | * | ||
101 | * An AddresseeList does not automatically keep sorted when addressees | ||
102 | * are added or removed or the sorting order is changed, as this would | ||
103 | * slow down larger operations by sorting after every step. So after | ||
104 | * such operations you have to call {@link #sort} or {@link #sortBy} to | ||
105 | * create a defined order again. | ||
106 | * | ||
107 | * Iterator usage is inherited by QValueList and extensively documented | ||
108 | * there. Please remember that the state of an iterator is undefined | ||
109 | * after any sorting operation. | ||
110 | * | ||
111 | * For the enumeration Type SortingCriterion, which specifies the | ||
112 | * field by the collection will be sorted, the following values exist: | ||
113 | * Uid, Name, FormattedName, FamilyName, GivenName. | ||
114 | * | ||
115 | * @author Jost Schenck jost@schenck.de | ||
116 | */ | ||
117 | class AddresseeList : public QValueList<Addressee> | ||
118 | { | ||
119 | public: | ||
120 | AddresseeList(); | ||
121 | ~AddresseeList(); | ||
122 | AddresseeList( const AddresseeList & ); | ||
123 | AddresseeList( const QValueList<Addressee> & ); | ||
124 | |||
125 | /** | ||
126 | * Debug output. | ||
127 | */ | ||
128 | void dump() const; | ||
129 | |||
130 | /** | ||
131 | * Determines the direction of sorting. On change, the list | ||
132 | * will <em>not</em> automatically be resorted. | ||
133 | * @param r <tt>true</tt> if sorting should be done reverse, <tt>false</tt> otherwise | ||
134 | */ | ||
135 | void setReverseSorting( bool r = true ) { mReverseSorting = r; } | ||
136 | |||
137 | /** | ||
138 | * Returns the direction of sorting. | ||
139 | * @return <tt>true</tt> if sorting is done reverse, <tt>false</tt> otherwise | ||
140 | */ | ||
141 | bool reverseSorting() const { return mReverseSorting; } | ||
142 | |||
143 | /** | ||
144 | * Sorts this list by a specific criterion. | ||
145 | * @param c the criterion by which should be sorted | ||
146 | */ | ||
147 | void sortBy( SortingCriterion c ); | ||
148 | |||
149 | /** | ||
150 | * Sorts this list by a specific field. If no parameter is given, the | ||
151 | * last used Field object will be used. | ||
152 | * @param field pointer to the Field object to be sorted by | ||
153 | */ | ||
154 | void sortByField( Field *field = 0 ); | ||
155 | |||
156 | /** | ||
157 | * Sorts this list by its active sorting criterion. This normally is the | ||
158 | * criterion of the last sortBy operation or <tt>FormattedName</tt> if up | ||
159 | * to now there has been no sortBy operation. | ||
160 | * | ||
161 | * Please note that the sorting trait of the last {@link #sortByTrait} | ||
162 | * method call is not remembered and thus the action can not be repeated | ||
163 | * by this method. | ||
164 | */ | ||
165 | void sort(); | ||
166 | |||
167 | /** | ||
168 | * Templated sort function. You normally will not want to use this but | ||
169 | * {@link #sortBy} and {@link #sort} instead as the existing sorting | ||
170 | * criteria completely suffice for most cases. | ||
171 | * | ||
172 | * However, if you do want to use some special sorting criterion, you can | ||
173 | * write a trait class that will be provided to this templated method. | ||
174 | * This trait class has to have a class declaration like the following: | ||
175 | * <pre> | ||
176 | * class MySortingTrait { | ||
177 | * public: | ||
178 | * // eq returns true if a1 and a2 are equal | ||
179 | * static bool eq(KABC::Addressee a1, KABC::Addressee a2); | ||
180 | * // lt returns true is a1 is "less than" a2 | ||
181 | * static bool lt(KABC::Addressee a1, KABC::Addressee a2); | ||
182 | * }; | ||
183 | * </pre> | ||
184 | * You can then pass this class to the sortByTrait method like this: | ||
185 | * <pre> | ||
186 | * myAddresseelist.sortByTrait<MySortingTrait>(); | ||
187 | * </pre> | ||
188 | * Please note that the {@link #sort} method can not be used to repeat the | ||
189 | * sorting of the last <tt>sortByTrait</tt> action. | ||
190 | * | ||
191 | * Right now this method uses the bubble sort algorithm. This should be | ||
192 | * replaced for a better one when I have time. | ||
193 | */ | ||
194 | template<class Trait> void sortByTrait(); | ||
195 | |||
196 | /** | ||
197 | * Returns the active sorting criterion, ie the sorting criterion that | ||
198 | * will be used by a {@link #sort} call. | ||
199 | */ | ||
200 | SortingCriterion sortingCriterion() const { return mActiveSortingCriterion; } | ||
201 | |||
202 | /** | ||
203 | * Returns the active sorting field, ie a pointer to the Field object | ||
204 | * which was used for the last {@link #sortByField} operation. | ||
205 | */ | ||
206 | Field* sortingField() const { return mActiveSortingField; } | ||
207 | |||
208 | private: | ||
209 | void quickSortByField( int, int ); | ||
210 | |||
211 | bool mReverseSorting; | ||
212 | SortingCriterion mActiveSortingCriterion; | ||
213 | Field* mActiveSortingField; | ||
214 | }; | ||
215 | |||
216 | } | ||
217 | |||
218 | #endif | ||
diff --git a/kabc/agent.cpp b/kabc/agent.cpp new file mode 100644 index 0000000..ef26cbf --- a/dev/null +++ b/kabc/agent.cpp | |||
@@ -0,0 +1,155 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include "addressee.h" | ||
29 | |||
30 | #include "agent.h" | ||
31 | |||
32 | using namespace KABC; | ||
33 | |||
34 | Agent::Agent() | ||
35 | : mAddressee( 0 ), mIntern( false ) | ||
36 | { | ||
37 | } | ||
38 | |||
39 | Agent::Agent( const QString &url ) | ||
40 | : mAddressee( 0 ),mUrl( url ), mIntern( false ) | ||
41 | { | ||
42 | } | ||
43 | |||
44 | Agent::Agent( Addressee *addressee ) | ||
45 | : mAddressee( addressee ), mIntern( true ) | ||
46 | { | ||
47 | } | ||
48 | |||
49 | Agent::~Agent() | ||
50 | { | ||
51 | delete mAddressee; | ||
52 | mAddressee = 0; | ||
53 | } | ||
54 | |||
55 | bool Agent::operator==( const Agent &a ) const | ||
56 | { | ||
57 | if ( mIntern != a.mIntern ) | ||
58 | return false; | ||
59 | |||
60 | if ( !mIntern ) { | ||
61 | if ( mUrl != a.mUrl ) | ||
62 | return false; | ||
63 | } else { | ||
64 | if ( mAddressee && !a.mAddressee ) return false; | ||
65 | if ( !mAddressee && a.mAddressee ) return false; | ||
66 | if ( !mAddressee && !a.mAddressee ) return false; | ||
67 | if ( (*mAddressee) != (*a.mAddressee) ) return false; | ||
68 | } | ||
69 | |||
70 | return true; | ||
71 | } | ||
72 | |||
73 | bool Agent::operator!=( const Agent &a ) const | ||
74 | { | ||
75 | return !( a == *this ); | ||
76 | } | ||
77 | |||
78 | Agent &Agent::operator=( const Agent &addr ) | ||
79 | { | ||
80 | if ( this == &addr ) | ||
81 | return *this; | ||
82 | |||
83 | if ( addr.mIntern && addr.mAddressee ) { | ||
84 | if ( mAddressee ) | ||
85 | delete mAddressee; | ||
86 | |||
87 | mAddressee = new Addressee; | ||
88 | *mAddressee = *(addr.mAddressee); | ||
89 | } | ||
90 | |||
91 | mUrl = addr.mUrl; | ||
92 | mIntern = addr.mIntern; | ||
93 | |||
94 | return *this; | ||
95 | } | ||
96 | |||
97 | void Agent::setUrl( const QString &url ) | ||
98 | { | ||
99 | mUrl = url; | ||
100 | mIntern = false; | ||
101 | } | ||
102 | |||
103 | void Agent::setAddressee( Addressee *addressee ) | ||
104 | { | ||
105 | mAddressee = addressee; | ||
106 | mIntern = true; | ||
107 | } | ||
108 | |||
109 | bool Agent::isIntern() const | ||
110 | { | ||
111 | return mIntern; | ||
112 | } | ||
113 | |||
114 | QString Agent::url() const | ||
115 | { | ||
116 | return mUrl; | ||
117 | } | ||
118 | |||
119 | Addressee *Agent::addressee() const | ||
120 | { | ||
121 | return mAddressee; | ||
122 | } | ||
123 | |||
124 | QString Agent::asString() const | ||
125 | { | ||
126 | if ( mIntern ) | ||
127 | return "intern agent"; | ||
128 | else | ||
129 | return mUrl; | ||
130 | } | ||
131 | |||
132 | QDataStream &KABC::operator<<( QDataStream &s, const Agent &agent ) | ||
133 | { | ||
134 | Q_UINT32 hasAddressee = ( agent.mAddressee != 0 ); | ||
135 | |||
136 | s << agent.mIntern << agent.mUrl << hasAddressee; | ||
137 | if ( hasAddressee ) | ||
138 | s << (*agent.mAddressee); | ||
139 | |||
140 | return s; | ||
141 | } | ||
142 | |||
143 | QDataStream &KABC::operator>>( QDataStream &s, Agent &agent ) | ||
144 | { | ||
145 | Q_UINT32 hasAddressee; | ||
146 | |||
147 | s >> agent.mIntern >> agent.mUrl >> hasAddressee; | ||
148 | |||
149 | if ( hasAddressee ) { | ||
150 | agent.mAddressee = new Addressee; | ||
151 | s >> (*agent.mAddressee); | ||
152 | } | ||
153 | |||
154 | return s; | ||
155 | } | ||
diff --git a/kabc/agent.h b/kabc/agent.h new file mode 100644 index 0000000..fa459d5 --- a/dev/null +++ b/kabc/agent.h | |||
@@ -0,0 +1,129 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_AGENT_H | ||
29 | #define KABC_AGENT_H | ||
30 | |||
31 | namespace KABC { | ||
32 | |||
33 | class Addressee; | ||
34 | |||
35 | /** | ||
36 | * Important!!! | ||
37 | * | ||
38 | * At the moment the vcard format does not support saving and loading | ||
39 | * this entity. | ||
40 | */ | ||
41 | class Agent | ||
42 | { | ||
43 | friend QDataStream &operator<<( QDataStream &, const Agent & ); | ||
44 | friend QDataStream &operator>>( QDataStream &, Agent & ); | ||
45 | |||
46 | public: | ||
47 | |||
48 | /** | ||
49 | * Consturctor. Creates an empty object. | ||
50 | */ | ||
51 | Agent(); | ||
52 | |||
53 | /** | ||
54 | * Consturctor. | ||
55 | * | ||
56 | * @param url A URL that describes the position of the agent file. | ||
57 | */ | ||
58 | Agent( const QString &url ); | ||
59 | |||
60 | /** | ||
61 | * Consturctor. | ||
62 | * | ||
63 | * @param addressee The addressee object of the agent. | ||
64 | */ | ||
65 | Agent( Addressee *addressee ); | ||
66 | |||
67 | /** | ||
68 | * Destructor. | ||
69 | */ | ||
70 | ~Agent(); | ||
71 | |||
72 | |||
73 | bool operator==( const Agent & ) const; | ||
74 | bool operator!=( const Agent & ) const; | ||
75 | Agent &operator=( const Agent & ); | ||
76 | |||
77 | /** | ||
78 | * Sets a URL for the location of the agent file. When using this | ||
79 | * function, @ref isIntern() will return 'false' until you use | ||
80 | * @ref setAddressee(). | ||
81 | * | ||
82 | * @param url The location URL of the agent file. | ||
83 | */ | ||
84 | void setUrl( const QString &url ); | ||
85 | |||
86 | /** | ||
87 | * Sets the addressee of the agent. When using this function, | ||
88 | * @ref isIntern() will return 'true' until you use @ref setUrl(). | ||
89 | * | ||
90 | * @param addressee The addressee object of the agent. | ||
91 | */ | ||
92 | void setAddressee( Addressee *addressee ); | ||
93 | |||
94 | /** | ||
95 | * Returns whether the agent is described by a URL (extern) or | ||
96 | * by a addressee (intern). | ||
97 | * When this method returns 'true' you can use @ref addressee() to | ||
98 | * get a @ref Addressee object. Otherwise you can request the URL | ||
99 | * of this agent by @ref url() and load the data from that location. | ||
100 | */ | ||
101 | bool isIntern() const; | ||
102 | |||
103 | /** | ||
104 | * Returns the location URL of this agent. | ||
105 | */ | ||
106 | QString url() const; | ||
107 | |||
108 | /** | ||
109 | * Returns the addressee object of this agent. | ||
110 | */ | ||
111 | Addressee* addressee() const; | ||
112 | |||
113 | /** | ||
114 | * Returns string representation of the agent. | ||
115 | */ | ||
116 | QString asString() const; | ||
117 | |||
118 | private: | ||
119 | Addressee *mAddressee; | ||
120 | QString mUrl; | ||
121 | |||
122 | int mIntern; | ||
123 | }; | ||
124 | |||
125 | QDataStream &operator<<( QDataStream &, const Agent & ); | ||
126 | QDataStream &operator>>( QDataStream &, Agent & ); | ||
127 | |||
128 | } | ||
129 | #endif | ||
diff --git a/kabc/distributionlist.cpp b/kabc/distributionlist.cpp new file mode 100644 index 0000000..aa2725d --- a/dev/null +++ b/kabc/distributionlist.cpp | |||
@@ -0,0 +1,293 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include <ksimpleconfig.h> | ||
22 | #include <kstandarddirs.h> | ||
23 | #include <kdebug.h> | ||
24 | |||
25 | #include "distributionlist.h" | ||
26 | |||
27 | using namespace KABC; | ||
28 | |||
29 | DistributionList::DistributionList( DistributionListManager *manager, | ||
30 | const QString &name ) : | ||
31 | mManager( manager ), mName( name ) | ||
32 | { | ||
33 | mManager->insert( this ); | ||
34 | } | ||
35 | |||
36 | DistributionList::~DistributionList() | ||
37 | { | ||
38 | mManager->remove( this ); | ||
39 | } | ||
40 | |||
41 | void DistributionList::setName( const QString &name ) | ||
42 | { | ||
43 | mName = name; | ||
44 | } | ||
45 | |||
46 | QString DistributionList::name() const | ||
47 | { | ||
48 | return mName; | ||
49 | } | ||
50 | |||
51 | void DistributionList::insertEntry( const Addressee &a, const QString &email ) | ||
52 | { | ||
53 | Entry e( a, email ); | ||
54 | |||
55 | QValueList<Entry>::Iterator it; | ||
56 | for( it = mEntries.begin(); it != mEntries.end(); ++it ) { | ||
57 | if ( (*it).addressee.uid() == a.uid() ) { | ||
58 | /** | ||
59 | We have to check if both email addresses contains no data, | ||
60 | a simple 'email1 == email2' wont work here | ||
61 | */ | ||
62 | if ( ( (*it).email.isNull() && email.isEmpty() ) || | ||
63 | ( (*it).email.isEmpty() && email.isNull() ) || | ||
64 | ( (*it).email == email ) ) { | ||
65 | *it = e; | ||
66 | return; | ||
67 | } | ||
68 | } | ||
69 | } | ||
70 | mEntries.append( e ); | ||
71 | } | ||
72 | |||
73 | void DistributionList::removeEntry( const Addressee &a, const QString &email ) | ||
74 | { | ||
75 | QValueList<Entry>::Iterator it; | ||
76 | for( it = mEntries.begin(); it != mEntries.end(); ++it ) { | ||
77 | if ( (*it).addressee.uid() == a.uid() && (*it).email == email ) { | ||
78 | mEntries.remove( it ); | ||
79 | return; | ||
80 | } | ||
81 | } | ||
82 | } | ||
83 | |||
84 | QStringList DistributionList::emails() const | ||
85 | { | ||
86 | QStringList emails; | ||
87 | |||
88 | Entry::List::ConstIterator it; | ||
89 | for( it = mEntries.begin(); it != mEntries.end(); ++it ) { | ||
90 | Addressee a = (*it).addressee; | ||
91 | QString email = (*it).email.isEmpty() ? a.fullEmail() : | ||
92 | a.fullEmail( (*it).email ); | ||
93 | |||
94 | if ( !email.isEmpty() ) { | ||
95 | emails.append( email ); | ||
96 | } | ||
97 | } | ||
98 | |||
99 | return emails; | ||
100 | } | ||
101 | |||
102 | DistributionList::Entry::List DistributionList::entries() const | ||
103 | { | ||
104 | return mEntries; | ||
105 | } | ||
106 | |||
107 | |||
108 | DistributionListManager::DistributionListManager( AddressBook *ab ) : | ||
109 | mAddressBook( ab ) | ||
110 | { | ||
111 | } | ||
112 | |||
113 | DistributionListManager::~DistributionListManager() | ||
114 | { | ||
115 | } | ||
116 | |||
117 | DistributionList *DistributionListManager::list( const QString &name ) | ||
118 | { | ||
119 | DistributionList *list; | ||
120 | for( list = mLists.first(); list; list = mLists.next() ) { | ||
121 | if ( list->name() == name ) return list; | ||
122 | } | ||
123 | |||
124 | return 0; | ||
125 | } | ||
126 | |||
127 | void DistributionListManager::insert( DistributionList *l ) | ||
128 | { | ||
129 | DistributionList *list; | ||
130 | for( list = mLists.first(); list; list = mLists.next() ) { | ||
131 | if ( list->name() == l->name() ) { | ||
132 | mLists.remove( list ); | ||
133 | break; | ||
134 | } | ||
135 | } | ||
136 | mLists.append( l ); | ||
137 | } | ||
138 | |||
139 | void DistributionListManager::remove( DistributionList *l ) | ||
140 | { | ||
141 | DistributionList *list; | ||
142 | for( list = mLists.first(); list; list = mLists.next() ) { | ||
143 | if ( list->name() == l->name() ) { | ||
144 | mLists.remove( list ); | ||
145 | return; | ||
146 | } | ||
147 | } | ||
148 | } | ||
149 | |||
150 | QStringList DistributionListManager::listNames() | ||
151 | { | ||
152 | QStringList names; | ||
153 | |||
154 | DistributionList *list; | ||
155 | for( list = mLists.first(); list; list = mLists.next() ) { | ||
156 | names.append( list->name() ); | ||
157 | } | ||
158 | |||
159 | return names; | ||
160 | } | ||
161 | |||
162 | bool DistributionListManager::load() | ||
163 | { | ||
164 | KSimpleConfig cfg( locateLocal( "data", "kabc/distlists" ) ); | ||
165 | |||
166 | #ifndef KAB_EMBEDDED | ||
167 | |||
168 | QMap<QString,QString> entryMap = cfg.entryMap( mAddressBook->identifier() ); | ||
169 | if ( entryMap.isEmpty() ) { | ||
170 | kdDebug(5700) << "No distlists for '" << mAddressBook->identifier() << "'" << endl; | ||
171 | return false; | ||
172 | } | ||
173 | |||
174 | cfg.setGroup( mAddressBook->identifier() ); | ||
175 | |||
176 | QMap<QString,QString>::ConstIterator it; | ||
177 | for( it = entryMap.begin(); it != entryMap.end(); ++it ) { | ||
178 | QString name = it.key(); | ||
179 | |||
180 | #else //KAB_EMBEDDED | ||
181 | cfg.setGroup( mAddressBook->identifier() ); | ||
182 | //US we work in microkde with a list of distributionlists | ||
183 | QStringList distlists = cfg.readListEntry( "Lists" ); | ||
184 | if ( distlists.isEmpty() ) { | ||
185 | kdDebug(5700) << "No distlists for '" << mAddressBook->identifier() << "'" << endl; | ||
186 | return false; | ||
187 | } | ||
188 | |||
189 | QStringList::ConstIterator it; | ||
190 | for( it = distlists.begin(); it != distlists.end(); ++it ) { | ||
191 | QString name = *it; | ||
192 | |||
193 | #endif //KAB_EMBEDDED | ||
194 | |||
195 | QStringList value = cfg.readListEntry( name ); | ||
196 | |||
197 | kdDebug(5700) << "DLM::load(): " << name << ": " << value.join(",") << endl; | ||
198 | |||
199 | DistributionList *list = new DistributionList( this, name ); | ||
200 | |||
201 | QStringList::ConstIterator it2 = value.begin(); | ||
202 | while( it2 != value.end() ) { | ||
203 | QString id = *it2++; | ||
204 | QString email = *it2; | ||
205 | |||
206 | kdDebug(5700) << "----- Entry " << id << endl; | ||
207 | |||
208 | Addressee a = mAddressBook->findByUid( id ); | ||
209 | if ( !a.isEmpty() ) { | ||
210 | list->insertEntry( a, email ); | ||
211 | } | ||
212 | |||
213 | if ( it2 == value.end() ) break; | ||
214 | ++it2; | ||
215 | } | ||
216 | } | ||
217 | |||
218 | return true; | ||
219 | } | ||
220 | |||
221 | bool DistributionListManager::save() | ||
222 | { | ||
223 | kdDebug(5700) << "DistListManager::save()" << endl; | ||
224 | |||
225 | KSimpleConfig cfg( locateLocal( "data", "kabc/distlists" ) ); | ||
226 | |||
227 | cfg.deleteGroup( mAddressBook->identifier() ); | ||
228 | cfg.setGroup( mAddressBook->identifier() ); | ||
229 | |||
230 | DistributionList *list; | ||
231 | for( list = mLists.first(); list; list = mLists.next() ) { | ||
232 | kdDebug(5700) << " Saving '" << list->name() << "'" << endl; | ||
233 | QStringList value; | ||
234 | DistributionList::Entry::List entries = list->entries(); | ||
235 | DistributionList::Entry::List::ConstIterator it; | ||
236 | for( it = entries.begin(); it != entries.end(); ++it ) { | ||
237 | value.append( (*it).addressee.uid() ); | ||
238 | value.append( (*it).email ); | ||
239 | } | ||
240 | cfg.writeEntry( list->name(), value ); | ||
241 | } | ||
242 | |||
243 | #ifdef KAB_EMBEDDED | ||
244 | //US for microKDE we have not yet sophisticated methods to load maps. | ||
245 | // Because of that we store also a list of all distributionlists. | ||
246 | QStringList namelist; | ||
247 | for( list = mLists.first(); list; list = mLists.next() ) { | ||
248 | namelist.append( list->name() ); | ||
249 | } | ||
250 | cfg.writeEntry( "Lists", namelist ); | ||
251 | |||
252 | #endif //KAB_EMBEDDED | ||
253 | |||
254 | cfg.sync(); | ||
255 | |||
256 | return true; | ||
257 | } | ||
258 | |||
259 | DistributionListWatcher* DistributionListWatcher::mSelf = 0; | ||
260 | |||
261 | DistributionListWatcher::DistributionListWatcher() | ||
262 | : QObject( 0, "DistributionListWatcher" ) | ||
263 | { | ||
264 | #ifndef KAB_EMBEDDED | ||
265 | mDirWatch = new KDirWatch; | ||
266 | mDirWatch->addFile( locateLocal( "data", "kabc/distlists" ) ); | ||
267 | |||
268 | connect( mDirWatch, SIGNAL( dirty( const QString& ) ), SIGNAL( changed() ) ); | ||
269 | mDirWatch->startScan(); | ||
270 | #endif //KAB_EMBEDDED | ||
271 | } | ||
272 | |||
273 | DistributionListWatcher::~DistributionListWatcher() | ||
274 | { | ||
275 | #ifndef KAB_EMBEDDED | ||
276 | delete mDirWatch; | ||
277 | mDirWatch = 0; | ||
278 | #endif //KAB_EMBEDDED | ||
279 | } | ||
280 | |||
281 | DistributionListWatcher *DistributionListWatcher::self() | ||
282 | { | ||
283 | if ( !mSelf ) | ||
284 | mSelf = new DistributionListWatcher(); | ||
285 | |||
286 | return mSelf; | ||
287 | } | ||
288 | |||
289 | |||
290 | #ifndef KAB_EMBEDDED | ||
291 | #include "distributionlist.moc" | ||
292 | #endif //KAB_EMBEDDED | ||
293 | |||
diff --git a/kabc/distributionlist.h b/kabc/distributionlist.h new file mode 100644 index 0000000..ccff487 --- a/dev/null +++ b/kabc/distributionlist.h | |||
@@ -0,0 +1,219 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef KABC_DISTRIBUTIONLIST_H | ||
22 | #define KABC_DISTRIBUTIONLIST_H | ||
23 | |||
24 | #include <kdirwatch.h> | ||
25 | |||
26 | #include "addressbook.h" | ||
27 | |||
28 | namespace KABC { | ||
29 | |||
30 | class DistributionListManager; | ||
31 | |||
32 | /** | ||
33 | @short Distribution list of email addresses | ||
34 | |||
35 | This class represents a list of email addresses. Each email address is | ||
36 | associated with an address book entry. If the address book entry changes, the | ||
37 | entry in the distribution list is automatically updated. | ||
38 | */ | ||
39 | class DistributionList | ||
40 | { | ||
41 | public: | ||
42 | /** | ||
43 | @short Distribution List Entry | ||
44 | |||
45 | This class represents an entry of a distribution list. It consists of an | ||
46 | addressee and an email address. If the email address is null, the | ||
47 | preferred email address of the addressee is used. | ||
48 | */ | ||
49 | struct Entry | ||
50 | { | ||
51 | typedef QValueList<Entry> List; | ||
52 | |||
53 | Entry() {} | ||
54 | Entry( const Addressee &_addressee, const QString &_email ) : | ||
55 | addressee( _addressee ), email( _email ) {} | ||
56 | |||
57 | Addressee addressee; | ||
58 | QString email; | ||
59 | }; | ||
60 | |||
61 | /** | ||
62 | Create distribution list object. | ||
63 | |||
64 | @param manager Managing object of this list. | ||
65 | @param name Name of this list. | ||
66 | */ | ||
67 | DistributionList( DistributionListManager *manager, const QString &name ); | ||
68 | |||
69 | /** | ||
70 | Destructor. | ||
71 | */ | ||
72 | ~DistributionList(); | ||
73 | |||
74 | /** | ||
75 | Set name of this list. The name is used as key by the | ||
76 | DistributinListManager. | ||
77 | */ | ||
78 | void setName( const QString & ); | ||
79 | |||
80 | /** | ||
81 | Get name of this list. | ||
82 | */ | ||
83 | QString name() const; | ||
84 | |||
85 | /** | ||
86 | Insert an entry into this distribution list. If the entry already exists | ||
87 | nothing happens. | ||
88 | */ | ||
89 | void insertEntry( const Addressee &, const QString &email=QString::null ); | ||
90 | |||
91 | /** | ||
92 | Remove an entry from this distribution list. If the entry doesn't exist | ||
93 | nothing happens. | ||
94 | */ | ||
95 | void removeEntry( const Addressee &, const QString &email=QString::null ); | ||
96 | |||
97 | /** | ||
98 | Return list of email addresses, which belong to this distributon list. | ||
99 | These addresses can be directly used by e.g. a mail client. | ||
100 | */ | ||
101 | QStringList emails() const; | ||
102 | |||
103 | /** | ||
104 | Return list of entries belonging to this distribution list. This function | ||
105 | is mainly useful for a distribution list editor. | ||
106 | */ | ||
107 | Entry::List entries() const; | ||
108 | |||
109 | private: | ||
110 | DistributionListManager *mManager; | ||
111 | QString mName; | ||
112 | |||
113 | Entry::List mEntries; | ||
114 | }; | ||
115 | |||
116 | /** | ||
117 | @short Manager of distribution lists | ||
118 | |||
119 | This class represents a collection of distribution lists, which are associated | ||
120 | with a given address book. | ||
121 | */ | ||
122 | class DistributionListManager | ||
123 | { | ||
124 | public: | ||
125 | /** | ||
126 | Create manager for given address book. | ||
127 | */ | ||
128 | DistributionListManager( AddressBook * ); | ||
129 | |||
130 | /** | ||
131 | Destructor. | ||
132 | */ | ||
133 | ~DistributionListManager(); | ||
134 | |||
135 | /** | ||
136 | Return distribution list with given name. | ||
137 | */ | ||
138 | DistributionList *list( const QString &name ); | ||
139 | |||
140 | /** | ||
141 | Insert distribution list. If a list with this name already exists, nothing | ||
142 | happens. | ||
143 | */ | ||
144 | void insert( DistributionList * ); | ||
145 | |||
146 | /** | ||
147 | Remove distribution list. If a list with this name doesn't exist, nothing | ||
148 | happens. | ||
149 | */ | ||
150 | void remove( DistributionList * ); | ||
151 | |||
152 | /** | ||
153 | Return names of all distribution lists managed by this manager. | ||
154 | */ | ||
155 | QStringList listNames(); | ||
156 | |||
157 | /** | ||
158 | Load distribution lists form disk. | ||
159 | */ | ||
160 | bool load(); | ||
161 | |||
162 | /** | ||
163 | Save distribution lists to disk. | ||
164 | */ | ||
165 | bool save(); | ||
166 | |||
167 | private: | ||
168 | AddressBook *mAddressBook; | ||
169 | |||
170 | QPtrList<DistributionList> mLists; | ||
171 | }; | ||
172 | |||
173 | /** | ||
174 | @short Watchdog for distribution lists | ||
175 | |||
176 | This class provides a @ref changed() signal that i emitted when the | ||
177 | distribution lists has changed in some way. | ||
178 | |||
179 | Exapmle: | ||
180 | |||
181 | <pre> | ||
182 | KABC::DistributionListWatcher *watchdog = KABC::DistributionListWatcher::self() | ||
183 | |||
184 | connect( watchdog, SIGNAL( changed() ), SLOT( doSomething() ) ); | ||
185 | </pre> | ||
186 | */ | ||
187 | |||
188 | class DistributionListWatcher : public QObject | ||
189 | { | ||
190 | Q_OBJECT | ||
191 | |||
192 | public: | ||
193 | /** | ||
194 | * Returns the watcher object. | ||
195 | */ | ||
196 | static DistributionListWatcher *self(); | ||
197 | |||
198 | |||
199 | signals: | ||
200 | /** | ||
201 | * This signal is emmitted whenever the distribution lists has | ||
202 | * changed (if a list was added or removed, when a list was | ||
203 | * renamed or the entries of the list changed). | ||
204 | */ | ||
205 | void changed(); | ||
206 | |||
207 | protected: | ||
208 | DistributionListWatcher(); | ||
209 | ~DistributionListWatcher(); | ||
210 | |||
211 | private: | ||
212 | static DistributionListWatcher* mSelf; | ||
213 | #ifndef KAB_EMBEDDED | ||
214 | KDirWatch *mDirWatch; | ||
215 | #endif //KAB_EMBEDDED | ||
216 | }; | ||
217 | |||
218 | } | ||
219 | #endif | ||
diff --git a/kabc/distributionlistdialog.cpp b/kabc/distributionlistdialog.cpp new file mode 100644 index 0000000..31d5944 --- a/dev/null +++ b/kabc/distributionlistdialog.cpp | |||
@@ -0,0 +1,396 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include <qlistview.h> | ||
22 | #include <qlayout.h> | ||
23 | #include <qlabel.h> | ||
24 | #include <qpushbutton.h> | ||
25 | #include <qcombobox.h> | ||
26 | #include <klineeditdlg.h> | ||
27 | #include <qbuttongroup.h> | ||
28 | #include <qradiobutton.h> | ||
29 | |||
30 | #include <klocale.h> | ||
31 | #include <kdebug.h> | ||
32 | #include <kmessagebox.h> | ||
33 | |||
34 | #include "addressbook.h" | ||
35 | #include "addresseedialog.h" | ||
36 | #include "distributionlist.h" | ||
37 | |||
38 | #include "distributionlistdialog.h" | ||
39 | |||
40 | #ifndef KAB_EMBEDDED | ||
41 | #include "distributionlistdialog.moc" | ||
42 | #endif //KAB_EMBEDDED | ||
43 | |||
44 | using namespace KABC; | ||
45 | |||
46 | DistributionListDialog::DistributionListDialog( AddressBook *addressBook, QWidget *parent) | ||
47 | : KDialogBase( parent, "", true, i18n("Configure Distribution Lists"), Ok, Ok, true) | ||
48 | { | ||
49 | mEditor = new DistributionListEditorWidget( addressBook, this ); | ||
50 | setMainWidget( mEditor ); | ||
51 | |||
52 | connect( this, SIGNAL( okClicked() ), mEditor, SLOT( save() ) ); | ||
53 | } | ||
54 | |||
55 | DistributionListDialog::~DistributionListDialog() | ||
56 | { | ||
57 | } | ||
58 | |||
59 | |||
60 | EmailSelector::EmailSelector( const QStringList &emails, const QString ¤t, | ||
61 | QWidget *parent ) : | ||
62 | KDialogBase( KDialogBase::Plain, i18n("Select Email Address"), Ok, Ok, | ||
63 | parent ) | ||
64 | { | ||
65 | QFrame *topFrame = plainPage(); | ||
66 | QBoxLayout *topLayout = new QVBoxLayout( topFrame ); | ||
67 | |||
68 | mButtonGroup = new QButtonGroup( 1, Horizontal, i18n("Email Addresses"), | ||
69 | topFrame ); | ||
70 | topLayout->addWidget( mButtonGroup ); | ||
71 | |||
72 | QStringList::ConstIterator it; | ||
73 | for( it = emails.begin(); it != emails.end(); ++it ) { | ||
74 | QRadioButton *button = new QRadioButton( *it, mButtonGroup ); | ||
75 | if ( (*it) == current ) { | ||
76 | button->setDown( true ); | ||
77 | } | ||
78 | } | ||
79 | } | ||
80 | |||
81 | QString EmailSelector::selected() | ||
82 | { | ||
83 | QButton *button = mButtonGroup->selected(); | ||
84 | if ( button ) return button->text(); | ||
85 | return QString::null; | ||
86 | } | ||
87 | |||
88 | QString EmailSelector::getEmail( const QStringList &emails, const QString ¤t, | ||
89 | QWidget *parent ) | ||
90 | { | ||
91 | EmailSelector *dlg = new EmailSelector( emails, current, parent ); | ||
92 | dlg->exec(); | ||
93 | |||
94 | QString result = dlg->selected(); | ||
95 | |||
96 | delete dlg; | ||
97 | |||
98 | return result; | ||
99 | } | ||
100 | |||
101 | class EntryItem : public QListViewItem | ||
102 | { | ||
103 | public: | ||
104 | EntryItem( QListView *parent, const Addressee &addressee, | ||
105 | const QString &email=QString::null ) : | ||
106 | QListViewItem( parent ), | ||
107 | mAddressee( addressee ), | ||
108 | mEmail( email ) | ||
109 | { | ||
110 | setText( 0, addressee.realName() ); | ||
111 | if( email.isEmpty() ) { | ||
112 | setText( 1, addressee.preferredEmail() ); | ||
113 | setText( 2, i18n("Yes") ); | ||
114 | } else { | ||
115 | setText( 1, email ); | ||
116 | setText( 2, i18n("No") ); | ||
117 | } | ||
118 | } | ||
119 | |||
120 | Addressee addressee() const | ||
121 | { | ||
122 | return mAddressee; | ||
123 | } | ||
124 | |||
125 | QString email() const | ||
126 | { | ||
127 | return mEmail; | ||
128 | } | ||
129 | |||
130 | private: | ||
131 | Addressee mAddressee; | ||
132 | QString mEmail; | ||
133 | }; | ||
134 | |||
135 | DistributionListEditorWidget::DistributionListEditorWidget( AddressBook *addressBook, QWidget *parent) : | ||
136 | QWidget( parent ), | ||
137 | mAddressBook( addressBook ) | ||
138 | { | ||
139 | kdDebug(5700) << "DistributionListEditor()" << endl; | ||
140 | |||
141 | QBoxLayout *topLayout = new QVBoxLayout( this ); | ||
142 | topLayout->setSpacing( KDialog::spacingHint() ); | ||
143 | |||
144 | QBoxLayout *nameLayout = new QHBoxLayout( topLayout) ; | ||
145 | |||
146 | mNameCombo = new QComboBox( this ); | ||
147 | nameLayout->addWidget( mNameCombo ); | ||
148 | connect( mNameCombo, SIGNAL( activated( int ) ), SLOT( updateEntryView() ) ); | ||
149 | |||
150 | mNewButton = new QPushButton( i18n("New List..."), this ); | ||
151 | nameLayout->addWidget( mNewButton ); | ||
152 | connect( mNewButton, SIGNAL( clicked() ), SLOT( newList() ) ); | ||
153 | |||
154 | mEditButton = new QPushButton( i18n("Rename List..."), this ); | ||
155 | nameLayout->addWidget( mEditButton ); | ||
156 | connect( mEditButton, SIGNAL( clicked() ), SLOT( editList() ) ); | ||
157 | |||
158 | mRemoveButton = new QPushButton( i18n("Remove List"), this ); | ||
159 | nameLayout->addWidget( mRemoveButton ); | ||
160 | connect( mRemoveButton, SIGNAL( clicked() ), SLOT( removeList() ) ); | ||
161 | |||
162 | QGridLayout *gridLayout = new QGridLayout( topLayout, 3, 3 ); | ||
163 | gridLayout->setColStretch(1, 1); | ||
164 | |||
165 | QLabel *listLabel = new QLabel( i18n("Available addresses:"), this ); | ||
166 | gridLayout->addWidget( listLabel, 0, 0 ); | ||
167 | |||
168 | mListLabel = new QLabel( this ); | ||
169 | gridLayout->addMultiCellWidget( mListLabel, 0, 0, 1, 2 ); | ||
170 | |||
171 | mAddresseeView = new QListView( this ); | ||
172 | mAddresseeView->addColumn( i18n("Name") ); | ||
173 | mAddresseeView->addColumn( i18n("Preferred Email") ); | ||
174 | mAddresseeView->setAllColumnsShowFocus( true ); | ||
175 | gridLayout->addWidget( mAddresseeView, 1, 0 ); | ||
176 | connect( mAddresseeView, SIGNAL( selectionChanged() ), | ||
177 | SLOT( slotSelectionAddresseeViewChanged() ) ); | ||
178 | connect( mAddresseeView, SIGNAL( doubleClicked( QListViewItem * ) ), | ||
179 | SLOT( addEntry() ) ); | ||
180 | |||
181 | mAddEntryButton = new QPushButton( i18n("Add Entry"), this ); | ||
182 | mAddEntryButton->setEnabled(false); | ||
183 | gridLayout->addWidget( mAddEntryButton, 2, 0 ); | ||
184 | connect( mAddEntryButton, SIGNAL( clicked() ), SLOT( addEntry() ) ); | ||
185 | |||
186 | mEntryView = new QListView( this ); | ||
187 | mEntryView->addColumn( i18n("Name") ); | ||
188 | mEntryView->addColumn( i18n("Email") ); | ||
189 | mEntryView->addColumn( i18n("Use Preferred") ); | ||
190 | mEntryView->setEnabled(false); | ||
191 | mEntryView->setAllColumnsShowFocus( true ); | ||
192 | gridLayout->addMultiCellWidget( mEntryView, 1, 1, 1, 2 ); | ||
193 | connect( mEntryView, SIGNAL( selectionChanged() ), | ||
194 | SLOT( slotSelectionEntryViewChanged() ) ); | ||
195 | |||
196 | mChangeEmailButton = new QPushButton( i18n("Change Email..."), this ); | ||
197 | gridLayout->addWidget( mChangeEmailButton, 2, 1 ); | ||
198 | connect( mChangeEmailButton, SIGNAL( clicked() ), SLOT( changeEmail() ) ); | ||
199 | |||
200 | mRemoveEntryButton = new QPushButton( i18n("Remove Entry"), this ); | ||
201 | gridLayout->addWidget( mRemoveEntryButton, 2, 2 ); | ||
202 | connect( mRemoveEntryButton, SIGNAL( clicked() ), SLOT( removeEntry() ) ); | ||
203 | |||
204 | mManager = new DistributionListManager( mAddressBook ); | ||
205 | mManager->load(); | ||
206 | |||
207 | updateAddresseeView(); | ||
208 | updateNameCombo(); | ||
209 | } | ||
210 | |||
211 | DistributionListEditorWidget::~DistributionListEditorWidget() | ||
212 | { | ||
213 | kdDebug(5700) << "~DistributionListEditor()" << endl; | ||
214 | |||
215 | delete mManager; | ||
216 | } | ||
217 | |||
218 | void DistributionListEditorWidget::save() | ||
219 | { | ||
220 | mManager->save(); | ||
221 | } | ||
222 | |||
223 | void DistributionListEditorWidget::slotSelectionEntryViewChanged() | ||
224 | { | ||
225 | EntryItem *entryItem = static_cast<EntryItem *>( mEntryView->selectedItem() ); | ||
226 | bool state=entryItem; | ||
227 | |||
228 | mChangeEmailButton->setEnabled(state); | ||
229 | mRemoveEntryButton->setEnabled(state); | ||
230 | } | ||
231 | |||
232 | void DistributionListEditorWidget::newList() | ||
233 | { | ||
234 | KLineEditDlg dlg(i18n("Please enter name:"), QString::null, this); | ||
235 | dlg.setCaption(i18n("New Distribution List")); | ||
236 | if (!dlg.exec()) return; | ||
237 | |||
238 | new DistributionList( mManager, dlg.text() ); | ||
239 | |||
240 | mNameCombo->clear(); | ||
241 | mNameCombo->insertStringList( mManager->listNames() ); | ||
242 | mNameCombo->setCurrentItem( mNameCombo->count() - 1 ); | ||
243 | |||
244 | updateEntryView(); | ||
245 | slotSelectionAddresseeViewChanged(); | ||
246 | } | ||
247 | |||
248 | void DistributionListEditorWidget::editList() | ||
249 | { | ||
250 | QString oldName = mNameCombo->currentText(); | ||
251 | |||
252 | KLineEditDlg dlg(i18n("Please change name:"), oldName, this); | ||
253 | dlg.setCaption(i18n("Distribution List")); | ||
254 | if (!dlg.exec()) return; | ||
255 | |||
256 | DistributionList *list = mManager->list( oldName ); | ||
257 | list->setName( dlg.text() ); | ||
258 | |||
259 | mNameCombo->clear(); | ||
260 | mNameCombo->insertStringList( mManager->listNames() ); | ||
261 | mNameCombo->setCurrentItem( mNameCombo->count() - 1 ); | ||
262 | |||
263 | updateEntryView(); | ||
264 | slotSelectionAddresseeViewChanged(); | ||
265 | } | ||
266 | |||
267 | void DistributionListEditorWidget::removeList() | ||
268 | { | ||
269 | int result = KMessageBox::warningContinueCancel( this, | ||
270 | i18n("Delete distribution list '%1'?") .arg( mNameCombo->currentText() ), | ||
271 | QString::null, i18n("Delete") ); | ||
272 | |||
273 | if ( result != KMessageBox::Continue ) return; | ||
274 | |||
275 | delete mManager->list( mNameCombo->currentText() ); | ||
276 | mNameCombo->removeItem( mNameCombo->currentItem() ); | ||
277 | |||
278 | updateEntryView(); | ||
279 | slotSelectionAddresseeViewChanged(); | ||
280 | } | ||
281 | |||
282 | void DistributionListEditorWidget::addEntry() | ||
283 | { | ||
284 | AddresseeItem *addresseeItem = | ||
285 | static_cast<AddresseeItem *>( mAddresseeView->selectedItem() ); | ||
286 | |||
287 | if( !addresseeItem ) { | ||
288 | kdDebug(5700) << "DLE::addEntry(): No addressee selected." << endl; | ||
289 | return; | ||
290 | } | ||
291 | |||
292 | DistributionList *list = mManager->list( mNameCombo->currentText() ); | ||
293 | if ( !list ) { | ||
294 | kdDebug(5700) << "DLE::addEntry(): No dist list '" << mNameCombo->currentText() << "'" << endl; | ||
295 | return; | ||
296 | } | ||
297 | |||
298 | list->insertEntry( addresseeItem->addressee() ); | ||
299 | updateEntryView(); | ||
300 | slotSelectionAddresseeViewChanged(); | ||
301 | } | ||
302 | |||
303 | void DistributionListEditorWidget::removeEntry() | ||
304 | { | ||
305 | DistributionList *list = mManager->list( mNameCombo->currentText() ); | ||
306 | if ( !list ) return; | ||
307 | |||
308 | EntryItem *entryItem = | ||
309 | static_cast<EntryItem *>( mEntryView->selectedItem() ); | ||
310 | if ( !entryItem ) return; | ||
311 | |||
312 | list->removeEntry( entryItem->addressee(), entryItem->email() ); | ||
313 | delete entryItem; | ||
314 | } | ||
315 | |||
316 | void DistributionListEditorWidget::changeEmail() | ||
317 | { | ||
318 | DistributionList *list = mManager->list( mNameCombo->currentText() ); | ||
319 | if ( !list ) return; | ||
320 | |||
321 | EntryItem *entryItem = | ||
322 | static_cast<EntryItem *>( mEntryView->selectedItem() ); | ||
323 | if ( !entryItem ) return; | ||
324 | |||
325 | QString email = EmailSelector::getEmail( entryItem->addressee().emails(), | ||
326 | entryItem->email(), this ); | ||
327 | list->removeEntry( entryItem->addressee(), entryItem->email() ); | ||
328 | list->insertEntry( entryItem->addressee(), email ); | ||
329 | |||
330 | updateEntryView(); | ||
331 | } | ||
332 | |||
333 | void DistributionListEditorWidget::updateEntryView() | ||
334 | { | ||
335 | if ( mNameCombo->currentText().isEmpty() ) { | ||
336 | mListLabel->setText( i18n("Selected addressees:") ); | ||
337 | } else { | ||
338 | mListLabel->setText( i18n("Selected addresses in '%1':") | ||
339 | .arg( mNameCombo->currentText() ) ); | ||
340 | } | ||
341 | |||
342 | mEntryView->clear(); | ||
343 | |||
344 | DistributionList *list = mManager->list( mNameCombo->currentText() ); | ||
345 | if ( !list ) { | ||
346 | mEditButton->setEnabled(false); | ||
347 | mRemoveButton->setEnabled(false); | ||
348 | mChangeEmailButton->setEnabled(false); | ||
349 | mRemoveEntryButton->setEnabled(false); | ||
350 | mAddresseeView->setEnabled(false); | ||
351 | mEntryView->setEnabled(false); | ||
352 | return; | ||
353 | } else { | ||
354 | mEditButton->setEnabled(true); | ||
355 | mRemoveButton->setEnabled(true); | ||
356 | mAddresseeView->setEnabled(true); | ||
357 | mEntryView->setEnabled(true); | ||
358 | } | ||
359 | |||
360 | DistributionList::Entry::List entries = list->entries(); | ||
361 | DistributionList::Entry::List::ConstIterator it; | ||
362 | for( it = entries.begin(); it != entries.end(); ++it ) { | ||
363 | new EntryItem( mEntryView, (*it).addressee, (*it).email ); | ||
364 | } | ||
365 | |||
366 | EntryItem *entryItem = static_cast<EntryItem *>( mEntryView->selectedItem() ); | ||
367 | bool state=entryItem; | ||
368 | |||
369 | mChangeEmailButton->setEnabled(state); | ||
370 | mRemoveEntryButton->setEnabled(state); | ||
371 | } | ||
372 | |||
373 | void DistributionListEditorWidget::updateAddresseeView() | ||
374 | { | ||
375 | mAddresseeView->clear(); | ||
376 | |||
377 | AddressBook::Iterator it; | ||
378 | for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { | ||
379 | new AddresseeItem( mAddresseeView, *it ); | ||
380 | } | ||
381 | } | ||
382 | |||
383 | void DistributionListEditorWidget::updateNameCombo() | ||
384 | { | ||
385 | mNameCombo->insertStringList( mManager->listNames() ); | ||
386 | |||
387 | updateEntryView(); | ||
388 | } | ||
389 | |||
390 | void DistributionListEditorWidget::slotSelectionAddresseeViewChanged() | ||
391 | { | ||
392 | AddresseeItem *addresseeItem = | ||
393 | static_cast<AddresseeItem *>( mAddresseeView->selectedItem() ); | ||
394 | bool state=addresseeItem; | ||
395 | mAddEntryButton->setEnabled( state && !mNameCombo->currentText().isEmpty()); | ||
396 | } | ||
diff --git a/kabc/distributionlistdialog.h b/kabc/distributionlistdialog.h new file mode 100644 index 0000000..b6d3c80 --- a/dev/null +++ b/kabc/distributionlistdialog.h | |||
@@ -0,0 +1,140 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef KABC_DISTRIBUTIONLISTDIALOG_H | ||
22 | #define KABC_DISTRIBUTIONLISTDIALOG_H | ||
23 | |||
24 | #include <qwidget.h> | ||
25 | |||
26 | #include <kdialogbase.h> | ||
27 | |||
28 | class QListView; | ||
29 | class QLabel; | ||
30 | class QComboBox; | ||
31 | class QButtonGroup; | ||
32 | |||
33 | namespace KABC { | ||
34 | |||
35 | class AddressBook; | ||
36 | class DistributionListEditorWidget; | ||
37 | class DistributionListManager; | ||
38 | |||
39 | /** | ||
40 | @short Frontend to create distribution lists | ||
41 | |||
42 | Creating a new DistributionListDialog does automatically | ||
43 | load all addressees and distribution lists from the config | ||
44 | files. The changes will be saved when clicking the 'OK' | ||
45 | button. | ||
46 | |||
47 | Example: | ||
48 | |||
49 | <pre> | ||
50 | KABC::DistributionListDialog *dlg = new | ||
51 | KABC::DistributionListDialog( KABC::StdAddressBook::self(), this ); | ||
52 | |||
53 | dlg->exec(); | ||
54 | </pre> | ||
55 | */ | ||
56 | class DistributionListDialog : public KDialogBase | ||
57 | { | ||
58 | Q_OBJECT | ||
59 | |||
60 | public: | ||
61 | /** | ||
62 | Constructor. | ||
63 | |||
64 | @param ab The addressbook, the addressees should be used from | ||
65 | @param parent The parent widget | ||
66 | */ | ||
67 | DistributionListDialog( AddressBook *ab, QWidget *parent ); | ||
68 | |||
69 | /** | ||
70 | Destructor. | ||
71 | */ | ||
72 | virtual ~DistributionListDialog(); | ||
73 | |||
74 | private: | ||
75 | DistributionListEditorWidget *mEditor; | ||
76 | |||
77 | struct Data; | ||
78 | Data *d; | ||
79 | }; | ||
80 | |||
81 | /** | ||
82 | @short Helper class | ||
83 | */ | ||
84 | class EmailSelector : public KDialogBase | ||
85 | { | ||
86 | public: | ||
87 | EmailSelector( const QStringList &emails, const QString ¤t, | ||
88 | QWidget *parent ); | ||
89 | |||
90 | QString selected(); | ||
91 | |||
92 | static QString getEmail( const QStringList &emails, const QString ¤t, | ||
93 | QWidget *parent ); | ||
94 | |||
95 | private: | ||
96 | QButtonGroup *mButtonGroup; | ||
97 | }; | ||
98 | |||
99 | /** | ||
100 | @short Helper class | ||
101 | */ | ||
102 | class DistributionListEditorWidget : public QWidget | ||
103 | { | ||
104 | Q_OBJECT | ||
105 | |||
106 | public: | ||
107 | DistributionListEditorWidget( AddressBook *, QWidget *parent ); | ||
108 | virtual ~DistributionListEditorWidget(); | ||
109 | |||
110 | private slots: | ||
111 | void newList(); | ||
112 | void editList(); | ||
113 | void removeList(); | ||
114 | void addEntry(); | ||
115 | void removeEntry(); | ||
116 | void changeEmail(); | ||
117 | void updateEntryView(); | ||
118 | void updateAddresseeView(); | ||
119 | void updateNameCombo(); | ||
120 | void slotSelectionEntryViewChanged(); | ||
121 | void slotSelectionAddresseeViewChanged(); | ||
122 | void save(); | ||
123 | |||
124 | private: | ||
125 | QComboBox *mNameCombo; | ||
126 | QLabel *mListLabel; | ||
127 | QListView *mEntryView; | ||
128 | QListView *mAddresseeView; | ||
129 | |||
130 | AddressBook *mAddressBook; | ||
131 | DistributionListManager *mManager; | ||
132 | QPushButton *mNewButton, *mEditButton, *mRemoveButton; | ||
133 | QPushButton *mChangeEmailButton, *mRemoveEntryButton, *mAddEntryButton; | ||
134 | |||
135 | struct Data; | ||
136 | Data *d; | ||
137 | }; | ||
138 | |||
139 | } | ||
140 | #endif | ||
diff --git a/kabc/distributionlisteditor.cpp b/kabc/distributionlisteditor.cpp new file mode 100644 index 0000000..569dc96 --- a/dev/null +++ b/kabc/distributionlisteditor.cpp | |||
@@ -0,0 +1,335 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include <qlistview.h> | ||
22 | #include <qlayout.h> | ||
23 | #include <qpushbutton.h> | ||
24 | #include <qcombobox.h> | ||
25 | #include <qinputdialog.h> | ||
26 | #include <qbuttongroup.h> | ||
27 | #include <qradiobutton.h> | ||
28 | |||
29 | #include <klocale.h> | ||
30 | #include <kdebug.h> | ||
31 | |||
32 | #include "addressbook.h" | ||
33 | #include "addresseedialog.h" | ||
34 | #include "distributionlist.h" | ||
35 | |||
36 | #include "distributionlisteditor.h" | ||
37 | |||
38 | #ifndef KAB_EMBEDDED | ||
39 | #include "distributionlisteditor.moc" | ||
40 | #endif //KAB_EMBEDDED | ||
41 | |||
42 | using namespace KABC; | ||
43 | |||
44 | EmailSelectDialog::EmailSelectDialog( const QStringList &emails, const QString ¤t, | ||
45 | QWidget *parent ) : | ||
46 | KDialogBase( KDialogBase::Plain, i18n("Select Email Address"), Ok, Ok, | ||
47 | parent ) | ||
48 | { | ||
49 | QFrame *topFrame = plainPage(); | ||
50 | QBoxLayout *topLayout = new QVBoxLayout( topFrame ); | ||
51 | |||
52 | mButtonGroup = new QButtonGroup( 1, Horizontal, i18n("Email Addresses"), | ||
53 | topFrame ); | ||
54 | topLayout->addWidget( mButtonGroup ); | ||
55 | |||
56 | QStringList::ConstIterator it; | ||
57 | for( it = emails.begin(); it != emails.end(); ++it ) { | ||
58 | QRadioButton *button = new QRadioButton( *it, mButtonGroup ); | ||
59 | if ( (*it) == current ) { | ||
60 | button->setDown( true ); | ||
61 | } | ||
62 | } | ||
63 | } | ||
64 | |||
65 | QString EmailSelectDialog::selected() | ||
66 | { | ||
67 | QButton *button = mButtonGroup->selected(); | ||
68 | if ( button ) return button->text(); | ||
69 | return QString::null; | ||
70 | } | ||
71 | |||
72 | QString EmailSelectDialog::getEmail( const QStringList &emails, const QString ¤t, | ||
73 | QWidget *parent ) | ||
74 | { | ||
75 | EmailSelectDialog *dlg = new EmailSelectDialog( emails, current, parent ); | ||
76 | dlg->exec(); | ||
77 | |||
78 | QString result = dlg->selected(); | ||
79 | |||
80 | delete dlg; | ||
81 | |||
82 | return result; | ||
83 | } | ||
84 | |||
85 | class EditEntryItem : public QListViewItem | ||
86 | { | ||
87 | public: | ||
88 | EditEntryItem( QListView *parent, const Addressee &addressee, | ||
89 | const QString &email=QString::null ) : | ||
90 | QListViewItem( parent ), | ||
91 | mAddressee( addressee ), | ||
92 | mEmail( email ) | ||
93 | { | ||
94 | setText( 0, addressee.realName() ); | ||
95 | if( email.isEmpty() ) { | ||
96 | setText( 1, addressee.preferredEmail() ); | ||
97 | setText( 2, i18n("Yes") ); | ||
98 | } else { | ||
99 | setText( 1, email ); | ||
100 | setText( 2, i18n("No") ); | ||
101 | } | ||
102 | } | ||
103 | |||
104 | Addressee addressee() const | ||
105 | { | ||
106 | return mAddressee; | ||
107 | } | ||
108 | |||
109 | QString email() const | ||
110 | { | ||
111 | return mEmail; | ||
112 | } | ||
113 | |||
114 | private: | ||
115 | Addressee mAddressee; | ||
116 | QString mEmail; | ||
117 | }; | ||
118 | |||
119 | DistributionListEditor::DistributionListEditor( AddressBook *addressBook, QWidget *parent) : | ||
120 | QWidget( parent ), | ||
121 | mAddressBook( addressBook ) | ||
122 | { | ||
123 | kdDebug(5700) << "DistributionListEditor()" << endl; | ||
124 | |||
125 | QBoxLayout *topLayout = new QVBoxLayout( this ); | ||
126 | topLayout->setMargin( KDialog::marginHint() ); | ||
127 | topLayout->setSpacing( KDialog::spacingHint() ); | ||
128 | |||
129 | QBoxLayout *nameLayout = new QHBoxLayout( topLayout) ; | ||
130 | |||
131 | mNameCombo = new QComboBox( this ); | ||
132 | nameLayout->addWidget( mNameCombo ); | ||
133 | connect( mNameCombo, SIGNAL( activated( int ) ), SLOT( updateEntryView() ) ); | ||
134 | |||
135 | newButton = new QPushButton( i18n("New List"), this ); | ||
136 | nameLayout->addWidget( newButton ); | ||
137 | connect( newButton, SIGNAL( clicked() ), SLOT( newList() ) ); | ||
138 | |||
139 | removeButton = new QPushButton( i18n("Remove List"), this ); | ||
140 | nameLayout->addWidget( removeButton ); | ||
141 | connect( removeButton, SIGNAL( clicked() ), SLOT( removeList() ) ); | ||
142 | |||
143 | mEntryView = new QListView( this ); | ||
144 | mEntryView->addColumn( i18n("Name") ); | ||
145 | mEntryView->addColumn( i18n("Email") ); | ||
146 | mEntryView->addColumn( i18n("Use Preferred") ); | ||
147 | topLayout->addWidget( mEntryView ); | ||
148 | connect(mEntryView,SIGNAL(selectionChanged ()),this, SLOT(slotSelectionEntryViewChanged())); | ||
149 | |||
150 | changeEmailButton = new QPushButton( i18n("Change Email"), this ); | ||
151 | topLayout->addWidget( changeEmailButton ); | ||
152 | connect( changeEmailButton, SIGNAL( clicked() ), SLOT( changeEmail() ) ); | ||
153 | |||
154 | removeEntryButton = new QPushButton( i18n("Remove Entry"), this ); | ||
155 | topLayout->addWidget( removeEntryButton ); | ||
156 | connect( removeEntryButton, SIGNAL( clicked() ), SLOT( removeEntry() ) ); | ||
157 | |||
158 | addEntryButton = new QPushButton( i18n("Add Entry"), this ); | ||
159 | topLayout->addWidget( addEntryButton ); | ||
160 | connect( addEntryButton, SIGNAL( clicked() ), SLOT( addEntry() ) ); | ||
161 | |||
162 | mAddresseeView = new QListView( this ); | ||
163 | mAddresseeView->addColumn( i18n("Name") ); | ||
164 | mAddresseeView->addColumn( i18n("Preferred Email") ); | ||
165 | topLayout->addWidget( mAddresseeView ); | ||
166 | |||
167 | |||
168 | connect(mAddresseeView,SIGNAL(selectionChanged ()),this, SLOT(slotSelectionAddresseeViewChanged())); | ||
169 | |||
170 | mManager = new DistributionListManager( mAddressBook ); | ||
171 | mManager->load(); | ||
172 | |||
173 | updateAddresseeView(); | ||
174 | updateNameCombo(); | ||
175 | removeButton->setEnabled(!mManager->listNames().isEmpty()); | ||
176 | } | ||
177 | |||
178 | DistributionListEditor::~DistributionListEditor() | ||
179 | { | ||
180 | kdDebug(5700) << "~DistributionListEditor()" << endl; | ||
181 | |||
182 | mManager->save(); | ||
183 | delete mManager; | ||
184 | } | ||
185 | |||
186 | void DistributionListEditor::slotSelectionEntryViewChanged() | ||
187 | { | ||
188 | #ifndef KAB_EMBEDDED | ||
189 | EditEntryItem *entryItem = dynamic_cast<EditEntryItem *>( mEntryView->selectedItem() ); | ||
190 | #else //KAB_EMBEDDED | ||
191 | EditEntryItem *entryItem = (EditEntryItem *)( mEntryView->selectedItem() ); | ||
192 | #endif //KAB_EMBEDDED | ||
193 | bool state = (entryItem != 0L); | ||
194 | |||
195 | changeEmailButton->setEnabled(state); | ||
196 | removeEntryButton->setEnabled(state); | ||
197 | } | ||
198 | |||
199 | void DistributionListEditor::newList() | ||
200 | { | ||
201 | bool ok = false; | ||
202 | QString name = QInputDialog::getText( i18n("New Distribution List"), | ||
203 | i18n("Please enter name:"), | ||
204 | QLineEdit::Normal, QString::null, &ok, | ||
205 | this ); | ||
206 | if ( !ok || name.isEmpty() ) return; | ||
207 | |||
208 | new DistributionList( mManager, name ); | ||
209 | |||
210 | mNameCombo->insertItem( name ); | ||
211 | removeButton->setEnabled(true); | ||
212 | updateEntryView(); | ||
213 | } | ||
214 | |||
215 | void DistributionListEditor::removeList() | ||
216 | { | ||
217 | delete mManager->list( mNameCombo->currentText() ); | ||
218 | mNameCombo->removeItem( mNameCombo->currentItem() ); | ||
219 | removeButton->setEnabled(!mManager->listNames().isEmpty()); | ||
220 | addEntryButton->setEnabled( !mNameCombo->currentText().isEmpty()); | ||
221 | updateEntryView(); | ||
222 | } | ||
223 | |||
224 | void DistributionListEditor::addEntry() | ||
225 | { | ||
226 | #ifndef KAB_EMBEDDED | ||
227 | AddresseeItem *addresseeItem = | ||
228 | dynamic_cast<AddresseeItem *>( mAddresseeView->selectedItem() ); | ||
229 | #else //KAB_EMBEDDED | ||
230 | AddresseeItem *addresseeItem = | ||
231 | (AddresseeItem *)( mAddresseeView->selectedItem() ); | ||
232 | #endif //KAB_EMBEDDED | ||
233 | |||
234 | |||
235 | if( !addresseeItem ) { | ||
236 | kdDebug(5700) << "DLE::addEntry(): No addressee selected." << endl; | ||
237 | return; | ||
238 | } | ||
239 | |||
240 | DistributionList *list = mManager->list( mNameCombo->currentText() ); | ||
241 | if ( !list ) { | ||
242 | kdDebug(5700) << "DLE::addEntry(): No dist list '" << mNameCombo->currentText() << "'" << endl; | ||
243 | return; | ||
244 | } | ||
245 | |||
246 | list->insertEntry( addresseeItem->addressee() ); | ||
247 | updateEntryView(); | ||
248 | slotSelectionAddresseeViewChanged(); | ||
249 | } | ||
250 | |||
251 | void DistributionListEditor::removeEntry() | ||
252 | { | ||
253 | DistributionList *list = mManager->list( mNameCombo->currentText() ); | ||
254 | if ( !list ) return; | ||
255 | |||
256 | #ifndef KAB_EMBEDDED | ||
257 | EditEntryItem *entryItem = dynamic_cast<EditEntryItem *>( mEntryView->selectedItem() ); | ||
258 | #else //KAB_EMBEDDED | ||
259 | EditEntryItem *entryItem = (EditEntryItem *)( mEntryView->selectedItem() ); | ||
260 | #endif //KAB_EMBEDDED | ||
261 | if ( !entryItem ) return; | ||
262 | |||
263 | list->removeEntry( entryItem->addressee(), entryItem->email() ); | ||
264 | delete entryItem; | ||
265 | } | ||
266 | |||
267 | void DistributionListEditor::changeEmail() | ||
268 | { | ||
269 | DistributionList *list = mManager->list( mNameCombo->currentText() ); | ||
270 | if ( !list ) return; | ||
271 | |||
272 | #ifndef KAB_EMBEDDED | ||
273 | EditEntryItem *entryItem = dynamic_cast<EditEntryItem *>( mEntryView->selectedItem() ); | ||
274 | #else //KAB_EMBEDDED | ||
275 | EditEntryItem *entryItem = (EditEntryItem *)( mEntryView->selectedItem() ); | ||
276 | #endif //KAB_EMBEDDED | ||
277 | if ( !entryItem ) return; | ||
278 | |||
279 | QString email = EmailSelectDialog::getEmail( entryItem->addressee().emails(), | ||
280 | entryItem->email(), this ); | ||
281 | list->removeEntry( entryItem->addressee(), entryItem->email() ); | ||
282 | list->insertEntry( entryItem->addressee(), email ); | ||
283 | |||
284 | updateEntryView(); | ||
285 | } | ||
286 | |||
287 | void DistributionListEditor::updateEntryView() | ||
288 | { | ||
289 | DistributionList *list = mManager->list( mNameCombo->currentText() ); | ||
290 | if ( !list ) return; | ||
291 | |||
292 | mEntryView->clear(); | ||
293 | DistributionList::Entry::List entries = list->entries(); | ||
294 | DistributionList::Entry::List::ConstIterator it; | ||
295 | for( it = entries.begin(); it != entries.end(); ++it ) { | ||
296 | new EditEntryItem( mEntryView, (*it).addressee, (*it).email ); | ||
297 | } | ||
298 | #ifndef KAB_EMBEDDED | ||
299 | EditEntryItem *entryItem = dynamic_cast<EditEntryItem *>( mEntryView->selectedItem() ); | ||
300 | #else //KAB_EMBEDDED | ||
301 | EditEntryItem *entryItem = (EditEntryItem *)( mEntryView->selectedItem() ); | ||
302 | #endif //KAB_EMBEDDED | ||
303 | bool state = (entryItem != 0L); | ||
304 | |||
305 | changeEmailButton->setEnabled(state); | ||
306 | removeEntryButton->setEnabled(state); | ||
307 | } | ||
308 | |||
309 | void DistributionListEditor::updateAddresseeView() | ||
310 | { | ||
311 | mAddresseeView->clear(); | ||
312 | |||
313 | AddressBook::Iterator it; | ||
314 | for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { | ||
315 | new AddresseeItem( mAddresseeView, *it ); | ||
316 | } | ||
317 | } | ||
318 | |||
319 | void DistributionListEditor::updateNameCombo() | ||
320 | { | ||
321 | mNameCombo->insertStringList( mManager->listNames() ); | ||
322 | |||
323 | updateEntryView(); | ||
324 | } | ||
325 | |||
326 | void DistributionListEditor::slotSelectionAddresseeViewChanged() | ||
327 | { | ||
328 | #ifndef KAB_EMBEDDED | ||
329 | AddresseeItem *addresseeItem = dynamic_cast<AddresseeItem *>( mAddresseeView->selectedItem() ); | ||
330 | #else //KAB_EMBEDDED | ||
331 | AddresseeItem *addresseeItem = (AddresseeItem *)( mAddresseeView->selectedItem() ); | ||
332 | #endif //KAB_EMBEDDED | ||
333 | bool state = (addresseeItem != 0L); | ||
334 | addEntryButton->setEnabled( state && !mNameCombo->currentText().isEmpty()); | ||
335 | } | ||
diff --git a/kabc/distributionlisteditor.h b/kabc/distributionlisteditor.h new file mode 100644 index 0000000..e0b4221 --- a/dev/null +++ b/kabc/distributionlisteditor.h | |||
@@ -0,0 +1,86 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | #ifndef KABC_DISTRIBUTIONLISTEDITOR_H | ||
21 | #define KABC_DISTRIBUTIONLISTEDITOR_H | ||
22 | |||
23 | #include <qwidget.h> | ||
24 | |||
25 | #include <kdialogbase.h> | ||
26 | |||
27 | class QListView; | ||
28 | class QComboBox; | ||
29 | class QButtonGroup; | ||
30 | |||
31 | namespace KABC { | ||
32 | |||
33 | class AddressBook; | ||
34 | class DistributionListManager; | ||
35 | |||
36 | class EmailSelectDialog : public KDialogBase | ||
37 | { | ||
38 | public: | ||
39 | EmailSelectDialog( const QStringList &emails, const QString ¤t, | ||
40 | QWidget *parent ); | ||
41 | |||
42 | QString selected(); | ||
43 | |||
44 | static QString getEmail( const QStringList &emails, const QString ¤t, | ||
45 | QWidget *parent ); | ||
46 | |||
47 | private: | ||
48 | QButtonGroup *mButtonGroup; | ||
49 | }; | ||
50 | |||
51 | /** | ||
52 | @obsolete | ||
53 | */ | ||
54 | class DistributionListEditor : public QWidget | ||
55 | { | ||
56 | Q_OBJECT | ||
57 | public: | ||
58 | DistributionListEditor( AddressBook *, QWidget *parent ); | ||
59 | virtual ~DistributionListEditor(); | ||
60 | |||
61 | private slots: | ||
62 | void newList(); | ||
63 | void removeList(); | ||
64 | void addEntry(); | ||
65 | void removeEntry(); | ||
66 | void changeEmail(); | ||
67 | void updateEntryView(); | ||
68 | void updateAddresseeView(); | ||
69 | void updateNameCombo(); | ||
70 | void slotSelectionEntryViewChanged(); | ||
71 | void slotSelectionAddresseeViewChanged(); | ||
72 | |||
73 | private: | ||
74 | QComboBox *mNameCombo; | ||
75 | QListView *mEntryView; | ||
76 | QListView *mAddresseeView; | ||
77 | |||
78 | AddressBook *mAddressBook; | ||
79 | DistributionListManager *mManager; | ||
80 | QPushButton *newButton, *removeButton; | ||
81 | QPushButton *changeEmailButton,*removeEntryButton,*addEntryButton; | ||
82 | }; | ||
83 | |||
84 | } | ||
85 | |||
86 | #endif | ||
diff --git a/kabc/field.cpp b/kabc/field.cpp new file mode 100644 index 0000000..41bbfde --- a/dev/null +++ b/kabc/field.cpp | |||
@@ -0,0 +1,550 @@ | |||
1 | /*** Warning! This file has been generated by the script makeaddressee ***/ | ||
2 | /* | ||
3 | This file is part of libkabc. | ||
4 | Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org> | ||
5 | |||
6 | This library is free software; you can redistribute it and/or | ||
7 | modify it under the terms of the GNU Library General Public | ||
8 | License as published by the Free Software Foundation; either | ||
9 | version 2 of the License, or (at your option) any later version. | ||
10 | |||
11 | This library is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | Library General Public License for more details. | ||
15 | |||
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 | ||
18 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
19 | Boston, MA 02111-1307, USA. | ||
20 | */ | ||
21 | |||
22 | /* | ||
23 | Enhanced Version of the file for platform independent KDE tools. | ||
24 | Copyright (c) 2004 Ulf Schenk | ||
25 | |||
26 | $Id$ | ||
27 | */ | ||
28 | |||
29 | #include <klocale.h> | ||
30 | #include <kconfig.h> | ||
31 | #include <kconfigbase.h> | ||
32 | #include <kglobal.h> | ||
33 | |||
34 | #include "field.h" | ||
35 | |||
36 | using namespace KABC; | ||
37 | |||
38 | class Field::FieldImpl | ||
39 | { | ||
40 | public: | ||
41 | FieldImpl( int fieldId, int category = 0, | ||
42 | const QString &label = QString::null, | ||
43 | const QString &key = QString::null, | ||
44 | const QString &app = QString::null ) | ||
45 | : mFieldId( fieldId ), mCategory( category ), mLabel( label ), | ||
46 | mKey( key ), mApp( app ) {} | ||
47 | |||
48 | enum FieldId | ||
49 | { | ||
50 | CustomField, | ||
51 | FormattedName, | ||
52 | FamilyName, | ||
53 | GivenName, | ||
54 | AdditionalName, | ||
55 | Prefix, | ||
56 | Suffix, | ||
57 | NickName, | ||
58 | Birthday, | ||
59 | HomeAddressStreet, | ||
60 | HomeAddressLocality, | ||
61 | HomeAddressRegion, | ||
62 | HomeAddressPostalCode, | ||
63 | HomeAddressCountry, | ||
64 | HomeAddressLabel, | ||
65 | BusinessAddressStreet, | ||
66 | BusinessAddressLocality, | ||
67 | BusinessAddressRegion, | ||
68 | BusinessAddressPostalCode, | ||
69 | BusinessAddressCountry, | ||
70 | BusinessAddressLabel, | ||
71 | HomePhone, | ||
72 | BusinessPhone, | ||
73 | MobilePhone, | ||
74 | HomeFax, | ||
75 | BusinessFax, | ||
76 | CarPhone, | ||
77 | Isdn, | ||
78 | Pager, | ||
79 | Email, | ||
80 | Mailer, | ||
81 | Title, | ||
82 | Role, | ||
83 | Organization, | ||
84 | Note, | ||
85 | Url | ||
86 | }; | ||
87 | |||
88 | int fieldId() { return mFieldId; } | ||
89 | int category() { return mCategory; } | ||
90 | |||
91 | QString label() { return mLabel; } | ||
92 | QString key() { return mKey; } | ||
93 | QString app() { return mApp; } | ||
94 | |||
95 | private: | ||
96 | int mFieldId; | ||
97 | int mCategory; | ||
98 | |||
99 | QString mLabel; | ||
100 | QString mKey; | ||
101 | QString mApp; | ||
102 | }; | ||
103 | |||
104 | |||
105 | Field::List Field::mAllFields; | ||
106 | Field::List Field::mDefaultFields; | ||
107 | Field::List Field::mCustomFields; | ||
108 | |||
109 | |||
110 | Field::Field( FieldImpl *impl ) | ||
111 | { | ||
112 | mImpl = impl; | ||
113 | } | ||
114 | |||
115 | Field::~Field() | ||
116 | { | ||
117 | delete mImpl; | ||
118 | } | ||
119 | |||
120 | QString Field::label() | ||
121 | { | ||
122 | switch ( mImpl->fieldId() ) { | ||
123 | case FieldImpl::FormattedName: | ||
124 | return Addressee::formattedNameLabel(); | ||
125 | case FieldImpl::FamilyName: | ||
126 | return Addressee::familyNameLabel(); | ||
127 | case FieldImpl::GivenName: | ||
128 | return Addressee::givenNameLabel(); | ||
129 | case FieldImpl::AdditionalName: | ||
130 | return Addressee::additionalNameLabel(); | ||
131 | case FieldImpl::Prefix: | ||
132 | return Addressee::prefixLabel(); | ||
133 | case FieldImpl::Suffix: | ||
134 | return Addressee::suffixLabel(); | ||
135 | case FieldImpl::NickName: | ||
136 | return Addressee::nickNameLabel(); | ||
137 | case FieldImpl::Birthday: | ||
138 | return Addressee::birthdayLabel(); | ||
139 | case FieldImpl::HomeAddressStreet: | ||
140 | return Addressee::homeAddressStreetLabel(); | ||
141 | case FieldImpl::HomeAddressLocality: | ||
142 | return Addressee::homeAddressLocalityLabel(); | ||
143 | case FieldImpl::HomeAddressRegion: | ||
144 | return Addressee::homeAddressRegionLabel(); | ||
145 | case FieldImpl::HomeAddressPostalCode: | ||
146 | return Addressee::homeAddressPostalCodeLabel(); | ||
147 | case FieldImpl::HomeAddressCountry: | ||
148 | return Addressee::homeAddressCountryLabel(); | ||
149 | case FieldImpl::HomeAddressLabel: | ||
150 | return Addressee::homeAddressLabelLabel(); | ||
151 | case FieldImpl::BusinessAddressStreet: | ||
152 | return Addressee::businessAddressStreetLabel(); | ||
153 | case FieldImpl::BusinessAddressLocality: | ||
154 | return Addressee::businessAddressLocalityLabel(); | ||
155 | case FieldImpl::BusinessAddressRegion: | ||
156 | return Addressee::businessAddressRegionLabel(); | ||
157 | case FieldImpl::BusinessAddressPostalCode: | ||
158 | return Addressee::businessAddressPostalCodeLabel(); | ||
159 | case FieldImpl::BusinessAddressCountry: | ||
160 | return Addressee::businessAddressCountryLabel(); | ||
161 | case FieldImpl::BusinessAddressLabel: | ||
162 | return Addressee::businessAddressLabelLabel(); | ||
163 | case FieldImpl::HomePhone: | ||
164 | return Addressee::homePhoneLabel(); | ||
165 | case FieldImpl::BusinessPhone: | ||
166 | return Addressee::businessPhoneLabel(); | ||
167 | case FieldImpl::MobilePhone: | ||
168 | return Addressee::mobilePhoneLabel(); | ||
169 | case FieldImpl::HomeFax: | ||
170 | return Addressee::homeFaxLabel(); | ||
171 | case FieldImpl::BusinessFax: | ||
172 | return Addressee::businessFaxLabel(); | ||
173 | case FieldImpl::CarPhone: | ||
174 | return Addressee::carPhoneLabel(); | ||
175 | case FieldImpl::Isdn: | ||
176 | return Addressee::isdnLabel(); | ||
177 | case FieldImpl::Pager: | ||
178 | return Addressee::pagerLabel(); | ||
179 | case FieldImpl::Email: | ||
180 | return Addressee::emailLabel(); | ||
181 | case FieldImpl::Mailer: | ||
182 | return Addressee::mailerLabel(); | ||
183 | case FieldImpl::Title: | ||
184 | return Addressee::titleLabel(); | ||
185 | case FieldImpl::Role: | ||
186 | return Addressee::roleLabel(); | ||
187 | case FieldImpl::Organization: | ||
188 | return Addressee::organizationLabel(); | ||
189 | case FieldImpl::Note: | ||
190 | return Addressee::noteLabel(); | ||
191 | case FieldImpl::Url: | ||
192 | return Addressee::urlLabel(); | ||
193 | case FieldImpl::CustomField: | ||
194 | return mImpl->label(); | ||
195 | default: | ||
196 | return i18n("Unknown Field"); | ||
197 | } | ||
198 | } | ||
199 | |||
200 | int Field::category() | ||
201 | { | ||
202 | return mImpl->category(); | ||
203 | } | ||
204 | |||
205 | QString Field::categoryLabel( int category ) | ||
206 | { | ||
207 | switch ( category ) { | ||
208 | case All: | ||
209 | return i18n("All"); | ||
210 | case Frequent: | ||
211 | return i18n("Frequent"); | ||
212 | case Address: | ||
213 | return i18n("Address"); | ||
214 | case Email: | ||
215 | return i18n("Email"); | ||
216 | case Personal: | ||
217 | return i18n("Personal"); | ||
218 | case Organization: | ||
219 | return i18n("Organization"); | ||
220 | case CustomCategory: | ||
221 | return i18n("Custom"); | ||
222 | default: | ||
223 | return i18n("Undefined"); | ||
224 | } | ||
225 | } | ||
226 | |||
227 | QString Field::value( const KABC::Addressee &a ) | ||
228 | { | ||
229 | switch ( mImpl->fieldId() ) { | ||
230 | case FieldImpl::FormattedName: | ||
231 | return a.formattedName(); | ||
232 | case FieldImpl::FamilyName: | ||
233 | return a.familyName(); | ||
234 | case FieldImpl::GivenName: | ||
235 | return a.givenName(); | ||
236 | case FieldImpl::AdditionalName: | ||
237 | return a.additionalName(); | ||
238 | case FieldImpl::Prefix: | ||
239 | return a.prefix(); | ||
240 | case FieldImpl::Suffix: | ||
241 | return a.suffix(); | ||
242 | case FieldImpl::NickName: | ||
243 | return a.nickName(); | ||
244 | case FieldImpl::Mailer: | ||
245 | return a.mailer(); | ||
246 | case FieldImpl::Title: | ||
247 | return a.title(); | ||
248 | case FieldImpl::Role: | ||
249 | return a.role(); | ||
250 | case FieldImpl::Organization: | ||
251 | return a.organization(); | ||
252 | case FieldImpl::Note: | ||
253 | return a.note(); | ||
254 | case FieldImpl::Email: | ||
255 | return a.preferredEmail(); | ||
256 | case FieldImpl::Birthday: | ||
257 | if ( a.birthday().isValid() ) { | ||
258 | //the generated code had the following format: return a.birthday().date().toString( Qt::ISODate ); | ||
259 | // But Qt::IsoDate was not specified. | ||
260 | QString _oldFormat = KGlobal::locale()->dateFormat(); | ||
261 | KGlobal::locale()->setDateFormat("%Y-%m-%d"); // = Qt::ISODate | ||
262 | QString dt = KGlobal::locale()->formatDate(a.birthday().date(), false); | ||
263 | KGlobal::locale()->setDateFormat(_oldFormat); | ||
264 | return dt; | ||
265 | } | ||
266 | else | ||
267 | return QString::null; | ||
268 | case FieldImpl::Url: | ||
269 | return a.url().prettyURL(); | ||
270 | case FieldImpl::HomePhone: | ||
271 | return a.phoneNumber( PhoneNumber::Home ).number(); | ||
272 | case FieldImpl::BusinessPhone: | ||
273 | return a.phoneNumber( PhoneNumber::Work ).number(); | ||
274 | case FieldImpl::MobilePhone: | ||
275 | return a.phoneNumber( PhoneNumber::Cell ).number(); | ||
276 | case FieldImpl::HomeFax: | ||
277 | return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number(); | ||
278 | case FieldImpl::BusinessFax: | ||
279 | return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number(); | ||
280 | case FieldImpl::CarPhone: | ||
281 | return a.phoneNumber( PhoneNumber::Car ).number(); | ||
282 | case FieldImpl::Isdn: | ||
283 | return a.phoneNumber( PhoneNumber::Isdn ).number(); | ||
284 | case FieldImpl::Pager: | ||
285 | return a.phoneNumber( PhoneNumber::Pager ).number(); | ||
286 | case FieldImpl::HomeAddressStreet: | ||
287 | return a.address( Address::Home ).street(); | ||
288 | case FieldImpl::HomeAddressLocality: | ||
289 | return a.address( Address::Home ).locality(); | ||
290 | case FieldImpl::HomeAddressRegion: | ||
291 | return a.address( Address::Home ).region(); | ||
292 | case FieldImpl::HomeAddressPostalCode: | ||
293 | return a.address( Address::Home ).postalCode(); | ||
294 | case FieldImpl::HomeAddressCountry: | ||
295 | return a.address( Address::Home ).country(); | ||
296 | case FieldImpl::BusinessAddressStreet: | ||
297 | return a.address( Address::Work ).street(); | ||
298 | case FieldImpl::BusinessAddressLocality: | ||
299 | return a.address( Address::Work ).locality(); | ||
300 | case FieldImpl::BusinessAddressRegion: | ||
301 | return a.address( Address::Work ).region(); | ||
302 | case FieldImpl::BusinessAddressPostalCode: | ||
303 | return a.address( Address::Work ).postalCode(); | ||
304 | case FieldImpl::BusinessAddressCountry: | ||
305 | return a.address( Address::Work ).country(); | ||
306 | case FieldImpl::CustomField: | ||
307 | return a.custom( mImpl->app(), mImpl->key() ); | ||
308 | default: | ||
309 | return QString::null; | ||
310 | } | ||
311 | } | ||
312 | |||
313 | bool Field::setValue( KABC::Addressee &a, const QString &value ) | ||
314 | { | ||
315 | switch ( mImpl->fieldId() ) { | ||
316 | case FieldImpl::FormattedName: | ||
317 | a.setFormattedName( value ); | ||
318 | return true; | ||
319 | case FieldImpl::FamilyName: | ||
320 | a.setFamilyName( value ); | ||
321 | return true; | ||
322 | case FieldImpl::GivenName: | ||
323 | a.setGivenName( value ); | ||
324 | return true; | ||
325 | case FieldImpl::AdditionalName: | ||
326 | a.setAdditionalName( value ); | ||
327 | return true; | ||
328 | case FieldImpl::Prefix: | ||
329 | a.setPrefix( value ); | ||
330 | return true; | ||
331 | case FieldImpl::Suffix: | ||
332 | a.setSuffix( value ); | ||
333 | return true; | ||
334 | case FieldImpl::NickName: | ||
335 | a.setNickName( value ); | ||
336 | return true; | ||
337 | case FieldImpl::Mailer: | ||
338 | a.setMailer( value ); | ||
339 | return true; | ||
340 | case FieldImpl::Title: | ||
341 | a.setTitle( value ); | ||
342 | return true; | ||
343 | case FieldImpl::Role: | ||
344 | a.setRole( value ); | ||
345 | return true; | ||
346 | case FieldImpl::Organization: | ||
347 | a.setOrganization( value ); | ||
348 | return true; | ||
349 | case FieldImpl::Note: | ||
350 | a.setNote( value ); | ||
351 | return true; | ||
352 | case FieldImpl::Birthday: | ||
353 | //US | ||
354 | //the generated code had the following format: return a.setBirthday( QDate::fromString( value, Qt::ISODate ) ); | ||
355 | // But Qt::IsoDate and QDate::fromString was not specified. Do I have the wrong QT version ? | ||
356 | { | ||
357 | QDate dt = KGlobal::locale()->readDate( value, "%Y-%m-%d"); // = Qt::ISODate | ||
358 | a.setBirthday(dt); | ||
359 | } | ||
360 | return true; | ||
361 | case FieldImpl::CustomField: | ||
362 | a.insertCustom( mImpl->app(), mImpl->key(), value ); | ||
363 | default: | ||
364 | return false; | ||
365 | } | ||
366 | } | ||
367 | |||
368 | bool Field::isCustom() | ||
369 | { | ||
370 | return mImpl->fieldId() == FieldImpl::CustomField; | ||
371 | } | ||
372 | |||
373 | Field::List Field::allFields() | ||
374 | { | ||
375 | if ( mAllFields.isEmpty() ) { | ||
376 | createField( FieldImpl::FormattedName, Frequent ); | ||
377 | createField( FieldImpl::FamilyName, Frequent ); | ||
378 | createField( FieldImpl::GivenName, Frequent ); | ||
379 | createField( FieldImpl::AdditionalName ); | ||
380 | createField( FieldImpl::Prefix ); | ||
381 | createField( FieldImpl::Suffix ); | ||
382 | createField( FieldImpl::NickName, Personal ); | ||
383 | createField( FieldImpl::Birthday, Personal ); | ||
384 | createField( FieldImpl::HomeAddressStreet, Address|Personal ); | ||
385 | createField( FieldImpl::HomeAddressLocality, Address|Personal ); | ||
386 | createField( FieldImpl::HomeAddressRegion, Address|Personal ); | ||
387 | createField( FieldImpl::HomeAddressPostalCode, Address|Personal ); | ||
388 | createField( FieldImpl::HomeAddressCountry, Address|Personal ); | ||
389 | createField( FieldImpl::HomeAddressLabel, Address|Personal ); | ||
390 | createField( FieldImpl::BusinessAddressStreet, Address|Organization ); | ||
391 | createField( FieldImpl::BusinessAddressLocality, Address|Organization ); | ||
392 | createField( FieldImpl::BusinessAddressRegion, Address|Organization ); | ||
393 | createField( FieldImpl::BusinessAddressPostalCode, Address|Organization ); | ||
394 | createField( FieldImpl::BusinessAddressCountry, Address|Organization ); | ||
395 | createField( FieldImpl::BusinessAddressLabel, Address|Organization ); | ||
396 | createField( FieldImpl::HomePhone, Personal|Frequent ); | ||
397 | createField( FieldImpl::BusinessPhone, Organization|Frequent ); | ||
398 | createField( FieldImpl::MobilePhone, Frequent ); | ||
399 | createField( FieldImpl::HomeFax ); | ||
400 | createField( FieldImpl::BusinessFax ); | ||
401 | createField( FieldImpl::CarPhone ); | ||
402 | createField( FieldImpl::Isdn ); | ||
403 | createField( FieldImpl::Pager ); | ||
404 | createField( FieldImpl::Email, Email|Frequent ); | ||
405 | createField( FieldImpl::Mailer, Email ); | ||
406 | createField( FieldImpl::Title, Organization ); | ||
407 | createField( FieldImpl::Role, Organization ); | ||
408 | createField( FieldImpl::Organization, Organization ); | ||
409 | createField( FieldImpl::Note ); | ||
410 | createField( FieldImpl::Url ); | ||
411 | } | ||
412 | |||
413 | return mAllFields; | ||
414 | } | ||
415 | |||
416 | Field::List Field::defaultFields() | ||
417 | { | ||
418 | if ( mDefaultFields.isEmpty() ) { | ||
419 | createDefaultField( FieldImpl::GivenName ); | ||
420 | createDefaultField( FieldImpl::FamilyName ); | ||
421 | createDefaultField( FieldImpl::Email ); | ||
422 | } | ||
423 | |||
424 | return mDefaultFields; | ||
425 | } | ||
426 | |||
427 | void Field::createField( int id, int category ) | ||
428 | { | ||
429 | mAllFields.append( new Field( new FieldImpl( id, category ) ) ); | ||
430 | } | ||
431 | |||
432 | void Field::createDefaultField( int id, int category ) | ||
433 | { | ||
434 | mDefaultFields.append( new Field( new FieldImpl( id, category ) ) ); | ||
435 | } | ||
436 | |||
437 | void Field::deleteFields() | ||
438 | { | ||
439 | Field::List::ConstIterator it; | ||
440 | |||
441 | for( it = mAllFields.begin(); it != mAllFields.end(); ++it ) { | ||
442 | delete (*it); | ||
443 | } | ||
444 | mAllFields.clear(); | ||
445 | |||
446 | for( it = mDefaultFields.begin(); it != mDefaultFields.end(); ++it ) { | ||
447 | delete (*it); | ||
448 | } | ||
449 | mDefaultFields.clear(); | ||
450 | |||
451 | for( it = mCustomFields.begin(); it != mCustomFields.end(); ++it ) { | ||
452 | delete (*it); | ||
453 | } | ||
454 | mCustomFields.clear(); | ||
455 | } | ||
456 | |||
457 | void Field::saveFields( const QString &identifier, | ||
458 | const Field::List &fields ) | ||
459 | { | ||
460 | KConfig *cfg = KGlobal::config(); | ||
461 | KConfigGroupSaver( cfg, "KABCFields" ); | ||
462 | saveFields( cfg, identifier, fields ); | ||
463 | } | ||
464 | |||
465 | void Field::saveFields( KConfig *cfg, const QString &identifier, | ||
466 | const Field::List &fields ) | ||
467 | { | ||
468 | QValueList<int> fieldIds; | ||
469 | |||
470 | //US | ||
471 | //US qDebug("Field::saveFields to %s %s", cfg->getFileName().latin1(), identifier.latin1()); | ||
472 | |||
473 | int custom = 0; | ||
474 | Field::List::ConstIterator it; | ||
475 | for( it = fields.begin(); it != fields.end(); ++it ) { | ||
476 | //US | ||
477 | //US qDebug("Field::saveFields field:%i", (*it)->mImpl->fieldId()); | ||
478 | |||
479 | fieldIds.append( (*it)->mImpl->fieldId() ); | ||
480 | if( (*it)->isCustom() ) { | ||
481 | QStringList customEntry; | ||
482 | customEntry << (*it)->mImpl->label(); | ||
483 | customEntry << (*it)->mImpl->key(); | ||
484 | customEntry << (*it)->mImpl->app(); | ||
485 | cfg->writeEntry( "KABC_CustomEntry_" + identifier + "_" + | ||
486 | QString::number( custom++ ), customEntry ); | ||
487 | } | ||
488 | } | ||
489 | cfg->writeEntry( identifier, fieldIds ); | ||
490 | } | ||
491 | |||
492 | Field::List Field::restoreFields( const QString &identifier ) | ||
493 | { | ||
494 | KConfig *cfg = KGlobal::config(); | ||
495 | KConfigGroupSaver( cfg, "KABCFields" ); | ||
496 | cfg->setGroup( "KABCFields" ); | ||
497 | |||
498 | Field::List l = restoreFields( cfg, identifier ); | ||
499 | |||
500 | return l; | ||
501 | } | ||
502 | |||
503 | Field::List Field::restoreFields( KConfig *cfg, const QString &identifier ) | ||
504 | { | ||
505 | QValueList<int> fieldIds = cfg->readIntListEntry( identifier); | ||
506 | //US | ||
507 | qDebug("Field::restoreFields from %s", cfg->getFileName().latin1()); | ||
508 | |||
509 | Field::List fields; | ||
510 | |||
511 | int custom = 0; | ||
512 | QValueList<int>::ConstIterator it; | ||
513 | for( it = fieldIds.begin(); it != fieldIds.end(); ++it ) { | ||
514 | FieldImpl *f = 0; | ||
515 | if ( (*it) == FieldImpl::CustomField ) { | ||
516 | QStringList customEntry = cfg->readListEntry( "KABC_CustomEntry_" + | ||
517 | identifier + "_" + | ||
518 | QString::number( custom++ ) ); | ||
519 | f = new FieldImpl( *it, CustomCategory, customEntry[ 0 ], | ||
520 | customEntry[ 1 ], customEntry[ 2 ] ); | ||
521 | } else { | ||
522 | f = new FieldImpl( *it ); | ||
523 | } | ||
524 | fields.append( new Field( f ) ); | ||
525 | } | ||
526 | |||
527 | return fields; | ||
528 | } | ||
529 | |||
530 | bool Field::equals( Field *field ) | ||
531 | { | ||
532 | bool sameId = ( mImpl->fieldId() == field->mImpl->fieldId() ); | ||
533 | |||
534 | if ( !sameId ) return false; | ||
535 | |||
536 | if ( mImpl->fieldId() != FieldImpl::CustomField ) return true; | ||
537 | |||
538 | return mImpl->key() == field->mImpl->key(); | ||
539 | } | ||
540 | |||
541 | Field *Field::createCustomField( const QString &label, int category, | ||
542 | const QString &key, const QString &app ) | ||
543 | { | ||
544 | Field *field = new Field( new FieldImpl( FieldImpl::CustomField, | ||
545 | category | CustomCategory, | ||
546 | label, key, app ) ); | ||
547 | mCustomFields.append( field ); | ||
548 | |||
549 | return field; | ||
550 | } | ||
diff --git a/kabc/field.h b/kabc/field.h new file mode 100644 index 0000000..9e06597 --- a/dev/null +++ b/kabc/field.h | |||
@@ -0,0 +1,178 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_FIELD_H | ||
29 | #define KABC_FIELD_H | ||
30 | |||
31 | #include <qstring.h> | ||
32 | #include <qvaluelist.h> | ||
33 | |||
34 | #include "addressee.h" | ||
35 | |||
36 | class KConfig; | ||
37 | |||
38 | namespace KABC { | ||
39 | |||
40 | class Field | ||
41 | { | ||
42 | class FieldImpl; | ||
43 | friend class FieldImpl; | ||
44 | |||
45 | public: | ||
46 | typedef QValueList<Field *> List; | ||
47 | |||
48 | /** | ||
49 | * @li @p All - | ||
50 | * @li @p Frequent - | ||
51 | * @li @p Address - | ||
52 | * @li @p Email - | ||
53 | * @li @p Personal - | ||
54 | * @li @p Organization - | ||
55 | * @li @p CustomCategory - | ||
56 | */ | ||
57 | enum FieldCategory | ||
58 | { | ||
59 | All = 0x0, | ||
60 | Frequent = 0x01, | ||
61 | Address = 0x02, | ||
62 | Email = 0x04, | ||
63 | Personal = 0x08, | ||
64 | Organization = 0x10, | ||
65 | CustomCategory = 0x20 | ||
66 | }; | ||
67 | |||
68 | /** | ||
69 | * Returns the translated label for this field. | ||
70 | */ | ||
71 | virtual QString label(); | ||
72 | |||
73 | /** | ||
74 | * Returns the ored categories the field belongs to. | ||
75 | */ | ||
76 | virtual int category(); | ||
77 | |||
78 | /** | ||
79 | * Returns the translated label for field category. | ||
80 | */ | ||
81 | static QString categoryLabel( int category ); | ||
82 | |||
83 | /** | ||
84 | * Returns a string representation of the value the field has in the given | ||
85 | * Addressee. Returns QString::null, if it is not possible to convert the | ||
86 | * value to a string. | ||
87 | */ | ||
88 | virtual QString value( const KABC::Addressee & ); | ||
89 | |||
90 | /** | ||
91 | * Sets the value of the field in the given Addressee. Returns true on success | ||
92 | * or false, if the given string couldn't be converted to a valid value. | ||
93 | */ | ||
94 | virtual bool setValue( KABC::Addressee &, const QString & ); | ||
95 | |||
96 | /** | ||
97 | * Returns, if the field is a user-defined field. | ||
98 | */ | ||
99 | virtual bool isCustom(); | ||
100 | |||
101 | /** | ||
102 | * Returns, if the field is equal with @param field. | ||
103 | */ | ||
104 | virtual bool equals( Field *field ); | ||
105 | |||
106 | /** | ||
107 | * Returns a list of all fields. | ||
108 | */ | ||
109 | static Field::List allFields(); | ||
110 | |||
111 | /** | ||
112 | * Returns a list of the default fields. | ||
113 | */ | ||
114 | static Field::List defaultFields(); | ||
115 | |||
116 | /** | ||
117 | * Creates a custom field. | ||
118 | * | ||
119 | * @param label The label for this field | ||
120 | * @param category The category of this field | ||
121 | * @param key Unique key for this field | ||
122 | * @param app Unique app name for this field | ||
123 | */ | ||
124 | static Field *createCustomField( const QString &label, int category, | ||
125 | const QString &key, const QString &app ); | ||
126 | |||
127 | /** | ||
128 | * Delete all fields from list. | ||
129 | */ | ||
130 | static void deleteFields(); | ||
131 | |||
132 | /** | ||
133 | * Save the field settings to a config file. | ||
134 | * | ||
135 | * @param cfg The config file object | ||
136 | * @param identifier The unique identifier | ||
137 | * @param fields The list of the fields | ||
138 | */ | ||
139 | static void saveFields( KConfig *cfg, const QString &identifier, | ||
140 | const Field::List &fields ); | ||
141 | /** | ||
142 | * This is the same as above, with the difference, that | ||
143 | * the list is stored in KGlobal::config() in group "KABCFields". | ||
144 | */ | ||
145 | static void saveFields( const QString &identifier, | ||
146 | const Field::List &fields ); | ||
147 | |||
148 | /** | ||
149 | * Load the field settings from a config file. | ||
150 | * | ||
151 | * @param cfg The config file object | ||
152 | * @param identifier The unique identifier | ||
153 | */ | ||
154 | static Field::List restoreFields( KConfig *cfg, const QString &identifier ); | ||
155 | |||
156 | /** | ||
157 | * This is the same as above, with the difference, that | ||
158 | * the list is loaded from KGlobal::config() from group "KABCFields". | ||
159 | */ | ||
160 | static Field::List restoreFields( const QString &identifier ); | ||
161 | |||
162 | protected: | ||
163 | static void createField( int id, int category = 0 ); | ||
164 | static void createDefaultField( int id, int category = 0 ); | ||
165 | |||
166 | private: | ||
167 | Field( FieldImpl * ); | ||
168 | virtual ~Field(); | ||
169 | |||
170 | FieldImpl *mImpl; | ||
171 | |||
172 | static Field::List mAllFields; | ||
173 | static Field::List mDefaultFields; | ||
174 | static Field::List mCustomFields; | ||
175 | }; | ||
176 | |||
177 | } | ||
178 | #endif | ||
diff --git a/kabc/formatfactory.cpp b/kabc/formatfactory.cpp new file mode 100644 index 0000000..2b073d7 --- a/dev/null +++ b/kabc/formatfactory.cpp | |||
@@ -0,0 +1,181 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include <kdebug.h> | ||
22 | #include <klocale.h> | ||
23 | #include <ksimpleconfig.h> | ||
24 | #include <kstandarddirs.h> | ||
25 | #include <kstaticdeleter.h> | ||
26 | |||
27 | #include <qfile.h> | ||
28 | #include <qstringlist.h> | ||
29 | |||
30 | #include "vcardformatplugin.h" | ||
31 | |||
32 | #include "formatfactory.h" | ||
33 | |||
34 | using namespace KABC; | ||
35 | |||
36 | FormatFactory *FormatFactory::mSelf = 0; | ||
37 | static KStaticDeleter<FormatFactory> factoryDeleter; | ||
38 | |||
39 | FormatFactory *FormatFactory::self() | ||
40 | { | ||
41 | kdDebug(5700) << "FormatFactory::self()" << endl; | ||
42 | |||
43 | if ( !mSelf ) { | ||
44 | #ifdef KAB_EMBEDDED | ||
45 | mSelf = factoryDeleter.setObject( new FormatFactory ); | ||
46 | #else //KAB_EMBEDDED | ||
47 | factoryDeleter.setObject( mSelf, new FormatFactory ); | ||
48 | #endif //KAB_EMBEDDED | ||
49 | |||
50 | } | ||
51 | return mSelf; | ||
52 | } | ||
53 | |||
54 | FormatFactory::FormatFactory() | ||
55 | { | ||
56 | mFormatList.setAutoDelete( true ); | ||
57 | |||
58 | // dummy entry for default format | ||
59 | FormatInfo *info = new FormatInfo; | ||
60 | info->library = "<NoLibrary>"; | ||
61 | info->nameLabel = i18n( "vCard" ); | ||
62 | info->descriptionLabel = i18n( "vCard Format" ); | ||
63 | mFormatList.insert( "vcard", info ); | ||
64 | |||
65 | QStringList list = KGlobal::dirs()->findAllResources( "data" ,"kabc/formats/*.desktop", true, true ); | ||
66 | for ( QStringList::ConstIterator it = list.begin(); it != list.end(); ++it ) | ||
67 | { | ||
68 | //US KSimpleConfig config( *it, true ); | ||
69 | KConfig config( *it ); | ||
70 | |||
71 | if ( !config.hasGroup( "Misc" ) || !config.hasGroup( "Plugin" ) ) | ||
72 | continue; | ||
73 | |||
74 | info = new FormatInfo; | ||
75 | |||
76 | config.setGroup( "Plugin" ); | ||
77 | QString type = config.readEntry( "Type" ); | ||
78 | info->library = config.readEntry( "X-KDE-Library" ); | ||
79 | |||
80 | config.setGroup( "Misc" ); | ||
81 | info->nameLabel = config.readEntry( "Name" ); | ||
82 | info->descriptionLabel = config.readEntry( "Comment", i18n( "No description available." ) ); | ||
83 | |||
84 | mFormatList.insert( type, info ); | ||
85 | } | ||
86 | } | ||
87 | |||
88 | FormatFactory::~FormatFactory() | ||
89 | { | ||
90 | mFormatList.clear(); | ||
91 | } | ||
92 | |||
93 | QStringList FormatFactory::formats() | ||
94 | { | ||
95 | QStringList retval; | ||
96 | |||
97 | // make sure 'vcard' is the first entry | ||
98 | retval << "vcard"; | ||
99 | |||
100 | QDictIterator<FormatInfo> it( mFormatList ); | ||
101 | for ( ; it.current(); ++it ) | ||
102 | if ( it.currentKey() != "vcard" ) | ||
103 | retval << it.currentKey(); | ||
104 | |||
105 | return retval; | ||
106 | } | ||
107 | |||
108 | FormatInfo *FormatFactory::info( const QString &type ) | ||
109 | { | ||
110 | if ( type.isEmpty() ) | ||
111 | return 0; | ||
112 | else | ||
113 | return mFormatList[ type ]; | ||
114 | } | ||
115 | |||
116 | FormatPlugin *FormatFactory::format( const QString& type ) | ||
117 | { | ||
118 | FormatPlugin *format = 0; | ||
119 | |||
120 | if ( type.isEmpty() ) | ||
121 | return 0; | ||
122 | |||
123 | if ( type == "vcard" ) { | ||
124 | format = new VCardFormatPlugin; | ||
125 | /* // LR | ||
126 | format->setType( type ); | ||
127 | format->setNameLabel( i18n( "vCard" ) ); | ||
128 | format->setDescriptionLabel( i18n( "vCard Format" ) ); | ||
129 | */ | ||
130 | return format; | ||
131 | } | ||
132 | |||
133 | FormatInfo *fi = mFormatList[ type ]; | ||
134 | if (!fi) | ||
135 | return 0; | ||
136 | QString libName = fi->library; | ||
137 | #ifndef DESKTOP_VERSION | ||
138 | KLibrary *library = openLibrary( libName ); | ||
139 | if ( !library ) | ||
140 | return 0; | ||
141 | |||
142 | void *format_func = library->symbol( "format" ); | ||
143 | |||
144 | if ( format_func ) { | ||
145 | format = ((FormatPlugin* (*)())format_func)(); | ||
146 | // LR | ||
147 | /* | ||
148 | format->setType( type ); | ||
149 | format->setNameLabel( fi->nameLabel ); | ||
150 | format->setDescriptionLabel( fi->descriptionLabel ); | ||
151 | */ | ||
152 | } else { | ||
153 | kdDebug( 5700 ) << "'" << libName << "' is not a format plugin." << endl; | ||
154 | return 0; | ||
155 | } | ||
156 | #endif | ||
157 | return format; | ||
158 | } | ||
159 | |||
160 | #ifndef DESKTOP_VERSION | ||
161 | KLibrary *FormatFactory::openLibrary( const QString& libName ) | ||
162 | { | ||
163 | KLibrary *library = 0; | ||
164 | |||
165 | QString path = KLibLoader::findLibrary( QFile::encodeName( libName ) ); | ||
166 | |||
167 | if ( path.isEmpty() ) { | ||
168 | kdDebug( 5700 ) << "No format plugin library was found!" << endl; | ||
169 | return 0; | ||
170 | } | ||
171 | |||
172 | library = KLibLoader::self()->library( QFile::encodeName( path ) ); | ||
173 | |||
174 | if ( !library ) { | ||
175 | kdDebug( 5700 ) << "Could not load library '" << libName << "'" << endl; | ||
176 | return 0; | ||
177 | } | ||
178 | |||
179 | return library; | ||
180 | } | ||
181 | #endif | ||
diff --git a/kabc/formatfactory.h b/kabc/formatfactory.h new file mode 100644 index 0000000..9612374 --- a/dev/null +++ b/kabc/formatfactory.h | |||
@@ -0,0 +1,104 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef KABC_FORMATFACTORY_H | ||
22 | #define KABC_FORMATFACTORY_H | ||
23 | |||
24 | #include <qdict.h> | ||
25 | #include <qstring.h> | ||
26 | |||
27 | #include <kconfig.h> | ||
28 | #ifndef DESKTOP_VERSION | ||
29 | #include <klibloader.h> | ||
30 | #endif | ||
31 | |||
32 | #include "formatplugin.h" | ||
33 | |||
34 | namespace KABC { | ||
35 | |||
36 | struct FormatInfo | ||
37 | { | ||
38 | QString library; | ||
39 | QString nameLabel; | ||
40 | QString descriptionLabel; | ||
41 | }; | ||
42 | |||
43 | /** | ||
44 | * Class for loading format plugins. | ||
45 | * | ||
46 | * Example: | ||
47 | * | ||
48 | * <pre> | ||
49 | * KABC::FormatFactory *factory = KABC::FormatFactory::self(); | ||
50 | * | ||
51 | * QStringList list = factory->formats(); | ||
52 | * QStringList::Iterator it; | ||
53 | * for ( it = list.begin(); it != list.end(); ++it ) { | ||
54 | * KABC::FormatPlugin *format = factory->format( (*it) ); | ||
55 | * // do something with format | ||
56 | * } | ||
57 | * </pre> | ||
58 | */ | ||
59 | class FormatFactory | ||
60 | { | ||
61 | public: | ||
62 | |||
63 | /** | ||
64 | Destructor. | ||
65 | */ | ||
66 | ~FormatFactory(); | ||
67 | |||
68 | /** | ||
69 | * Returns the global format factory. | ||
70 | */ | ||
71 | static FormatFactory *self(); | ||
72 | |||
73 | /** | ||
74 | * Returns a pointer to a format object or a null pointer | ||
75 | * if format type doesn't exist. | ||
76 | * | ||
77 | * @param type The type of the format, returned by @ref formats() | ||
78 | */ | ||
79 | FormatPlugin *format( const QString &type ); | ||
80 | |||
81 | /** | ||
82 | * Returns a list of all available format types. | ||
83 | */ | ||
84 | QStringList formats(); | ||
85 | |||
86 | /** | ||
87 | * Returns the info structure for a special type. | ||
88 | */ | ||
89 | FormatInfo *info( const QString &type ); | ||
90 | |||
91 | protected: | ||
92 | FormatFactory(); | ||
93 | |||
94 | private: | ||
95 | #ifndef DESKTOP_VERSION | ||
96 | KLibrary *openLibrary( const QString& libName ); | ||
97 | #endif | ||
98 | static FormatFactory *mSelf; | ||
99 | |||
100 | QDict<FormatInfo> mFormatList; | ||
101 | }; | ||
102 | |||
103 | } | ||
104 | #endif | ||
diff --git a/kabc/formatplugin.h b/kabc/formatplugin.h new file mode 100644 index 0000000..d784daf --- a/dev/null +++ b/kabc/formatplugin.h | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_FORMATPLUGIN_H | ||
29 | #define KABC_FORMATPLUGIN_H | ||
30 | |||
31 | #include <qfile.h> | ||
32 | |||
33 | //US #include "plugin.h" | ||
34 | #include "resource.h" | ||
35 | |||
36 | namespace KABC { | ||
37 | |||
38 | class AddressBook; | ||
39 | class Addressee; | ||
40 | |||
41 | /** | ||
42 | * @short Base class for address book formats. | ||
43 | * | ||
44 | * This class provides an abstract interface for ResourceFile and | ||
45 | * ResourceDir formats. | ||
46 | * | ||
47 | * @internal | ||
48 | */ | ||
49 | //US class FormatPlugin : public Plugin | ||
50 | class FormatPlugin | ||
51 | { | ||
52 | public: | ||
53 | |||
54 | /** | ||
55 | * Load single addressee from file. | ||
56 | */ | ||
57 | virtual bool load( Addressee &, QFile *file ) = 0; | ||
58 | |||
59 | /** | ||
60 | * Load whole addressbook from file. | ||
61 | */ | ||
62 | virtual bool loadAll( AddressBook *, Resource *, QFile *file ) = 0; | ||
63 | |||
64 | /** | ||
65 | * Save a single Addressee to file. | ||
66 | */ | ||
67 | virtual void save( const Addressee &, QFile *file ) = 0; | ||
68 | |||
69 | /** | ||
70 | * Save whole addressbook to file. | ||
71 | */ | ||
72 | virtual void saveAll( AddressBook *, Resource *, QFile *file ) = 0; | ||
73 | |||
74 | /** | ||
75 | * Checks if given file contains the right format | ||
76 | */ | ||
77 | virtual bool checkFormat( QFile *file ) const = 0; | ||
78 | }; | ||
79 | |||
80 | } | ||
81 | #endif | ||
diff --git a/kabc/formats/binaryformat.cpp b/kabc/formats/binaryformat.cpp new file mode 100644 index 0000000..e2f28b8 --- a/dev/null +++ b/kabc/formats/binaryformat.cpp | |||
@@ -0,0 +1,236 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | |||
29 | #include <qdatastream.h> | ||
30 | #include <qimage.h> | ||
31 | |||
32 | #include <kdebug.h> | ||
33 | #include <klocale.h> | ||
34 | #include <kstandarddirs.h> | ||
35 | |||
36 | #include "addressbook.h" | ||
37 | #include "addressee.h" | ||
38 | #include "picture.h" | ||
39 | #include "sound.h" | ||
40 | |||
41 | #include "binaryformat.h" | ||
42 | |||
43 | #define BINARY_FORMAT_VERSION 2 | ||
44 | |||
45 | using namespace KABC; | ||
46 | |||
47 | /*US | ||
48 | extern "C" | ||
49 | { | ||
50 | FormatPlugin *format() | ||
51 | { | ||
52 | qDebug(" BinaryFormat::format = new BinaryFormat"); | ||
53 | return new BinaryFormat; | ||
54 | } | ||
55 | } | ||
56 | */ | ||
57 | bool BinaryFormat::load( Addressee &addressee, QFile *file ) | ||
58 | { | ||
59 | kdDebug(5700) << "BinaryFormat::load()" << endl; | ||
60 | QDataStream stream( file ); | ||
61 | |||
62 | if ( !checkHeader( stream ) ) | ||
63 | return false; | ||
64 | |||
65 | loadAddressee( addressee, stream ); | ||
66 | |||
67 | return true; | ||
68 | } | ||
69 | |||
70 | bool BinaryFormat::loadAll( AddressBook *addressBook, Resource *resource, QFile *file ) | ||
71 | { | ||
72 | kdDebug(5700) << "BinaryFormat::loadAll()" << endl; | ||
73 | |||
74 | QDataStream stream( file ); | ||
75 | |||
76 | if ( !checkHeader( stream ) ) | ||
77 | return false; | ||
78 | |||
79 | Q_UINT32 entries; | ||
80 | |||
81 | stream >> entries; | ||
82 | |||
83 | for ( uint i = 0; i < entries; ++i ) { | ||
84 | Addressee addressee; | ||
85 | loadAddressee( addressee, stream ); | ||
86 | addressee.setResource( resource ); | ||
87 | addressBook->insertAddressee( addressee ); | ||
88 | } | ||
89 | |||
90 | return true; | ||
91 | } | ||
92 | |||
93 | void BinaryFormat::save( const Addressee &addressee, QFile *file ) | ||
94 | { | ||
95 | kdDebug(5700) << "BinaryFormat::save()" << endl; | ||
96 | |||
97 | QDataStream stream( file ); | ||
98 | |||
99 | writeHeader( stream ); | ||
100 | |||
101 | Q_UINT32 entries = 1; | ||
102 | stream << entries; | ||
103 | saveAddressee( addressee, stream ); | ||
104 | } | ||
105 | |||
106 | void BinaryFormat::saveAll( AddressBook *ab, Resource *resource, QFile *file ) | ||
107 | { | ||
108 | kdDebug(5700) << "BinaryFormat::saveAll()" << endl; | ||
109 | |||
110 | Q_UINT32 counter = 0; | ||
111 | QDataStream stream( file ); | ||
112 | |||
113 | writeHeader( stream ); | ||
114 | // set dummy number of entries | ||
115 | stream << counter; | ||
116 | |||
117 | AddressBook::Iterator it; | ||
118 | for ( it = ab->begin(); it != ab->end(); ++it ) { | ||
119 | if ( (*it).resource() == resource ) { | ||
120 | saveAddressee( (*it), stream ); | ||
121 | counter++; | ||
122 | (*it).setChanged( false ); | ||
123 | } | ||
124 | } | ||
125 | |||
126 | // set real number of entries | ||
127 | stream.device()->at( 2 * sizeof( Q_UINT32 ) ); | ||
128 | stream << counter; | ||
129 | } | ||
130 | |||
131 | bool BinaryFormat::checkFormat( QFile *file ) const | ||
132 | { | ||
133 | kdDebug(5700) << "BinaryFormat::checkFormat()" << endl; | ||
134 | |||
135 | QDataStream stream( file ); | ||
136 | |||
137 | return checkHeader( stream ); | ||
138 | } | ||
139 | |||
140 | bool BinaryFormat::checkHeader( QDataStream &stream ) const | ||
141 | { | ||
142 | Q_UINT32 magic, version; | ||
143 | |||
144 | stream >> magic >> version; | ||
145 | |||
146 | //US QFile *file = dynamic_cast<QFile*>( stream.device() ); | ||
147 | QFile *file = (QFile*)( stream.device() ); | ||
148 | |||
149 | if ( !file ) { | ||
150 | qDebug("BinaryFormat::checkHeader : Not a file?"); | ||
151 | kdError() << i18n("Not a file?") << endl; | ||
152 | return false; | ||
153 | } | ||
154 | |||
155 | if ( magic != 0x2e93e ) { | ||
156 | qDebug("BinaryFormat::checkHeader : File '%s' is not binary format.", file->name().latin1()); | ||
157 | kdError() << i18n("File '%1' is not binary format.").arg( file->name() ) << endl; | ||
158 | return false; | ||
159 | } | ||
160 | |||
161 | if ( version != BINARY_FORMAT_VERSION ) { | ||
162 | qDebug("BinaryFormat::checkHeader : File '%s' is the wrong version.", file->name().latin1()); | ||
163 | kdError() << i18n("File '%1' is the wrong version.").arg( file->name() ) << endl; | ||
164 | return false; | ||
165 | } | ||
166 | |||
167 | return true; | ||
168 | } | ||
169 | |||
170 | void BinaryFormat::writeHeader( QDataStream &stream ) | ||
171 | { | ||
172 | Q_UINT32 magic, version; | ||
173 | |||
174 | magic = 0x2e93e; | ||
175 | version = BINARY_FORMAT_VERSION; | ||
176 | |||
177 | stream << magic << version; | ||
178 | } | ||
179 | |||
180 | void BinaryFormat::loadAddressee( Addressee &addressee, QDataStream &stream ) | ||
181 | { | ||
182 | stream >> addressee; | ||
183 | /* | ||
184 | // load pictures | ||
185 | Picture photo = addressee.photo(); | ||
186 | Picture logo = addressee.logo(); | ||
187 | |||
188 | if ( photo.isIntern() ) { | ||
189 | QImage img; | ||
190 | if ( !img.load( locateLocal( "data", "kabc/photos/" ) + addressee.uid() ) ) | ||
191 | kdDebug(5700) << "No photo available for '" << addressee.uid() << "'." << endl; | ||
192 | |||
193 | addressee.setPhoto( img ); | ||
194 | } | ||
195 | |||
196 | if ( logo.isIntern() ) { | ||
197 | QImage img; | ||
198 | if ( !img.load( locateLocal( "data", "kabc/logos/" ) + addressee.uid() ) ) | ||
199 | kdDebug(5700) << "No logo available for '" << addressee.uid() << "'." << endl; | ||
200 | |||
201 | addressee.setLogo( img ); | ||
202 | } | ||
203 | |||
204 | // load sound | ||
205 | // TODO: load sound data from file | ||
206 | */ | ||
207 | } | ||
208 | |||
209 | void BinaryFormat::saveAddressee( const Addressee &addressee, QDataStream &stream ) | ||
210 | { | ||
211 | stream << addressee; | ||
212 | /* | ||
213 | // load pictures | ||
214 | Picture photo = addressee.photo(); | ||
215 | Picture logo = addressee.logo(); | ||
216 | |||
217 | if ( photo.isIntern() ) { | ||
218 | QImage img = photo.data(); | ||
219 | QString fileName = locateLocal( "data", "kabc/photos/" ) + addressee.uid(); | ||
220 | |||
221 | if ( !img.save( fileName, "PNG" ) ) | ||
222 | kdDebug(5700) << "Unable to save photo for '" << addressee.uid() << "'." << endl; | ||
223 | } | ||
224 | |||
225 | if ( logo.isIntern() ) { | ||
226 | QImage img = logo.data(); | ||
227 | QString fileName = locateLocal( "data", "kabc/logos/" ) + addressee.uid(); | ||
228 | |||
229 | if ( !img.save( fileName, "PNG" ) ) | ||
230 | kdDebug(5700) << "Unable to save logo for '" << addressee.uid() << "'." << endl; | ||
231 | } | ||
232 | |||
233 | // save sound | ||
234 | // TODO: save the sound data to file | ||
235 | */ | ||
236 | } | ||
diff --git a/kabc/formats/binaryformat.h b/kabc/formats/binaryformat.h new file mode 100644 index 0000000..415fd3b --- a/dev/null +++ b/kabc/formats/binaryformat.h | |||
@@ -0,0 +1,76 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | /* | ||
21 | Enhanced Version of the file for platform independent KDE tools. | ||
22 | Copyright (c) 2004 Ulf Schenk | ||
23 | |||
24 | $Id$ | ||
25 | */ | ||
26 | |||
27 | #ifndef KABC_BINARYFORMAT_H | ||
28 | #define KABC_BINARYFORMAT_H | ||
29 | |||
30 | #include "formatplugin.h" | ||
31 | |||
32 | namespace KABC { | ||
33 | |||
34 | class AddressBook; | ||
35 | class Addressee; | ||
36 | |||
37 | /** | ||
38 | @short binary file format for addressbook entries. | ||
39 | */ | ||
40 | class BinaryFormat : public FormatPlugin | ||
41 | { | ||
42 | public: | ||
43 | /** | ||
44 | * Load single addressee from file. | ||
45 | */ | ||
46 | bool load( Addressee &, QFile *file ); | ||
47 | |||
48 | /** | ||
49 | * Load whole addressee from file. | ||
50 | */ | ||
51 | bool loadAll( AddressBook *, Resource *, QFile *file ); | ||
52 | |||
53 | /** | ||
54 | * Save single addressee to file. | ||
55 | */ | ||
56 | void save( const Addressee &, QFile *file ); | ||
57 | |||
58 | /** | ||
59 | * Save all addressees to file. | ||
60 | */ | ||
61 | void saveAll( AddressBook *, Resource *, QFile *file ); | ||
62 | |||
63 | /** | ||
64 | * Check for valid format of a file. | ||
65 | */ | ||
66 | bool checkFormat( QFile *file ) const; | ||
67 | |||
68 | private: | ||
69 | void loadAddressee( Addressee &, QDataStream & ); | ||
70 | void saveAddressee( const Addressee &, QDataStream & ); | ||
71 | bool checkHeader( QDataStream & ) const; | ||
72 | void writeHeader( QDataStream & ); | ||
73 | }; | ||
74 | |||
75 | } | ||
76 | #endif | ||
diff --git a/kabc/formats/vcardformatplugin2.cpp b/kabc/formats/vcardformatplugin2.cpp new file mode 100644 index 0000000..2a772b4 --- a/dev/null +++ b/kabc/formats/vcardformatplugin2.cpp | |||
@@ -0,0 +1,123 @@ | |||
1 | /* | ||
2 | Enhanced Version of the file for platform independent KDE tools. | ||
3 | Copyright (c) 2004 Ulf Schenk | ||
4 | |||
5 | $Id$ | ||
6 | */ | ||
7 | |||
8 | #include "vcardformatplugin2.h" | ||
9 | |||
10 | #include "address.h" | ||
11 | #include "addressee.h" | ||
12 | #include "vcardparser/vcardtool.h" | ||
13 | |||
14 | #include <qtextstream.h> | ||
15 | #include <qfile.h> | ||
16 | |||
17 | using namespace KABC; | ||
18 | |||
19 | /*US | ||
20 | extern "C" | ||
21 | { | ||
22 | FormatPlugin *format() | ||
23 | { | ||
24 | qDebug(" VCardFormatPlugin2::format = new VCardFormatPlugin2"); | ||
25 | return new VCardFormatPlugin2(); | ||
26 | } | ||
27 | } | ||
28 | */ | ||
29 | |||
30 | VCardFormatPlugin2::VCardFormatPlugin2() | ||
31 | { | ||
32 | } | ||
33 | |||
34 | VCardFormatPlugin2::~VCardFormatPlugin2() | ||
35 | { | ||
36 | } | ||
37 | |||
38 | bool VCardFormatPlugin2::load( Addressee &addressee, QFile *file ) | ||
39 | { | ||
40 | QString data; | ||
41 | |||
42 | QTextStream t( file ); | ||
43 | t.setEncoding( QTextStream::UnicodeUTF8 ); | ||
44 | data = t.read(); | ||
45 | |||
46 | VCardTool tool; | ||
47 | |||
48 | Addressee::List l = tool.parseVCards( data ); | ||
49 | |||
50 | if ( ! l.first().isEmpty() ) { | ||
51 | addressee = l.first(); | ||
52 | return true; | ||
53 | } | ||
54 | |||
55 | return false; | ||
56 | } | ||
57 | |||
58 | bool VCardFormatPlugin2::loadAll( AddressBook *addressBook, Resource *resource, QFile *file ) | ||
59 | { | ||
60 | QString data; | ||
61 | |||
62 | QTextStream t( file ); | ||
63 | t.setEncoding( QTextStream::UnicodeUTF8 ); | ||
64 | data = t.read(); | ||
65 | |||
66 | VCardTool tool; | ||
67 | |||
68 | Addressee::List l = tool.parseVCards( data ); | ||
69 | |||
70 | Addressee::List::Iterator itr; | ||
71 | |||
72 | for ( itr = l.begin(); itr != l.end(); ++itr) { | ||
73 | Addressee addressee = *itr; | ||
74 | addressee.setResource( resource ); | ||
75 | addressBook->insertAddressee( addressee ); | ||
76 | } | ||
77 | |||
78 | return true; | ||
79 | } | ||
80 | |||
81 | void VCardFormatPlugin2::save( const Addressee &addressee, QFile *file ) | ||
82 | { | ||
83 | VCardTool tool; | ||
84 | Addressee::List vcardlist; | ||
85 | |||
86 | |||
87 | vcardlist.append( addressee ); | ||
88 | |||
89 | QTextStream t( file ); | ||
90 | t.setEncoding( QTextStream::UnicodeUTF8 ); | ||
91 | t << tool.createVCards( vcardlist ); | ||
92 | } | ||
93 | |||
94 | void VCardFormatPlugin2::saveAll( AddressBook *ab, Resource *resource, QFile *file ) | ||
95 | { | ||
96 | VCardTool tool; | ||
97 | Addressee::List vcardlist; | ||
98 | |||
99 | AddressBook::Iterator it; | ||
100 | for ( it = ab->begin(); it != ab->end(); ++it ) { | ||
101 | if ( (*it).resource() == resource ) { | ||
102 | (*it).setChanged( false ); | ||
103 | vcardlist.append( *it ); | ||
104 | } | ||
105 | } | ||
106 | |||
107 | QTextStream t( file ); | ||
108 | t.setEncoding( QTextStream::UnicodeUTF8 ); | ||
109 | t << tool.createVCards( vcardlist ); | ||
110 | } | ||
111 | |||
112 | bool VCardFormatPlugin2::checkFormat( QFile *file ) const | ||
113 | { | ||
114 | QString line; | ||
115 | |||
116 | file->readLine( line, 1024 ); | ||
117 | line = line.stripWhiteSpace(); | ||
118 | if ( line == "BEGIN:VCARD" ) | ||
119 | return true; | ||
120 | else | ||
121 | return false; | ||
122 | } | ||
123 | |||
diff --git a/kabc/formats/vcardformatplugin2.h b/kabc/formats/vcardformatplugin2.h new file mode 100644 index 0000000..585ab6b --- a/dev/null +++ b/kabc/formats/vcardformatplugin2.h | |||
@@ -0,0 +1,68 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2003 Zack Rusin <zack@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef VCARDFORMATPLUGIN2_H | ||
29 | #define VCARDFORMATPLUGIN2_H | ||
30 | |||
31 | #include "formatplugin.h" | ||
32 | #include "addressee.h" | ||
33 | |||
34 | class QFile; | ||
35 | |||
36 | namespace KABC { | ||
37 | |||
38 | class Resource; | ||
39 | class AddressBook; | ||
40 | /** | ||
41 | @short Interface of vCard backend for address book. | ||
42 | |||
43 | This class implements the file format interface of address book entries for | ||
44 | the vCard format. | ||
45 | */ | ||
46 | class VCardFormatPlugin2 : public FormatPlugin | ||
47 | { | ||
48 | public: | ||
49 | VCardFormatPlugin2(); | ||
50 | virtual ~VCardFormatPlugin2(); | ||
51 | |||
52 | bool load( Addressee &, QFile *file ); | ||
53 | bool loadAll( AddressBook *, Resource *, QFile *file ); | ||
54 | void save( const Addressee &, QFile *file ); | ||
55 | void saveAll( AddressBook *, Resource *, QFile *file ); | ||
56 | |||
57 | bool checkFormat( QFile *file ) const; | ||
58 | |||
59 | private: | ||
60 | struct VCardFormatPrivate; | ||
61 | VCardFormatPrivate *d; | ||
62 | }; | ||
63 | |||
64 | |||
65 | } | ||
66 | |||
67 | |||
68 | #endif | ||
diff --git a/kabc/geo.cpp b/kabc/geo.cpp new file mode 100644 index 0000000..33597b7 --- a/dev/null +++ b/kabc/geo.cpp | |||
@@ -0,0 +1,116 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <qdatastream.h> | ||
29 | |||
30 | #include "geo.h" | ||
31 | |||
32 | using namespace KABC; | ||
33 | |||
34 | Geo::Geo() | ||
35 | : mLatitude( 91 ), mLongitude( 181 ), mValidLat( false ), mValidLong( false ) | ||
36 | { | ||
37 | } | ||
38 | |||
39 | Geo::Geo( float latitude, float longitude ) | ||
40 | { | ||
41 | setLatitude( latitude ); | ||
42 | setLongitude( longitude ); | ||
43 | } | ||
44 | |||
45 | void Geo::setLatitude( float latitude ) | ||
46 | { | ||
47 | if ( latitude >= -90 && latitude <= 90 ) { | ||
48 | mLatitude = latitude; | ||
49 | mValidLat = true; | ||
50 | } else { | ||
51 | mLatitude = 91; | ||
52 | mValidLat = false; | ||
53 | } | ||
54 | } | ||
55 | |||
56 | float Geo::latitude() const | ||
57 | { | ||
58 | return mLatitude; | ||
59 | } | ||
60 | |||
61 | void Geo::setLongitude( float longitude) | ||
62 | { | ||
63 | if ( longitude >= -180 && longitude <= 180 ) { | ||
64 | mLongitude = longitude; | ||
65 | mValidLong = true; | ||
66 | } else { | ||
67 | mLongitude = 181; | ||
68 | mValidLong = false; | ||
69 | } | ||
70 | } | ||
71 | |||
72 | float Geo::longitude() const | ||
73 | { | ||
74 | return mLongitude; | ||
75 | } | ||
76 | |||
77 | bool Geo::isValid() const | ||
78 | { | ||
79 | return mValidLat && mValidLong; | ||
80 | } | ||
81 | |||
82 | bool Geo::operator==( const Geo &g ) const | ||
83 | { | ||
84 | if ( !g.isValid() && !isValid() ) return true; | ||
85 | if ( !g.isValid() || !isValid() ) return false; | ||
86 | if ( g.mLatitude == mLatitude && g.mLongitude == mLongitude ) return true; | ||
87 | return false; | ||
88 | } | ||
89 | |||
90 | bool Geo::operator!=( const Geo &g ) const | ||
91 | { | ||
92 | if ( !g.isValid() && !isValid() ) return false; | ||
93 | if ( !g.isValid() || !isValid() ) return true; | ||
94 | if ( g.mLatitude == mLatitude && g.mLongitude == mLongitude ) return false; | ||
95 | return true; | ||
96 | } | ||
97 | |||
98 | QString Geo::asString() const | ||
99 | { | ||
100 | return "(" + QString::number(mLatitude) + "," + QString::number(mLongitude) + ")"; | ||
101 | } | ||
102 | |||
103 | QDataStream &KABC::operator<<( QDataStream &s, const Geo &geo ) | ||
104 | { | ||
105 | return s << (float)geo.mLatitude << (float)geo.mLongitude; | ||
106 | } | ||
107 | |||
108 | QDataStream &KABC::operator>>( QDataStream &s, Geo &geo ) | ||
109 | { | ||
110 | s >> geo.mLatitude >> geo.mLongitude; | ||
111 | |||
112 | geo.mValidLat = true; | ||
113 | geo.mValidLong = true; | ||
114 | |||
115 | return s; | ||
116 | } | ||
diff --git a/kabc/geo.h b/kabc/geo.h new file mode 100644 index 0000000..4c7f90f --- a/dev/null +++ b/kabc/geo.h | |||
@@ -0,0 +1,106 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_GEO_H | ||
29 | #define KABC_GEO_H | ||
30 | |||
31 | #include <qstring.h> | ||
32 | |||
33 | namespace KABC { | ||
34 | |||
35 | /** | ||
36 | @short Geographic position | ||
37 | |||
38 | This class represents a geographic position. | ||
39 | */ | ||
40 | class Geo | ||
41 | { | ||
42 | friend QDataStream &operator<<( QDataStream &, const Geo & ); | ||
43 | friend QDataStream &operator>>( QDataStream &, Geo & ); | ||
44 | |||
45 | public: | ||
46 | /** | ||
47 | Construct invalid geographics position object. | ||
48 | */ | ||
49 | Geo(); | ||
50 | |||
51 | /** | ||
52 | Construct geographics position object. | ||
53 | |||
54 | @param latitude Geographical latitude | ||
55 | @param longitude Geographical longitude | ||
56 | */ | ||
57 | Geo( float latitude, float longitude ); | ||
58 | |||
59 | /** | ||
60 | Sets the latitude. | ||
61 | */ | ||
62 | void setLatitude( float ); | ||
63 | |||
64 | /** | ||
65 | Returns the latitude. | ||
66 | */ | ||
67 | float latitude() const; | ||
68 | |||
69 | /** | ||
70 | Sets the longitude. | ||
71 | */ | ||
72 | void setLongitude( float ); | ||
73 | |||
74 | /** | ||
75 | Returns the longitude. | ||
76 | */ | ||
77 | float longitude() const; | ||
78 | |||
79 | /** | ||
80 | Returns, if this object contains a valid geographical position. | ||
81 | */ | ||
82 | bool isValid() const; | ||
83 | |||
84 | bool operator==( const Geo & ) const; | ||
85 | bool operator!=( const Geo & ) const; | ||
86 | |||
87 | /** | ||
88 | Returns string representation of geographical position. | ||
89 | */ | ||
90 | QString asString() const; | ||
91 | |||
92 | private: | ||
93 | float mLatitude; | ||
94 | float mLongitude; | ||
95 | |||
96 | bool mValid; | ||
97 | bool mValidLat; | ||
98 | bool mValidLong; | ||
99 | }; | ||
100 | |||
101 | QDataStream &operator<<( QDataStream &, const Geo & ); | ||
102 | QDataStream &operator>>( QDataStream &, Geo & ); | ||
103 | |||
104 | } | ||
105 | |||
106 | #endif | ||
diff --git a/kabc/kabc.pro b/kabc/kabc.pro new file mode 100644 index 0000000..ea4bbb7 --- a/dev/null +++ b/kabc/kabc.pro | |||
@@ -0,0 +1,214 @@ | |||
1 | TEMPLATE= lib | ||
2 | CONFIG += qt warn_on | ||
3 | #release debug | ||
4 | DESTDIR=../bin | ||
5 | |||
6 | TARGET = microkabc | ||
7 | |||
8 | include( ../variables.pri ) | ||
9 | |||
10 | INCLUDEPATH += . ./vcard/include ./vcard/include/generated ../microkde ../microkde/kdecore ../microkde/kio/kfile ../qtcompat ../microkde/kdeui | ||
11 | |||
12 | #LIBS += -lmicrokde -lldap | ||
13 | LIBS += -L$(QPEDIR)/lib | ||
14 | DEFINES += KAB_EMBEDDED DESKTOP_VERSION | ||
15 | unix : { | ||
16 | |||
17 | OBJECTS_DIR = obj/unix | ||
18 | MOC_DIR = moc/unix | ||
19 | } | ||
20 | win32: { | ||
21 | DEFINES += _WIN32_ | ||
22 | OBJECTS_DIR = obj/win | ||
23 | MOC_DIR = moc/win | ||
24 | } | ||
25 | INTERFACES = \ | ||
26 | |||
27 | |||
28 | HEADERS = \ | ||
29 | resource.h \ | ||
30 | stdaddressbook.h \ | ||
31 | agent.h \ | ||
32 | geo.h \ | ||
33 | key.h \ | ||
34 | field.h \ | ||
35 | plugin.h \ | ||
36 | address.h \ | ||
37 | addresseelist.h \ | ||
38 | formatfactory.h \ | ||
39 | formatplugin.h \ | ||
40 | phonenumber.h \ | ||
41 | distributionlist.h \ | ||
42 | distributionlistdialog.h \ | ||
43 | distributionlisteditor.h \ | ||
44 | vcardformatplugin.h \ | ||
45 | formats/binaryformat.h \ | ||
46 | formats/vcardformatplugin2.h \ | ||
47 | picture.h \ | ||
48 | secrecy.h \ | ||
49 | sound.h \ | ||
50 | addressbook.h \ | ||
51 | timezone.h \ | ||
52 | addressee.h \ | ||
53 | addresseedialog.h \ | ||
54 | vcardconverter.h \ | ||
55 | vcard21parser.h \ | ||
56 | vcardformatimpl.h \ | ||
57 | plugins/file/resourcefile.h \ | ||
58 | plugins/file/resourcefileconfig.h \ | ||
59 | plugins/dir/resourcedir.h \ | ||
60 | plugins/dir/resourcedirconfig.h \ | ||
61 | vcardparser/vcardline.h \ | ||
62 | vcardparser/vcard.h \ | ||
63 | vcardparser/vcardtool.h \ | ||
64 | vcardparser/vcardparser.h \ | ||
65 | vcard/include/VCardAdrParam.h \ | ||
66 | vcard/include/VCardAdrValue.h \ | ||
67 | vcard/include/VCardAgentParam.h \ | ||
68 | vcard/include/VCardContentLine.h \ | ||
69 | vcard/include/VCardDateParam.h \ | ||
70 | vcard/include/VCardDateValue.h \ | ||
71 | vcard/include/VCardEmailParam.h \ | ||
72 | vcard/include/VCardGeoValue.h \ | ||
73 | vcard/include/VCardGroup.h \ | ||
74 | vcard/include/VCardImageParam.h \ | ||
75 | vcard/include/VCardImageValue.h \ | ||
76 | vcard/include/VCardLangValue.h \ | ||
77 | vcard/include/VCardNValue.h \ | ||
78 | vcard/include/VCardParam.h \ | ||
79 | vcard/include/VCardPhoneNumberValue.h \ | ||
80 | vcard/include/VCardSourceParam.h \ | ||
81 | vcard/include/VCardTelParam.h \ | ||
82 | vcard/include/VCardTextParam.h \ | ||
83 | vcard/include/VCardTextNSParam.h \ | ||
84 | vcard/include/VCardTextValue.h \ | ||
85 | vcard/include/VCardTextBinParam.h \ | ||
86 | vcard/include/VCardURIValue.h \ | ||
87 | vcard/include/VCardVCard.h \ | ||
88 | vcard/include/VCardEntity.h \ | ||
89 | vcard/include/VCardValue.h \ | ||
90 | vcard/include/VCardSoundValue.h \ | ||
91 | vcard/include/VCardAgentValue.h \ | ||
92 | vcard/include/VCardTelValue.h \ | ||
93 | vcard/include/VCardTextBinValue.h \ | ||
94 | vcard/include/VCardOrgValue.h \ | ||
95 | vcard/include/VCardUTCValue.h \ | ||
96 | vcard/include/VCardClassValue.h \ | ||
97 | vcard/include/VCardFloatValue.h \ | ||
98 | vcard/include/VCardTextListValue.h \ | ||
99 | vcard/include/generated/AdrParam-generated.h \ | ||
100 | vcard/include/generated/AdrValue-generated.h \ | ||
101 | vcard/include/generated/AgentParam-generated.h \ | ||
102 | vcard/include/generated/ContentLine-generated.h \ | ||
103 | vcard/include/generated/DateParam-generated.h \ | ||
104 | vcard/include/generated/DateValue-generated.h \ | ||
105 | vcard/include/generated/EmailParam-generated.h \ | ||
106 | vcard/include/generated/GeoValue-generated.h \ | ||
107 | vcard/include/generated/Group-generated.h \ | ||
108 | vcard/include/generated/ImageParam-generated.h \ | ||
109 | vcard/include/generated/ImageValue-generated.h \ | ||
110 | vcard/include/generated/LangValue-generated.h \ | ||
111 | vcard/include/generated/NValue-generated.h \ | ||
112 | vcard/include/generated/Param-generated.h \ | ||
113 | vcard/include/generated/PhoneNumberValue-generated.h \ | ||
114 | vcard/include/generated/SourceParam-generated.h \ | ||
115 | vcard/include/generated/TelParam-generated.h \ | ||
116 | vcard/include/generated/TextParam-generated.h \ | ||
117 | vcard/include/generated/TextNSParam-generated.h \ | ||
118 | vcard/include/generated/TextValue-generated.h \ | ||
119 | vcard/include/generated/TextBinParam-generated.h \ | ||
120 | vcard/include/generated/URIValue-generated.h \ | ||
121 | vcard/include/generated/VCard-generated.h \ | ||
122 | vcard/include/generated/VCardEntity-generated.h \ | ||
123 | vcard/include/generated/Value-generated.h \ | ||
124 | vcard/include/generated/SoundValue-generated.h \ | ||
125 | vcard/include/generated/AgentValue-generated.h \ | ||
126 | vcard/include/generated/TelValue-generated.h \ | ||
127 | vcard/include/generated/TextBinValue-generated.h \ | ||
128 | vcard/include/generated/OrgValue-generated.h \ | ||
129 | vcard/include/generated/UTCValue-generated.h \ | ||
130 | vcard/include/generated/ClassValue-generated.h \ | ||
131 | vcard/include/generated/FloatValue-generated.h \ | ||
132 | vcard/include/generated/TextListValue-generated.h | ||
133 | |||
134 | |||
135 | # plugins/ldap/resourceldap.h \ | ||
136 | # plugins/ldap/resourceldapconfig.h \ | ||
137 | |||
138 | |||
139 | SOURCES = \ | ||
140 | distributionlist.cpp \ | ||
141 | distributionlistdialog.cpp \ | ||
142 | distributionlisteditor.cpp \ | ||
143 | vcardformatplugin.cpp \ | ||
144 | formats/binaryformat.cpp \ | ||
145 | formats/vcardformatplugin2.cpp \ | ||
146 | formatfactory.cpp \ | ||
147 | resource.cpp \ | ||
148 | stdaddressbook.cpp \ | ||
149 | plugin.cpp \ | ||
150 | agent.cpp \ | ||
151 | geo.cpp \ | ||
152 | key.cpp \ | ||
153 | field.cpp \ | ||
154 | address.cpp \ | ||
155 | phonenumber.cpp \ | ||
156 | picture.cpp \ | ||
157 | secrecy.cpp \ | ||
158 | sound.cpp \ | ||
159 | addressbook.cpp \ | ||
160 | timezone.cpp \ | ||
161 | addressee.cpp \ | ||
162 | addresseelist.cpp \ | ||
163 | addresseedialog.cpp \ | ||
164 | vcardconverter.cpp \ | ||
165 | vcard21parser.cpp \ | ||
166 | vcardformatimpl.cpp \ | ||
167 | plugins/file/resourcefile.cpp \ | ||
168 | plugins/file/resourcefileconfig.cpp \ | ||
169 | plugins/dir/resourcedir.cpp \ | ||
170 | plugins/dir/resourcedirconfig.cpp \ | ||
171 | vcardparser/vcardline.cpp \ | ||
172 | vcardparser/vcard.cpp \ | ||
173 | vcardparser/vcardtool.cpp \ | ||
174 | vcardparser/vcardparser.cpp \ | ||
175 | vcard/AdrParam.cpp \ | ||
176 | vcard/AdrValue.cpp \ | ||
177 | vcard/AgentParam.cpp \ | ||
178 | vcard/ContentLine.cpp \ | ||
179 | vcard/DateParam.cpp \ | ||
180 | vcard/DateValue.cpp \ | ||
181 | vcard/EmailParam.cpp \ | ||
182 | vcard/Entity.cpp \ | ||
183 | vcard/Enum.cpp \ | ||
184 | vcard/GeoValue.cpp \ | ||
185 | vcard/ImageParam.cpp \ | ||
186 | vcard/ImageValue.cpp \ | ||
187 | vcard/LangValue.cpp \ | ||
188 | vcard/NValue.cpp \ | ||
189 | vcard/Param.cpp \ | ||
190 | vcard/PhoneNumberValue.cpp \ | ||
191 | vcard/RToken.cpp \ | ||
192 | vcard/SourceParam.cpp \ | ||
193 | vcard/TelParam.cpp \ | ||
194 | vcard/TextParam.cpp \ | ||
195 | vcard/TextValue.cpp \ | ||
196 | vcard/TextBinParam.cpp \ | ||
197 | vcard/URIValue.cpp \ | ||
198 | vcard/VCardv.cpp \ | ||
199 | vcard/VCardEntity.cpp \ | ||
200 | vcard/Value.cpp \ | ||
201 | vcard/SoundValue.cpp \ | ||
202 | vcard/AgentValue.cpp \ | ||
203 | vcard/TelValue.cpp \ | ||
204 | vcard/TextBinValue.cpp \ | ||
205 | vcard/OrgValue.cpp \ | ||
206 | vcard/UTCValue.cpp \ | ||
207 | vcard/ClassValue.cpp \ | ||
208 | vcard/FloatValue.cpp \ | ||
209 | vcard/TextListValue.cpp | ||
210 | |||
211 | |||
212 | # plugins/ldap/resourceldap.cpp \ | ||
213 | # plugins/ldap/resourceldapconfig.cpp \ | ||
214 | |||
diff --git a/kabc/kabcE.pro b/kabc/kabcE.pro new file mode 100644 index 0000000..6c37beb --- a/dev/null +++ b/kabc/kabcE.pro | |||
@@ -0,0 +1,202 @@ | |||
1 | TEMPLATE= lib | ||
2 | CONFIG += qt warn_on | ||
3 | TARGET = microkabc | ||
4 | |||
5 | |||
6 | INCLUDEPATH += . ./vcard/include ./vcard/include/generated ../microkde ../microkde/kdecore ../microkde/kdeui ../microkde/kio/kfile ../qtcompat | ||
7 | OBJECTS_DIR = obj/$(PLATFORM) | ||
8 | MOC_DIR = moc/$(PLATFORM) | ||
9 | DESTDIR = $(QPEDIR)/lib | ||
10 | LIBS += -lmicrokde | ||
11 | #LIBS += -lldap | ||
12 | LIBS += -L$(QPEDIR)/lib | ||
13 | DEFINES += KAB_EMBEDDED | ||
14 | |||
15 | INTERFACES = \ | ||
16 | |||
17 | HEADERS = \ | ||
18 | resource.h \ | ||
19 | stdaddressbook.h \ | ||
20 | agent.h \ | ||
21 | geo.h \ | ||
22 | key.h \ | ||
23 | field.h \ | ||
24 | plugin.h \ | ||
25 | address.h \ | ||
26 | addresseelist.h \ | ||
27 | formatfactory.h \ | ||
28 | formatplugin.h \ | ||
29 | phonenumber.h \ | ||
30 | distributionlist.h \ | ||
31 | distributionlistdialog.h \ | ||
32 | distributionlisteditor.h \ | ||
33 | vcardformatplugin.h \ | ||
34 | formats/binaryformat.h \ | ||
35 | formats/vcardformatplugin2.h \ | ||
36 | picture.h \ | ||
37 | secrecy.h \ | ||
38 | sound.h \ | ||
39 | addressbook.h \ | ||
40 | timezone.h \ | ||
41 | addressee.h \ | ||
42 | addresseedialog.h \ | ||
43 | vcardconverter.h \ | ||
44 | vcard21parser.h \ | ||
45 | vcardformatimpl.h \ | ||
46 | plugins/file/resourcefile.h \ | ||
47 | plugins/file/resourcefileconfig.h \ | ||
48 | plugins/dir/resourcedir.h \ | ||
49 | plugins/dir/resourcedirconfig.h \ | ||
50 | vcardparser/vcardline.h \ | ||
51 | vcardparser/vcard.h \ | ||
52 | vcardparser/vcardtool.h \ | ||
53 | vcardparser/vcardparser.h \ | ||
54 | vcard/include/VCardAdrParam.h \ | ||
55 | vcard/include/VCardAdrValue.h \ | ||
56 | vcard/include/VCardAgentParam.h \ | ||
57 | vcard/include/VCardContentLine.h \ | ||
58 | vcard/include/VCardDateParam.h \ | ||
59 | vcard/include/VCardDateValue.h \ | ||
60 | vcard/include/VCardEmailParam.h \ | ||
61 | vcard/include/VCardGeoValue.h \ | ||
62 | vcard/include/VCardGroup.h \ | ||
63 | vcard/include/VCardImageParam.h \ | ||
64 | vcard/include/VCardImageValue.h \ | ||
65 | vcard/include/VCardLangValue.h \ | ||
66 | vcard/include/VCardNValue.h \ | ||
67 | vcard/include/VCardParam.h \ | ||
68 | vcard/include/VCardPhoneNumberValue.h \ | ||
69 | vcard/include/VCardSourceParam.h \ | ||
70 | vcard/include/VCardTelParam.h \ | ||
71 | vcard/include/VCardTextParam.h \ | ||
72 | vcard/include/VCardTextNSParam.h \ | ||
73 | vcard/include/VCardTextValue.h \ | ||
74 | vcard/include/VCardTextBinParam.h \ | ||
75 | vcard/include/VCardURIValue.h \ | ||
76 | vcard/include/VCardVCard.h \ | ||
77 | vcard/include/VCardEntity.h \ | ||
78 | vcard/include/VCardValue.h \ | ||
79 | vcard/include/VCardSoundValue.h \ | ||
80 | vcard/include/VCardAgentValue.h \ | ||
81 | vcard/include/VCardTelValue.h \ | ||
82 | vcard/include/VCardTextBinValue.h \ | ||
83 | vcard/include/VCardOrgValue.h \ | ||
84 | vcard/include/VCardUTCValue.h \ | ||
85 | vcard/include/VCardClassValue.h \ | ||
86 | vcard/include/VCardFloatValue.h \ | ||
87 | vcard/include/VCardTextListValue.h \ | ||
88 | vcard/include/generated/AdrParam-generated.h \ | ||
89 | vcard/include/generated/AdrValue-generated.h \ | ||
90 | vcard/include/generated/AgentParam-generated.h \ | ||
91 | vcard/include/generated/ContentLine-generated.h \ | ||
92 | vcard/include/generated/DateParam-generated.h \ | ||
93 | vcard/include/generated/DateValue-generated.h \ | ||
94 | vcard/include/generated/EmailParam-generated.h \ | ||
95 | vcard/include/generated/GeoValue-generated.h \ | ||
96 | vcard/include/generated/Group-generated.h \ | ||
97 | vcard/include/generated/ImageParam-generated.h \ | ||
98 | vcard/include/generated/ImageValue-generated.h \ | ||
99 | vcard/include/generated/LangValue-generated.h \ | ||
100 | vcard/include/generated/NValue-generated.h \ | ||
101 | vcard/include/generated/Param-generated.h \ | ||
102 | vcard/include/generated/PhoneNumberValue-generated.h \ | ||
103 | vcard/include/generated/SourceParam-generated.h \ | ||
104 | vcard/include/generated/TelParam-generated.h \ | ||
105 | vcard/include/generated/TextParam-generated.h \ | ||
106 | vcard/include/generated/TextNSParam-generated.h \ | ||
107 | vcard/include/generated/TextValue-generated.h \ | ||
108 | vcard/include/generated/TextBinParam-generated.h \ | ||
109 | vcard/include/generated/URIValue-generated.h \ | ||
110 | vcard/include/generated/VCard-generated.h \ | ||
111 | vcard/include/generated/VCardEntity-generated.h \ | ||
112 | vcard/include/generated/Value-generated.h \ | ||
113 | vcard/include/generated/SoundValue-generated.h \ | ||
114 | vcard/include/generated/AgentValue-generated.h \ | ||
115 | vcard/include/generated/TelValue-generated.h \ | ||
116 | vcard/include/generated/TextBinValue-generated.h \ | ||
117 | vcard/include/generated/OrgValue-generated.h \ | ||
118 | vcard/include/generated/UTCValue-generated.h \ | ||
119 | vcard/include/generated/ClassValue-generated.h \ | ||
120 | vcard/include/generated/FloatValue-generated.h \ | ||
121 | vcard/include/generated/TextListValue-generated.h | ||
122 | |||
123 | |||
124 | # plugins/ldap/resourceldap.h \ | ||
125 | # plugins/ldap/resourceldapconfig.h \ | ||
126 | |||
127 | |||
128 | SOURCES = \ | ||
129 | distributionlist.cpp \ | ||
130 | distributionlistdialog.cpp \ | ||
131 | distributionlisteditor.cpp \ | ||
132 | vcardformatplugin.cpp \ | ||
133 | formats/binaryformat.cpp \ | ||
134 | formats/vcardformatplugin2.cpp \ | ||
135 | formatfactory.cpp \ | ||
136 | resource.cpp \ | ||
137 | stdaddressbook.cpp \ | ||
138 | plugin.cpp \ | ||
139 | agent.cpp \ | ||
140 | geo.cpp \ | ||
141 | key.cpp \ | ||
142 | field.cpp \ | ||
143 | address.cpp \ | ||
144 | phonenumber.cpp \ | ||
145 | picture.cpp \ | ||
146 | secrecy.cpp \ | ||
147 | sound.cpp \ | ||
148 | addressbook.cpp \ | ||
149 | timezone.cpp \ | ||
150 | addressee.cpp \ | ||
151 | addresseelist.cpp \ | ||
152 | addresseedialog.cpp \ | ||
153 | vcardconverter.cpp \ | ||
154 | vcard21parser.cpp \ | ||
155 | vcardformatimpl.cpp \ | ||
156 | plugins/file/resourcefile.cpp \ | ||
157 | plugins/file/resourcefileconfig.cpp \ | ||
158 | plugins/dir/resourcedir.cpp \ | ||
159 | plugins/dir/resourcedirconfig.cpp \ | ||
160 | vcardparser/vcardline.cpp \ | ||
161 | vcardparser/vcard.cpp \ | ||
162 | vcardparser/vcardtool.cpp \ | ||
163 | vcardparser/vcardparser.cpp \ | ||
164 | vcard/AdrParam.cpp \ | ||
165 | vcard/AdrValue.cpp \ | ||
166 | vcard/AgentParam.cpp \ | ||
167 | vcard/ContentLine.cpp \ | ||
168 | vcard/DateParam.cpp \ | ||
169 | vcard/DateValue.cpp \ | ||
170 | vcard/EmailParam.cpp \ | ||
171 | vcard/Entity.cpp \ | ||
172 | vcard/Enum.cpp \ | ||
173 | vcard/GeoValue.cpp \ | ||
174 | vcard/ImageParam.cpp \ | ||
175 | vcard/ImageValue.cpp \ | ||
176 | vcard/LangValue.cpp \ | ||
177 | vcard/NValue.cpp \ | ||
178 | vcard/Param.cpp \ | ||
179 | vcard/PhoneNumberValue.cpp \ | ||
180 | vcard/RToken.cpp \ | ||
181 | vcard/SourceParam.cpp \ | ||
182 | vcard/TelParam.cpp \ | ||
183 | vcard/TextParam.cpp \ | ||
184 | vcard/TextValue.cpp \ | ||
185 | vcard/TextBinParam.cpp \ | ||
186 | vcard/URIValue.cpp \ | ||
187 | vcard/VCardv.cpp \ | ||
188 | vcard/VCardEntity.cpp \ | ||
189 | vcard/Value.cpp \ | ||
190 | vcard/SoundValue.cpp \ | ||
191 | vcard/AgentValue.cpp \ | ||
192 | vcard/TelValue.cpp \ | ||
193 | vcard/TextBinValue.cpp \ | ||
194 | vcard/OrgValue.cpp \ | ||
195 | vcard/UTCValue.cpp \ | ||
196 | vcard/ClassValue.cpp \ | ||
197 | vcard/FloatValue.cpp \ | ||
198 | vcard/TextListValue.cpp | ||
199 | |||
200 | |||
201 | # plugins/ldap/resourceldap.cpp \ | ||
202 | # plugins/ldap/resourceldapconfig.cpp \ | ||
diff --git a/kabc/key.cpp b/kabc/key.cpp new file mode 100644 index 0000000..802424b --- a/dev/null +++ b/kabc/key.cpp | |||
@@ -0,0 +1,160 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <kapplication.h> | ||
29 | #include <klocale.h> | ||
30 | |||
31 | #include "key.h" | ||
32 | |||
33 | using namespace KABC; | ||
34 | |||
35 | Key::Key( const QString &text, int type ) | ||
36 | : mTextData( text ), mIsBinary( false ), mType( type ) | ||
37 | { | ||
38 | mId = KApplication::randomString(8); | ||
39 | } | ||
40 | |||
41 | Key::~Key() | ||
42 | { | ||
43 | } | ||
44 | |||
45 | bool Key::operator==( const Key &k ) const | ||
46 | { | ||
47 | if ( mIsBinary != k.mIsBinary ) return false; | ||
48 | if ( mIsBinary ) | ||
49 | if ( mBinaryData != k.mBinaryData ) return false; | ||
50 | else | ||
51 | if ( mTextData != k.mTextData ) return false; | ||
52 | if ( mType != k.mType ) return false; | ||
53 | if ( mCustomTypeString != k.mCustomTypeString ) return false; | ||
54 | |||
55 | return true; | ||
56 | } | ||
57 | |||
58 | bool Key::operator!=( const Key &k ) const | ||
59 | { | ||
60 | return !( k == *this ); | ||
61 | } | ||
62 | |||
63 | void Key::setId( const QString &id ) | ||
64 | { | ||
65 | mId = id; | ||
66 | } | ||
67 | |||
68 | QString Key::id() const | ||
69 | { | ||
70 | return mId; | ||
71 | } | ||
72 | |||
73 | void Key::setBinaryData( const QByteArray &binary ) | ||
74 | { | ||
75 | mBinaryData = binary; | ||
76 | mIsBinary = true; | ||
77 | } | ||
78 | |||
79 | QByteArray Key::binaryData() const | ||
80 | { | ||
81 | return mBinaryData; | ||
82 | } | ||
83 | |||
84 | void Key::setTextData( const QString &text ) | ||
85 | { | ||
86 | mTextData = text; | ||
87 | mIsBinary = false; | ||
88 | } | ||
89 | |||
90 | QString Key::textData() const | ||
91 | { | ||
92 | return mTextData; | ||
93 | } | ||
94 | |||
95 | bool Key::isBinary() const | ||
96 | { | ||
97 | return mIsBinary; | ||
98 | } | ||
99 | |||
100 | void Key::setType( int type ) | ||
101 | { | ||
102 | mType = type; | ||
103 | } | ||
104 | |||
105 | void Key::setCustomTypeString( const QString &custom ) | ||
106 | { | ||
107 | mCustomTypeString = custom; | ||
108 | } | ||
109 | |||
110 | int Key::type() const | ||
111 | { | ||
112 | return mType; | ||
113 | } | ||
114 | |||
115 | QString Key::customTypeString() const | ||
116 | { | ||
117 | return mCustomTypeString; | ||
118 | } | ||
119 | |||
120 | Key::TypeList Key::typeList() | ||
121 | { | ||
122 | TypeList list; | ||
123 | list << X509; | ||
124 | list << PGP; | ||
125 | list << Custom; | ||
126 | |||
127 | return list; | ||
128 | } | ||
129 | |||
130 | QString Key::typeLabel( int type ) | ||
131 | { | ||
132 | switch ( type ) { | ||
133 | case X509: | ||
134 | return i18n( "X509" ); | ||
135 | break; | ||
136 | case PGP: | ||
137 | return i18n( "PGP" ); | ||
138 | break; | ||
139 | case Custom: | ||
140 | return i18n( "Custom" ); | ||
141 | break; | ||
142 | default: | ||
143 | return i18n( "Unknown type" ); | ||
144 | break; | ||
145 | } | ||
146 | } | ||
147 | |||
148 | QDataStream &KABC::operator<<( QDataStream &s, const Key &key ) | ||
149 | { | ||
150 | return s << key.mId << key.mIsBinary << key.mTextData << key.mBinaryData << | ||
151 | key.mCustomTypeString << key.mType; | ||
152 | } | ||
153 | |||
154 | QDataStream &KABC::operator>>( QDataStream &s, Key &key ) | ||
155 | { | ||
156 | s >> key.mId >> key.mIsBinary >> key.mTextData >> key.mBinaryData >> | ||
157 | key.mCustomTypeString >> key.mType; | ||
158 | |||
159 | return s; | ||
160 | } | ||
diff --git a/kabc/key.h b/kabc/key.h new file mode 100644 index 0000000..6ea5b47 --- a/dev/null +++ b/kabc/key.h | |||
@@ -0,0 +1,155 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_KEY_H | ||
29 | #define KABC_KEY_H | ||
30 | |||
31 | #include <qvaluelist.h> | ||
32 | |||
33 | namespace KABC { | ||
34 | |||
35 | /** | ||
36 | * @short A class to store an encryption key. | ||
37 | */ | ||
38 | class Key | ||
39 | { | ||
40 | friend QDataStream &operator<<( QDataStream &, const Key & ); | ||
41 | friend QDataStream &operator>>( QDataStream &, Key & ); | ||
42 | |||
43 | public: | ||
44 | typedef QValueList<Key> List; | ||
45 | typedef QValueList<int> TypeList; | ||
46 | |||
47 | /** | ||
48 | * Key types | ||
49 | * | ||
50 | * @li X509 - X509 key | ||
51 | * @li PGP - Pretty Good Privacy key | ||
52 | * @li Custom - Custom or IANA conform key | ||
53 | */ | ||
54 | enum Types { | ||
55 | X509, | ||
56 | PGP, | ||
57 | Custom | ||
58 | }; | ||
59 | |||
60 | /** | ||
61 | * Constructor. | ||
62 | * | ||
63 | * @param text The text data. | ||
64 | * @param type The key type, @see Types. | ||
65 | */ | ||
66 | Key( const QString &text = QString::null, int type = PGP ); | ||
67 | |||
68 | /** | ||
69 | * Destructor. | ||
70 | */ | ||
71 | ~Key(); | ||
72 | |||
73 | bool operator==( const Key & ) const; | ||
74 | bool operator!=( const Key & ) const; | ||
75 | |||
76 | /** | ||
77 | * Sets the unique identifier. | ||
78 | */ | ||
79 | void setId( const QString &id ); | ||
80 | |||
81 | /** | ||
82 | * Returns the unique identifier. | ||
83 | */ | ||
84 | QString id() const; | ||
85 | |||
86 | /** | ||
87 | * Sets binary data. | ||
88 | */ | ||
89 | void setBinaryData( const QByteArray &binary ); | ||
90 | |||
91 | /** | ||
92 | * Returns the binary data. | ||
93 | */ | ||
94 | QByteArray binaryData() const; | ||
95 | |||
96 | /** | ||
97 | * Sets text data. | ||
98 | */ | ||
99 | void setTextData( const QString &text ); | ||
100 | |||
101 | /** | ||
102 | * Returns the text data. | ||
103 | */ | ||
104 | QString textData() const; | ||
105 | |||
106 | /** | ||
107 | * Returns whether the key contains binary or text data. | ||
108 | */ | ||
109 | bool isBinary() const; | ||
110 | |||
111 | /** | ||
112 | * Sets the type, @see Type. | ||
113 | */ | ||
114 | void setType( int type ); | ||
115 | |||
116 | /** | ||
117 | * Sets custom type string. | ||
118 | */ | ||
119 | void setCustomTypeString( const QString &custom ); | ||
120 | |||
121 | /** | ||
122 | * Returns the type, @see Type. | ||
123 | */ | ||
124 | int type() const; | ||
125 | |||
126 | /** | ||
127 | * Returns the custom type string. | ||
128 | */ | ||
129 | QString customTypeString() const; | ||
130 | |||
131 | /** | ||
132 | * Returns a list of all available key types. | ||
133 | */ | ||
134 | static TypeList typeList(); | ||
135 | |||
136 | /** | ||
137 | * Returns a translated label for a given key type. | ||
138 | */ | ||
139 | static QString typeLabel( int type ); | ||
140 | |||
141 | private: | ||
142 | QByteArray mBinaryData; | ||
143 | QString mId; | ||
144 | QString mTextData; | ||
145 | QString mCustomTypeString; | ||
146 | |||
147 | int mIsBinary; | ||
148 | int mType; | ||
149 | }; | ||
150 | |||
151 | QDataStream &operator<<( QDataStream &, const Key & ); | ||
152 | QDataStream &operator>>( QDataStream &, Key & ); | ||
153 | |||
154 | } | ||
155 | #endif | ||
diff --git a/kabc/phonenumber.cpp b/kabc/phonenumber.cpp new file mode 100644 index 0000000..ad3e65b --- a/dev/null +++ b/kabc/phonenumber.cpp | |||
@@ -0,0 +1,204 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <kapplication.h> | ||
29 | #include <klocale.h> | ||
30 | |||
31 | #include "phonenumber.h" | ||
32 | |||
33 | using namespace KABC; | ||
34 | |||
35 | PhoneNumber::PhoneNumber() : | ||
36 | mType( Home ) | ||
37 | { | ||
38 | init(); | ||
39 | } | ||
40 | |||
41 | PhoneNumber::PhoneNumber( const QString &number, int type ) : | ||
42 | mType( type ), mNumber( number ) | ||
43 | { | ||
44 | init(); | ||
45 | } | ||
46 | |||
47 | PhoneNumber::~PhoneNumber() | ||
48 | { | ||
49 | } | ||
50 | |||
51 | void PhoneNumber::init() | ||
52 | { | ||
53 | mId = KApplication::randomString( 8 ); | ||
54 | } | ||
55 | |||
56 | bool PhoneNumber::operator==( const PhoneNumber &p ) const | ||
57 | { | ||
58 | if ( mNumber != p.mNumber ) return false; | ||
59 | if ( mType != p.mType ) return false; | ||
60 | |||
61 | return true; | ||
62 | } | ||
63 | |||
64 | bool PhoneNumber::operator!=( const PhoneNumber &p ) const | ||
65 | { | ||
66 | return !( p == *this ); | ||
67 | } | ||
68 | |||
69 | void PhoneNumber::setId( const QString &id ) | ||
70 | { | ||
71 | mId = id; | ||
72 | } | ||
73 | |||
74 | QString PhoneNumber::id() const | ||
75 | { | ||
76 | return mId; | ||
77 | } | ||
78 | |||
79 | void PhoneNumber::setNumber( const QString &number ) | ||
80 | { | ||
81 | mNumber = number; | ||
82 | } | ||
83 | |||
84 | QString PhoneNumber::number() const | ||
85 | { | ||
86 | return mNumber; | ||
87 | } | ||
88 | |||
89 | void PhoneNumber::setType( int type ) | ||
90 | { | ||
91 | mType = type; | ||
92 | } | ||
93 | |||
94 | int PhoneNumber::type() const | ||
95 | { | ||
96 | return mType; | ||
97 | } | ||
98 | |||
99 | QString PhoneNumber::typeLabel() const | ||
100 | { | ||
101 | QString label; | ||
102 | bool first = true; | ||
103 | |||
104 | TypeList list = typeList(); | ||
105 | |||
106 | TypeList::Iterator it; | ||
107 | for ( it = list.begin(); it != list.end(); ++it ) { | ||
108 | if ( ( type() & (*it) ) && ( (*it) != Pref ) ) { | ||
109 | label.append( ( first ? "" : "/" ) + typeLabel( *it ) ); | ||
110 | if ( first ) | ||
111 | first = false; | ||
112 | } | ||
113 | } | ||
114 | |||
115 | return label; | ||
116 | } | ||
117 | |||
118 | QString PhoneNumber::label() const | ||
119 | { | ||
120 | return typeLabel( type() ); | ||
121 | } | ||
122 | |||
123 | PhoneNumber::TypeList PhoneNumber::typeList() | ||
124 | { | ||
125 | TypeList list; | ||
126 | |||
127 | list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video | ||
128 | << Bbs << Modem << Car << Isdn << Pcs << Pager; | ||
129 | |||
130 | return list; | ||
131 | } | ||
132 | |||
133 | QString PhoneNumber::label( int type ) | ||
134 | { | ||
135 | return typeLabel( type ); | ||
136 | } | ||
137 | |||
138 | QString PhoneNumber::typeLabel( int type ) | ||
139 | { | ||
140 | switch ( type ) { | ||
141 | case Home: | ||
142 | return i18n("Home phone", "Home"); | ||
143 | break; | ||
144 | case Work: | ||
145 | return i18n("Work phone", "Work"); | ||
146 | break; | ||
147 | case Msg: | ||
148 | return i18n("Messenger"); | ||
149 | break; | ||
150 | case Pref: | ||
151 | return i18n("Preferred Number"); | ||
152 | break; | ||
153 | case Voice: | ||
154 | return i18n("Voice"); | ||
155 | break; | ||
156 | case Fax: | ||
157 | return i18n("Fax"); | ||
158 | break; | ||
159 | case Cell: | ||
160 | return i18n("Mobile Phone", "Mobile" ); | ||
161 | break; | ||
162 | case Video: | ||
163 | return i18n("Video"); | ||
164 | break; | ||
165 | case Bbs: | ||
166 | return i18n("Mailbox"); | ||
167 | break; | ||
168 | case Modem: | ||
169 | return i18n("Modem"); | ||
170 | break; | ||
171 | case Car: | ||
172 | return i18n("Car Phone", "Car" ); | ||
173 | break; | ||
174 | case Isdn: | ||
175 | return i18n("ISDN"); | ||
176 | break; | ||
177 | case Pcs: | ||
178 | return i18n("PCS"); | ||
179 | break; | ||
180 | case Pager: | ||
181 | return i18n("Pager"); | ||
182 | break; | ||
183 | case Home | Fax: | ||
184 | return i18n("Home Fax"); | ||
185 | break; | ||
186 | case Work | Fax: | ||
187 | return i18n("Work Fax"); | ||
188 | break; | ||
189 | default: | ||
190 | return i18n("Other"); | ||
191 | } | ||
192 | } | ||
193 | |||
194 | QDataStream &KABC::operator<<( QDataStream &s, const PhoneNumber &phone ) | ||
195 | { | ||
196 | return s << phone.mId << phone.mType << phone.mNumber; | ||
197 | } | ||
198 | |||
199 | QDataStream &KABC::operator>>( QDataStream &s, PhoneNumber &phone ) | ||
200 | { | ||
201 | s >> phone.mId >> phone.mType >> phone.mNumber; | ||
202 | |||
203 | return s; | ||
204 | } | ||
diff --git a/kabc/phonenumber.h b/kabc/phonenumber.h new file mode 100644 index 0000000..6a9c8cb --- a/dev/null +++ b/kabc/phonenumber.h | |||
@@ -0,0 +1,165 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_PHONENUMBER_H | ||
29 | #define KABC_PHONENUMBER_H | ||
30 | |||
31 | #include <qvaluelist.h> | ||
32 | #include <qstring.h> | ||
33 | |||
34 | namespace KABC { | ||
35 | |||
36 | /** | ||
37 | @short Phonenumber information. | ||
38 | |||
39 | This class provides phone number information. A phone number is classified by | ||
40 | a type. The following types are available, it's possible to use multiple types | ||
41 | @ref Types for a number by combining them through a logical or. | ||
42 | */ | ||
43 | class PhoneNumber | ||
44 | { | ||
45 | friend QDataStream &operator<<( QDataStream &, const PhoneNumber & ); | ||
46 | friend QDataStream &operator>>( QDataStream &, PhoneNumber & ); | ||
47 | |||
48 | public: | ||
49 | typedef QValueList<PhoneNumber> List; | ||
50 | typedef QValueList<int> TypeList; | ||
51 | |||
52 | /** | ||
53 | @li @p Home - Home number | ||
54 | @li @p Work - Office number | ||
55 | @li @p Msg - Messaging | ||
56 | @li @p Pref - Preferred number | ||
57 | @li @p Voice - Voice | ||
58 | @li @p Fax - Fax machine | ||
59 | @li @p Cell - Cell phone | ||
60 | @li @p Video - Video phone | ||
61 | @li @p Bbs - Mailbox | ||
62 | @li @p Modem - Modem | ||
63 | @li @p Car - Car phone | ||
64 | @li @p Isdn - ISDN connection | ||
65 | @li @p Pcs - Personal Communication Service | ||
66 | @li @p Pager - Pager | ||
67 | */ | ||
68 | enum Types { Home = 1, Work = 2, Msg = 4, Pref = 8, Voice = 16, Fax = 32, | ||
69 | Cell = 64, Video = 128, Bbs = 256, Modem = 512, Car = 1024, | ||
70 | Isdn = 2048, Pcs = 4096, Pager = 8192 }; | ||
71 | |||
72 | /** | ||
73 | Create an empty phone number object. | ||
74 | */ | ||
75 | PhoneNumber(); | ||
76 | |||
77 | /** | ||
78 | Create a phonenumber object. | ||
79 | |||
80 | @param number Number | ||
81 | @param type Type as defined in enum. Multiple types can be | ||
82 | specified by combining them by a logical or. | ||
83 | */ | ||
84 | PhoneNumber( const QString &number, int type = Home ); | ||
85 | |||
86 | /** | ||
87 | Destructor. | ||
88 | */ | ||
89 | ~PhoneNumber(); | ||
90 | |||
91 | bool operator==( const PhoneNumber & ) const; | ||
92 | bool operator!=( const PhoneNumber & ) const; | ||
93 | |||
94 | /** | ||
95 | Sets the unique identifier. | ||
96 | */ | ||
97 | void setId( const QString &id ); | ||
98 | |||
99 | /** | ||
100 | Returns the unique identifier. | ||
101 | */ | ||
102 | QString id() const; | ||
103 | |||
104 | /** | ||
105 | Sets the number. | ||
106 | */ | ||
107 | void setNumber( const QString & ); | ||
108 | |||
109 | /** | ||
110 | Returns the number. | ||
111 | */ | ||
112 | QString number() const; | ||
113 | |||
114 | /** | ||
115 | Sets the type. Multiple types can be specified by combining them by | ||
116 | a logical or. | ||
117 | */ | ||
118 | void setType( int ); | ||
119 | |||
120 | /** | ||
121 | Returns the type. Can be a multiple types combined by a logical or. | ||
122 | */ | ||
123 | int type() const; | ||
124 | |||
125 | /** | ||
126 | Returns a translated string of all types the address has. | ||
127 | */ | ||
128 | QString typeLabel() const; | ||
129 | |||
130 | /** | ||
131 | Returns the translated label for phone number depending on its type. | ||
132 | */ | ||
133 | QString label() const; | ||
134 | |||
135 | /** | ||
136 | Returns a list of all available types | ||
137 | */ | ||
138 | static TypeList typeList(); | ||
139 | |||
140 | /** | ||
141 | Returns the translated label for phone number type. | ||
142 | */ | ||
143 | static QString typeLabel( int type ); | ||
144 | |||
145 | /** | ||
146 | Returns the translated label for phone number type. | ||
147 | @obsolete | ||
148 | */ | ||
149 | static QString label( int type ); | ||
150 | |||
151 | private: | ||
152 | void init(); | ||
153 | |||
154 | QString mId; | ||
155 | |||
156 | int mType; | ||
157 | QString mNumber; | ||
158 | }; | ||
159 | |||
160 | QDataStream &operator<<( QDataStream &, const PhoneNumber & ); | ||
161 | QDataStream &operator>>( QDataStream &, PhoneNumber & ); | ||
162 | |||
163 | } | ||
164 | |||
165 | #endif | ||
diff --git a/kabc/picture.cpp b/kabc/picture.cpp new file mode 100644 index 0000000..6a34b98 --- a/dev/null +++ b/kabc/picture.cpp | |||
@@ -0,0 +1,141 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include "picture.h" | ||
29 | |||
30 | using namespace KABC; | ||
31 | |||
32 | Picture::Picture() | ||
33 | : mIntern( false ) | ||
34 | { | ||
35 | mUndefined = true; | ||
36 | } | ||
37 | |||
38 | Picture::Picture( const QString &url ) | ||
39 | : mUrl( url ), mIntern( false ) | ||
40 | { | ||
41 | mUndefined = false; | ||
42 | } | ||
43 | |||
44 | Picture::Picture( const QImage &data ) | ||
45 | : mData( data ), mIntern( true ) | ||
46 | { | ||
47 | mUndefined = false; | ||
48 | } | ||
49 | |||
50 | Picture::~Picture() | ||
51 | { | ||
52 | } | ||
53 | |||
54 | bool Picture::operator==( const Picture &p ) const | ||
55 | { | ||
56 | if ( mIntern != p.mIntern ) return false; | ||
57 | |||
58 | if ( mIntern ) { | ||
59 | if ( mData != p.mData ) | ||
60 | return false; | ||
61 | } else { | ||
62 | if ( mUrl != p.mUrl ) | ||
63 | return false; | ||
64 | } | ||
65 | |||
66 | return true; | ||
67 | } | ||
68 | |||
69 | bool Picture::operator!=( const Picture &p ) const | ||
70 | { | ||
71 | return !( p == *this ); | ||
72 | } | ||
73 | |||
74 | void Picture::setUrl( const QString &url ) | ||
75 | { | ||
76 | mUrl = url; | ||
77 | mIntern = false; | ||
78 | mUndefined = false; | ||
79 | } | ||
80 | |||
81 | void Picture::setData( const QImage &data ) | ||
82 | { | ||
83 | mData = data; | ||
84 | mIntern = true; | ||
85 | mUndefined = false; | ||
86 | } | ||
87 | |||
88 | void Picture::setType( const QString &type ) | ||
89 | { | ||
90 | mType = type; | ||
91 | } | ||
92 | |||
93 | bool Picture::isIntern() const | ||
94 | { | ||
95 | return mIntern; | ||
96 | } | ||
97 | |||
98 | QString Picture::url() const | ||
99 | { | ||
100 | return mUrl; | ||
101 | } | ||
102 | |||
103 | QImage Picture::data() const | ||
104 | { | ||
105 | return mData; | ||
106 | } | ||
107 | QPixmap Picture::pixmap() const | ||
108 | { | ||
109 | QPixmap p; | ||
110 | p.convertFromImage ( mData ); | ||
111 | return p; | ||
112 | } | ||
113 | |||
114 | QString Picture::type() const | ||
115 | { | ||
116 | return mType; | ||
117 | } | ||
118 | bool Picture::undefined() const | ||
119 | { | ||
120 | return mUndefined; | ||
121 | } | ||
122 | |||
123 | |||
124 | QString Picture::asString() const | ||
125 | { | ||
126 | if ( mIntern ) | ||
127 | return "intern picture"; | ||
128 | else | ||
129 | return mUrl; | ||
130 | } | ||
131 | |||
132 | QDataStream &KABC::operator<<( QDataStream &s, const Picture &picture ) | ||
133 | { | ||
134 | return s << picture.mIntern << picture.mUrl << picture.mType << picture.mData; | ||
135 | } | ||
136 | |||
137 | QDataStream &KABC::operator>>( QDataStream &s, Picture &picture ) | ||
138 | { | ||
139 | s >> picture.mIntern >> picture.mUrl >> picture.mType >> picture.mData; | ||
140 | return s; | ||
141 | } | ||
diff --git a/kabc/picture.h b/kabc/picture.h new file mode 100644 index 0000000..714d1e2 --- a/dev/null +++ b/kabc/picture.h | |||
@@ -0,0 +1,134 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_PICTURE_H | ||
29 | #define KABC_PICTURE_H | ||
30 | |||
31 | #include <qimage.h> | ||
32 | |||
33 | namespace KABC { | ||
34 | |||
35 | class Picture | ||
36 | { | ||
37 | friend QDataStream &operator<<( QDataStream &, const Picture & ); | ||
38 | friend QDataStream &operator>>( QDataStream &, Picture & ); | ||
39 | |||
40 | public: | ||
41 | |||
42 | /** | ||
43 | * Consturctor. Creates an empty object. | ||
44 | */ | ||
45 | Picture(); | ||
46 | |||
47 | /** | ||
48 | * Consturctor. | ||
49 | * | ||
50 | * @param url A URL that describes the position of the picture file. | ||
51 | */ | ||
52 | Picture( const QString &url ); | ||
53 | |||
54 | /** | ||
55 | * Consturctor. | ||
56 | * | ||
57 | * @param data The raw data of the picture. | ||
58 | */ | ||
59 | Picture( const QImage &data ); | ||
60 | |||
61 | /** | ||
62 | * Destructor. | ||
63 | */ | ||
64 | ~Picture(); | ||
65 | |||
66 | bool undefined() const; | ||
67 | bool operator==( const Picture & ) const; | ||
68 | bool operator!=( const Picture & ) const; | ||
69 | |||
70 | /** | ||
71 | * Sets a URL for the location of the picture file. When using this | ||
72 | * function, @ref isIntern() will return 'false' until you use | ||
73 | * @ref setData(). | ||
74 | * | ||
75 | * @param url The location URL of the picture file. | ||
76 | */ | ||
77 | void setUrl( const QString &url ); | ||
78 | |||
79 | /** | ||
80 | * Sets the raw data of the picture. When using this function, | ||
81 | * @ref isIntern() will return 'true' until you use @ref setUrl(). | ||
82 | * | ||
83 | * @param data The raw data of the picture. | ||
84 | */ | ||
85 | void setData( const QImage &data ); | ||
86 | |||
87 | /** | ||
88 | * Sets the type of the picture. | ||
89 | */ | ||
90 | void setType( const QString &type ); | ||
91 | |||
92 | /** | ||
93 | * Returns whether the picture is described by a URL (extern) or | ||
94 | * by the raw data (intern). | ||
95 | * When this method returns 'true' you can use @ref data() to | ||
96 | * get the raw data. Otherwise you can request the URL of this | ||
97 | * picture by @ref url() and load the raw data from that location. | ||
98 | */ | ||
99 | bool isIntern() const; | ||
100 | |||
101 | /** | ||
102 | * Returns the location URL of this picture. | ||
103 | */ | ||
104 | QString url() const; | ||
105 | |||
106 | /** | ||
107 | * Returns the raw data of this picture. | ||
108 | */ | ||
109 | QImage data() const; | ||
110 | QPixmap pixmap() const; | ||
111 | /** | ||
112 | * Returns the type of this picture. | ||
113 | */ | ||
114 | QString type() const; | ||
115 | |||
116 | /** | ||
117 | * Returns string representation of the picture. | ||
118 | */ | ||
119 | QString asString() const; | ||
120 | |||
121 | private: | ||
122 | QString mUrl; | ||
123 | QString mType; | ||
124 | QImage mData; | ||
125 | bool mUndefined; | ||
126 | |||
127 | int mIntern; | ||
128 | }; | ||
129 | |||
130 | QDataStream &operator<<( QDataStream &, const Picture & ); | ||
131 | QDataStream &operator>>( QDataStream &, Picture & ); | ||
132 | |||
133 | } | ||
134 | #endif | ||
diff --git a/kabc/plugin.cpp b/kabc/plugin.cpp new file mode 100644 index 0000000..16c7e86 --- a/dev/null +++ b/kabc/plugin.cpp | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include "plugin.h" | ||
22 | |||
23 | using namespace KABC; | ||
24 | |||
25 | Plugin::Plugin() | ||
26 | { | ||
27 | } | ||
28 | |||
29 | Plugin::~Plugin() | ||
30 | { | ||
31 | } | ||
32 | |||
33 | void Plugin::setType( const QString& type ) | ||
34 | { | ||
35 | mType = type; | ||
36 | } | ||
37 | |||
38 | QString Plugin::type() const | ||
39 | { | ||
40 | return mType; | ||
41 | } | ||
42 | |||
43 | void Plugin::setNameLabel( const QString& label ) | ||
44 | { | ||
45 | mNameLabel = label; | ||
46 | } | ||
47 | |||
48 | QString Plugin::nameLabel() const | ||
49 | { | ||
50 | return mNameLabel; | ||
51 | } | ||
52 | |||
53 | void Plugin::setDescriptionLabel( const QString& label ) | ||
54 | { | ||
55 | mDescriptionLabel = label; | ||
56 | } | ||
57 | |||
58 | QString Plugin::descriptionLabel() const | ||
59 | { | ||
60 | return mDescriptionLabel; | ||
61 | } | ||
diff --git a/kabc/plugin.h b/kabc/plugin.h new file mode 100644 index 0000000..122a995 --- a/dev/null +++ b/kabc/plugin.h | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef KABC_PLUGIN_H | ||
22 | #define KABC_PLUGIN_H | ||
23 | |||
24 | #include <qstring.h> | ||
25 | |||
26 | namespace KABC { | ||
27 | |||
28 | class Plugin | ||
29 | { | ||
30 | public: | ||
31 | Plugin(); | ||
32 | virtual ~Plugin(); | ||
33 | |||
34 | virtual void setType( const QString& type ); | ||
35 | virtual QString type() const; | ||
36 | |||
37 | virtual void setNameLabel( const QString& label ); | ||
38 | virtual QString nameLabel() const; | ||
39 | |||
40 | virtual void setDescriptionLabel( const QString& label ); | ||
41 | virtual QString descriptionLabel() const; | ||
42 | |||
43 | private: | ||
44 | QString mType; | ||
45 | QString mNameLabel; | ||
46 | QString mDescriptionLabel; | ||
47 | }; | ||
48 | |||
49 | } | ||
50 | #endif | ||
diff --git a/kabc/plugins/dir/resourcedir.cpp b/kabc/plugins/dir/resourcedir.cpp new file mode 100644 index 0000000..f354a9e --- a/dev/null +++ b/kabc/plugins/dir/resourcedir.cpp | |||
@@ -0,0 +1,363 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | |||
29 | #include <sys/types.h> | ||
30 | #include <sys/stat.h> | ||
31 | #ifndef _WIN32_ | ||
32 | #include <unistd.h> | ||
33 | #endif | ||
34 | |||
35 | #include <qregexp.h> | ||
36 | #include <qtimer.h> | ||
37 | #include <qwidget.h> | ||
38 | |||
39 | #include <kapplication.h> | ||
40 | #include <kconfig.h> | ||
41 | #include <kdebug.h> | ||
42 | //US #include <kgenericfactory.h> | ||
43 | #include <kglobal.h> | ||
44 | #include <klocale.h> | ||
45 | #include <kstandarddirs.h> | ||
46 | #include <kurlrequester.h> | ||
47 | |||
48 | #include "addressbook.h" | ||
49 | |||
50 | //US #include "formatfactory.h" | ||
51 | |||
52 | #include "resourcedirconfig.h" | ||
53 | #include "stdaddressbook.h" | ||
54 | |||
55 | //US | ||
56 | #include <qdir.h> | ||
57 | #include <formats/vcardformatplugin2.h> | ||
58 | #include <formats/binaryformat.h> | ||
59 | |||
60 | #include "resourcedir.h" | ||
61 | |||
62 | using namespace KABC; | ||
63 | |||
64 | extern "C" | ||
65 | { | ||
66 | void *init_kabc_dir() | ||
67 | { | ||
68 | qDebug("resourcedir.cpp : init_kabc_dir has to be changed"); | ||
69 | //US return new KRES::PluginFactory<ResourceDir,ResourceDirConfig>(); | ||
70 | return 0; | ||
71 | } | ||
72 | } | ||
73 | |||
74 | |||
75 | ResourceDir::ResourceDir( const KConfig *config ) | ||
76 | : Resource( config ) | ||
77 | { | ||
78 | QString path; | ||
79 | |||
80 | KConfig *cfg = (KConfig *)config; | ||
81 | if ( cfg ) { | ||
82 | //US path = config->readEntry( "FilePath" ); | ||
83 | path = cfg->readEntry( "FilePath", StdAddressBook::directoryName() ); | ||
84 | //US mFormatName = config->readEntry( "FileFormat" ); | ||
85 | mFormatName = cfg->readEntry( "FileFormat", "vcard" ); | ||
86 | } else { | ||
87 | path = StdAddressBook::directoryName(); | ||
88 | mFormatName = "vcard"; | ||
89 | } | ||
90 | |||
91 | |||
92 | /*US FormatFactory *factory = FormatFactory::self(); | ||
93 | mFormat = factory->format( mFormatName ); | ||
94 | |||
95 | if ( !mFormat ) { | ||
96 | mFormatName = "vcard"; | ||
97 | mFormat = factory->format( mFormatName ); | ||
98 | } | ||
99 | */ | ||
100 | |||
101 | //US qDebug("ResourceDir::ResourceDir initialized with format %s ", mFormatName.latin1()); | ||
102 | if (mFormatName == "vcard") | ||
103 | mFormat = new VCardFormatPlugin2(); | ||
104 | else if (mFormatName == "binary") | ||
105 | mFormat = new BinaryFormat(); | ||
106 | else | ||
107 | qDebug("ResourceFile::init format unknown !!! %s ", mFormatName.latin1()); | ||
108 | |||
109 | |||
110 | /*US we have no KDirWatch. SO simulate the signals from inside the apropriate methods | ||
111 | connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( pathChanged() ) ); | ||
112 | connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( pathChanged() ) ); | ||
113 | connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( pathChanged() ) ); | ||
114 | */ | ||
115 | |||
116 | setPath( path ); | ||
117 | } | ||
118 | |||
119 | ResourceDir::~ResourceDir() | ||
120 | { | ||
121 | delete mFormat; | ||
122 | mFormat = 0; | ||
123 | } | ||
124 | |||
125 | void ResourceDir::writeConfig( KConfig *config ) | ||
126 | { | ||
127 | Resource::writeConfig( config ); | ||
128 | |||
129 | config->writeEntry( "FilePath", mPath ); | ||
130 | config->writeEntry( "FileFormat", mFormatName ); | ||
131 | } | ||
132 | |||
133 | Ticket *ResourceDir::requestSaveTicket() | ||
134 | { | ||
135 | kdDebug(5700) << "ResourceDir::requestSaveTicket()" << endl; | ||
136 | |||
137 | if ( !addressBook() ) return 0; | ||
138 | |||
139 | if ( !lock( mPath ) ) { | ||
140 | kdDebug(5700) << "ResourceDir::requestSaveTicket(): Unable to lock path '" | ||
141 | << mPath << "'" << endl; | ||
142 | return 0; | ||
143 | } | ||
144 | return createTicket( this ); | ||
145 | } | ||
146 | |||
147 | |||
148 | bool ResourceDir::doOpen() | ||
149 | { | ||
150 | QDir dir( mPath ); | ||
151 | if ( !dir.exists() ) { // no directory available | ||
152 | return dir.mkdir( dir.path() ); | ||
153 | } else { | ||
154 | QString testName = dir.entryList( QDir::Files )[0]; | ||
155 | if ( testName.isNull() || testName.isEmpty() ) // no file in directory | ||
156 | return true; | ||
157 | |||
158 | QFile file( mPath + "/" + testName ); | ||
159 | if ( file.open( IO_ReadOnly ) ) | ||
160 | return true; | ||
161 | |||
162 | if ( file.size() == 0 ) | ||
163 | return true; | ||
164 | |||
165 | bool ok = mFormat->checkFormat( &file ); | ||
166 | file.close(); | ||
167 | return ok; | ||
168 | } | ||
169 | } | ||
170 | |||
171 | void ResourceDir::doClose() | ||
172 | { | ||
173 | } | ||
174 | |||
175 | bool ResourceDir::load() | ||
176 | { | ||
177 | kdDebug(5700) << "ResourceDir::load(): '" << mPath << "'" << endl; | ||
178 | |||
179 | QDir dir( mPath ); | ||
180 | QStringList files = dir.entryList( QDir::Files ); | ||
181 | |||
182 | QStringList::Iterator it; | ||
183 | bool ok = true; | ||
184 | for ( it = files.begin(); it != files.end(); ++it ) { | ||
185 | QFile file( mPath + "/" + (*it) ); | ||
186 | |||
187 | if ( !file.open( IO_ReadOnly ) ) { | ||
188 | addressBook()->error( i18n( "Unable to open file '%1' for reading" ).arg( file.name() ) ); | ||
189 | ok = false; | ||
190 | continue; | ||
191 | } | ||
192 | |||
193 | if ( !mFormat->loadAll( addressBook(), this, &file ) ) | ||
194 | ok = false; | ||
195 | |||
196 | file.close(); | ||
197 | } | ||
198 | |||
199 | return ok; | ||
200 | } | ||
201 | |||
202 | bool ResourceDir::save( Ticket *ticket ) | ||
203 | { | ||
204 | kdDebug(5700) << "ResourceDir::save(): '" << mPath << "'" << endl; | ||
205 | |||
206 | AddressBook::Iterator it; | ||
207 | bool ok = true; | ||
208 | |||
209 | for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { | ||
210 | if ( (*it).resource() != this || !(*it).changed() ) | ||
211 | continue; | ||
212 | |||
213 | QFile file( mPath + "/" + (*it).uid() ); | ||
214 | if ( !file.open( IO_WriteOnly ) ) { | ||
215 | addressBook()->error( i18n( "Unable to open file '%1' for writing" ).arg( file.name() ) ); | ||
216 | continue; | ||
217 | } | ||
218 | |||
219 | mFormat->save( *it, &file ); | ||
220 | |||
221 | // mark as unchanged | ||
222 | (*it).setChanged( false ); | ||
223 | |||
224 | file.close(); | ||
225 | } | ||
226 | |||
227 | delete ticket; | ||
228 | unlock( mPath ); | ||
229 | |||
230 | return ok; | ||
231 | } | ||
232 | |||
233 | bool ResourceDir::lock( const QString &path ) | ||
234 | { | ||
235 | kdDebug(5700) << "ResourceDir::lock()" << endl; | ||
236 | |||
237 | QString p = path; | ||
238 | //US change the implementation how the lockfilename is getting created | ||
239 | //US p.replace( QRegExp("/"), "_" ); | ||
240 | //US QString lockName = locateLocal( "data", "kabc/lock/" + p + ".lock" ); | ||
241 | KURL url(p); | ||
242 | QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); | ||
243 | |||
244 | |||
245 | kdDebug(5700) << "-- lock name: " << lockName << endl; | ||
246 | |||
247 | if ( QFile::exists( lockName ) ) return false; | ||
248 | |||
249 | QString lockUniqueName; | ||
250 | lockUniqueName = p + KApplication::randomString( 8 ); | ||
251 | |||
252 | url = lockUniqueName; | ||
253 | //US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName ); | ||
254 | mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() ); | ||
255 | |||
256 | kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl; | ||
257 | |||
258 | // Create unique file | ||
259 | QFile file( mLockUniqueName ); | ||
260 | file.open( IO_WriteOnly ); | ||
261 | file.close(); | ||
262 | |||
263 | // Create lock file | ||
264 | #ifdef _WIN32_ | ||
265 | int result = 0; | ||
266 | qDebug("WARNING: ResourceDir::lock cannot link "); | ||
267 | #else | ||
268 | int result = ::link( QFile::encodeName( mLockUniqueName ), | ||
269 | QFile::encodeName( lockName ) ); | ||
270 | #endif | ||
271 | if ( result == 0 ) { | ||
272 | addressBook()->emitAddressBookLocked(); | ||
273 | return true; | ||
274 | } | ||
275 | |||
276 | // TODO: check stat | ||
277 | |||
278 | return false; | ||
279 | } | ||
280 | |||
281 | void ResourceDir::unlock( const QString &path ) | ||
282 | { | ||
283 | QString p = path; | ||
284 | //US change the implementation how the lockfilename is getting created | ||
285 | //US p.replace( QRegExp( "/" ), "_" ); | ||
286 | //US QString lockName = locate( "data", "kabc/lock/" + p + ".lock" ); | ||
287 | KURL url(p); | ||
288 | QString lockName = locate( "data", "kabc/lock/" + url.fileName() + ".lock" ); | ||
289 | |||
290 | ::unlink( QFile::encodeName( lockName ) ); | ||
291 | QFile::remove( mLockUniqueName ); | ||
292 | addressBook()->emitAddressBookUnlocked(); | ||
293 | } | ||
294 | |||
295 | void ResourceDir::setPath( const QString &path ) | ||
296 | { | ||
297 | /*US ToDo: no synchronization so far. Has to be changed in the future | ||
298 | mDirWatch.stopScan(); | ||
299 | mDirWatch.removeDir( mPath ); | ||
300 | */ | ||
301 | mPath = path; | ||
302 | |||
303 | /*US ToDo: no synchronization so far. Has to be changed in the future | ||
304 | mDirWatch.addDir( mPath, true ); | ||
305 | mDirWatch.startScan(); | ||
306 | */ | ||
307 | |||
308 | //US simulate KDirWatch event | ||
309 | pathChanged(); | ||
310 | |||
311 | } | ||
312 | |||
313 | QString ResourceDir::path() const | ||
314 | { | ||
315 | return mPath; | ||
316 | } | ||
317 | |||
318 | void ResourceDir::setFormat( const QString &format ) | ||
319 | { | ||
320 | mFormatName = format; | ||
321 | |||
322 | if ( mFormat ) | ||
323 | delete mFormat; | ||
324 | |||
325 | //US FormatFactory *factory = FormatFactory::self(); | ||
326 | //US mFormat = factory->format( mFormatName ); | ||
327 | |||
328 | qDebug("ResourceDir::setFormat initialized with format %s ", format.latin1()); | ||
329 | if (mFormatName == "vcard") | ||
330 | mFormat = new VCardFormatPlugin2(); | ||
331 | else if (mFormatName == "binary") | ||
332 | mFormat = new BinaryFormat(); | ||
333 | else | ||
334 | qDebug("ResourceDir::setFormat format unknown !!! %s ", format.latin1()); | ||
335 | |||
336 | |||
337 | } | ||
338 | |||
339 | QString ResourceDir::format() const | ||
340 | { | ||
341 | return mFormatName; | ||
342 | } | ||
343 | |||
344 | void ResourceDir::pathChanged() | ||
345 | { | ||
346 | if ( !addressBook() ) | ||
347 | return; | ||
348 | |||
349 | load(); | ||
350 | addressBook()->emitAddressBookChanged(); | ||
351 | } | ||
352 | |||
353 | void ResourceDir::removeAddressee( const Addressee& addr ) | ||
354 | { | ||
355 | QFile::remove( mPath + "/" + addr.uid() ); | ||
356 | } | ||
357 | |||
358 | void ResourceDir::cleanUp() | ||
359 | { | ||
360 | unlock( mPath ); | ||
361 | } | ||
362 | |||
363 | //US #include "resourcedir.moc" | ||
diff --git a/kabc/plugins/dir/resourcedir.h b/kabc/plugins/dir/resourcedir.h new file mode 100644 index 0000000..6e35695 --- a/dev/null +++ b/kabc/plugins/dir/resourcedir.h | |||
@@ -0,0 +1,115 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_RESOURCEDIR_H | ||
29 | #define KABC_RESOURCEDIR_H | ||
30 | |||
31 | #include <kconfig.h> | ||
32 | #include <kdirwatch.h> | ||
33 | |||
34 | #include <sys/types.h> | ||
35 | |||
36 | #include "resource.h" | ||
37 | |||
38 | class QTimer; | ||
39 | |||
40 | namespace KABC { | ||
41 | |||
42 | class FormatPlugin; | ||
43 | |||
44 | /** | ||
45 | @internal | ||
46 | */ | ||
47 | class ResourceDir : public Resource | ||
48 | { | ||
49 | Q_OBJECT | ||
50 | |||
51 | public: | ||
52 | ResourceDir( const KConfig* ); | ||
53 | ~ResourceDir(); | ||
54 | |||
55 | virtual void writeConfig( KConfig* ); | ||
56 | |||
57 | virtual bool doOpen(); | ||
58 | virtual void doClose(); | ||
59 | |||
60 | virtual Ticket *requestSaveTicket(); | ||
61 | |||
62 | virtual bool load(); | ||
63 | virtual bool save( Ticket * ); | ||
64 | |||
65 | /** | ||
66 | * Set path to be used for saving. | ||
67 | */ | ||
68 | void setPath( const QString & ); | ||
69 | |||
70 | /** | ||
71 | * Return path used for loading and saving the address book. | ||
72 | */ | ||
73 | QString path() const; | ||
74 | |||
75 | /** | ||
76 | * Set the format by name. | ||
77 | */ | ||
78 | void setFormat( const QString &format ); | ||
79 | |||
80 | /** | ||
81 | * Returns the format name. | ||
82 | */ | ||
83 | QString format() const; | ||
84 | |||
85 | /** | ||
86 | * Remove a addressee from its source. | ||
87 | * This method is mainly called by KABC::AddressBook. | ||
88 | */ | ||
89 | virtual void removeAddressee( const Addressee& addr ); | ||
90 | |||
91 | /** | ||
92 | * This method is called by an error handler if the application | ||
93 | * crashed | ||
94 | */ | ||
95 | virtual void cleanUp(); | ||
96 | |||
97 | protected slots: | ||
98 | void pathChanged(); | ||
99 | |||
100 | protected: | ||
101 | bool lock( const QString &path ); | ||
102 | void unlock( const QString &path ); | ||
103 | |||
104 | private: | ||
105 | FormatPlugin *mFormat; | ||
106 | |||
107 | KDirWatch mDirWatch; | ||
108 | |||
109 | QString mPath; | ||
110 | QString mFormatName; | ||
111 | QString mLockUniqueName; | ||
112 | }; | ||
113 | |||
114 | } | ||
115 | #endif | ||
diff --git a/kabc/plugins/dir/resourcedirconfig.cpp b/kabc/plugins/dir/resourcedirconfig.cpp new file mode 100644 index 0000000..98d18fe --- a/dev/null +++ b/kabc/plugins/dir/resourcedirconfig.cpp | |||
@@ -0,0 +1,123 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <qlabel.h> | ||
29 | #include <qlayout.h> | ||
30 | |||
31 | #include <kdebug.h> | ||
32 | #include <klocale.h> | ||
33 | #include <kstandarddirs.h> | ||
34 | #include <kdialog.h> | ||
35 | |||
36 | //US #include "formatfactory.h" | ||
37 | #include "resourcedir.h" | ||
38 | #include "stdaddressbook.h" | ||
39 | |||
40 | #include "resourcedirconfig.h" | ||
41 | |||
42 | using namespace KABC; | ||
43 | |||
44 | ResourceDirConfig::ResourceDirConfig( QWidget* parent, const char* name ) | ||
45 | : KRES::ConfigWidget( parent, name ) | ||
46 | { | ||
47 | QGridLayout *mainLayout = new QGridLayout( this, 2, 2, 0, | ||
48 | KDialog::spacingHint() ); | ||
49 | |||
50 | QLabel *label = new QLabel( i18n( "Format:" ), this ); | ||
51 | mFormatBox = new KComboBox( this ); | ||
52 | |||
53 | mainLayout->addWidget( label, 0, 0 ); | ||
54 | mainLayout->addWidget( mFormatBox, 0, 1 ); | ||
55 | |||
56 | label = new QLabel( i18n( "Location:" ), this ); | ||
57 | mFileNameEdit = new KURLRequester( this ); | ||
58 | //US mFileNameEdit->setMode( KFile::Directory ); | ||
59 | |||
60 | mainLayout->addWidget( label, 1, 0 ); | ||
61 | mainLayout->addWidget( mFileNameEdit, 1, 1 ); | ||
62 | |||
63 | /*US lets hardcode the formats instead of using a factory | ||
64 | FormatFactory *factory = FormatFactory::self(); | ||
65 | QStringList formats = factory->formats(); | ||
66 | QStringList::Iterator it; | ||
67 | for ( it = formats.begin(); it != formats.end(); ++it ) { | ||
68 | FormatInfo *info = factory->info( *it ); | ||
69 | if ( info ) { | ||
70 | mFormatTypes << (*it); | ||
71 | mFormatBox->insertItem( info->nameLabel ); | ||
72 | } | ||
73 | } | ||
74 | */ | ||
75 | mFormatTypes << "vcard"; | ||
76 | mFormatTypes << "binary"; | ||
77 | mFormatBox->insertItem( "vcard" ); | ||
78 | mFormatBox->insertItem( "binary" ); | ||
79 | |||
80 | |||
81 | mInEditMode = false; | ||
82 | } | ||
83 | |||
84 | void ResourceDirConfig::setEditMode( bool value ) | ||
85 | { | ||
86 | mFormatBox->setEnabled( !value ); | ||
87 | mInEditMode = value; | ||
88 | } | ||
89 | |||
90 | void ResourceDirConfig::loadSettings( KRES::Resource *res ) | ||
91 | { | ||
92 | //US ResourceDir *resource = dynamic_cast<ResourceDir*>( res ); | ||
93 | ResourceDir *resource = (ResourceDir*)( res ); | ||
94 | |||
95 | if ( !resource ) { | ||
96 | kdDebug(5700) << "ResourceDirConfig::loadSettings(): cast failed" << endl; | ||
97 | return; | ||
98 | } | ||
99 | |||
100 | mFormatBox->setCurrentItem( mFormatTypes.findIndex( resource->format() ) ); | ||
101 | |||
102 | mFileNameEdit->setURL( resource->path() ); | ||
103 | if ( mFileNameEdit->url().isEmpty() ) | ||
104 | mFileNameEdit->setURL( KABC::StdAddressBook::directoryName() ); | ||
105 | } | ||
106 | |||
107 | void ResourceDirConfig::saveSettings( KRES::Resource *res ) | ||
108 | { | ||
109 | //US ResourceDir *resource = dynamic_cast<ResourceDir*>( res ); | ||
110 | ResourceDir *resource = (ResourceDir*)( res ); | ||
111 | |||
112 | if ( !resource ) { | ||
113 | kdDebug(5700) << "ResourceDirConfig::loadSettings(): cast failed" << endl; | ||
114 | return; | ||
115 | } | ||
116 | |||
117 | if ( mInEditMode ) | ||
118 | resource->setFormat( mFormatTypes[ mFormatBox->currentItem() ] ); | ||
119 | |||
120 | resource->setPath( mFileNameEdit->url() ); | ||
121 | } | ||
122 | |||
123 | //US #include "resourcedirconfig.moc" | ||
diff --git a/kabc/plugins/dir/resourcedirconfig.h b/kabc/plugins/dir/resourcedirconfig.h new file mode 100644 index 0000000..5af38a5 --- a/dev/null +++ b/kabc/plugins/dir/resourcedirconfig.h | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef RESOURCEDIRCONFIG_H | ||
29 | #define RESOURCEDIRCONFIG_H | ||
30 | |||
31 | #include <kcombobox.h> | ||
32 | #include <kurlrequester.h> | ||
33 | |||
34 | #include <kresources/configwidget.h> | ||
35 | |||
36 | namespace KABC { | ||
37 | |||
38 | class ResourceDirConfig : public KRES::ConfigWidget | ||
39 | { | ||
40 | Q_OBJECT | ||
41 | |||
42 | public: | ||
43 | ResourceDirConfig( QWidget* parent = 0, const char* name = 0 ); | ||
44 | |||
45 | void setEditMode( bool value ); | ||
46 | |||
47 | public slots: | ||
48 | void loadSettings( KRES::Resource* ); | ||
49 | void saveSettings( KRES::Resource* ); | ||
50 | |||
51 | private: | ||
52 | KComboBox* mFormatBox; | ||
53 | KURLRequester* mFileNameEdit; | ||
54 | |||
55 | QStringList mFormatTypes; | ||
56 | |||
57 | bool mInEditMode; | ||
58 | }; | ||
59 | |||
60 | } | ||
61 | #endif | ||
diff --git a/kabc/plugins/file/resourcefile.cpp b/kabc/plugins/file/resourcefile.cpp new file mode 100644 index 0000000..d30ed2f --- a/dev/null +++ b/kabc/plugins/file/resourcefile.cpp | |||
@@ -0,0 +1,389 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <sys/types.h> | ||
29 | #include <sys/stat.h> | ||
30 | #ifndef _WIN32_ | ||
31 | #include <unistd.h> | ||
32 | #endif | ||
33 | |||
34 | #include <qfile.h> | ||
35 | #include <qfileinfo.h> | ||
36 | #include <qregexp.h> | ||
37 | #include <qtimer.h> | ||
38 | |||
39 | #include <kapplication.h> | ||
40 | #include <kconfig.h> | ||
41 | #include <kdebug.h> | ||
42 | #include <klocale.h> | ||
43 | //US #include <ksavefile.h> | ||
44 | #include <kstandarddirs.h> | ||
45 | |||
46 | //US #include "formatfactory.h" | ||
47 | |||
48 | #include "resource.h" | ||
49 | #include "resourcefileconfig.h" | ||
50 | #include "stdaddressbook.h" | ||
51 | |||
52 | #include <formats/vcardformatplugin2.h> | ||
53 | #include <formats/binaryformat.h> | ||
54 | |||
55 | |||
56 | #include "resourcefile.h" | ||
57 | |||
58 | using namespace KABC; | ||
59 | |||
60 | extern "C" | ||
61 | { | ||
62 | void *init_kabc_file() | ||
63 | { | ||
64 | qDebug("!!!resourcefile.cpp : init_kabc_file has to be changed"); | ||
65 | //US return new KRES::PluginFactory<ResourceFile,ResourceFileConfig>(); | ||
66 | return 0; | ||
67 | } | ||
68 | } | ||
69 | |||
70 | |||
71 | ResourceFile::ResourceFile( const KConfig *config ) | ||
72 | : Resource( config ) , mFormat( 0 ) | ||
73 | { | ||
74 | QString fileName, formatName; | ||
75 | |||
76 | KConfig *cfg = (KConfig *)config; | ||
77 | if ( cfg ) { | ||
78 | fileName = cfg->readEntry( "FileName", StdAddressBook::fileName() ); | ||
79 | formatName = cfg->readEntry( "FileFormat", "vcard" ); | ||
80 | // qDebug("ResourceFile::ResourceFile : 1 %s, %s", fileName.latin1(), formatName.latin1() ); | ||
81 | } else { | ||
82 | fileName = StdAddressBook::fileName(); | ||
83 | formatName = "vcard"; | ||
84 | // qDebug("ResourceFile::ResourceFile : 2 %s, %s", fileName.latin1(), formatName.latin1() ); | ||
85 | } | ||
86 | |||
87 | init( fileName, formatName ); | ||
88 | } | ||
89 | |||
90 | ResourceFile::ResourceFile( const QString &fileName, | ||
91 | const QString &formatName ) | ||
92 | : Resource( 0 ) | ||
93 | { | ||
94 | // qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1()); | ||
95 | init( fileName, formatName ); | ||
96 | } | ||
97 | |||
98 | void ResourceFile::init( const QString &fileName, const QString &formatName ) | ||
99 | { | ||
100 | mFormatName = formatName; | ||
101 | |||
102 | /*US FormatFactory *factory = FormatFactory::self(); | ||
103 | mFormat = factory->format( mFormatName ); | ||
104 | |||
105 | if ( !mFormat ) { | ||
106 | mFormatName = "vcard"; | ||
107 | mFormat = factory->format( mFormatName ); | ||
108 | } | ||
109 | */ | ||
110 | |||
111 | //US qDebug("ResourceFile::init initialized with format %s ", formatName.latin1()); | ||
112 | if (mFormatName == "vcard") { | ||
113 | mFormat = new VCardFormatPlugin2(); | ||
114 | // qDebug("ResourceFile::init format VCardFormatPlugin2"); | ||
115 | } | ||
116 | else if (mFormatName == "binary") { | ||
117 | mFormat = new BinaryFormat(); | ||
118 | // qDebug("ResourceFile::init format BinaryFormat"); | ||
119 | } | ||
120 | else | ||
121 | qDebug("ResourceFile::init format unknown !!! %s ", formatName.latin1()); | ||
122 | |||
123 | /*US we have no KDirWatch. SO simulate the signals from inside the apropriate methods | ||
124 | connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); | ||
125 | connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); | ||
126 | connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); | ||
127 | */ | ||
128 | |||
129 | setFileName( fileName ); | ||
130 | } | ||
131 | |||
132 | ResourceFile::~ResourceFile() | ||
133 | { | ||
134 | delete mFormat; | ||
135 | mFormat = 0; | ||
136 | } | ||
137 | |||
138 | void ResourceFile::writeConfig( KConfig *config ) | ||
139 | { | ||
140 | Resource::writeConfig( config ); | ||
141 | |||
142 | config->writeEntry( "FileName", mFileName ); | ||
143 | config->writeEntry( "FileFormat", mFormatName ); | ||
144 | |||
145 | // qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1()); | ||
146 | |||
147 | } | ||
148 | |||
149 | Ticket *ResourceFile::requestSaveTicket() | ||
150 | { | ||
151 | kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl; | ||
152 | |||
153 | if ( !addressBook() ) return 0; | ||
154 | |||
155 | if ( !lock( mFileName ) ) { | ||
156 | kdDebug(5700) << "ResourceFile::requestSaveTicket(): Unable to lock file '" | ||
157 | << mFileName << "'" << endl; | ||
158 | return 0; | ||
159 | } | ||
160 | return createTicket( this ); | ||
161 | } | ||
162 | |||
163 | |||
164 | bool ResourceFile::doOpen() | ||
165 | { | ||
166 | QFile file( mFileName ); | ||
167 | |||
168 | if ( !file.exists() ) { | ||
169 | // try to create the file | ||
170 | bool ok = file.open( IO_WriteOnly ); | ||
171 | if ( ok ) | ||
172 | file.close(); | ||
173 | |||
174 | return ok; | ||
175 | } else { | ||
176 | if ( !file.open( IO_ReadWrite ) ) | ||
177 | return false; | ||
178 | |||
179 | if ( file.size() == 0 ) { | ||
180 | file.close(); | ||
181 | return true; | ||
182 | } | ||
183 | |||
184 | bool ok = mFormat->checkFormat( &file ); | ||
185 | file.close(); | ||
186 | |||
187 | return ok; | ||
188 | } | ||
189 | } | ||
190 | |||
191 | void ResourceFile::doClose() | ||
192 | { | ||
193 | } | ||
194 | |||
195 | bool ResourceFile::load() | ||
196 | { | ||
197 | kdDebug(5700) << "ResourceFile::load(): '" << mFileName << "'" << endl; | ||
198 | |||
199 | QFile file( mFileName ); | ||
200 | if ( !file.open( IO_ReadOnly ) ) { | ||
201 | addressBook()->error( i18n( "Unable to open file '%1'." ).arg( mFileName ) ); | ||
202 | return false; | ||
203 | } | ||
204 | |||
205 | // qDebug("ResourceFile::load format %s, %s", mFileName.latin1(), mFormatName.latin1()); | ||
206 | |||
207 | return mFormat->loadAll( addressBook(), this, &file ); | ||
208 | } | ||
209 | |||
210 | bool ResourceFile::save( Ticket *ticket ) | ||
211 | { | ||
212 | // qDebug("ResourceFile::save format %s, %s", mFileName.latin1(), mFormatName.latin1()); | ||
213 | kdDebug(5700) << "ResourceFile::save()" << endl; | ||
214 | |||
215 | // create backup file | ||
216 | QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() ); | ||
217 | |||
218 | /*US we use a simpler method to create a backupfile | ||
219 | |||
220 | (void) KSaveFile::backupFile( mFileName, QString::null /*directory*/ | ||
221 | /*US ,extension ); | ||
222 | |||
223 | KSaveFile saveFile( mFileName ); | ||
224 | bool ok = false; | ||
225 | if ( saveFile.status() == 0 && saveFile.file() ) | ||
226 | { | ||
227 | mFormat->saveAll( addressBook(), this, saveFile.file() ); | ||
228 | ok = saveFile.close(); | ||
229 | } | ||
230 | */ | ||
231 | |||
232 | //US ToDo: write backupfile | ||
233 | QFile info; | ||
234 | info.setName( mFileName ); | ||
235 | bool ok = info.open( IO_WriteOnly ); | ||
236 | if ( ok ) { | ||
237 | mFormat->saveAll( addressBook(), this, &info ); | ||
238 | |||
239 | info.close(); | ||
240 | ok = true; | ||
241 | } | ||
242 | else { | ||
243 | |||
244 | } | ||
245 | |||
246 | if ( !ok ) | ||
247 | addressBook()->error( i18n( "Unable to save file '%1'." ).arg( mFileName ) ); | ||
248 | |||
249 | delete ticket; | ||
250 | unlock( mFileName ); | ||
251 | |||
252 | return ok; | ||
253 | |||
254 | qDebug("ResourceFile::save has to be changed"); | ||
255 | return true; | ||
256 | } | ||
257 | |||
258 | bool ResourceFile::lock( const QString &fileName ) | ||
259 | { | ||
260 | kdDebug(5700) << "ResourceFile::lock()" << endl; | ||
261 | |||
262 | QString fn = fileName; | ||
263 | |||
264 | //US change the implementation how the lockfilename is getting created | ||
265 | //US fn.replace( QRegExp("/"), "_" ); | ||
266 | //US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" ); | ||
267 | |||
268 | KURL url(fn); | ||
269 | QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); | ||
270 | |||
271 | kdDebug(5700) << "-- lock name: " << lockName << endl; | ||
272 | |||
273 | if (QFile::exists( lockName )) return false; | ||
274 | |||
275 | QString lockUniqueName; | ||
276 | lockUniqueName = fn + KApplication::randomString( 8 ); | ||
277 | |||
278 | url = lockUniqueName; | ||
279 | //US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName ); | ||
280 | mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() ); | ||
281 | kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl; | ||
282 | |||
283 | // Create unique file | ||
284 | QFile file( mLockUniqueName ); | ||
285 | file.open( IO_WriteOnly ); | ||
286 | file.close(); | ||
287 | |||
288 | // Create lock file | ||
289 | int result = 0;//::link( QFile::encodeName( mLockUniqueName ), | ||
290 | // QFile::encodeName( lockName ) ); | ||
291 | qDebug("lock files %s, %s needs to be fixed", mLockUniqueName.latin1(), lockName.latin1() ); | ||
292 | |||
293 | if ( result == 0 ) { | ||
294 | addressBook()->emitAddressBookLocked(); | ||
295 | return true; | ||
296 | } | ||
297 | |||
298 | // TODO: check stat | ||
299 | |||
300 | return false; | ||
301 | } | ||
302 | |||
303 | void ResourceFile::unlock( const QString &fileName ) | ||
304 | { | ||
305 | QString fn = fileName; | ||
306 | //US change the implementation how the lockfilename is getting created | ||
307 | //US fn.replace( QRegExp( "/" ), "_" ); | ||
308 | //US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" ); | ||
309 | //US QString lockName = fn + ".lock"; | ||
310 | KURL url(fn); | ||
311 | QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); | ||
312 | |||
313 | QFile::remove( lockName ); | ||
314 | QFile::remove( mLockUniqueName ); | ||
315 | addressBook()->emitAddressBookUnlocked(); | ||
316 | } | ||
317 | |||
318 | void ResourceFile::setFileName( const QString &fileName ) | ||
319 | { | ||
320 | /*US ToDo: no synchronization so far. Has to be changed in the future | ||
321 | mDirWatch.stopScan(); | ||
322 | mDirWatch.removeFile( mFileName ); | ||
323 | */ | ||
324 | mFileName = fileName; | ||
325 | |||
326 | |||
327 | /*US ToDo: no synchronization so far. Has to be changed in the future | ||
328 | mDirWatch.addFile( mFileName ); | ||
329 | mDirWatch.startScan(); | ||
330 | */ | ||
331 | //US simulate KDirWatch event | ||
332 | fileChanged(); | ||
333 | } | ||
334 | |||
335 | QString ResourceFile::fileName() const | ||
336 | { | ||
337 | return mFileName; | ||
338 | } | ||
339 | |||
340 | void ResourceFile::setFormat( const QString &format ) | ||
341 | { | ||
342 | mFormatName = format; | ||
343 | delete mFormat; | ||
344 | |||
345 | //US FormatFactory *factory = FormatFactory::self(); | ||
346 | //US mFormat = factory->format( mFormatName ); | ||
347 | |||
348 | //qDebug("ResourceFile::setFormat initialized with format %s ", format.latin1()); | ||
349 | if (mFormatName == "vcard") { | ||
350 | mFormat = new VCardFormatPlugin2(); | ||
351 | // qDebug("ResourceFile::setFormat format %s", mFormatName.latin1()); | ||
352 | } | ||
353 | else if (mFormatName == "binary") { | ||
354 | mFormat = new BinaryFormat(); | ||
355 | // qDebug("ResourceFile::setFormat format %s", mFormatName.latin1()); | ||
356 | } | ||
357 | else | ||
358 | qDebug("ResourceFile::setFormat format unknown !!! %s ", format.latin1()); | ||
359 | |||
360 | } | ||
361 | |||
362 | QString ResourceFile::format() const | ||
363 | { | ||
364 | return mFormatName; | ||
365 | } | ||
366 | |||
367 | void ResourceFile::fileChanged() | ||
368 | { | ||
369 | // There is a small theoretical chance that KDirWatch calls us before | ||
370 | // we are fully constructed | ||
371 | if (!addressBook()) | ||
372 | return; | ||
373 | load(); | ||
374 | addressBook()->emitAddressBookChanged(); | ||
375 | } | ||
376 | |||
377 | void ResourceFile::removeAddressee( const Addressee &addr ) | ||
378 | { | ||
379 | QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/photos/" ) + addr.uid() ) ); | ||
380 | QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/logos/" ) + addr.uid() ) ); | ||
381 | QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/sounds/" ) + addr.uid() ) ); | ||
382 | } | ||
383 | |||
384 | void ResourceFile::cleanUp() | ||
385 | { | ||
386 | unlock( mFileName ); | ||
387 | } | ||
388 | |||
389 | //US #include "resourcefile.moc" | ||
diff --git a/kabc/plugins/file/resourcefile.h b/kabc/plugins/file/resourcefile.h new file mode 100644 index 0000000..4522d78 --- a/dev/null +++ b/kabc/plugins/file/resourcefile.h | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | |||
29 | #ifndef KABC_RESOURCEFILE_H | ||
30 | #define KABC_RESOURCEFILE_H | ||
31 | |||
32 | #include <kconfig.h> | ||
33 | #include <kdirwatch.h> | ||
34 | |||
35 | #include <sys/types.h> | ||
36 | |||
37 | #include <resource.h> | ||
38 | |||
39 | class QTimer; | ||
40 | class FormatPlugin; | ||
41 | |||
42 | namespace KABC { | ||
43 | |||
44 | //US class FormatPlugin; | ||
45 | class ResourceConfigWidget; | ||
46 | |||
47 | /** | ||
48 | @internal | ||
49 | */ | ||
50 | class ResourceFile : public Resource | ||
51 | { | ||
52 | Q_OBJECT | ||
53 | |||
54 | public: | ||
55 | |||
56 | /** | ||
57 | Constructor. | ||
58 | |||
59 | @param cfg The config object where custom resource settings are stored. | ||
60 | */ | ||
61 | ResourceFile( const KConfig *cfg ); | ||
62 | |||
63 | /** | ||
64 | Construct file resource on file @arg fileName using format @arg formatName. | ||
65 | */ | ||
66 | ResourceFile( const QString &fileName, const QString &formatName = "vcard" ); | ||
67 | |||
68 | /** | ||
69 | * Destructor. | ||
70 | */ | ||
71 | ~ResourceFile(); | ||
72 | |||
73 | /** | ||
74 | Writes the config back. | ||
75 | */ | ||
76 | virtual void writeConfig( KConfig *cfg ); | ||
77 | |||
78 | /** | ||
79 | * Tries to open the file and checks for the proper format. | ||
80 | * This method should be called before @ref load(). | ||
81 | */ | ||
82 | virtual bool doOpen(); | ||
83 | |||
84 | /** | ||
85 | * Closes the file again. | ||
86 | */ | ||
87 | virtual void doClose(); | ||
88 | |||
89 | /** | ||
90 | * Requests a save ticket, that is used by @ref save() | ||
91 | */ | ||
92 | virtual Ticket *requestSaveTicket(); | ||
93 | |||
94 | /** | ||
95 | * Loads all addressees from file to the address book. | ||
96 | * Returns true if all addressees could be loaded otherwise false. | ||
97 | */ | ||
98 | virtual bool load(); | ||
99 | |||
100 | /** | ||
101 | * Saves all addresses from address book to file. | ||
102 | * Returns true if all addressees could be saved otherwise false. | ||
103 | * | ||
104 | * @param ticket The ticket returned by @ref requestSaveTicket() | ||
105 | */ | ||
106 | virtual bool save( Ticket *ticket ); | ||
107 | |||
108 | /** | ||
109 | * Set name of file to be used for saving. | ||
110 | */ | ||
111 | void setFileName( const QString & ); | ||
112 | |||
113 | /** | ||
114 | * Return name of file used for loading and saving the address book. | ||
115 | */ | ||
116 | QString fileName() const; | ||
117 | |||
118 | /** | ||
119 | Sets a new format by name. | ||
120 | */ | ||
121 | void setFormat( const QString &name ); | ||
122 | |||
123 | /** | ||
124 | Returns the format name. | ||
125 | */ | ||
126 | QString format() const; | ||
127 | |||
128 | /** | ||
129 | * Remove a addressee from its source. | ||
130 | * This method is mainly called by KABC::AddressBook. | ||
131 | */ | ||
132 | virtual void removeAddressee( const Addressee& addr ); | ||
133 | |||
134 | /** | ||
135 | * This method is called by an error handler if the application | ||
136 | * crashed | ||
137 | */ | ||
138 | virtual void cleanUp(); | ||
139 | |||
140 | protected slots: | ||
141 | void fileChanged(); | ||
142 | |||
143 | protected: | ||
144 | void init( const QString &fileName, const QString &format ); | ||
145 | |||
146 | bool lock( const QString &fileName ); | ||
147 | void unlock( const QString &fileName ); | ||
148 | |||
149 | private: | ||
150 | QString mFileName; | ||
151 | QString mFormatName; | ||
152 | |||
153 | FormatPlugin *mFormat; | ||
154 | |||
155 | QString mLockUniqueName; | ||
156 | |||
157 | KDirWatch mDirWatch; | ||
158 | }; | ||
159 | |||
160 | } | ||
161 | |||
162 | #endif | ||
diff --git a/kabc/plugins/file/resourcefileconfig.cpp b/kabc/plugins/file/resourcefileconfig.cpp new file mode 100644 index 0000000..b63775d --- a/dev/null +++ b/kabc/plugins/file/resourcefileconfig.cpp | |||
@@ -0,0 +1,144 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <qlabel.h> | ||
29 | #include <qlayout.h> | ||
30 | #include <qfileinfo.h> | ||
31 | |||
32 | #include <kdebug.h> | ||
33 | #include <klocale.h> | ||
34 | #include <kstandarddirs.h> | ||
35 | #include <kdialog.h> | ||
36 | #ifndef _WIN32_ | ||
37 | #include <unistd.h> | ||
38 | #endif | ||
39 | //US #include "formatfactory.h" | ||
40 | #include <qfile.h> | ||
41 | #include "resourcefile.h" | ||
42 | #include "stdaddressbook.h" | ||
43 | |||
44 | #include "resourcefileconfig.h" | ||
45 | |||
46 | using namespace KABC; | ||
47 | |||
48 | ResourceFileConfig::ResourceFileConfig( QWidget* parent, const char* name ) | ||
49 | : ConfigWidget( parent, name ) | ||
50 | { | ||
51 | //qDebug("ResourceFileConfig::ResourceFileConfig"); | ||
52 | |||
53 | QGridLayout *mainLayout = new QGridLayout( this, 2, 2, 0, | ||
54 | KDialog::spacingHint() ); | ||
55 | |||
56 | QLabel *label = new QLabel( i18n( "Format:" ), this ); | ||
57 | mFormatBox = new KComboBox( this ); | ||
58 | |||
59 | mainLayout->addWidget( label, 0, 0 ); | ||
60 | mainLayout->addWidget( mFormatBox, 0, 1 ); | ||
61 | |||
62 | label = new QLabel( i18n( "Location:" ), this ); | ||
63 | mFileNameEdit = new KURLRequester( this ); | ||
64 | |||
65 | connect( mFileNameEdit, SIGNAL( textChanged( const QString & ) ), | ||
66 | SLOT( checkFilePermissions( const QString & ) ) ); | ||
67 | |||
68 | mainLayout->addWidget( label, 1, 0 ); | ||
69 | mainLayout->addWidget( mFileNameEdit, 1, 1 ); | ||
70 | |||
71 | |||
72 | /*US lets hardcode the formats instead of using a factory | ||
73 | FormatFactory *factory = FormatFactory::self(); | ||
74 | QStringList formats = factory->formats(); | ||
75 | QStringList::Iterator it; | ||
76 | |||
77 | for ( it = formats.begin(); it != formats.end(); ++it ) { | ||
78 | FormatInfo *info = factory->info( *it ); | ||
79 | if ( info ) { | ||
80 | mFormatTypes << (*it); | ||
81 | mFormatBox->insertItem( info->nameLabel ); | ||
82 | } | ||
83 | } | ||
84 | */ | ||
85 | mFormatTypes << "vcard"; | ||
86 | mFormatTypes << "binary"; | ||
87 | mFormatBox->insertItem( "vcard" ); | ||
88 | mFormatBox->insertItem( "binary" ); | ||
89 | |||
90 | mInEditMode = false; | ||
91 | } | ||
92 | |||
93 | void ResourceFileConfig::setEditMode( bool value ) | ||
94 | { | ||
95 | mFormatBox->setEnabled( !value ); | ||
96 | mInEditMode = value; | ||
97 | } | ||
98 | |||
99 | void ResourceFileConfig::loadSettings( KRES::Resource *res ) | ||
100 | { | ||
101 | //US ResourceFile *resource = dynamic_cast<ResourceFile*>( res ); | ||
102 | ResourceFile *resource = (ResourceFile*)( res ); | ||
103 | |||
104 | if ( !resource ) { | ||
105 | kdDebug(5700) << "ResourceFileConfig::loadSettings(): cast failed" << endl; | ||
106 | return; | ||
107 | } | ||
108 | |||
109 | mFormatBox->setCurrentItem( mFormatTypes.findIndex( resource->format() ) ); | ||
110 | |||
111 | mFileNameEdit->setURL( resource->fileName() ); | ||
112 | if ( mFileNameEdit->url().isEmpty() ) | ||
113 | mFileNameEdit->setURL( KABC::StdAddressBook::fileName() ); | ||
114 | } | ||
115 | |||
116 | void ResourceFileConfig::saveSettings( KRES::Resource *res ) | ||
117 | { | ||
118 | //US ResourceFile *resource = dynamic_cast<ResourceFile*>( res ); | ||
119 | ResourceFile *resource = (ResourceFile*)( res ); | ||
120 | |||
121 | if ( !resource ) { | ||
122 | kdDebug(5700) << "ResourceFileConfig::saveSettings(): cast failed" << endl; | ||
123 | return; | ||
124 | } | ||
125 | |||
126 | if ( !mInEditMode ) | ||
127 | resource->setFormat( mFormatTypes[ mFormatBox->currentItem() ] ); | ||
128 | |||
129 | resource->setFileName( mFileNameEdit->url() ); | ||
130 | } | ||
131 | void ResourceFileConfig::checkFilePermissions( const QString& fileName ) | ||
132 | { | ||
133 | // If file exist but is not writeable... | ||
134 | #ifdef _WIN32_ | ||
135 | QFileInfo fi ( QFile::encodeName( fileName ) ); | ||
136 | if ( fi.exists() ) | ||
137 | emit setReadOnly(!fi.isReadable() ); | ||
138 | #else | ||
139 | if ( access( QFile::encodeName( fileName ), F_OK ) == 0 ) | ||
140 | emit setReadOnly( access( QFile::encodeName( fileName ), W_OK ) < 0 ); | ||
141 | #endif | ||
142 | } | ||
143 | |||
144 | //US #include "resourcefileconfig.moc" | ||
diff --git a/kabc/plugins/file/resourcefileconfig.h b/kabc/plugins/file/resourcefileconfig.h new file mode 100644 index 0000000..31ccaaf --- a/dev/null +++ b/kabc/plugins/file/resourcefileconfig.h | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | |||
22 | /* | ||
23 | Enhanced Version of the file for platform independent KDE tools. | ||
24 | Copyright (c) 2004 Ulf Schenk | ||
25 | |||
26 | $Id$ | ||
27 | */ | ||
28 | |||
29 | #ifndef RESOURCEFILECONFIG_H | ||
30 | #define RESOURCEFILECONFIG_H | ||
31 | |||
32 | #include <kcombobox.h> | ||
33 | #include <kurlrequester.h> | ||
34 | |||
35 | #include <kresources/configwidget.h> | ||
36 | |||
37 | namespace KABC { | ||
38 | |||
39 | class ResourceFileConfig : public KRES::ConfigWidget | ||
40 | { | ||
41 | Q_OBJECT | ||
42 | |||
43 | public: | ||
44 | ResourceFileConfig( QWidget* parent = 0, const char* name = 0 ); | ||
45 | |||
46 | void setEditMode( bool value ); | ||
47 | |||
48 | public slots: | ||
49 | void loadSettings( KRES::Resource *resource ); | ||
50 | void saveSettings( KRES::Resource *resource ); | ||
51 | |||
52 | protected slots: | ||
53 | void checkFilePermissions( const QString& fileName ); | ||
54 | |||
55 | private: | ||
56 | KComboBox* mFormatBox; | ||
57 | KURLRequester* mFileNameEdit; | ||
58 | bool mInEditMode; | ||
59 | |||
60 | QStringList mFormatTypes; | ||
61 | }; | ||
62 | |||
63 | } | ||
64 | |||
65 | #endif | ||
diff --git a/kabc/plugins/ldap/resourceldap.cpp b/kabc/plugins/ldap/resourceldap.cpp new file mode 100644 index 0000000..1c54f63 --- a/dev/null +++ b/kabc/plugins/ldap/resourceldap.cpp | |||
@@ -0,0 +1,444 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <kdebug.h> | ||
29 | #include <kglobal.h> | ||
30 | #include <klineedit.h> | ||
31 | #include <klocale.h> | ||
32 | #include <kconfig.h> | ||
33 | #include <kstringhandler.h> | ||
34 | |||
35 | #include <stdlib.h> | ||
36 | |||
37 | #include "resourceldap.h" | ||
38 | #include "resourceldapconfig.h" | ||
39 | |||
40 | using namespace KABC; | ||
41 | |||
42 | extern "C" | ||
43 | { | ||
44 | void *init_kabc_ldap() | ||
45 | { | ||
46 | qDebug("resourceldap.cpp : init_kabc_ldap has to be changed"); | ||
47 | //US return new KRES::PluginFactory<ResourceLDAP,ResourceLDAPConfig>(); | ||
48 | } | ||
49 | } | ||
50 | |||
51 | void addModOp( LDAPMod ***pmods, const QString &attr, const QString &value ); | ||
52 | |||
53 | |||
54 | ResourceLDAP::ResourceLDAP( const KConfig *config ) | ||
55 | : Resource( config ), mPort( 389 ), mLdap( 0 ) | ||
56 | { | ||
57 | KConfig *cfg = (KConfig *)config; | ||
58 | if ( cfg ) { | ||
59 | mUser = cfg->readEntry( "LdapUser" ); | ||
60 | mPassword = KStringHandler::obscure( cfg->readEntry( "LdapPassword" ) ); | ||
61 | mDn = cfg->readEntry( "LdapDn" ); | ||
62 | mHost = cfg->readEntry( "LdapHost" ); | ||
63 | mPort = cfg->readNumEntry( "LdapPort", 389 ); | ||
64 | mFilter = cfg->readEntry( "LdapFilter" ); | ||
65 | mAnonymous = cfg->readBoolEntry( "LdapAnonymous" ); | ||
66 | |||
67 | QStringList attributes = cfg->readListEntry( "LdapAttributes" ); | ||
68 | for ( uint pos = 0; pos < attributes.count(); pos += 2 ) | ||
69 | mAttributes.insert( attributes[ pos ], attributes[ pos + 1 ] ); | ||
70 | } | ||
71 | |||
72 | /** | ||
73 | If you want to add new attributes, append them here, add a | ||
74 | translation string in the ctor of AttributesDialog and | ||
75 | handle them in the load() method below. | ||
76 | These are the default values from | ||
77 | */ | ||
78 | if ( mAttributes.count() == 0 ) { | ||
79 | mAttributes.insert( "commonName", "cn" ); | ||
80 | mAttributes.insert( "formattedName", "displayName" ); | ||
81 | mAttributes.insert( "familyName", "sn" ); | ||
82 | mAttributes.insert( "givenName", "givenName" ); | ||
83 | mAttributes.insert( "mail", "mail" ); | ||
84 | mAttributes.insert( "mailAlias", "" ); | ||
85 | mAttributes.insert( "phoneNumber", "telephoneNumber" ); | ||
86 | mAttributes.insert( "uid", "uid" ); | ||
87 | } | ||
88 | } | ||
89 | |||
90 | void ResourceLDAP::writeConfig( KConfig *config ) | ||
91 | { | ||
92 | Resource::writeConfig( config ); | ||
93 | |||
94 | config->writeEntry( "LdapUser", mUser ); | ||
95 | config->writeEntry( "LdapPassword", KStringHandler::obscure( mPassword ) ); | ||
96 | config->writeEntry( "LdapDn", mDn ); | ||
97 | config->writeEntry( "LdapHost", mHost ); | ||
98 | config->writeEntry( "LdapPort", mPort ); | ||
99 | config->writeEntry( "LdapFilter", mFilter ); | ||
100 | config->writeEntry( "LdapAnonymous", mAnonymous ); | ||
101 | |||
102 | QStringList attributes; | ||
103 | QMap<QString, QString>::Iterator it; | ||
104 | for ( it = mAttributes.begin(); it != mAttributes.end(); ++it ) | ||
105 | attributes << it.key() << it.data(); | ||
106 | |||
107 | config->writeEntry( "LdapAttributes", attributes ); | ||
108 | } | ||
109 | |||
110 | Ticket *ResourceLDAP::requestSaveTicket() | ||
111 | { | ||
112 | if ( !addressBook() ) { | ||
113 | kdDebug(5700) << "no addressbook" << endl; | ||
114 | return 0; | ||
115 | } | ||
116 | |||
117 | return createTicket( this ); | ||
118 | } | ||
119 | |||
120 | bool ResourceLDAP::doOpen() | ||
121 | { | ||
122 | if ( mLdap ) | ||
123 | return false; | ||
124 | |||
125 | if ( !mPort ) | ||
126 | mPort = 389; | ||
127 | |||
128 | mLdap = ldap_init( mHost.local8Bit(), mPort ); | ||
129 | if ( !mLdap ) { | ||
130 | addressBook()->error( i18n( "Unable to connect to server '%1' on port '%2'" ).arg( mHost ).arg( mPort ) ); | ||
131 | return false; | ||
132 | } | ||
133 | |||
134 | if ( !mUser.isEmpty() && !mAnonymous ) { | ||
135 | if ( ldap_simple_bind_s( mLdap, mUser.local8Bit(), mPassword.local8Bit() ) != LDAP_SUCCESS ) { | ||
136 | addressBook()->error( i18n( "Unable to bind to server '%1'" ).arg( mHost ) ); | ||
137 | return false; | ||
138 | } | ||
139 | |||
140 | kdDebug(5700) << "ResourceLDAP: bind to server successfully" << endl; | ||
141 | } else { | ||
142 | if ( ldap_simple_bind_s( mLdap, NULL, NULL ) != LDAP_SUCCESS ) { | ||
143 | addressBook()->error( i18n( "Unable to bind anonymously to server '%1'" ).arg( mHost ) ); | ||
144 | return false; | ||
145 | } | ||
146 | |||
147 | kdDebug( 5700 ) << "ResourceLDAP: bind anonymously to server successfully" << endl; | ||
148 | } | ||
149 | |||
150 | int deref = LDAP_DEREF_ALWAYS; | ||
151 | if ( ldap_set_option( mLdap, LDAP_OPT_DEREF, (void *) &deref ) != LDAP_OPT_SUCCESS ) { | ||
152 | kdDebug(5700) << "ResourceLDAP: can't set 'deref' option" << endl; | ||
153 | return false; | ||
154 | } | ||
155 | |||
156 | if ( ldap_set_option( mLdap, LDAP_OPT_REFERRALS, LDAP_OPT_ON ) != LDAP_OPT_SUCCESS ) { | ||
157 | kdDebug(5700) << "ResourceLDAP: can't set 'referrals' option" << endl; | ||
158 | return false; | ||
159 | } | ||
160 | |||
161 | return true; | ||
162 | } | ||
163 | |||
164 | void ResourceLDAP::doClose() | ||
165 | { | ||
166 | if ( ldap_unbind_s( mLdap ) != LDAP_SUCCESS ) { | ||
167 | kdDebug(5700) << "ResourceLDAP: can't unbind from server" << endl; | ||
168 | return; | ||
169 | } | ||
170 | |||
171 | mLdap = 0; | ||
172 | } | ||
173 | |||
174 | bool ResourceLDAP::load() | ||
175 | { | ||
176 | LDAPMessage *res; | ||
177 | LDAPMessage *msg; | ||
178 | BerElement *track; | ||
179 | char *names; | ||
180 | char **values; | ||
181 | |||
182 | char **LdapSearchAttr = new char*[ mAttributes.count() + 1 ]; | ||
183 | |||
184 | QMap<QString, QString>::Iterator it; | ||
185 | int i = 0; | ||
186 | for ( it = mAttributes.begin(); it != mAttributes.end(); ++it ) { | ||
187 | if ( !it.data().isEmpty() ) { | ||
188 | unsigned int len = it.data().utf8().length(); | ||
189 | LdapSearchAttr[ i ] = new char[ len+1 ]; | ||
190 | memcpy( LdapSearchAttr[ i ], it.data().utf8(), len ); | ||
191 | LdapSearchAttr[ i ][ len ] = 0; | ||
192 | ++i; | ||
193 | } | ||
194 | } | ||
195 | LdapSearchAttr[ i ] = 0; | ||
196 | |||
197 | QString filter = mFilter; | ||
198 | if ( filter.isEmpty() ) | ||
199 | filter = "cn=*"; | ||
200 | |||
201 | int result; | ||
202 | if ( ( result = ldap_search_s( mLdap, mDn.local8Bit(), LDAP_SCOPE_SUBTREE, QString( "(%1)" ).arg( filter ).local8Bit(), | ||
203 | LdapSearchAttr, 0, &res ) != LDAP_SUCCESS ) ) { | ||
204 | addressBook()->error( i18n( "Unable to search on server '%1': %2" ) | ||
205 | .arg( mHost ) | ||
206 | .arg( ldap_err2string( result ) ) ); | ||
207 | |||
208 | for ( i = 0; LdapSearchAttr[ i ]; ++i ) | ||
209 | delete [] LdapSearchAttr[ i ]; | ||
210 | delete [] LdapSearchAttr; | ||
211 | |||
212 | return false; | ||
213 | } | ||
214 | |||
215 | for ( msg = ldap_first_entry( mLdap, res ); msg; msg = ldap_next_entry( mLdap, msg ) ) { | ||
216 | Addressee addr; | ||
217 | addr.setResource( this ); | ||
218 | for ( names = ldap_first_attribute( mLdap, msg, &track ); names; names = ldap_next_attribute( mLdap, msg, track ) ) { | ||
219 | values = ldap_get_values( mLdap, msg, names ); | ||
220 | for ( int i = 0; i < ldap_count_values( values ); ++i ) { | ||
221 | QString name = QString::fromUtf8( names ).lower(); | ||
222 | QString value = QString::fromUtf8( values[ i ] ); | ||
223 | |||
224 | if ( name == mAttributes[ "commonName" ].lower() ) { | ||
225 | if ( !addr.formattedName().isEmpty() ) { | ||
226 | QString fn = addr.formattedName(); | ||
227 | addr.setNameFromString( value ); | ||
228 | addr.setFormattedName( fn ); | ||
229 | } else | ||
230 | addr.setNameFromString( value ); | ||
231 | } else if ( name == mAttributes[ "formattedName" ].lower() ) { | ||
232 | addr.setFormattedName( value ); | ||
233 | } else if ( name == mAttributes[ "givenName" ].lower() ) { | ||
234 | addr.setGivenName( value ); | ||
235 | } else if ( name == mAttributes[ "mail" ].lower() ) { | ||
236 | addr.insertEmail( value, true ); | ||
237 | } else if ( name == mAttributes[ "mailAlias" ].lower() ) { | ||
238 | addr.insertEmail( value, false ); | ||
239 | } else if ( name == mAttributes[ "phoneNumber" ].lower() ) { | ||
240 | PhoneNumber phone; | ||
241 | phone.setNumber( value ); | ||
242 | addr.insertPhoneNumber( phone ); | ||
243 | break; // read only the home number | ||
244 | } else if ( name == mAttributes[ "familyName" ].lower() ) { | ||
245 | addr.setFamilyName( value ); | ||
246 | } else if ( name == mAttributes[ "uid" ].lower() ) { | ||
247 | addr.setUid( value ); | ||
248 | } | ||
249 | } | ||
250 | ldap_value_free( values ); | ||
251 | } | ||
252 | ber_free( track, 0 ); | ||
253 | |||
254 | addressBook()->insertAddressee( addr ); | ||
255 | } | ||
256 | |||
257 | ldap_msgfree( res ); | ||
258 | |||
259 | for ( i = 0; LdapSearchAttr[ i ]; ++i ) | ||
260 | delete [] LdapSearchAttr[ i ]; | ||
261 | delete [] LdapSearchAttr; | ||
262 | |||
263 | return true; | ||
264 | } | ||
265 | |||
266 | bool ResourceLDAP::save( Ticket * ) | ||
267 | { | ||
268 | AddressBook::Iterator it; | ||
269 | for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { | ||
270 | if ( (*it).resource() == this && (*it).changed() ) { | ||
271 | LDAPMod **mods = NULL; | ||
272 | |||
273 | addModOp( &mods, "objectClass", "organizationalPerson" ); | ||
274 | addModOp( &mods, "objectClass", "person" ); | ||
275 | addModOp( &mods, "objectClass", "Top" ); | ||
276 | addModOp( &mods, mAttributes[ "commonName" ].utf8(), (*it).assembledName() ); | ||
277 | addModOp( &mods, mAttributes[ "formattedName" ].utf8(), (*it).formattedName() ); | ||
278 | addModOp( &mods, mAttributes[ "givenName" ].utf8(), (*it).givenName() ); | ||
279 | addModOp( &mods, mAttributes[ "familyName" ].utf8(), (*it).familyName() ); | ||
280 | addModOp( &mods, mAttributes[ "uid" ].utf8(), (*it).uid() ); | ||
281 | |||
282 | QStringList emails = (*it).emails(); | ||
283 | QStringList::ConstIterator mailIt; | ||
284 | bool first = true; | ||
285 | for ( mailIt = emails.begin(); mailIt != emails.end(); ++mailIt ) { | ||
286 | if ( first ) { | ||
287 | addModOp( &mods, mAttributes[ "mail" ].utf8(), (*mailIt) ); | ||
288 | first = false; | ||
289 | } else | ||
290 | addModOp( &mods, mAttributes[ "mailAlias" ].utf8(), (*mailIt) ); | ||
291 | } | ||
292 | |||
293 | PhoneNumber number = (*it).phoneNumber( PhoneNumber::Home ); | ||
294 | addModOp( &mods, mAttributes[ "phoneNumber" ].utf8(), number.number() ); | ||
295 | |||
296 | QString dn = "cn=" + (*it).assembledName() + "," + mDn; | ||
297 | |||
298 | int retval; | ||
299 | if ( (retval = ldap_add_s( mLdap, dn.local8Bit(), mods )) != LDAP_SUCCESS ) | ||
300 | addressBook()->error( i18n( "Unable to modify '%1' on server '%2'" ).arg( (*it).uid() ).arg( mHost ) ); | ||
301 | |||
302 | ldap_mods_free( mods, 1 ); | ||
303 | |||
304 | // mark as unchanged | ||
305 | (*it).setChanged( false ); | ||
306 | } | ||
307 | } | ||
308 | |||
309 | return true; | ||
310 | } | ||
311 | |||
312 | void ResourceLDAP::removeAddressee( const Addressee &addr ) | ||
313 | { | ||
314 | LDAPMessage *res; | ||
315 | LDAPMessage *msg; | ||
316 | |||
317 | QString filter = QString( "(&(uid=%1)(%2))" ).arg( addr.uid() ).arg( mFilter ); | ||
318 | |||
319 | kdDebug(5700) << "ldap:removeAddressee" << filter << endl; | ||
320 | |||
321 | ldap_search_s( mLdap, mDn.local8Bit(), LDAP_SCOPE_SUBTREE, filter.local8Bit(), | ||
322 | 0, 0, &res ); | ||
323 | |||
324 | for ( msg = ldap_first_entry( mLdap, res ); msg; msg = ldap_next_entry( mLdap, msg ) ) { | ||
325 | char *dn = ldap_get_dn( mLdap, msg ); | ||
326 | kdDebug(5700) << "found " << dn << endl; | ||
327 | if ( ldap_delete_s( mLdap, dn ) != LDAP_SUCCESS ) | ||
328 | addressBook()->error( i18n( "Unable to delete '%1' on server '%2'" ).arg( dn ).arg( mHost ) ); | ||
329 | ldap_memfree( dn ); | ||
330 | } | ||
331 | |||
332 | ldap_msgfree( res ); | ||
333 | } | ||
334 | |||
335 | void ResourceLDAP::setUser( const QString &user ) | ||
336 | { | ||
337 | mUser = user; | ||
338 | } | ||
339 | |||
340 | QString ResourceLDAP::user() const | ||
341 | { | ||
342 | return mUser; | ||
343 | } | ||
344 | |||
345 | void ResourceLDAP::setPassword( const QString &password ) | ||
346 | { | ||
347 | mPassword = password; | ||
348 | } | ||
349 | |||
350 | QString ResourceLDAP::password() const | ||
351 | { | ||
352 | return mPassword; | ||
353 | } | ||
354 | |||
355 | void ResourceLDAP::setDn( const QString &dn ) | ||
356 | { | ||
357 | mDn = dn; | ||
358 | } | ||
359 | |||
360 | QString ResourceLDAP::dn() const | ||
361 | { | ||
362 | return mDn; | ||
363 | } | ||
364 | |||
365 | void ResourceLDAP::setHost( const QString &host ) | ||
366 | { | ||
367 | mHost = host; | ||
368 | } | ||
369 | |||
370 | QString ResourceLDAP::host() const | ||
371 | { | ||
372 | return mHost; | ||
373 | } | ||
374 | |||
375 | void ResourceLDAP::setPort( int port ) | ||
376 | { | ||
377 | mPort = port; | ||
378 | } | ||
379 | |||
380 | int ResourceLDAP::port() const | ||
381 | { | ||
382 | return mPort; | ||
383 | } | ||
384 | |||
385 | void ResourceLDAP::setFilter( const QString &filter ) | ||
386 | { | ||
387 | mFilter = filter; | ||
388 | } | ||
389 | |||
390 | QString ResourceLDAP::filter() const | ||
391 | { | ||
392 | return mFilter; | ||
393 | } | ||
394 | |||
395 | void ResourceLDAP::setIsAnonymous( bool value ) | ||
396 | { | ||
397 | mAnonymous = value; | ||
398 | } | ||
399 | |||
400 | bool ResourceLDAP::isAnonymous() const | ||
401 | { | ||
402 | return mAnonymous; | ||
403 | } | ||
404 | |||
405 | void ResourceLDAP::setAttributes( const QMap<QString, QString> &attributes ) | ||
406 | { | ||
407 | mAttributes = attributes; | ||
408 | } | ||
409 | |||
410 | QMap<QString, QString> ResourceLDAP::attributes() const | ||
411 | { | ||
412 | return mAttributes; | ||
413 | } | ||
414 | |||
415 | void addModOp( LDAPMod ***pmods, const QString &attr, const QString &value ) | ||
416 | { | ||
417 | if ( value.isNull() ) | ||
418 | return; | ||
419 | |||
420 | LDAPMod**mods; | ||
421 | |||
422 | mods = *pmods; | ||
423 | |||
424 | uint i = 0; | ||
425 | if ( mods != 0 ) | ||
426 | for ( ; mods[ i ] != 0; ++i ); | ||
427 | |||
428 | if (( mods = (LDAPMod **)realloc( mods, (i + 2) * sizeof( LDAPMod * ))) == 0 ) { | ||
429 | kdError() << "ResourceLDAP: realloc" << endl; | ||
430 | return; | ||
431 | } | ||
432 | |||
433 | *pmods = mods; | ||
434 | mods[ i + 1 ] = 0; | ||
435 | |||
436 | mods[ i ] = new LDAPMod; | ||
437 | |||
438 | mods[ i ]->mod_op = 0; | ||
439 | mods[ i ]->mod_type = strdup( attr.utf8() ); | ||
440 | mods[ i ]->mod_values = new char*[ 2 ]; | ||
441 | mods[ i ]->mod_values[ 0 ] = strdup( value.utf8() ); | ||
442 | mods[ i ]->mod_values[ 1 ] = 0; | ||
443 | } | ||
444 | |||
diff --git a/kabc/plugins/ldap/resourceldap.h b/kabc/plugins/ldap/resourceldap.h new file mode 100644 index 0000000..0625f30 --- a/dev/null +++ b/kabc/plugins/ldap/resourceldap.h | |||
@@ -0,0 +1,99 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_RESOURCELDAP_H | ||
29 | #define KABC_RESOURCELDAP_H | ||
30 | |||
31 | |||
32 | #include <lber.h> | ||
33 | #include <ldap.h> | ||
34 | |||
35 | #include "addressbook.h" | ||
36 | #include "resource.h" | ||
37 | |||
38 | class KConfig; | ||
39 | |||
40 | namespace KABC { | ||
41 | |||
42 | class ResourceLDAP : public Resource | ||
43 | { | ||
44 | public: | ||
45 | |||
46 | ResourceLDAP( const KConfig* ); | ||
47 | |||
48 | virtual void writeConfig( KConfig* ); | ||
49 | |||
50 | virtual bool doOpen(); | ||
51 | virtual void doClose(); | ||
52 | |||
53 | virtual Ticket *requestSaveTicket(); | ||
54 | |||
55 | virtual bool load(); | ||
56 | virtual bool save( Ticket * ); | ||
57 | |||
58 | virtual void removeAddressee( const Addressee& addr ); | ||
59 | |||
60 | void setUser( const QString &user ); | ||
61 | QString user() const; | ||
62 | |||
63 | void setPassword( const QString &password ); | ||
64 | QString password() const; | ||
65 | |||
66 | void setDn( const QString &dn ); | ||
67 | QString dn() const; | ||
68 | |||
69 | void setHost( const QString &host ); | ||
70 | QString host() const; | ||
71 | |||
72 | void setPort( int port ); | ||
73 | int port() const; | ||
74 | |||
75 | void setFilter( const QString &filter ); | ||
76 | QString filter() const; | ||
77 | |||
78 | void setIsAnonymous( bool value ); | ||
79 | bool isAnonymous() const; | ||
80 | |||
81 | void setAttributes( const QMap<QString, QString> &attributes ); | ||
82 | QMap<QString, QString> attributes() const; | ||
83 | |||
84 | private: | ||
85 | QString mUser; | ||
86 | QString mPassword; | ||
87 | QString mDn; | ||
88 | QString mHost; | ||
89 | QString mFilter; | ||
90 | int mPort; | ||
91 | bool mAnonymous; | ||
92 | QMap<QString, QString> mAttributes; | ||
93 | |||
94 | LDAP *mLdap; | ||
95 | }; | ||
96 | |||
97 | } | ||
98 | |||
99 | #endif | ||
diff --git a/kabc/plugins/ldap/resourceldapconfig.cpp b/kabc/plugins/ldap/resourceldapconfig.cpp new file mode 100644 index 0000000..2c0d030 --- a/dev/null +++ b/kabc/plugins/ldap/resourceldapconfig.cpp | |||
@@ -0,0 +1,254 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <qcheckbox.h> | ||
29 | #include <qlabel.h> | ||
30 | #include <qlayout.h> | ||
31 | #include <qpushbutton.h> | ||
32 | #include <qspinbox.h> | ||
33 | #include <qvbox.h> | ||
34 | |||
35 | //US #include <kaccelmanager.h> | ||
36 | #include <kcombobox.h> | ||
37 | #include <kdebug.h> | ||
38 | #include <kdialogbase.h> | ||
39 | #include <klocale.h> | ||
40 | #include <klineedit.h> | ||
41 | |||
42 | #include "resourceldap.h" | ||
43 | |||
44 | #include "resourceldapconfig.h" | ||
45 | |||
46 | using namespace KABC; | ||
47 | |||
48 | ResourceLDAPConfig::ResourceLDAPConfig( QWidget* parent, const char* name ) | ||
49 | : KRES::ConfigWidget( parent, name ) | ||
50 | { | ||
51 | QGridLayout *mainLayout = new QGridLayout( this, 8, 2, 0, | ||
52 | KDialog::spacingHint() ); | ||
53 | |||
54 | QLabel *label = new QLabel( i18n( "User:" ), this ); | ||
55 | mUser = new KLineEdit( this ); | ||
56 | |||
57 | mainLayout->addWidget( label, 0, 0 ); | ||
58 | mainLayout->addWidget( mUser, 0, 1 ); | ||
59 | |||
60 | label = new QLabel( i18n( "Password:" ), this ); | ||
61 | mPassword = new KLineEdit( this ); | ||
62 | mPassword->setEchoMode( KLineEdit::Password ); | ||
63 | |||
64 | mainLayout->addWidget( label, 1, 0 ); | ||
65 | mainLayout->addWidget( mPassword, 1, 1 ); | ||
66 | |||
67 | label = new QLabel( i18n( "Host:" ), this ); | ||
68 | mHost = new KLineEdit( this ); | ||
69 | |||
70 | mainLayout->addWidget( label, 2, 0 ); | ||
71 | mainLayout->addWidget( mHost, 2, 1 ); | ||
72 | |||
73 | label = new QLabel( i18n( "Port:" ), this ); | ||
74 | QVBox *box = new QVBox( this ); | ||
75 | mPort = new QSpinBox( 0, 65535, 1, box ); | ||
76 | mPort->setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ) ); | ||
77 | mPort->setValue( 389 ); | ||
78 | new QWidget( box, "dummy" ); | ||
79 | |||
80 | mainLayout->addWidget( label, 3, 0 ); | ||
81 | mainLayout->addWidget( box, 3, 1 ); | ||
82 | |||
83 | label = new QLabel( i18n( "Dn:" ), this ); | ||
84 | mDn = new KLineEdit( this ); | ||
85 | |||
86 | mainLayout->addWidget( label, 4, 0 ); | ||
87 | mainLayout->addWidget( mDn, 4, 1 ); | ||
88 | |||
89 | label = new QLabel( i18n( "Filter:" ), this ); | ||
90 | mFilter = new KLineEdit( this ); | ||
91 | |||
92 | mainLayout->addWidget( label, 5, 0 ); | ||
93 | mainLayout->addWidget( mFilter, 5, 1 ); | ||
94 | |||
95 | mAnonymous = new QCheckBox( i18n( "Anonymous login" ), this ); | ||
96 | mainLayout->addMultiCellWidget( mAnonymous, 6, 6, 0, 1 ); | ||
97 | |||
98 | mEditButton = new QPushButton( i18n( "Edit Attributes..." ), this ); | ||
99 | mainLayout->addMultiCellWidget( mEditButton, 7, 7, 0, 1 ); | ||
100 | |||
101 | connect( mAnonymous, SIGNAL( toggled(bool) ), mUser, SLOT( setDisabled(bool) ) ); | ||
102 | connect( mAnonymous, SIGNAL( toggled(bool) ), mPassword, SLOT( setDisabled(bool) ) ); | ||
103 | connect( mEditButton, SIGNAL( clicked() ), SLOT( editAttributes() ) ); | ||
104 | } | ||
105 | |||
106 | void ResourceLDAPConfig::loadSettings( KRES::Resource *res ) | ||
107 | { | ||
108 | //US ResourceLDAP *resource = dynamic_cast<ResourceLDAP*>( res ); | ||
109 | ResourceLDAP *resource = (ResourceLDAP*)( res ); | ||
110 | |||
111 | if ( !resource ) { | ||
112 | kdDebug(5700) << "ResourceLDAPConfig::loadSettings(): cast failed" << endl; | ||
113 | return; | ||
114 | } | ||
115 | |||
116 | mUser->setText( resource->user() ); | ||
117 | mPassword->setText( resource->password() ); | ||
118 | mHost->setText( resource->host() ); | ||
119 | mPort->setValue( resource->port() ); | ||
120 | mDn->setText( resource->dn() ); | ||
121 | mFilter->setText( resource->filter() ); | ||
122 | mAnonymous->setChecked( resource->isAnonymous() ); | ||
123 | mAttributes = resource->attributes(); | ||
124 | } | ||
125 | |||
126 | void ResourceLDAPConfig::saveSettings( KRES::Resource *res ) | ||
127 | { | ||
128 | //US ResourceLDAP *resource = dynamic_cast<ResourceLDAP*>( res ); | ||
129 | ResourceLDAP *resource = (ResourceLDAP*)( res ); | ||
130 | |||
131 | if ( !resource ) { | ||
132 | kdDebug(5700) << "ResourceLDAPConfig::saveSettings(): cast failed" << endl; | ||
133 | return; | ||
134 | } | ||
135 | |||
136 | resource->setUser( mUser->text() ); | ||
137 | resource->setPassword( mPassword->text() ); | ||
138 | resource->setHost( mHost->text() ); | ||
139 | resource->setPort( mPort->value() ); | ||
140 | resource->setDn( mDn->text() ); | ||
141 | resource->setFilter( mFilter->text() ); | ||
142 | resource->setIsAnonymous( mAnonymous->isChecked() ); | ||
143 | resource->setAttributes( mAttributes ); | ||
144 | } | ||
145 | |||
146 | void ResourceLDAPConfig::editAttributes() | ||
147 | { | ||
148 | AttributesDialog dlg( mAttributes, this ); | ||
149 | if ( dlg.exec() ) | ||
150 | mAttributes = dlg.attributes(); | ||
151 | } | ||
152 | |||
153 | AttributesDialog::AttributesDialog( const QMap<QString, QString> &attributes, | ||
154 | QWidget *parent, const char *name ) | ||
155 | : KDialogBase( Plain, i18n( "Attributes Configuration" ), Ok | Cancel, | ||
156 | Ok, parent, name, true, true ) | ||
157 | { | ||
158 | mNameDict.setAutoDelete( true ); | ||
159 | mNameDict.insert( "commonName", new QString( i18n( "Common name" ) ) ); | ||
160 | mNameDict.insert( "formattedName", new QString( i18n( "Formatted name" ) ) ); | ||
161 | mNameDict.insert( "familyName", new QString( i18n( "Family name" ) ) ); | ||
162 | mNameDict.insert( "givenName", new QString( i18n( "Given name" ) ) ); | ||
163 | mNameDict.insert( "mail", new QString( i18n( "Email" ) ) ); | ||
164 | mNameDict.insert( "mailAlias", new QString( i18n( "Email alias" ) ) ); | ||
165 | mNameDict.insert( "phoneNumber", new QString( i18n( "Telephone number" ) ) ); | ||
166 | mNameDict.insert( "uid", new QString( i18n( "UID" ) ) ); | ||
167 | |||
168 | // overwrite the default values here | ||
169 | QMap<QString, QString> kolabMap, netscapeMap, evolutionMap, outlookMap; | ||
170 | |||
171 | // kolab | ||
172 | kolabMap.insert( "formattedName", "display-name" ); | ||
173 | kolabMap.insert( "mailAlias", "mailalias" ); | ||
174 | |||
175 | // evolution | ||
176 | evolutionMap.insert( "formattedName", "fileAs" ); | ||
177 | |||
178 | mMapList.append( attributes ); | ||
179 | mMapList.append( kolabMap ); | ||
180 | mMapList.append( netscapeMap ); | ||
181 | mMapList.append( evolutionMap ); | ||
182 | mMapList.append( outlookMap ); | ||
183 | |||
184 | QFrame *page = plainPage(); | ||
185 | QGridLayout *layout = new QGridLayout( page, 2, attributes.count() + 1, | ||
186 | 0, spacingHint() ); | ||
187 | |||
188 | QLabel *label = new QLabel( i18n( "Template:" ), page ); | ||
189 | layout->addWidget( label, 0, 0 ); | ||
190 | mMapCombo = new KComboBox( page ); | ||
191 | layout->addWidget( mMapCombo, 0, 1 ); | ||
192 | |||
193 | mMapCombo->insertItem( i18n( "User Defined" ) ); | ||
194 | mMapCombo->insertItem( i18n( "Kolab" ) ); | ||
195 | mMapCombo->insertItem( i18n( "Netscape" ) ); | ||
196 | mMapCombo->insertItem( i18n( "Evolution" ) ); | ||
197 | mMapCombo->insertItem( i18n( "Outlook" ) ); | ||
198 | connect( mMapCombo, SIGNAL( activated( int ) ), SLOT( mapChanged( int ) ) ); | ||
199 | |||
200 | QMap<QString, QString>::ConstIterator it; | ||
201 | int i; | ||
202 | for ( i = 1, it = attributes.begin(); it != attributes.end(); ++it, ++i ) { | ||
203 | label = new QLabel( *mNameDict[ it.key() ] + ":", page ); | ||
204 | KLineEdit *lineedit = new KLineEdit( page ); | ||
205 | mLineEditDict.insert( it.key(), lineedit ); | ||
206 | lineedit->setText( it.data() ); | ||
207 | label->setBuddy( lineedit ); | ||
208 | layout->addWidget( label, i, 0 ); | ||
209 | layout->addWidget( lineedit, i, 1 ); | ||
210 | } | ||
211 | |||
212 | //US KAcceleratorManager::manage( this ); | ||
213 | } | ||
214 | |||
215 | AttributesDialog::~AttributesDialog() | ||
216 | { | ||
217 | } | ||
218 | |||
219 | QMap<QString, QString> AttributesDialog::attributes() const | ||
220 | { | ||
221 | QMap<QString, QString> map; | ||
222 | |||
223 | QDictIterator<KLineEdit> it( mLineEditDict ); | ||
224 | for ( ; it.current(); ++it ) | ||
225 | map.insert( it.currentKey(), it.current()->text() ); | ||
226 | |||
227 | return map; | ||
228 | } | ||
229 | |||
230 | void AttributesDialog::mapChanged( int pos ) | ||
231 | { | ||
232 | // default map | ||
233 | QMap<QString, QString> defaultMap; | ||
234 | defaultMap.insert( "commonName", "cn" ); | ||
235 | defaultMap.insert( "formattedName", "displayName" ); | ||
236 | defaultMap.insert( "familyName", "sn" ); | ||
237 | defaultMap.insert( "givenName", "givenName" ); | ||
238 | defaultMap.insert( "mail", "mail" ); | ||
239 | defaultMap.insert( "mailAlias", "" ); | ||
240 | defaultMap.insert( "phoneNumber", "telephoneNumber" ); | ||
241 | defaultMap.insert( "uid", "uid" ); | ||
242 | |||
243 | // apply first the default and than the spezific changes | ||
244 | QMap<QString, QString>::Iterator it; | ||
245 | for ( it = defaultMap.begin(); it != defaultMap.end(); ++it ) | ||
246 | mLineEditDict[ it.key() ]->setText( it.data() ); | ||
247 | |||
248 | for ( it = mMapList[ pos ].begin(); it != mMapList[ pos ].end(); ++it ) { | ||
249 | if ( !it.data().isEmpty() ) | ||
250 | mLineEditDict[ it.key() ]->setText( it.data() ); | ||
251 | } | ||
252 | } | ||
253 | |||
254 | //US #include "resourceldapconfig.moc" | ||
diff --git a/kabc/plugins/ldap/resourceldapconfig.h b/kabc/plugins/ldap/resourceldapconfig.h new file mode 100644 index 0000000..42d30ff --- a/dev/null +++ b/kabc/plugins/ldap/resourceldapconfig.h | |||
@@ -0,0 +1,100 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef RESOURCELDAPCONFIG_H | ||
29 | #define RESOURCELDAPCONFIG_H | ||
30 | |||
31 | #include <qmap.h> | ||
32 | //US | ||
33 | #include <qdict.h> | ||
34 | |||
35 | #include <kdialogbase.h> | ||
36 | #include <kresources/configwidget.h> | ||
37 | |||
38 | class QCheckBox; | ||
39 | class QPushButton; | ||
40 | class QSpinBox; | ||
41 | class QString; | ||
42 | |||
43 | class KComboBox; | ||
44 | class KLineEdit; | ||
45 | |||
46 | namespace KABC { | ||
47 | |||
48 | class ResourceLDAPConfig : public KRES::ConfigWidget | ||
49 | { | ||
50 | Q_OBJECT | ||
51 | |||
52 | public: | ||
53 | ResourceLDAPConfig( QWidget* parent = 0, const char* name = 0 ); | ||
54 | |||
55 | public slots: | ||
56 | void loadSettings( KRES::Resource* ); | ||
57 | void saveSettings( KRES::Resource* ); | ||
58 | |||
59 | private slots: | ||
60 | void editAttributes(); | ||
61 | |||
62 | private: | ||
63 | KLineEdit *mUser; | ||
64 | KLineEdit *mPassword; | ||
65 | KLineEdit *mHost; | ||
66 | QSpinBox *mPort; | ||
67 | KLineEdit *mDn; | ||
68 | KLineEdit *mFilter; | ||
69 | QCheckBox *mAnonymous; | ||
70 | QPushButton *mEditButton; | ||
71 | QMap<QString, QString> mAttributes; | ||
72 | }; | ||
73 | |||
74 | class AttributesDialog : public KDialogBase | ||
75 | { | ||
76 | Q_OBJECT | ||
77 | |||
78 | public: | ||
79 | AttributesDialog( const QMap<QString, QString> &attributes, QWidget *parent, | ||
80 | const char *name = 0 ); | ||
81 | ~AttributesDialog(); | ||
82 | |||
83 | QMap<QString, QString> attributes() const; | ||
84 | |||
85 | private slots: | ||
86 | void mapChanged( int pos ); | ||
87 | |||
88 | private: | ||
89 | enum { UserMap, KolabMap, NetscapeMap, EvolutionMap, OutlookMap }; | ||
90 | |||
91 | KComboBox *mMapCombo; | ||
92 | QValueList< QMap<QString, QString> > mMapList; | ||
93 | |||
94 | QDict<KLineEdit> mLineEditDict; | ||
95 | QDict<QString> mNameDict; | ||
96 | }; | ||
97 | |||
98 | } | ||
99 | |||
100 | #endif | ||
diff --git a/kabc/resource.cpp b/kabc/resource.cpp new file mode 100644 index 0000000..9a1a5f8 --- a/dev/null +++ b/kabc/resource.cpp | |||
@@ -0,0 +1,95 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <kdebug.h> | ||
29 | |||
30 | #include "resource.h" | ||
31 | |||
32 | using namespace KABC; | ||
33 | |||
34 | Resource::Resource( const KConfig *config ) | ||
35 | : KRES::Resource( config ), mAddressBook( 0 ) | ||
36 | { | ||
37 | } | ||
38 | |||
39 | Resource::~Resource() | ||
40 | { | ||
41 | } | ||
42 | |||
43 | void Resource::writeConfig( KConfig *config ) | ||
44 | { | ||
45 | KRES::Resource::writeConfig( config ); | ||
46 | } | ||
47 | |||
48 | void Resource::setAddressBook( AddressBook *ab ) | ||
49 | { | ||
50 | mAddressBook = ab; | ||
51 | } | ||
52 | |||
53 | AddressBook *Resource::addressBook() | ||
54 | { | ||
55 | return mAddressBook; | ||
56 | } | ||
57 | |||
58 | bool Resource::doOpen() | ||
59 | { | ||
60 | return true; | ||
61 | } | ||
62 | |||
63 | void Resource::doClose() | ||
64 | { | ||
65 | } | ||
66 | |||
67 | Ticket *Resource::requestSaveTicket() | ||
68 | { | ||
69 | return 0; | ||
70 | } | ||
71 | |||
72 | bool Resource::load() | ||
73 | { | ||
74 | return true; | ||
75 | } | ||
76 | |||
77 | bool Resource::save( Ticket * ) | ||
78 | { | ||
79 | return false; | ||
80 | } | ||
81 | |||
82 | Ticket *Resource::createTicket( Resource *resource ) | ||
83 | { | ||
84 | return new Ticket( resource ); | ||
85 | } | ||
86 | |||
87 | void Resource::removeAddressee( const Addressee& ) | ||
88 | { | ||
89 | // do nothing | ||
90 | } | ||
91 | |||
92 | void Resource::cleanUp() | ||
93 | { | ||
94 | // do nothing | ||
95 | } | ||
diff --git a/kabc/resource.h b/kabc/resource.h new file mode 100644 index 0000000..c363125 --- a/dev/null +++ b/kabc/resource.h | |||
@@ -0,0 +1,134 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_RESOURCE_H | ||
29 | #define KABC_RESOURCE_H | ||
30 | |||
31 | #include <kresources/resource.h> | ||
32 | |||
33 | #include "addressbook.h" | ||
34 | |||
35 | namespace KABC { | ||
36 | |||
37 | /** | ||
38 | * @short Helper class for handling coordinated save of address books. | ||
39 | * | ||
40 | * This class is used as helper class for saving address book. | ||
41 | * @see requestSaveTicket(), save(). | ||
42 | */ | ||
43 | class Ticket | ||
44 | { | ||
45 | friend class Resource; | ||
46 | public: | ||
47 | Resource *resource() { return mResource; } | ||
48 | |||
49 | private: | ||
50 | Ticket( Resource *resource ) : mResource( resource ) {} | ||
51 | |||
52 | Resource *mResource; | ||
53 | }; | ||
54 | |||
55 | /** | ||
56 | * @internal | ||
57 | */ | ||
58 | class Resource : public KRES::Resource | ||
59 | { | ||
60 | public: | ||
61 | /** | ||
62 | * Constructor | ||
63 | */ | ||
64 | Resource( const KConfig *config ); | ||
65 | |||
66 | /** | ||
67 | * Destructor. | ||
68 | */ | ||
69 | virtual ~Resource(); | ||
70 | |||
71 | /** | ||
72 | * Sets the address book of the resource. | ||
73 | */ | ||
74 | void setAddressBook( AddressBook* ); | ||
75 | |||
76 | /** | ||
77 | * Returns a pointer to the addressbook. | ||
78 | */ | ||
79 | AddressBook *addressBook(); | ||
80 | |||
81 | /** | ||
82 | * Writes the resource specific config to file. | ||
83 | */ | ||
84 | virtual void writeConfig( KConfig *config ); | ||
85 | |||
86 | /** | ||
87 | * Open the resource and returns if it was successfully | ||
88 | */ | ||
89 | virtual bool doOpen(); | ||
90 | |||
91 | /** | ||
92 | * Close the resource and returns if it was successfully | ||
93 | */ | ||
94 | virtual void doClose(); | ||
95 | |||
96 | /** | ||
97 | * Request a ticket, you have to pass through @ref save() to | ||
98 | * allow locking. | ||
99 | */ | ||
100 | virtual Ticket *requestSaveTicket(); | ||
101 | |||
102 | /** | ||
103 | * Load all addressees to the addressbook | ||
104 | */ | ||
105 | virtual bool load(); | ||
106 | |||
107 | /** | ||
108 | * Save all addressees to the addressbook. | ||
109 | * | ||
110 | * @param ticket The ticket you get by @ref requestSaveTicket() | ||
111 | */ | ||
112 | virtual bool save( Ticket *ticket ); | ||
113 | |||
114 | /** | ||
115 | * Removes a addressee from resource. This method is mainly | ||
116 | * used by record-based resources like LDAP or SQL. | ||
117 | */ | ||
118 | virtual void removeAddressee( const Addressee& addr ); | ||
119 | |||
120 | /** | ||
121 | * This method is called by an error handler if the application | ||
122 | * crashed | ||
123 | */ | ||
124 | virtual void cleanUp(); | ||
125 | |||
126 | protected: | ||
127 | Ticket *createTicket( Resource * ); | ||
128 | |||
129 | private: | ||
130 | AddressBook *mAddressBook; | ||
131 | }; | ||
132 | |||
133 | } | ||
134 | #endif | ||
diff --git a/kabc/secrecy.cpp b/kabc/secrecy.cpp new file mode 100644 index 0000000..f4bcb51 --- a/dev/null +++ b/kabc/secrecy.cpp | |||
@@ -0,0 +1,107 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <klocale.h> | ||
29 | |||
30 | #include "secrecy.h" | ||
31 | |||
32 | using namespace KABC; | ||
33 | |||
34 | Secrecy::Secrecy( int type ) | ||
35 | : mType( type ) | ||
36 | { | ||
37 | } | ||
38 | |||
39 | bool Secrecy::operator==( const Secrecy &s ) const | ||
40 | { | ||
41 | return ( mType == s.mType ); | ||
42 | } | ||
43 | |||
44 | bool Secrecy::operator!=( const Secrecy &s ) const | ||
45 | { | ||
46 | return !( *this == s ); | ||
47 | } | ||
48 | |||
49 | bool Secrecy::isValid() const | ||
50 | { | ||
51 | return mType != Invalid; | ||
52 | } | ||
53 | |||
54 | void Secrecy::setType( int type ) | ||
55 | { | ||
56 | mType = type; | ||
57 | } | ||
58 | |||
59 | int Secrecy::type() const | ||
60 | { | ||
61 | return mType; | ||
62 | } | ||
63 | |||
64 | Secrecy::TypeList Secrecy::typeList() | ||
65 | { | ||
66 | TypeList list; | ||
67 | list << Public; | ||
68 | list << Private; | ||
69 | list << Confidential; | ||
70 | |||
71 | return list; | ||
72 | } | ||
73 | |||
74 | QString Secrecy::typeLabel( int type ) | ||
75 | { | ||
76 | switch ( type ) { | ||
77 | case Public: | ||
78 | return i18n( "Public" ); | ||
79 | break; | ||
80 | case Private: | ||
81 | return i18n( "Private" ); | ||
82 | break; | ||
83 | case Confidential: | ||
84 | return i18n( "Confidential" ); | ||
85 | break; | ||
86 | default: | ||
87 | return i18n( "Unknown type" ); | ||
88 | break; | ||
89 | } | ||
90 | } | ||
91 | |||
92 | QString Secrecy::asString() const | ||
93 | { | ||
94 | return typeLabel( mType ); | ||
95 | } | ||
96 | |||
97 | QDataStream &KABC::operator<<( QDataStream &s, const Secrecy &secrecy ) | ||
98 | { | ||
99 | return s << secrecy.mType; | ||
100 | } | ||
101 | |||
102 | QDataStream &KABC::operator>>( QDataStream &s, Secrecy &secrecy ) | ||
103 | { | ||
104 | s >> secrecy.mType; | ||
105 | |||
106 | return s; | ||
107 | } | ||
diff --git a/kabc/secrecy.h b/kabc/secrecy.h new file mode 100644 index 0000000..8f2f736 --- a/dev/null +++ b/kabc/secrecy.h | |||
@@ -0,0 +1,102 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_SECRECY_H | ||
29 | #define KABC_SECRECY_H | ||
30 | |||
31 | #include <qvaluelist.h> | ||
32 | |||
33 | namespace KABC { | ||
34 | |||
35 | class Secrecy | ||
36 | { | ||
37 | friend QDataStream &operator<<( QDataStream &, const Secrecy & ); | ||
38 | friend QDataStream &operator>>( QDataStream &, Secrecy & ); | ||
39 | |||
40 | public: | ||
41 | typedef QValueList<int> TypeList; | ||
42 | |||
43 | /** | ||
44 | * Secrecy types | ||
45 | * | ||
46 | * @li Public - for public access | ||
47 | * @li Private - only private access | ||
48 | * @li Confidential - access for confidential persons | ||
49 | */ | ||
50 | enum Types { | ||
51 | Public, | ||
52 | Private, | ||
53 | Confidential, | ||
54 | Invalid | ||
55 | }; | ||
56 | |||
57 | /** | ||
58 | * Constructor. | ||
59 | * | ||
60 | * @param type The secrecy type, @see Types. | ||
61 | */ | ||
62 | Secrecy( int type = Invalid ); | ||
63 | |||
64 | bool operator==( const Secrecy & ) const; | ||
65 | bool operator!=( const Secrecy & ) const; | ||
66 | |||
67 | /** | ||
68 | Returns if the Secrecy object has a valid value. | ||
69 | */ | ||
70 | bool isValid() const; | ||
71 | |||
72 | /** | ||
73 | * Sets the type, @see Types. | ||
74 | */ | ||
75 | void setType( int type ); | ||
76 | |||
77 | /** | ||
78 | * Returns the type, @see Types. | ||
79 | */ | ||
80 | int type() const; | ||
81 | |||
82 | /** | ||
83 | * Returns a list of all available secrecy types. | ||
84 | */ | ||
85 | static TypeList typeList(); | ||
86 | |||
87 | /** | ||
88 | * Returns a translated label for a given secrecy type. | ||
89 | */ | ||
90 | static QString typeLabel( int type ); | ||
91 | |||
92 | /** | ||
93 | * For debug. | ||
94 | */ | ||
95 | QString asString() const; | ||
96 | |||
97 | private: | ||
98 | int mType; | ||
99 | }; | ||
100 | |||
101 | } | ||
102 | #endif | ||
diff --git a/kabc/sound.cpp b/kabc/sound.cpp new file mode 100644 index 0000000..b2e5254 --- a/dev/null +++ b/kabc/sound.cpp | |||
@@ -0,0 +1,117 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk changes | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include "sound.h" | ||
29 | |||
30 | #include <qdatastream.h> | ||
31 | |||
32 | using namespace KABC; | ||
33 | |||
34 | Sound::Sound() | ||
35 | : mIntern( false ) | ||
36 | { | ||
37 | } | ||
38 | |||
39 | Sound::Sound( const QString &url ) | ||
40 | : mUrl( url ), mIntern( false ) | ||
41 | { | ||
42 | } | ||
43 | |||
44 | Sound::Sound( const QByteArray &data ) | ||
45 | : mData( data ), mIntern( true ) | ||
46 | { | ||
47 | } | ||
48 | |||
49 | Sound::~Sound() | ||
50 | { | ||
51 | } | ||
52 | |||
53 | bool Sound::operator==( const Sound &s ) const | ||
54 | { | ||
55 | if ( mIntern != s.mIntern ) return false; | ||
56 | |||
57 | if ( mIntern ) { | ||
58 | if ( mData != s.mData ) | ||
59 | return false; | ||
60 | } else { | ||
61 | if ( mUrl != s.mUrl ) | ||
62 | return false; | ||
63 | } | ||
64 | |||
65 | return true; | ||
66 | } | ||
67 | |||
68 | bool Sound::operator!=( const Sound &s ) const | ||
69 | { | ||
70 | return !( s == *this ); | ||
71 | } | ||
72 | |||
73 | void Sound::setUrl( const QString &url ) | ||
74 | { | ||
75 | mUrl = url; | ||
76 | mIntern = false; | ||
77 | } | ||
78 | |||
79 | void Sound::setData( const QByteArray &data ) | ||
80 | { | ||
81 | mData = data; | ||
82 | mIntern = true; | ||
83 | } | ||
84 | |||
85 | bool Sound::isIntern() const | ||
86 | { | ||
87 | return mIntern; | ||
88 | } | ||
89 | |||
90 | QString Sound::url() const | ||
91 | { | ||
92 | return mUrl; | ||
93 | } | ||
94 | |||
95 | QByteArray Sound::data() const | ||
96 | { | ||
97 | return mData; | ||
98 | } | ||
99 | |||
100 | QString Sound::asString() const | ||
101 | { | ||
102 | if ( mIntern ) | ||
103 | return "intern sound"; | ||
104 | else | ||
105 | return mUrl; | ||
106 | } | ||
107 | |||
108 | QDataStream &KABC::operator<<( QDataStream &s, const Sound &sound ) | ||
109 | { | ||
110 | return s << sound.mIntern << sound.mUrl << sound.mData; | ||
111 | } | ||
112 | |||
113 | QDataStream &KABC::operator>>( QDataStream &s, Sound &sound ) | ||
114 | { | ||
115 | s >> sound.mIntern >> sound.mUrl >> sound.mData; | ||
116 | return s; | ||
117 | } | ||
diff --git a/kabc/sound.h b/kabc/sound.h new file mode 100644 index 0000000..0ec5ec8 --- a/dev/null +++ b/kabc/sound.h | |||
@@ -0,0 +1,123 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_SOUND_H | ||
29 | #define KABC_SOUND_H | ||
30 | |||
31 | #include <qcstring.h> | ||
32 | #include <qstring.h> | ||
33 | |||
34 | namespace KABC { | ||
35 | |||
36 | class Sound | ||
37 | { | ||
38 | friend QDataStream &operator<<( QDataStream &, const Sound & ); | ||
39 | friend QDataStream &operator>>( QDataStream &, Sound & ); | ||
40 | |||
41 | public: | ||
42 | |||
43 | /** | ||
44 | * Consturctor. Creates an empty object. | ||
45 | */ | ||
46 | Sound(); | ||
47 | |||
48 | /** | ||
49 | * Consturctor. | ||
50 | * | ||
51 | * @param url A URL that describes the position of the sound file. | ||
52 | */ | ||
53 | Sound( const QString &url ); | ||
54 | |||
55 | /** | ||
56 | * Consturctor. | ||
57 | * | ||
58 | * @param data The raw data of the sound. | ||
59 | */ | ||
60 | Sound( const QByteArray &data ); | ||
61 | |||
62 | /** | ||
63 | * Destructor. | ||
64 | */ | ||
65 | ~Sound(); | ||
66 | |||
67 | |||
68 | bool operator==( const Sound & ) const; | ||
69 | bool operator!=( const Sound & ) const; | ||
70 | |||
71 | /** | ||
72 | * Sets a URL for the location of the sound file. When using this | ||
73 | * function, @ref isIntern() will return 'false' until you use | ||
74 | * @ref setData(). | ||
75 | * | ||
76 | * @param url The location URL of the sound file. | ||
77 | */ | ||
78 | void setUrl( const QString &url ); | ||
79 | |||
80 | /** | ||
81 | * Sets the raw data of the sound. When using this function, | ||
82 | * @ref isIntern() will return 'true' until you use @ref setUrl(). | ||
83 | * | ||
84 | * @param data The raw data of the sound. | ||
85 | */ | ||
86 | void setData( const QByteArray &data ); | ||
87 | |||
88 | /** | ||
89 | * Returns whether the sound is described by a URL (extern) or | ||
90 | * by the raw data (intern). | ||
91 | * When this method returns 'true' you can use @ref data() to | ||
92 | * get the raw data. Otherwise you can request the URL of this | ||
93 | * sound by @ref url() and load the raw data from that location. | ||
94 | */ | ||
95 | bool isIntern() const; | ||
96 | |||
97 | /** | ||
98 | * Returns the location URL of this sound. | ||
99 | */ | ||
100 | QString url() const; | ||
101 | |||
102 | /** | ||
103 | * Returns the raw data of this sound. | ||
104 | */ | ||
105 | QByteArray data() const; | ||
106 | |||
107 | /** | ||
108 | * Returns string representation of the sound. | ||
109 | */ | ||
110 | QString asString() const; | ||
111 | |||
112 | private: | ||
113 | QString mUrl; | ||
114 | QByteArray mData; | ||
115 | |||
116 | int mIntern; | ||
117 | }; | ||
118 | |||
119 | QDataStream &operator<<( QDataStream &, const Sound & ); | ||
120 | QDataStream &operator>>( QDataStream &, Sound & ); | ||
121 | |||
122 | } | ||
123 | #endif | ||
diff --git a/kabc/stdaddressbook.cpp b/kabc/stdaddressbook.cpp new file mode 100644 index 0000000..f9fc70b --- a/dev/null +++ b/kabc/stdaddressbook.cpp | |||
@@ -0,0 +1,249 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | #ifndef DESKTOP_VERSION | ||
28 | #include <qpe/global.h> | ||
29 | #else | ||
30 | |||
31 | #include <qdir.h> | ||
32 | #endif | ||
33 | #ifdef KAB_EMBEDDED | ||
34 | |||
35 | #include <stdlib.h> | ||
36 | #else //KAB_EMBEDDED | ||
37 | |||
38 | #include <stdlib.h> | ||
39 | |||
40 | //US#include <kresources/manager.h> | ||
41 | #include <kapplication.h> | ||
42 | #include <kcrash.h> | ||
43 | #include <ksimpleconfig.h> | ||
44 | |||
45 | |||
46 | #endif //KAB_EMBEDDED | ||
47 | |||
48 | #include "resource.h" | ||
49 | #include <kresources/manager.h> | ||
50 | #include <kdebug.h> | ||
51 | #include <klocale.h> | ||
52 | #include <kstaticdeleter.h> | ||
53 | #include <kstandarddirs.h> | ||
54 | |||
55 | #include "stdaddressbook.h" | ||
56 | |||
57 | using namespace KABC; | ||
58 | |||
59 | StdAddressBook *StdAddressBook::mSelf = 0; | ||
60 | bool StdAddressBook::mAutomaticSave = true; | ||
61 | |||
62 | static KStaticDeleter<StdAddressBook> addressBookDeleter; | ||
63 | |||
64 | QString StdAddressBook::fileName() | ||
65 | { | ||
66 | return locateLocal( "data", "kabc/std.vcf" ); | ||
67 | } | ||
68 | |||
69 | QString StdAddressBook::directoryName() | ||
70 | { | ||
71 | qDebug("StdAddressBook::directoryName() WILL FAIL OR NOT" ); | ||
72 | return locateLocal( "data", "kabc/stdvcf" ); | ||
73 | } | ||
74 | |||
75 | void StdAddressBook::handleCrash() | ||
76 | { | ||
77 | StdAddressBook::self()->cleanUp(); | ||
78 | } | ||
79 | |||
80 | StdAddressBook *StdAddressBook::self() | ||
81 | { | ||
82 | |||
83 | if ( !mSelf ) | ||
84 | { | ||
85 | QString appdir = StdAddressBook::setTempAppDir(); | ||
86 | |||
87 | kdDebug(5700) << "StdAddressBook::self()" << endl; | ||
88 | // US im am not sure why I have to use the other format here?? | ||
89 | #ifdef KAB_EMBEDDED | ||
90 | mSelf = addressBookDeleter.setObject( new StdAddressBook ); | ||
91 | #else //KAB_EMBEDDED | ||
92 | addressBookDeleter.setObject( mSelf, new StdAddressBook ); | ||
93 | #endif //KAB_EMBEDDED | ||
94 | KStandardDirs::setAppDir( appdir ); | ||
95 | } | ||
96 | |||
97 | return mSelf; | ||
98 | } | ||
99 | |||
100 | QString StdAddressBook::setTempAppDir() | ||
101 | { | ||
102 | QString appDIR = KStandardDirs::appDir(); | ||
103 | #ifdef DESKTOP_VERSION | ||
104 | QString appdir = QDir::homeDirPath(); | ||
105 | if ( appdir.right(1) == "\\" || appdir.right(1) == "/" ) | ||
106 | appdir += "kaddressbook/"; | ||
107 | else | ||
108 | appdir += "/kaddressbook/"; | ||
109 | KStandardDirs::setAppDir( QDir::convertSeparators( appdir )); | ||
110 | #else | ||
111 | KStandardDirs::setAppDir( Global::applicationFileName( "kaddressbook", "" ) ); | ||
112 | #endif | ||
113 | |||
114 | return appDIR; | ||
115 | } | ||
116 | StdAddressBook *StdAddressBook::self( bool onlyFastResources ) | ||
117 | { | ||
118 | |||
119 | if ( !mSelf ) | ||
120 | { | ||
121 | QString appdir =StdAddressBook::setTempAppDir(); | ||
122 | #ifdef KAB_EMBEDDED | ||
123 | mSelf = addressBookDeleter.setObject( new StdAddressBook( onlyFastResources ) ); | ||
124 | #else //KAB_EMBEDDED | ||
125 | addressBookDeleter.setObject( mSelf, new StdAddressBook( onlyFastResources ) ); | ||
126 | #endif //KAB_EMBEDDED | ||
127 | KStandardDirs::setAppDir( appdir ); | ||
128 | } | ||
129 | return mSelf; | ||
130 | } | ||
131 | |||
132 | StdAddressBook::StdAddressBook() | ||
133 | //US : AddressBook( "kabcrc" ) | ||
134 | : AddressBook( locateLocal( "config", "kabcrc") ) | ||
135 | { | ||
136 | |||
137 | init( false ); | ||
138 | } | ||
139 | |||
140 | StdAddressBook::StdAddressBook( bool onlyFastResources ) | ||
141 | //US : AddressBook( "kabcrc" ) | ||
142 | : AddressBook( locateLocal( "config", "kabcrc") ) | ||
143 | { | ||
144 | |||
145 | init( onlyFastResources ); | ||
146 | } | ||
147 | |||
148 | StdAddressBook::~StdAddressBook() | ||
149 | { | ||
150 | if ( mAutomaticSave ) | ||
151 | save(); | ||
152 | } | ||
153 | |||
154 | void StdAddressBook::init( bool ) | ||
155 | { | ||
156 | KRES::Manager<Resource> *manager = resourceManager(); | ||
157 | KRES::Manager<Resource>::ActiveIterator it; | ||
158 | |||
159 | for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { | ||
160 | (*it)->setAddressBook( this ); | ||
161 | if ( !(*it)->open() ) | ||
162 | error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) ); | ||
163 | } | ||
164 | |||
165 | Resource *res = standardResource(); | ||
166 | if ( !res ) { | ||
167 | res = manager->createResource( "file" ); | ||
168 | if ( res ) | ||
169 | { | ||
170 | addResource( res ); | ||
171 | } | ||
172 | else | ||
173 | kdDebug(5700) << "No resource available!!!" << endl; | ||
174 | } | ||
175 | |||
176 | setStandardResource( res ); | ||
177 | manager->writeConfig(); | ||
178 | |||
179 | load(); | ||
180 | } | ||
181 | |||
182 | bool StdAddressBook::save() | ||
183 | { | ||
184 | kdDebug(5700) << "StdAddressBook::save()" << endl; | ||
185 | |||
186 | bool ok = true; | ||
187 | AddressBook *ab = self(); | ||
188 | |||
189 | ab->deleteRemovedAddressees(); | ||
190 | |||
191 | KRES::Manager<Resource>::ActiveIterator it; | ||
192 | KRES::Manager<Resource> *manager = ab->resourceManager(); | ||
193 | for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { | ||
194 | if ( !(*it)->readOnly() && (*it)->isOpen() ) { | ||
195 | Ticket *ticket = ab->requestSaveTicket( *it ); | ||
196 | // qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() ); | ||
197 | if ( !ticket ) { | ||
198 | ab->error( i18n( "Unable to save to resource '%1'. It is locked." ) | ||
199 | .arg( (*it)->resourceName() ) ); | ||
200 | return false; | ||
201 | } | ||
202 | |||
203 | if ( !ab->save( ticket ) ) | ||
204 | ok = false; | ||
205 | } | ||
206 | } | ||
207 | |||
208 | return ok; | ||
209 | } | ||
210 | |||
211 | void StdAddressBook::close() | ||
212 | { | ||
213 | //US destructObject is not defined on my system???. Is setObject(0) the same ??? | ||
214 | #ifndef KAB_EMBEDDED | ||
215 | addressBookDeleter.destructObject(); | ||
216 | #else //KAB_EMBEDDED | ||
217 | addressBookDeleter.setObject(0); | ||
218 | #endif //KAB_EMBEDDED | ||
219 | |||
220 | } | ||
221 | |||
222 | void StdAddressBook::setAutomaticSave( bool enable ) | ||
223 | { | ||
224 | mAutomaticSave = enable; | ||
225 | } | ||
226 | |||
227 | bool StdAddressBook::automaticSave() | ||
228 | { | ||
229 | return mAutomaticSave; | ||
230 | } | ||
231 | |||
232 | // should get const for 4.X | ||
233 | Addressee StdAddressBook::whoAmI() | ||
234 | { | ||
235 | //US KConfig config( "kabcrc" ); | ||
236 | KConfig config( locateLocal("config", "kabcrc") ); | ||
237 | config.setGroup( "General" ); | ||
238 | |||
239 | return findByUid( config.readEntry( "WhoAmI" ) ); | ||
240 | } | ||
241 | |||
242 | void StdAddressBook::setWhoAmI( const Addressee &addr ) | ||
243 | { | ||
244 | //US KConfig config( "kabcrc" ); | ||
245 | KConfig config( locateLocal("config", "kabcrc") ); | ||
246 | config.setGroup( "General" ); | ||
247 | |||
248 | config.writeEntry( "WhoAmI", addr.uid() ); | ||
249 | } | ||
diff --git a/kabc/stdaddressbook.h b/kabc/stdaddressbook.h new file mode 100644 index 0000000..9ec53b0 --- a/dev/null +++ b/kabc/stdaddressbook.h | |||
@@ -0,0 +1,151 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_STDADDRESSBOOK_H | ||
29 | #define KABC_STDADDRESSBOOK_H | ||
30 | |||
31 | #include "addressbook.h" | ||
32 | |||
33 | namespace KABC { | ||
34 | |||
35 | /** | ||
36 | Standard KDE address book | ||
37 | |||
38 | This class provides access to the standard KDE address book shared by all | ||
39 | applications. | ||
40 | |||
41 | It's implemented as a singleton. Use @ref self() to get the address book | ||
42 | object. On the first self() call the address book also gets loaded. | ||
43 | |||
44 | Example: | ||
45 | |||
46 | <pre> | ||
47 | KABC::AddressBook *ab = KABC::StdAddressBook::self(); | ||
48 | |||
49 | KABC::AddressBook::Iterator it; | ||
50 | for ( it = ab->begin(); it != ab->end(); ++it ) { | ||
51 | kdDebug() << "UID=" << (*it).uid() << endl; | ||
52 | |||
53 | // do some other stuff | ||
54 | } | ||
55 | |||
56 | KABC::StdAddressBook::save(); | ||
57 | </pre> | ||
58 | */ | ||
59 | class StdAddressBook : public AddressBook | ||
60 | { | ||
61 | public: | ||
62 | |||
63 | /** | ||
64 | Destructor. | ||
65 | */ | ||
66 | ~StdAddressBook(); | ||
67 | |||
68 | /** | ||
69 | Return the standard addressbook object. It also loads slow resources. | ||
70 | It is the same as self(false); . | ||
71 | */ | ||
72 | static StdAddressBook *self(); | ||
73 | |||
74 | /** | ||
75 | This is the same as above, but with specified | ||
76 | behaviour of resource loading. | ||
77 | |||
78 | @param onlyFastResource Only resources marked as 'fast' should be loaded | ||
79 | */ | ||
80 | // FIXME for KDE4 return StdAddressBook and merge with the metod above -zecke | ||
81 | static StdAddressBook *self( bool onlyFastResources ); | ||
82 | |||
83 | /** | ||
84 | Save the standard address book to disk. | ||
85 | */ | ||
86 | static bool save(); | ||
87 | |||
88 | /** | ||
89 | Call this method in your crash handler to allow the library clean up | ||
90 | possible locks. | ||
91 | */ | ||
92 | static void handleCrash(); | ||
93 | |||
94 | /** | ||
95 | Returns the default file name for vcard-based addressbook | ||
96 | */ | ||
97 | static QString fileName(); | ||
98 | |||
99 | /** | ||
100 | Returns the default directory name for vcard-based addressbook | ||
101 | */ | ||
102 | static QString directoryName(); | ||
103 | |||
104 | /** | ||
105 | Set the automatic save property of the address book. | ||
106 | If @p enable is TRUE (default) the address book is saved at | ||
107 | destruction time otherwise you have to call @ref save() to | ||
108 | explicitely save it. | ||
109 | */ | ||
110 | static void setAutomaticSave( bool enable ); | ||
111 | |||
112 | /** | ||
113 | Closes the address book. Depending on @ref automaticSave() it will | ||
114 | save the address book first. | ||
115 | */ | ||
116 | static void close(); | ||
117 | |||
118 | /** | ||
119 | Returns whether the address book is saved at destruction time. | ||
120 | See also @ref setAutomaticSave(). | ||
121 | */ | ||
122 | static bool automaticSave(); | ||
123 | |||
124 | /** | ||
125 | Returns the contact, that is associated with the owner of the | ||
126 | address book. This contact should be used by other programs | ||
127 | to access user specific data. | ||
128 | */ | ||
129 | Addressee whoAmI(); | ||
130 | |||
131 | /** | ||
132 | Sets the users contact. See @ref whoAmI() for more information. | ||
133 | |||
134 | @param uid The uid of the users contact. | ||
135 | */ | ||
136 | void setWhoAmI( const Addressee &addr ); | ||
137 | |||
138 | protected: | ||
139 | StdAddressBook(); | ||
140 | StdAddressBook( bool onlyFastResources ); | ||
141 | |||
142 | void init( bool onlyFastResources ); | ||
143 | |||
144 | private: | ||
145 | static QString setTempAppDir(); | ||
146 | static StdAddressBook *mSelf; | ||
147 | static bool mAutomaticSave; | ||
148 | }; | ||
149 | |||
150 | } | ||
151 | #endif | ||
diff --git a/kabc/timezone.cpp b/kabc/timezone.cpp new file mode 100644 index 0000000..2018395 --- a/dev/null +++ b/kabc/timezone.cpp | |||
@@ -0,0 +1,92 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <qdatastream.h> | ||
29 | |||
30 | #include "timezone.h" | ||
31 | |||
32 | using namespace KABC; | ||
33 | |||
34 | TimeZone::TimeZone() : | ||
35 | mOffset( 0 ), mValid( false ) | ||
36 | { | ||
37 | } | ||
38 | |||
39 | TimeZone::TimeZone( int offset ) : | ||
40 | mOffset( offset ), mValid( true ) | ||
41 | { | ||
42 | } | ||
43 | |||
44 | void TimeZone::setOffset( int offset ) | ||
45 | { | ||
46 | mOffset = offset; | ||
47 | mValid = true; | ||
48 | } | ||
49 | |||
50 | int TimeZone::offset() const | ||
51 | { | ||
52 | return mOffset; | ||
53 | } | ||
54 | |||
55 | bool TimeZone::isValid() const | ||
56 | { | ||
57 | return mValid; | ||
58 | } | ||
59 | |||
60 | bool TimeZone::operator==( const TimeZone &t ) const | ||
61 | { | ||
62 | if ( !t.isValid() && !isValid() ) return true; | ||
63 | if ( !t.isValid() || !isValid() ) return false; | ||
64 | if ( t.mOffset == mOffset ) return true; | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | bool TimeZone::operator!=( const TimeZone &t ) const | ||
69 | { | ||
70 | if ( !t.isValid() && !isValid() ) return false; | ||
71 | if ( !t.isValid() || !isValid() ) return true; | ||
72 | if ( t.mOffset != mOffset ) return true; | ||
73 | return false; | ||
74 | } | ||
75 | |||
76 | QString TimeZone::asString() const | ||
77 | { | ||
78 | return QString::number( mOffset ); | ||
79 | } | ||
80 | |||
81 | QDataStream &KABC::operator<<( QDataStream &s, const TimeZone &zone ) | ||
82 | { | ||
83 | return s << zone.mOffset; | ||
84 | } | ||
85 | |||
86 | QDataStream &KABC::operator>>( QDataStream &s, TimeZone &zone ) | ||
87 | { | ||
88 | s >> zone.mOffset; | ||
89 | zone.mValid = true; | ||
90 | |||
91 | return s; | ||
92 | } | ||
diff --git a/kabc/timezone.h b/kabc/timezone.h new file mode 100644 index 0000000..8d96e03 --- a/dev/null +++ b/kabc/timezone.h | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_TIMEZONE_H | ||
29 | #define KABC_TIMEZONE_H | ||
30 | |||
31 | #include <qstring.h> | ||
32 | |||
33 | namespace KABC { | ||
34 | |||
35 | /** | ||
36 | * @short Time zone information. | ||
37 | * | ||
38 | * This class stores information about a time zone. | ||
39 | */ | ||
40 | class TimeZone | ||
41 | { | ||
42 | friend QDataStream &operator<<( QDataStream &, const TimeZone & ); | ||
43 | friend QDataStream &operator>>( QDataStream &, TimeZone & ); | ||
44 | |||
45 | public: | ||
46 | |||
47 | /** | ||
48 | * Construct invalid time zone. | ||
49 | */ | ||
50 | TimeZone(); | ||
51 | |||
52 | /** | ||
53 | * Construct time zone. | ||
54 | * | ||
55 | * @param offset Offset in minutes relative to UTC. | ||
56 | */ | ||
57 | TimeZone( int offset ); | ||
58 | |||
59 | /** | ||
60 | * Set time zone offset relative to UTC. | ||
61 | * | ||
62 | * @param offset Offset in minutes. | ||
63 | */ | ||
64 | void setOffset( int ); | ||
65 | |||
66 | /** | ||
67 | * Return offset in minutes relative to UTC. | ||
68 | */ | ||
69 | int offset() const; | ||
70 | |||
71 | /** | ||
72 | * Return, if this time zone object is valid. | ||
73 | */ | ||
74 | bool isValid() const; | ||
75 | |||
76 | bool operator==( const TimeZone & ) const; | ||
77 | bool operator!=( const TimeZone & ) const; | ||
78 | |||
79 | /** | ||
80 | * Return string representation of time zone offset. | ||
81 | */ | ||
82 | QString asString() const; | ||
83 | |||
84 | private: | ||
85 | int mOffset; // Offset in minutes | ||
86 | |||
87 | bool mValid; | ||
88 | }; | ||
89 | |||
90 | QDataStream &operator<<( QDataStream &, const TimeZone & ); | ||
91 | QDataStream &operator>>( QDataStream &, TimeZone & ); | ||
92 | |||
93 | } | ||
94 | #endif | ||
diff --git a/kabc/vcard/AdrParam.cpp b/kabc/vcard/AdrParam.cpp new file mode 100644 index 0000000..fa46499 --- a/dev/null +++ b/kabc/vcard/AdrParam.cpp | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardRToken.h> | ||
25 | #include <VCardAdrParam.h> | ||
26 | #include <VCardParam.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | AdrParam::AdrParam() | ||
31 | :Param() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | AdrParam::AdrParam(const AdrParam & x) | ||
36 | :Param(x), | ||
37 | adrTypeList_(x.adrTypeList_) | ||
38 | { | ||
39 | } | ||
40 | |||
41 | AdrParam::AdrParam(const QCString & s) | ||
42 | :Param(s) | ||
43 | { | ||
44 | } | ||
45 | |||
46 | AdrParam & | ||
47 | AdrParam::operator = (AdrParam & x) | ||
48 | { | ||
49 | if (*this == x) return *this; | ||
50 | |||
51 | adrTypeList_= x.adrTypeList(); | ||
52 | textParam_ = x.textParam(); | ||
53 | |||
54 | Param::operator = (x); | ||
55 | return *this; | ||
56 | } | ||
57 | |||
58 | AdrParam & | ||
59 | AdrParam::operator = (const QCString & s) | ||
60 | { | ||
61 | Param::operator = (s); | ||
62 | |||
63 | adrTypeList_.clear(); | ||
64 | textParam_.truncate(0); | ||
65 | |||
66 | return *this; | ||
67 | } | ||
68 | |||
69 | bool | ||
70 | AdrParam::operator == (AdrParam & x) | ||
71 | { | ||
72 | parse(); | ||
73 | |||
74 | if (!x.textParam().isEmpty()) | ||
75 | return (x.textParam_ == textParam_); | ||
76 | |||
77 | if (x.adrTypeList().count() != adrTypeList_.count()) | ||
78 | return false; | ||
79 | |||
80 | QStrListIterator it(x.adrTypeList_); | ||
81 | |||
82 | for (; it.current(); ++it) | ||
83 | if (!adrTypeList_.find(it.current())) | ||
84 | return false; | ||
85 | |||
86 | return true; | ||
87 | } | ||
88 | |||
89 | AdrParam::~AdrParam() | ||
90 | { | ||
91 | } | ||
92 | |||
93 | void | ||
94 | AdrParam::_parse() | ||
95 | { | ||
96 | adrTypeList_.clear(); | ||
97 | |||
98 | if (strRep_.left(4) != "TYPE") { | ||
99 | textParam_ = strRep_; | ||
100 | return; | ||
101 | } | ||
102 | |||
103 | if (!strRep_.contains('=')) | ||
104 | return; | ||
105 | |||
106 | RTokenise(strRep_, ",", adrTypeList_); | ||
107 | } | ||
108 | |||
109 | void | ||
110 | AdrParam::_assemble() | ||
111 | { | ||
112 | if (!textParam_.isEmpty()) { | ||
113 | strRep_ = textParam_; | ||
114 | return; | ||
115 | } | ||
116 | |||
117 | QStrListIterator it(adrTypeList_); | ||
118 | |||
119 | for (; it.current(); ++it) { | ||
120 | |||
121 | strRep_ += it.current(); | ||
122 | |||
123 | if (it.current() != adrTypeList_.last()) | ||
124 | strRep_ += ','; | ||
125 | } | ||
126 | } | ||
diff --git a/kabc/vcard/AdrValue.cpp b/kabc/vcard/AdrValue.cpp new file mode 100644 index 0000000..7ecef33 --- a/dev/null +++ b/kabc/vcard/AdrValue.cpp | |||
@@ -0,0 +1,140 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardRToken.h> | ||
25 | #include <VCardAdrValue.h> | ||
26 | #include <VCardValue.h> | ||
27 | #include <VCardDefines.h> | ||
28 | |||
29 | using namespace VCARD; | ||
30 | |||
31 | AdrValue::AdrValue() | ||
32 | :Value() | ||
33 | { | ||
34 | } | ||
35 | |||
36 | AdrValue::AdrValue(const AdrValue & x) | ||
37 | :Value(x), | ||
38 | poBox_ (x.poBox_), | ||
39 | extAddress_(x.extAddress_), | ||
40 | street_ (x.street_), | ||
41 | locality_(x.locality_), | ||
42 | region_ (x.region_), | ||
43 | postCode_(x.postCode_), | ||
44 | countryName_(x.countryName_) | ||
45 | { | ||
46 | } | ||
47 | |||
48 | AdrValue::AdrValue(const QCString & s) | ||
49 | :Value(s) | ||
50 | { | ||
51 | } | ||
52 | |||
53 | AdrValue & | ||
54 | AdrValue::operator = (AdrValue & x) | ||
55 | { | ||
56 | if (*this == x) return *this; | ||
57 | |||
58 | poBox_ = x.poBox_; | ||
59 | extAddress_= x.extAddress_; | ||
60 | street_ = x.street_; | ||
61 | locality_= x.locality_; | ||
62 | region_ = x.region_; | ||
63 | postCode_= x.postCode_; | ||
64 | countryName_= x.countryName_; | ||
65 | |||
66 | Value::operator = (x); | ||
67 | return *this; | ||
68 | } | ||
69 | |||
70 | AdrValue & | ||
71 | AdrValue::operator = (const QCString & s) | ||
72 | { | ||
73 | Value::operator = (s); | ||
74 | return *this; | ||
75 | } | ||
76 | |||
77 | bool | ||
78 | AdrValue::operator == (AdrValue & x) | ||
79 | { | ||
80 | parse(); | ||
81 | x.parse(); | ||
82 | |||
83 | return ( | ||
84 | poBox_ == x.poBox_ && | ||
85 | extAddress_ == x.extAddress_&& | ||
86 | street_ == x.street_ && | ||
87 | locality_ == x.locality_ && | ||
88 | region_ == x.region_ && | ||
89 | postCode_ == x.postCode_ && | ||
90 | countryName_== x.countryName_); | ||
91 | } | ||
92 | |||
93 | AdrValue::~AdrValue() | ||
94 | { | ||
95 | } | ||
96 | |||
97 | AdrValue * | ||
98 | AdrValue::clone() | ||
99 | { | ||
100 | return new AdrValue( *this ); | ||
101 | } | ||
102 | |||
103 | void | ||
104 | AdrValue::_parse() | ||
105 | { | ||
106 | vDebug("AdrValue::_parse()"); | ||
107 | |||
108 | QStrList l; | ||
109 | RTokenise(strRep_, ";", l); | ||
110 | |||
111 | for (unsigned int i = 0; i < l.count(); i++) { | ||
112 | |||
113 | switch (i) { | ||
114 | |||
115 | case 0: poBox_ = l.at(0);break; | ||
116 | case 1: extAddress_ = l.at(1);break; | ||
117 | case 2: street_ = l.at(2);break; | ||
118 | case 3: locality_ = l.at(3);break; | ||
119 | case 4: region_ = l.at(4);break; | ||
120 | case 5: postCode_ = l.at(5);break; | ||
121 | case 6: countryName_ = l.at(6);break; | ||
122 | default: break; | ||
123 | } | ||
124 | } | ||
125 | } | ||
126 | |||
127 | void | ||
128 | AdrValue::_assemble() | ||
129 | { | ||
130 | vDebug("AdrValue::_assemble"); | ||
131 | |||
132 | strRep_ = poBox_; | ||
133 | strRep_ += ";" +extAddress_; | ||
134 | strRep_ += ";" +street_; | ||
135 | strRep_ += ";" +locality_; | ||
136 | strRep_ += ";" +region_; | ||
137 | strRep_ += ";" +postCode_; | ||
138 | strRep_ += ";" +countryName_; | ||
139 | } | ||
140 | |||
diff --git a/kabc/vcard/AgentParam.cpp b/kabc/vcard/AgentParam.cpp new file mode 100644 index 0000000..5625e00 --- a/dev/null +++ b/kabc/vcard/AgentParam.cpp | |||
@@ -0,0 +1,103 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardAgentParam.h> | ||
25 | |||
26 | #include <VCardParam.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | AgentParam::AgentParam() | ||
31 | :Param() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | AgentParam::AgentParam(const AgentParam & x) | ||
36 | :Param(x), | ||
37 | refer_(x.refer_), | ||
38 | uri_(x.uri_) | ||
39 | { | ||
40 | } | ||
41 | |||
42 | AgentParam::AgentParam(const QCString & s) | ||
43 | :Param(s) | ||
44 | { | ||
45 | } | ||
46 | |||
47 | AgentParam & | ||
48 | AgentParam::operator = (AgentParam & x) | ||
49 | { | ||
50 | if (*this == x) return *this; | ||
51 | |||
52 | refer_= x.refer_; | ||
53 | uri_= x.uri_; | ||
54 | |||
55 | Param::operator = (x); | ||
56 | return *this; | ||
57 | } | ||
58 | |||
59 | AgentParam & | ||
60 | AgentParam::operator = (const QCString & s) | ||
61 | { | ||
62 | Param::operator = (s); | ||
63 | return *this; | ||
64 | } | ||
65 | |||
66 | bool | ||
67 | AgentParam::operator == (AgentParam & x) | ||
68 | { | ||
69 | parse(); | ||
70 | |||
71 | if (refer_) | ||
72 | return (x.refer() && uri_ == x.uri_); | ||
73 | |||
74 | return !x.refer(); | ||
75 | } | ||
76 | |||
77 | AgentParam::~AgentParam() | ||
78 | { | ||
79 | } | ||
80 | |||
81 | void | ||
82 | AgentParam::_parse() | ||
83 | { | ||
84 | if (strRep_.isEmpty()) { | ||
85 | refer_ = false; | ||
86 | return; | ||
87 | } | ||
88 | |||
89 | refer_= true; | ||
90 | uri_= strRep_; | ||
91 | } | ||
92 | |||
93 | void | ||
94 | AgentParam::_assemble() | ||
95 | { | ||
96 | if (!refer_) { | ||
97 | strRep_.truncate(0); | ||
98 | return; | ||
99 | } | ||
100 | |||
101 | strRep_ = uri_.asString(); | ||
102 | return; | ||
103 | } | ||
diff --git a/kabc/vcard/AgentValue.cpp b/kabc/vcard/AgentValue.cpp new file mode 100644 index 0000000..bccde80 --- a/dev/null +++ b/kabc/vcard/AgentValue.cpp | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardAgentValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | AgentValue::AgentValue() | ||
31 | :Value() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | AgentValue::AgentValue(const AgentValue & x) | ||
36 | :Value(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | AgentValue::AgentValue(const QCString & s) | ||
41 | :Value(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | AgentValue & | ||
46 | AgentValue::operator = (AgentValue & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Value::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | AgentValue & | ||
55 | AgentValue::operator = (const QCString & s) | ||
56 | { | ||
57 | Value::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | AgentValue::operator == (AgentValue & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | AgentValue::~AgentValue() | ||
69 | { | ||
70 | } | ||
71 | |||
72 | void | ||
73 | AgentValue::_parse() | ||
74 | { | ||
75 | } | ||
76 | |||
77 | void | ||
78 | AgentValue::_assemble() | ||
79 | { | ||
80 | } | ||
81 | |||
diff --git a/kabc/vcard/ClassValue.cpp b/kabc/vcard/ClassValue.cpp new file mode 100644 index 0000000..f01e5a6 --- a/dev/null +++ b/kabc/vcard/ClassValue.cpp | |||
@@ -0,0 +1,120 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardClassValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | #include <kdebug.h> | ||
29 | |||
30 | using namespace VCARD; | ||
31 | |||
32 | ClassValue::ClassValue() | ||
33 | :Value() | ||
34 | { | ||
35 | } | ||
36 | |||
37 | ClassValue::ClassValue(const ClassValue & x) | ||
38 | :Value(x), | ||
39 | classType_(x.classType_) | ||
40 | { | ||
41 | } | ||
42 | |||
43 | ClassValue::ClassValue(const QCString & s) | ||
44 | :Value(s) | ||
45 | { | ||
46 | } | ||
47 | |||
48 | ClassValue & | ||
49 | ClassValue::operator = (ClassValue & x) | ||
50 | { | ||
51 | if (*this == x) return *this; | ||
52 | x.parse(); | ||
53 | |||
54 | classType_ = x.classType_; | ||
55 | |||
56 | Value::operator = (x); | ||
57 | return *this; | ||
58 | } | ||
59 | |||
60 | ClassValue & | ||
61 | ClassValue::operator = (const QCString & s) | ||
62 | { | ||
63 | Value::operator = (s); | ||
64 | return *this; | ||
65 | } | ||
66 | |||
67 | bool | ||
68 | ClassValue::operator == (ClassValue & x) | ||
69 | { | ||
70 | x.parse(); | ||
71 | return ( classType_ == x.classType_ ); | ||
72 | } | ||
73 | |||
74 | ClassValue::~ClassValue() | ||
75 | { | ||
76 | } | ||
77 | |||
78 | ClassValue * | ||
79 | ClassValue::clone() | ||
80 | { | ||
81 | return new ClassValue( *this ); | ||
82 | } | ||
83 | |||
84 | void | ||
85 | ClassValue::_parse() | ||
86 | { | ||
87 | if (qstricmp(strRep_, "PUBLIC") == 0) | ||
88 | classType_ = Public; | ||
89 | |||
90 | else if (qstricmp(strRep_, "PRIVATE") == 0) | ||
91 | classType_ = Private; | ||
92 | |||
93 | else if (qstricmp(strRep_, "CONFIDENTIAL") == 0) | ||
94 | classType_ = Confidential; | ||
95 | |||
96 | else classType_ = Other; | ||
97 | } | ||
98 | |||
99 | void | ||
100 | ClassValue::_assemble() | ||
101 | { | ||
102 | switch (classType_) { | ||
103 | |||
104 | case Public: | ||
105 | strRep_ = "PUBLIC"; | ||
106 | break; | ||
107 | |||
108 | case Private: | ||
109 | strRep_ = "PRIVATE"; | ||
110 | break; | ||
111 | |||
112 | case Confidential: | ||
113 | strRep_ = "CONFIDENTIAL"; | ||
114 | break; | ||
115 | |||
116 | default: | ||
117 | break; | ||
118 | } | ||
119 | } | ||
120 | |||
diff --git a/kabc/vcard/ContentLine.cpp b/kabc/vcard/ContentLine.cpp new file mode 100644 index 0000000..6fa1a8f --- a/dev/null +++ b/kabc/vcard/ContentLine.cpp | |||
@@ -0,0 +1,289 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <qcstring.h> | ||
25 | #include <qstrlist.h> | ||
26 | #include <qregexp.h> | ||
27 | |||
28 | #include <kdebug.h> | ||
29 | |||
30 | #include <VCardAdrParam.h> | ||
31 | #include <VCardAgentParam.h> | ||
32 | #include <VCardDateParam.h> | ||
33 | #include <VCardEmailParam.h> | ||
34 | #include <VCardImageParam.h> | ||
35 | #include <VCardSourceParam.h> | ||
36 | #include <VCardTelParam.h> | ||
37 | #include <VCardTextBinParam.h> | ||
38 | #include <VCardTextParam.h> | ||
39 | |||
40 | #include <VCardAdrValue.h> | ||
41 | #include <VCardAgentValue.h> | ||
42 | #include <VCardDateValue.h> | ||
43 | #include <VCardImageValue.h> | ||
44 | #include <VCardTextValue.h> | ||
45 | #include <VCardTextBinValue.h> | ||
46 | #include <VCardLangValue.h> | ||
47 | #include <VCardNValue.h> | ||
48 | #include <VCardURIValue.h> | ||
49 | #include <VCardSoundValue.h> | ||
50 | #include <VCardClassValue.h> | ||
51 | #include <VCardFloatValue.h> | ||
52 | #include <VCardOrgValue.h> | ||
53 | #include <VCardTelValue.h> | ||
54 | #include <VCardTextListValue.h> | ||
55 | #include <VCardUTCValue.h> | ||
56 | #include <VCardGeoValue.h> | ||
57 | |||
58 | #include <VCardRToken.h> | ||
59 | #include <VCardContentLine.h> | ||
60 | |||
61 | #include <VCardEntity.h> | ||
62 | #include <VCardEnum.h> | ||
63 | #include <VCardDefines.h> | ||
64 | |||
65 | using namespace VCARD; | ||
66 | |||
67 | ContentLine::ContentLine() | ||
68 | :Entity(), | ||
69 | value_(0) | ||
70 | { | ||
71 | } | ||
72 | |||
73 | ContentLine::ContentLine(const ContentLine & x) | ||
74 | :Entity(x), | ||
75 | group_ (x.group_), | ||
76 | name_ (x.name_), | ||
77 | paramList_(x.paramList_), | ||
78 | value_(x.value_->clone()) | ||
79 | { | ||
80 | } | ||
81 | |||
82 | ContentLine::ContentLine(const QCString & s) | ||
83 | :Entity(s), | ||
84 | value_(0) | ||
85 | { | ||
86 | } | ||
87 | |||
88 | ContentLine & | ||
89 | ContentLine::operator = (ContentLine & x) | ||
90 | { | ||
91 | if (*this == x) return *this; | ||
92 | |||
93 | paramList_ = x.paramList(); | ||
94 | value_ = x.value_->clone(); | ||
95 | |||
96 | Entity::operator = (x); | ||
97 | return *this; | ||
98 | } | ||
99 | |||
100 | ContentLine & | ||
101 | ContentLine::operator = (const QCString & s) | ||
102 | { | ||
103 | Entity::operator = (s); | ||
104 | delete value_; | ||
105 | value_ = 0; | ||
106 | return *this; | ||
107 | } | ||
108 | |||
109 | bool | ||
110 | ContentLine::operator == (ContentLine & x) | ||
111 | { | ||
112 | x.parse(); | ||
113 | |||
114 | QPtrListIterator<Param> it(x.paramList()); | ||
115 | |||
116 | if (!paramList_.find(it.current())) | ||
117 | return false; | ||
118 | |||
119 | return true; | ||
120 | } | ||
121 | |||
122 | ContentLine::~ContentLine() | ||
123 | { | ||
124 | delete value_; | ||
125 | value_ = 0; | ||
126 | } | ||
127 | |||
128 | void | ||
129 | ContentLine::_parse() | ||
130 | { | ||
131 | vDebug("parse"); | ||
132 | |||
133 | // Unqote newlines | ||
134 | strRep_ = strRep_.replace( QRegExp( "\\\\n" ), "\n" ); | ||
135 | |||
136 | int split = strRep_.find(':'); | ||
137 | |||
138 | if (split == -1) { // invalid content line | ||
139 | vDebug("No ':'"); | ||
140 | return; | ||
141 | } | ||
142 | |||
143 | QCString firstPart(strRep_.left(split)); | ||
144 | QCString valuePart(strRep_.mid(split + 1)); | ||
145 | |||
146 | split = firstPart.find('.'); | ||
147 | |||
148 | if (split != -1) { | ||
149 | group_ = firstPart.left(split); | ||
150 | firstPart= firstPart.mid(split + 1); | ||
151 | } | ||
152 | |||
153 | vDebug("Group == " + group_); | ||
154 | vDebug("firstPart == " + firstPart); | ||
155 | vDebug("valuePart == " + valuePart); | ||
156 | |||
157 | // Now we have the group, the name and param list together and the value. | ||
158 | |||
159 | QStrList l; | ||
160 | |||
161 | RTokenise(firstPart, ";", l); | ||
162 | |||
163 | if (l.count() == 0) {// invalid - no name ! | ||
164 | vDebug("No name for this content line !"); | ||
165 | return; | ||
166 | } | ||
167 | |||
168 | name_ = l.at(0); | ||
169 | |||
170 | // Now we have the name, so the rest of 'l' is the params. | ||
171 | // Remove the name part. | ||
172 | l.remove(0u); | ||
173 | |||
174 | entityType_= EntityNameToEntityType(name_); | ||
175 | paramType_= EntityTypeToParamType(entityType_); | ||
176 | |||
177 | unsigned int i = 0; | ||
178 | |||
179 | // For each parameter, create a new parameter of the correct type. | ||
180 | |||
181 | QStrListIterator it(l); | ||
182 | |||
183 | for (; it.current(); ++it, i++) { | ||
184 | |||
185 | QCString str = *it; | ||
186 | |||
187 | split = str.find("="); | ||
188 | if (split < 0 ) { | ||
189 | vDebug("No '=' in paramter."); | ||
190 | continue; | ||
191 | } | ||
192 | |||
193 | QCString paraName = str.left(split); | ||
194 | QCString paraValue = str.mid(split + 1); | ||
195 | |||
196 | QStrList paraValues; | ||
197 | RTokenise(paraValue, ",", paraValues); | ||
198 | |||
199 | QStrListIterator it2( paraValues ); | ||
200 | |||
201 | for(; it2.current(); ++it2) { | ||
202 | |||
203 | Param *p = new Param; | ||
204 | p->setName( paraName ); | ||
205 | p->setValue( *it2 ); | ||
206 | |||
207 | paramList_.append(p); | ||
208 | } | ||
209 | } | ||
210 | |||
211 | // Create a new value of the correct type. | ||
212 | |||
213 | valueType_ = EntityTypeToValueType(entityType_); | ||
214 | |||
215 | //kdDebug(5710) << "valueType: " << valueType_ << endl; | ||
216 | |||
217 | switch (valueType_) { | ||
218 | |||
219 | case ValueSound: value_ = new SoundValue;break; | ||
220 | case ValueAgent: value_ = new AgentValue;break; | ||
221 | case ValueAddress: value_ = new AdrValue; break; | ||
222 | case ValueTel: value_ = new TelValue; break; | ||
223 | case ValueTextBin: value_ = new TextBinValue;break; | ||
224 | case ValueOrg: value_ = new OrgValue; break; | ||
225 | case ValueN: value_ = new NValue; break; | ||
226 | case ValueUTC: value_ = new UTCValue; break; | ||
227 | case ValueURI: value_ = new URIValue; break; | ||
228 | case ValueClass: value_ = new ClassValue;break; | ||
229 | case ValueFloat: value_ = new FloatValue;break; | ||
230 | case ValueImage: value_ = new ImageValue;break; | ||
231 | case ValueDate: value_ = new DateValue; break; | ||
232 | case ValueTextList: value_ = new TextListValue;break; | ||
233 | case ValueGeo: value_ = new GeoValue; break; | ||
234 | case ValueText: | ||
235 | case ValueUnknown: | ||
236 | default: value_ = new TextValue; break; | ||
237 | } | ||
238 | |||
239 | *value_ = valuePart; | ||
240 | } | ||
241 | |||
242 | void | ||
243 | ContentLine::_assemble() | ||
244 | { | ||
245 | vDebug("Assemble (argl) - my name is \"" + name_ + "\""); | ||
246 | strRep_.truncate(0); | ||
247 | |||
248 | QCString line; | ||
249 | |||
250 | if (!group_.isEmpty()) | ||
251 | line += group_ + '.'; | ||
252 | |||
253 | line += name_; | ||
254 | |||
255 | vDebug("Adding parameters"); | ||
256 | ParamListIterator it(paramList_); | ||
257 | |||
258 | for (; it.current(); ++it) | ||
259 | line += ";" + it.current()->asString(); | ||
260 | |||
261 | vDebug("Adding value"); | ||
262 | if (value_ != 0) | ||
263 | line += ":" + value_->asString(); | ||
264 | else | ||
265 | vDebug("No value"); | ||
266 | |||
267 | // Quote newlines | ||
268 | line = line.replace( QRegExp( "\n" ), "\\n" ); | ||
269 | |||
270 | // Fold lines longer than 72 chars | ||
271 | const int maxLen = 72; | ||
272 | uint cursor = 0; | ||
273 | while( line.length() > ( cursor + 1 ) * maxLen ) { | ||
274 | strRep_ += line.mid( cursor * maxLen, maxLen ); | ||
275 | strRep_ += "\r\n "; | ||
276 | ++cursor; | ||
277 | } | ||
278 | strRep_ += line.mid( cursor * maxLen ); | ||
279 | } | ||
280 | |||
281 | void | ||
282 | ContentLine::clear() | ||
283 | { | ||
284 | group_.truncate(0); | ||
285 | name_.truncate(0); | ||
286 | paramList_.clear(); | ||
287 | delete value_; | ||
288 | value_ = 0; | ||
289 | } | ||
diff --git a/kabc/vcard/DateParam.cpp b/kabc/vcard/DateParam.cpp new file mode 100644 index 0000000..52af089 --- a/dev/null +++ b/kabc/vcard/DateParam.cpp | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardDateParam.h> | ||
25 | |||
26 | #include <VCardParam.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | DateParam::DateParam() | ||
31 | :Param() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | DateParam::DateParam(const DateParam & x) | ||
36 | :Param(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | DateParam::DateParam(const QCString & s) | ||
41 | :Param(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | DateParam & | ||
46 | DateParam::operator = (DateParam & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Param::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | DateParam & | ||
55 | DateParam::operator = (const QCString & s) | ||
56 | { | ||
57 | Param::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | DateParam::operator == (DateParam & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | |||
66 | return false; | ||
67 | } | ||
68 | |||
69 | DateParam::~DateParam() | ||
70 | { | ||
71 | } | ||
72 | |||
73 | void | ||
74 | DateParam::_parse() | ||
75 | { | ||
76 | } | ||
77 | |||
78 | void | ||
79 | DateParam::_assemble() | ||
80 | { | ||
81 | } | ||
82 | |||
diff --git a/kabc/vcard/DateValue.cpp b/kabc/vcard/DateValue.cpp new file mode 100644 index 0000000..c5c5c85 --- a/dev/null +++ b/kabc/vcard/DateValue.cpp | |||
@@ -0,0 +1,434 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <qregexp.h> | ||
25 | |||
26 | #include <kdebug.h> | ||
27 | |||
28 | #include <VCardDefines.h> | ||
29 | #include <VCardDateValue.h> | ||
30 | #include <VCardValue.h> | ||
31 | |||
32 | using namespace VCARD; | ||
33 | |||
34 | DateValue::DateValue() | ||
35 | :Value() | ||
36 | { | ||
37 | vDebug("DateValue::DateValue()"); | ||
38 | } | ||
39 | |||
40 | DateValue::DateValue( | ||
41 | unsigned intyear, | ||
42 | unsigned intmonth, | ||
43 | unsigned intday, | ||
44 | unsigned inthour, | ||
45 | unsigned intminute, | ||
46 | unsigned intsecond, | ||
47 | double secFrac, | ||
48 | bool zonePositive, | ||
49 | unsigned intzoneHour, | ||
50 | unsigned intzoneMinute) | ||
51 | : Value (), | ||
52 | year_ (year), | ||
53 | month_ (month), | ||
54 | day_ (day), | ||
55 | hour_ (hour), | ||
56 | minute_ (minute), | ||
57 | second_ (second), | ||
58 | zoneHour_ (zoneHour), | ||
59 | zoneMinute_ (zoneMinute), | ||
60 | secFrac_ (secFrac), | ||
61 | zonePositive_(zonePositive), | ||
62 | hasTime_(true) | ||
63 | { | ||
64 | parsed_ = true; | ||
65 | assembled_ = false; | ||
66 | } | ||
67 | |||
68 | DateValue::DateValue(const QDate & d) | ||
69 | : Value (), | ||
70 | year_ (d.year()), | ||
71 | month_ (d.month()), | ||
72 | day_ (d.day()), | ||
73 | hasTime_(false) | ||
74 | { | ||
75 | parsed_ = true; | ||
76 | assembled_ = false; | ||
77 | } | ||
78 | |||
79 | DateValue::DateValue(const QDateTime & d) | ||
80 | : Value (), | ||
81 | year_ (d.date().year()), | ||
82 | month_ (d.date().month()), | ||
83 | day_ (d.date().day()), | ||
84 | hour_ (d.time().hour()), | ||
85 | minute_ (d.time().minute()), | ||
86 | second_ (d.time().second()), | ||
87 | hasTime_(true) | ||
88 | { | ||
89 | parsed_ = true; | ||
90 | assembled_ = false; | ||
91 | } | ||
92 | |||
93 | DateValue::DateValue(const DateValue & x) | ||
94 | :Value(x) | ||
95 | { | ||
96 | year_ = x.year_; | ||
97 | month_ = x.month_; | ||
98 | day_ = x.day_; | ||
99 | hour_ = x.hour_; | ||
100 | minute_ = x.minute_; | ||
101 | second_ = x.second_; | ||
102 | zoneHour_ = x.zoneHour_; | ||
103 | zoneMinute_ = x.zoneMinute_; | ||
104 | secFrac_ = x.secFrac_; | ||
105 | hasTime_ = x.hasTime_; | ||
106 | } | ||
107 | |||
108 | DateValue::DateValue(const QCString & s) | ||
109 | :Value(s) | ||
110 | { | ||
111 | } | ||
112 | |||
113 | DateValue & | ||
114 | DateValue::operator = (DateValue & x) | ||
115 | { | ||
116 | if (*this == x) return *this; | ||
117 | |||
118 | Value::operator = (x); | ||
119 | return *this; | ||
120 | } | ||
121 | |||
122 | DateValue & | ||
123 | DateValue::operator = (const QCString & s) | ||
124 | { | ||
125 | Value::operator = (s); | ||
126 | return *this; | ||
127 | } | ||
128 | |||
129 | bool | ||
130 | DateValue::operator == (DateValue & x) | ||
131 | { | ||
132 | x.parse(); | ||
133 | return false; | ||
134 | } | ||
135 | |||
136 | DateValue::~DateValue() | ||
137 | { | ||
138 | } | ||
139 | |||
140 | DateValue * | ||
141 | DateValue::clone() | ||
142 | { | ||
143 | return new DateValue( *this ); | ||
144 | } | ||
145 | |||
146 | void | ||
147 | DateValue::_parse() | ||
148 | { | ||
149 | vDebug("DateValue::_parse()"); | ||
150 | |||
151 | // date = date-full-year ["-"] date-month ["-"] date-mday | ||
152 | // time = time-hour [":"] time-minute [":"] time-second [":"] | ||
153 | // [time-secfrac] [time-zone] | ||
154 | |||
155 | int timeSep = strRep_.find('T'); | ||
156 | |||
157 | QCString dateStr; | ||
158 | QCString timeStr; | ||
159 | |||
160 | if (timeSep == -1) { | ||
161 | |||
162 | dateStr = strRep_; | ||
163 | vDebug("Has date string \"" + dateStr + "\""); | ||
164 | |||
165 | } else { | ||
166 | |||
167 | dateStr = strRep_.left(timeSep); | ||
168 | vDebug("Has date string \"" + dateStr + "\""); | ||
169 | |||
170 | timeStr = strRep_.mid(timeSep + 1); | ||
171 | vDebug("Has time string \"" + timeStr + "\""); | ||
172 | } | ||
173 | |||
174 | /////////////////////////////////////////////////////////////// DATE | ||
175 | |||
176 | dateStr.replace(QRegExp("-"), ""); | ||
177 | |||
178 | kdDebug(5710) << "dateStr: " << dateStr << endl; | ||
179 | |||
180 | year_= dateStr.left(4).toInt(); | ||
181 | month_= dateStr.mid(4, 2).toInt(); | ||
182 | day_= dateStr.right(2).toInt(); | ||
183 | |||
184 | if (timeSep == -1) { | ||
185 | hasTime_ = false; | ||
186 | return; // No time, done. | ||
187 | } | ||
188 | else | ||
189 | hasTime_ = true; | ||
190 | |||
191 | /////////////////////////////////////////////////////////////// TIME | ||
192 | |||
193 | /////////////////////////////////////////////////////////////// ZONE | ||
194 | |||
195 | int zoneSep = timeStr.find('Z'); | ||
196 | |||
197 | if (zoneSep != -1 && timeStr.length() - zoneSep > 3) { | ||
198 | |||
199 | QCString zoneStr(timeStr.mid(zoneSep + 1)); | ||
200 | vDebug("zoneStr == " + zoneStr); | ||
201 | |||
202 | zonePositive_= (zoneStr[0] == '+'); | ||
203 | zoneHour_ = zoneStr.mid(1, 2).toInt(); | ||
204 | zoneMinute_ = zoneStr.right(2).toInt(); | ||
205 | |||
206 | timeStr.remove(zoneSep, timeStr.length() - zoneSep); | ||
207 | } | ||
208 | |||
209 | //////////////////////////////////////////////////// SECOND FRACTION | ||
210 | |||
211 | int secFracSep = timeStr.findRev(','); | ||
212 | |||
213 | if (secFracSep != -1 && zoneSep != -1) { // zoneSep checked to avoid errors. | ||
214 | QCString quirkafleeg = "0." + timeStr.mid(secFracSep + 1, zoneSep); | ||
215 | secFrac_ = quirkafleeg.toDouble(); | ||
216 | } | ||
217 | |||
218 | /////////////////////////////////////////////////////////////// HMS | ||
219 | |||
220 | timeStr.replace(QRegExp(":"), ""); | ||
221 | |||
222 | hour_= timeStr.left(2).toInt(); | ||
223 | minute_= timeStr.mid(2, 2).toInt(); | ||
224 | second_= timeStr.mid(4, 2).toInt(); | ||
225 | } | ||
226 | |||
227 | void | ||
228 | DateValue::_assemble() | ||
229 | { | ||
230 | vDebug("DateValue::_assemble"); | ||
231 | |||
232 | QCString year; | ||
233 | QCString month; | ||
234 | QCString day; | ||
235 | |||
236 | year.setNum( year_ ); | ||
237 | month.setNum( month_ ); | ||
238 | day.setNum( day_ ); | ||
239 | |||
240 | if ( month.length() < 2 ) month.prepend( "0" ); | ||
241 | if ( day.length() < 2 ) day.prepend( "0" ); | ||
242 | |||
243 | strRep_ = year + '-' + month + '-' + day; | ||
244 | |||
245 | if ( hasTime_ ) { | ||
246 | QCString hour; | ||
247 | QCString minute; | ||
248 | QCString second; | ||
249 | |||
250 | hour.setNum( hour_ ); | ||
251 | minute.setNum( minute_ ); | ||
252 | second.setNum( second_ ); | ||
253 | |||
254 | if ( hour.length() < 2 ) hour.prepend( "0" ); | ||
255 | if ( minute.length() < 2 ) minute.prepend( "0" ); | ||
256 | if ( second.length() < 2 ) second.prepend( "0" ); | ||
257 | |||
258 | strRep_ += 'T' + hour + ':' + minute + ':' + second + 'Z'; | ||
259 | } | ||
260 | } | ||
261 | |||
262 | unsigned int | ||
263 | DateValue::year() | ||
264 | { | ||
265 | parse(); | ||
266 | return year_; | ||
267 | } | ||
268 | |||
269 | unsigned int | ||
270 | DateValue::month() | ||
271 | { | ||
272 | parse(); | ||
273 | return month_; | ||
274 | } | ||
275 | |||
276 | unsigned int | ||
277 | DateValue::day() | ||
278 | { | ||
279 | parse(); | ||
280 | return day_; | ||
281 | } | ||
282 | unsigned int | ||
283 | DateValue::hour() | ||
284 | { | ||
285 | parse(); | ||
286 | return hour_; | ||
287 | } | ||
288 | |||
289 | unsigned int | ||
290 | DateValue::minute() | ||
291 | { | ||
292 | parse(); | ||
293 | return minute_; | ||
294 | } | ||
295 | |||
296 | unsigned int | ||
297 | DateValue::second() | ||
298 | { | ||
299 | parse(); | ||
300 | return second_; | ||
301 | } | ||
302 | |||
303 | double | ||
304 | DateValue::secondFraction() | ||
305 | { | ||
306 | parse(); | ||
307 | return secFrac_; | ||
308 | } | ||
309 | |||
310 | bool | ||
311 | DateValue::zonePositive() | ||
312 | { | ||
313 | parse(); | ||
314 | return zonePositive_; | ||
315 | } | ||
316 | |||
317 | unsigned int | ||
318 | DateValue::zoneHour() | ||
319 | { | ||
320 | parse(); | ||
321 | return zoneHour_; | ||
322 | } | ||
323 | |||
324 | unsigned int | ||
325 | DateValue::zoneMinute() | ||
326 | { | ||
327 | parse(); | ||
328 | return zoneMinute_; | ||
329 | } | ||
330 | |||
331 | void | ||
332 | DateValue::setYear(unsigned int i) | ||
333 | { | ||
334 | year_ = i; | ||
335 | assembled_ = false; | ||
336 | } | ||
337 | |||
338 | void | ||
339 | DateValue::setMonth(unsigned int i) | ||
340 | { | ||
341 | month_ = i; | ||
342 | assembled_ = false; | ||
343 | } | ||
344 | |||
345 | void | ||
346 | DateValue::setDay(unsigned int i) | ||
347 | { | ||
348 | day_ = i; | ||
349 | assembled_ = false; | ||
350 | } | ||
351 | |||
352 | void | ||
353 | DateValue::setHour(unsigned int i) | ||
354 | { | ||
355 | hour_ = i; | ||
356 | assembled_ = false; | ||
357 | } | ||
358 | |||
359 | void | ||
360 | DateValue::setMinute(unsigned int i) | ||
361 | { | ||
362 | minute_ = i; | ||
363 | assembled_ = false; | ||
364 | } | ||
365 | |||
366 | void | ||
367 | DateValue::setSecond(unsigned int i) | ||
368 | { | ||
369 | second_ = i; | ||
370 | assembled_ = false; | ||
371 | } | ||
372 | |||
373 | void | ||
374 | DateValue::setSecondFraction(double d) | ||
375 | { | ||
376 | secFrac_ = d; | ||
377 | assembled_ = false; | ||
378 | } | ||
379 | |||
380 | void | ||
381 | DateValue::setZonePositive(bool b) | ||
382 | { | ||
383 | zonePositive_ = b; | ||
384 | assembled_ = false; | ||
385 | } | ||
386 | |||
387 | void | ||
388 | DateValue::setZoneHour(unsigned int i) | ||
389 | { | ||
390 | zoneHour_ = i; | ||
391 | assembled_ = false; | ||
392 | } | ||
393 | |||
394 | void | ||
395 | DateValue::setZoneMinute(unsigned int i) | ||
396 | { | ||
397 | zoneMinute_ = i; | ||
398 | assembled_ = false; | ||
399 | } | ||
400 | |||
401 | QDate | ||
402 | DateValue::qdate() | ||
403 | { | ||
404 | parse(); | ||
405 | QDate d(year_, month_, day_); | ||
406 | return d; | ||
407 | } | ||
408 | |||
409 | QTime | ||
410 | DateValue::qtime() | ||
411 | { | ||
412 | parse(); | ||
413 | QTime t(hour_, minute_, second_); | ||
414 | //t.setMs(1 / secFrac_); | ||
415 | return t; | ||
416 | } | ||
417 | |||
418 | QDateTime | ||
419 | DateValue::qdt() | ||
420 | { | ||
421 | parse(); | ||
422 | QDateTime dt; | ||
423 | dt.setDate(qdate()); | ||
424 | dt.setTime(qtime()); | ||
425 | return dt; | ||
426 | } | ||
427 | |||
428 | bool | ||
429 | DateValue::hasTime() | ||
430 | { | ||
431 | parse(); | ||
432 | return hasTime_; | ||
433 | } | ||
434 | |||
diff --git a/kabc/vcard/EmailParam.cpp b/kabc/vcard/EmailParam.cpp new file mode 100644 index 0000000..8c87477 --- a/dev/null +++ b/kabc/vcard/EmailParam.cpp | |||
@@ -0,0 +1,116 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardEmailParam.h> | ||
25 | #include <VCardParam.h> | ||
26 | #include <VCardDefines.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | EmailParam::EmailParam() | ||
31 | :Param() | ||
32 | { | ||
33 | vDebug("ctor"); | ||
34 | } | ||
35 | |||
36 | EmailParam::EmailParam(const EmailParam & x) | ||
37 | :Param(x), | ||
38 | emailType_(x.emailType_), | ||
39 | pref_ (x.pref_) | ||
40 | { | ||
41 | } | ||
42 | |||
43 | EmailParam::EmailParam(const QCString & s) | ||
44 | :Param(s) | ||
45 | { | ||
46 | } | ||
47 | |||
48 | EmailParam & | ||
49 | EmailParam::operator = (EmailParam & x) | ||
50 | { | ||
51 | if (*this == x) return *this; | ||
52 | |||
53 | emailType_= x.emailType(); | ||
54 | pref_ = x.pref_; | ||
55 | |||
56 | Param::operator = (x); | ||
57 | return *this; | ||
58 | } | ||
59 | |||
60 | EmailParam & | ||
61 | EmailParam::operator = (const QCString & s) | ||
62 | { | ||
63 | Param::operator = (s); | ||
64 | return *this; | ||
65 | } | ||
66 | |||
67 | bool | ||
68 | EmailParam::operator == (EmailParam & x) | ||
69 | { | ||
70 | parse(); | ||
71 | |||
72 | if (pref_) | ||
73 | return (x.pref_ && x.emailType() == emailType_); | ||
74 | |||
75 | return !x.pref(); | ||
76 | } | ||
77 | |||
78 | EmailParam::~EmailParam() | ||
79 | { | ||
80 | } | ||
81 | |||
82 | void | ||
83 | EmailParam::_parse() | ||
84 | { | ||
85 | #if 0 | ||
86 | Param::parseToList(); | ||
87 | |||
88 | SubParamListIterator it(subParamList_); | ||
89 | |||
90 | pref_ = true; | ||
91 | emailType_ = ""; | ||
92 | |||
93 | for (; it.current(); ++it) { | ||
94 | |||
95 | if (qstricmp(it.current()->name(), "TYPE") == 0) { | ||
96 | emailType_ = it.current()->value(); | ||
97 | continue; | ||
98 | } | ||
99 | |||
100 | if (qstricmp(it.current()->name(), "PREF") == 0) { | ||
101 | pref_ = true; | ||
102 | } | ||
103 | } | ||
104 | #endif | ||
105 | } | ||
106 | |||
107 | void | ||
108 | EmailParam::_assemble() | ||
109 | { | ||
110 | strRep_ = "TYPE="; | ||
111 | strRep_ += emailType_; | ||
112 | |||
113 | if (pref_) | ||
114 | strRep_ += ",PREF"; | ||
115 | } | ||
116 | |||
diff --git a/kabc/vcard/Entity.cpp b/kabc/vcard/Entity.cpp new file mode 100644 index 0000000..b7d09e0 --- a/dev/null +++ b/kabc/vcard/Entity.cpp | |||
@@ -0,0 +1,134 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardEntity.h> | ||
25 | |||
26 | using namespace VCARD; | ||
27 | |||
28 | Entity::Entity() | ||
29 | : parsed_ (false), | ||
30 | assembled_(true) | ||
31 | { | ||
32 | // empty | ||
33 | } | ||
34 | |||
35 | Entity::Entity(const Entity & e) | ||
36 | : strRep_ (e.strRep_), | ||
37 | parsed_ (e.parsed_), | ||
38 | assembled_(e.assembled_) | ||
39 | { | ||
40 | // empty | ||
41 | } | ||
42 | |||
43 | Entity::Entity(const QCString & s) | ||
44 | : strRep_ (s), | ||
45 | parsed_ (false), | ||
46 | assembled_(true) | ||
47 | { | ||
48 | // empty | ||
49 | } | ||
50 | |||
51 | Entity & | ||
52 | Entity::operator = (const Entity & e) | ||
53 | { | ||
54 | if (this == &e) return *this; | ||
55 | |||
56 | strRep_ = e.strRep_; | ||
57 | parsed_ = e.parsed_; | ||
58 | assembled_= e.assembled_; | ||
59 | |||
60 | return *this; | ||
61 | } | ||
62 | |||
63 | Entity & | ||
64 | Entity::operator = (const QCString & s) | ||
65 | { | ||
66 | strRep_ = s; | ||
67 | parsed_ = false; | ||
68 | assembled_= true; | ||
69 | |||
70 | return *this; | ||
71 | } | ||
72 | |||
73 | bool | ||
74 | Entity::operator == (Entity & e) | ||
75 | { | ||
76 | return asString() == e.asString(); | ||
77 | } | ||
78 | |||
79 | bool | ||
80 | Entity::operator != (Entity & e) | ||
81 | { | ||
82 | return !(*this == e); | ||
83 | } | ||
84 | |||
85 | bool | ||
86 | Entity::operator == (const QCString & s) | ||
87 | { | ||
88 | return asString() == s; | ||
89 | } | ||
90 | |||
91 | bool | ||
92 | Entity::operator != (const QCString & s) | ||
93 | { | ||
94 | return !(*this == s); | ||
95 | } | ||
96 | |||
97 | Entity::~Entity() | ||
98 | { | ||
99 | // empty | ||
100 | } | ||
101 | |||
102 | QCString | ||
103 | Entity::asString() | ||
104 | { | ||
105 | //vDebug("Entity::asString()"); | ||
106 | assemble(); | ||
107 | |||
108 | return strRep_; | ||
109 | } | ||
110 | |||
111 | void | ||
112 | Entity::parse() | ||
113 | { | ||
114 | //vDebug( "Entity::parse()" ); | ||
115 | |||
116 | if (!parsed_) _parse(); | ||
117 | |||
118 | parsed_ = true; | ||
119 | assembled_= false; | ||
120 | } | ||
121 | |||
122 | void | ||
123 | Entity::assemble() | ||
124 | { | ||
125 | //vDebug( "Entity::assemble()" ); | ||
126 | |||
127 | if (assembled_) return; | ||
128 | |||
129 | parse(); | ||
130 | _assemble(); | ||
131 | |||
132 | assembled_= true; | ||
133 | } | ||
134 | |||
diff --git a/kabc/vcard/Enum.cpp b/kabc/vcard/Enum.cpp new file mode 100644 index 0000000..cc48b5a --- a/dev/null +++ b/kabc/vcard/Enum.cpp | |||
@@ -0,0 +1,482 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <qcstring.h> | ||
25 | #include <ctype.h> | ||
26 | |||
27 | #include <VCardEnum.h> | ||
28 | |||
29 | using namespace VCARD; | ||
30 | |||
31 | // There are 31 possible types, not including extensions. | ||
32 | const QCString | ||
33 | VCARD::paramNames [] = | ||
34 | { | ||
35 | "NAME", | ||
36 | "PROFILE", | ||
37 | "SOURCE", | ||
38 | "FN", | ||
39 | "N", | ||
40 | "NICKNAME", | ||
41 | "PHOTO", | ||
42 | "BDAY", | ||
43 | "ADR", | ||
44 | "LABEL", | ||
45 | "TEL", | ||
46 | "EMAIL", | ||
47 | "MAILER", | ||
48 | "TZ", | ||
49 | "GEO", | ||
50 | "TITLE", | ||
51 | "ROLE", | ||
52 | "LOGO", | ||
53 | "AGENT", | ||
54 | "ORG", | ||
55 | "CATEGORIES", | ||
56 | "NOTE", | ||
57 | "PRODID", | ||
58 | "REV", | ||
59 | "SORT-STRING", | ||
60 | "SOUND", | ||
61 | "UID", | ||
62 | "URL", | ||
63 | "VERSION", | ||
64 | "CLASS", | ||
65 | "KEY" | ||
66 | }; | ||
67 | |||
68 | const ParamType | ||
69 | VCARD::paramTypesTable[] = { | ||
70 | ParamNone, // NAME | ||
71 | ParamNone, // PROFILE | ||
72 | ParamSource, // SOURCE | ||
73 | ParamText, // FN | ||
74 | ParamText, // N | ||
75 | ParamText, // NICKNAME | ||
76 | ParamImage, // PHOTO (inline/refer) | ||
77 | ParamDate, // BDAY ("VALUE = "date-time/date) | ||
78 | ParamAddrText, // ADR (adr-param/text-param) | ||
79 | ParamAddrText, // LABEL (adr-param/text-param) | ||
80 | ParamTel, // TEL | ||
81 | ParamEmail, // EMAIL | ||
82 | ParamText, // MAILER | ||
83 | ParamNone, // TZ | ||
84 | ParamNone, // GEO | ||
85 | ParamText, // TITLE | ||
86 | ParamText, // ROLE | ||
87 | ParamImage, // LOGO | ||
88 | ParamAgent, // AGENT | ||
89 | ParamText, // ORG | ||
90 | ParamText, // CATEGORIES | ||
91 | ParamText, // NOTE | ||
92 | ParamNone, // PRODID | ||
93 | ParamDate, // REV | ||
94 | ParamText, // SORT-STRING | ||
95 | ParamSound, // SOUND | ||
96 | ParamNone, // UID | ||
97 | ParamNone, // URL | ||
98 | ParamNone, // VERSION | ||
99 | ParamNone, // CLASS | ||
100 | ParamTextBin, // KEY | ||
101 | ParamTextNS // X | ||
102 | }; | ||
103 | |||
104 | ParamType | ||
105 | VCARD::EntityTypeToParamType(EntityType e) | ||
106 | { | ||
107 | ParamType t(ParamUnknown); | ||
108 | |||
109 | switch (e) { | ||
110 | |||
111 | //---------------------------------------------------------------// | ||
112 | case EntityAgent: t = ParamAgent; break; | ||
113 | //---------------------------------------------------------------// | ||
114 | case EntitySound: t = ParamSound; break; | ||
115 | //---------------------------------------------------------------// | ||
116 | case EntitySource: t = ParamSource;break; | ||
117 | //---------------------------------------------------------------// | ||
118 | case EntityTelephone: t = ParamTel; break; | ||
119 | //---------------------------------------------------------------// | ||
120 | case EntityEmail: t = ParamEmail; break; | ||
121 | //---------------------------------------------------------------// | ||
122 | case EntityKey: t = ParamTextBin;break; | ||
123 | //---------------------------------------------------------------// | ||
124 | case EntityExtension: t = ParamTextNS;break; | ||
125 | //---------------------------------------------------------------// | ||
126 | case EntityAddress: | ||
127 | case EntityLabel: t = ParamAddrText;break; | ||
128 | //---------------------------------------------------------------// | ||
129 | case EntityBirthday: | ||
130 | case EntityRevision: t = ParamDate; break; | ||
131 | //---------------------------------------------------------------// | ||
132 | case EntityPhoto: | ||
133 | case EntityLogo: t = ParamImage; break; | ||
134 | //---------------------------------------------------------------// | ||
135 | case EntityOrganisation: | ||
136 | case EntityTitle: | ||
137 | case EntityRole: | ||
138 | case EntityFullName: | ||
139 | case EntityMailer: | ||
140 | case EntityN: | ||
141 | case EntitySortString: | ||
142 | case EntityNickname: | ||
143 | case EntityCategories: | ||
144 | case EntityNote: t = ParamText; break; | ||
145 | //---------------------------------------------------------------// | ||
146 | case EntityProductID: | ||
147 | case EntityTimeZone: | ||
148 | case EntityUID: | ||
149 | case EntityURL: | ||
150 | case EntityClass: | ||
151 | case EntityGeo: | ||
152 | case EntityName: | ||
153 | case EntityVersion: | ||
154 | case EntityProfile: | ||
155 | default: t = ParamNone; break; | ||
156 | //---------------------------------------------------------------// | ||
157 | |||
158 | } | ||
159 | |||
160 | return t; | ||
161 | } | ||
162 | |||
163 | ValueType | ||
164 | VCARD::EntityTypeToValueType(EntityType e) | ||
165 | { | ||
166 | ValueType t(ValueUnknown); | ||
167 | |||
168 | switch (e) { | ||
169 | |||
170 | //---------------------------------------------------------------// | ||
171 | case EntitySound: t = ValueSound; break; | ||
172 | //---------------------------------------------------------------// | ||
173 | case EntityAgent: t = ValueAgent; break; | ||
174 | //---------------------------------------------------------------// | ||
175 | case EntityAddress: t = ValueAddress;break; | ||
176 | //---------------------------------------------------------------// | ||
177 | case EntityTelephone: t = ValueTel; break; | ||
178 | //---------------------------------------------------------------// | ||
179 | case EntityKey: t = ValueTextBin;break; | ||
180 | //---------------------------------------------------------------// | ||
181 | case EntityOrganisation: t = ValueOrg; break; | ||
182 | //---------------------------------------------------------------// | ||
183 | case EntityN: t = ValueN; break; | ||
184 | //---------------------------------------------------------------// | ||
185 | case EntityTimeZone: t = ValueUTC; break; | ||
186 | //---------------------------------------------------------------// | ||
187 | case EntityClass: t = ValueClass; break; | ||
188 | //---------------------------------------------------------------// | ||
189 | case EntityGeo: t = ValueGeo; break; | ||
190 | //---------------------------------------------------------------// | ||
191 | case EntitySource: | ||
192 | case EntityURL: t = ValueURI; break; | ||
193 | //---------------------------------------------------------------// | ||
194 | case EntityPhoto: | ||
195 | case EntityLogo: t = ValueImage; break; | ||
196 | //---------------------------------------------------------------// | ||
197 | case EntityBirthday: | ||
198 | case EntityRevision: t = ValueDate; break; | ||
199 | //---------------------------------------------------------------// | ||
200 | case EntityCategories: | ||
201 | case EntityNickname: t = ValueTextList;break; | ||
202 | //---------------------------------------------------------------// | ||
203 | case EntityLabel: | ||
204 | case EntityExtension: | ||
205 | case EntityEmail: | ||
206 | case EntityTitle: | ||
207 | case EntityRole: | ||
208 | case EntityFullName: | ||
209 | case EntityMailer: | ||
210 | case EntityProductID: | ||
211 | case EntityName: | ||
212 | case EntitySortString: | ||
213 | case EntityVersion: | ||
214 | case EntityProfile: | ||
215 | case EntityUID: | ||
216 | case EntityNote: | ||
217 | default: t = ValueText; break; | ||
218 | //---------------------------------------------------------------// | ||
219 | |||
220 | } | ||
221 | |||
222 | return t; | ||
223 | } | ||
224 | |||
225 | QCString | ||
226 | VCARD::EntityTypeToParamName(EntityType e) | ||
227 | { | ||
228 | if ( e > EntityUnknown ) e = EntityUnknown; | ||
229 | return paramNames[ int( e ) ]; | ||
230 | } | ||
231 | |||
232 | EntityType | ||
233 | VCARD::EntityNameToEntityType(const QCString & s) | ||
234 | { | ||
235 | if (s.isEmpty()) return EntityUnknown; | ||
236 | |||
237 | EntityType t(EntityUnknown); | ||
238 | |||
239 | switch (s[0]) { | ||
240 | |||
241 | case 'A': | ||
242 | if (s == "ADR") | ||
243 | t = EntityAddress; | ||
244 | else if (s == "AGENT") | ||
245 | t = EntityAgent; | ||
246 | break; | ||
247 | |||
248 | case 'B': | ||
249 | if (s == "BDAY") | ||
250 | t = EntityBirthday; | ||
251 | break; | ||
252 | |||
253 | case 'C': | ||
254 | if (s == "CATEGORIES") | ||
255 | t = EntityCategories; | ||
256 | else if (s == "CLASS") | ||
257 | t = EntityClass; | ||
258 | break; | ||
259 | |||
260 | case 'E': | ||
261 | if (s == "EMAIL") | ||
262 | t = EntityEmail; | ||
263 | break; | ||
264 | |||
265 | case 'F': | ||
266 | if (s == "FN") | ||
267 | t = EntityFullName; | ||
268 | break; | ||
269 | |||
270 | case 'G': | ||
271 | if (s == "GEO") | ||
272 | t = EntityGeo; | ||
273 | break; | ||
274 | |||
275 | case 'K': | ||
276 | if (s == "KEY") | ||
277 | t = EntityKey; | ||
278 | break; | ||
279 | |||
280 | case 'L': | ||
281 | if (s == "LABEL") | ||
282 | t = EntityLabel; | ||
283 | else if (s == "LOGO") | ||
284 | t = EntityLogo; | ||
285 | break; | ||
286 | |||
287 | case 'M': | ||
288 | if (s == "MAILER") | ||
289 | t = EntityMailer; | ||
290 | break; | ||
291 | |||
292 | case 'N': | ||
293 | if (s == "N") | ||
294 | t = EntityN; | ||
295 | else if (s == "NAME") | ||
296 | t = EntityName; | ||
297 | else if (s == "NICKNAME") | ||
298 | t = EntityNickname; | ||
299 | else if (s == "NOTE") | ||
300 | t = EntityNote; | ||
301 | break; | ||
302 | |||
303 | case 'O': | ||
304 | if (s == "ORG") | ||
305 | t = EntityOrganisation; | ||
306 | break; | ||
307 | |||
308 | case 'P': | ||
309 | if (s == "PHOTO") | ||
310 | t = EntityPhoto; | ||
311 | else if (s == "PRODID") | ||
312 | t = EntityProductID; | ||
313 | else if (s == "PROFILE") | ||
314 | t = EntityProfile; | ||
315 | break; | ||
316 | |||
317 | case 'R': | ||
318 | if (s == "REV") | ||
319 | t = EntityRevision; | ||
320 | else if (s == "ROLE") | ||
321 | t = EntityRole; | ||
322 | break; | ||
323 | |||
324 | case 'S': | ||
325 | if (s == "SORT-STRING") | ||
326 | t = EntitySortString; | ||
327 | else if (s == "SOUND") | ||
328 | t = EntitySound; | ||
329 | else if (s == "SOURCE") | ||
330 | t = EntitySource; | ||
331 | break; | ||
332 | |||
333 | case 'T': | ||
334 | if (s == "TEL") | ||
335 | t = EntityTelephone; | ||
336 | else if (s == "TITLE") | ||
337 | t = EntityTitle; | ||
338 | else if (s == "TZ") | ||
339 | t = EntityTimeZone; | ||
340 | break; | ||
341 | |||
342 | case 'U': | ||
343 | if (s == "UID") | ||
344 | t = EntityUID; | ||
345 | else if (s == "URL") | ||
346 | t = EntityURL; | ||
347 | case 'V': | ||
348 | if (s == "VERSION") | ||
349 | t = EntityVersion; | ||
350 | break; | ||
351 | |||
352 | case 'X': | ||
353 | if (s.left(2) == "X-") | ||
354 | t = EntityExtension; | ||
355 | break; | ||
356 | |||
357 | default: | ||
358 | |||
359 | t = EntityUnknown; | ||
360 | } | ||
361 | |||
362 | return t; | ||
363 | } | ||
364 | |||
365 | // The copyright notice below refers to the base64 codec functions used below, | ||
366 | // which are modified from the original sources. | ||
367 | |||
368 | /* | ||
369 | * Original version Copyright 1988 by The Leland Stanford Junior University | ||
370 | * Copyright 1998 by the University of Washington | ||
371 | * | ||
372 | * Permission to use, copy, modify, and distribute this software and its | ||
373 | * documentation for any purpose and without fee is hereby granted, provided | ||
374 | * that the above copyright notices appear in all copies and that both the | ||
375 | * above copyright notices and this permission notice appear in supporting | ||
376 | * documentation, and that the name of the University of Washington or The | ||
377 | * Leland Stanford Junior University not be used in advertising or publicity | ||
378 | * pertaining to distribution of the software without specific, written prior | ||
379 | * permission. This software is made available "as is", and | ||
380 | * THE UNIVERSITY OF WASHINGTON AND THE LELAND STANFORD JUNIOR UNIVERSITY | ||
381 | * DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD TO THIS SOFTWARE, | ||
382 | * INCLUDING WITHOUT LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND | ||
383 | * FITNESS FOR A PARTICULAR PURPOSE, AND IN NO EVENT SHALL THE UNIVERSITY OF | ||
384 | * WASHINGTON OR THE LELAND STANFORD JUNIOR UNIVERSITY BE LIABLE FOR ANY | ||
385 | * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER | ||
386 | * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF | ||
387 | * CONTRACT, TORT (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF | ||
388 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
389 | * | ||
390 | */ | ||
391 | |||
392 | static char B64[] = | ||
393 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | ||
394 | |||
395 | // the mime base64 disctionary used for decoding | ||
396 | static signed char b64dec[] = { | ||
397 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0 | ||
398 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 10 | ||
399 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 20 | ||
400 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 30 | ||
401 | -1, -1, -1,-19, -1, -1, -1,-16, -4, -4, // 40 -19 == '+' -16 == '/' | ||
402 | -4, -4, -4, -4, -4, -4, -4, -4, -1, -1, // 50 -4 == '0' | ||
403 | -1, 0, -1, -1, -1, 65, 65, 65, 65, 65, // 60 0 == '=' 65 == 'A' | ||
404 | 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, // 70 | ||
405 | 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, // 80 | ||
406 | 65, -1, -1, -1, -1, -1, -1, 71, 71, 71, // 90 71 == 'a' | ||
407 | 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, // 100 | ||
408 | 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, // 110 | ||
409 | 71, 71, 71, -1, -1, -1, -1, -1, -1, -1, // 120 | ||
410 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 130 | ||
411 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 140 | ||
412 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 150 | ||
413 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 160 | ||
414 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 170 | ||
415 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 180 | ||
416 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 190 | ||
417 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 200 | ||
418 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 210 | ||
419 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 220 | ||
420 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 230 | ||
421 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 240 | ||
422 | -1, -1, -1, -1, -1, -1, -1 // 250 | ||
423 | }; | ||
424 | |||
425 | char * | ||
426 | VCARD::decodeBase64(const char * s, unsigned long srcl, unsigned long & len) | ||
427 | { | ||
428 | register unsigned char c; | ||
429 | register unsigned long e(0); | ||
430 | len = 0; | ||
431 | unsigned const char * src = (unsigned const char *)s; | ||
432 | char * ret = new char[srcl + (srcl / 4 + 1)]; | ||
433 | register char *d = ret; | ||
434 | while (srcl--) { // Critical loop | ||
435 | c = *src++; | ||
436 | int dec = b64dec[c]; | ||
437 | if (dec == -1) continue; | ||
438 | if (c == '=') { | ||
439 | switch (e++) { | ||
440 | case 3: e = 0; break; | ||
441 | case 2: if (*src == '=') break; | ||
442 | default: delete [] ret; ret = 0; return 0;break; | ||
443 | } | ||
444 | continue; | ||
445 | } | ||
446 | c -= dec; | ||
447 | if (e == 0) { *d = c << 2; ++e; continue; } | ||
448 | switch (e) { | ||
449 | case 1: *d |= c >> 4; *++d = c << 4;break; | ||
450 | case 2: *d |= c >> 2; *++d = c << 6;break; | ||
451 | case 3: *d++ |= c; e = 0; continue; break; | ||
452 | } | ||
453 | ++e; | ||
454 | } | ||
455 | len = d - (char *)ret; | ||
456 | return ret; | ||
457 | } | ||
458 | |||
459 | |||
460 | char * | ||
461 | VCARD::encodeBase64(const char * src, unsigned long srcl, unsigned long & destl) | ||
462 | { | ||
463 | register const unsigned char *s = (unsigned char *)src; | ||
464 | register unsigned long i = ((srcl + 2) / 3) * 4; | ||
465 | destl = i += 2 * ((i / 60) + 1); | ||
466 | i = 0; | ||
467 | char * ret = new char[destl]; | ||
468 | register unsigned char *d((unsigned char *)ret); | ||
469 | while (srcl != 0) { // Critical loop | ||
470 | *d++ = B64[s[0] >> 2]; | ||
471 | *d++ = B64[((s[0] << 4) + (--srcl == 0 ? 0 : s[1] >> 4)) & 0x3f]; | ||
472 | *d++ = srcl == 0 ? '=' : | ||
473 | B64[((s[1] << 2) + (--srcl == 0 ? 0 : s[2] >> 6)) & 0x3f]; | ||
474 | *d++ = srcl == 0 ?'=' : B64[s[2] & 0x3f]; | ||
475 | if (srcl != 0) srcl--; | ||
476 | if (++i == 15) { i = 0; *d++ = '\r'; *d++ = '\n'; } | ||
477 | s += 3; | ||
478 | } | ||
479 | *d = '\r'; *++d = '\n'; *++d = '\0'; | ||
480 | return ret; | ||
481 | } | ||
482 | |||
diff --git a/kabc/vcard/FloatValue.cpp b/kabc/vcard/FloatValue.cpp new file mode 100644 index 0000000..15bb664 --- a/dev/null +++ b/kabc/vcard/FloatValue.cpp | |||
@@ -0,0 +1,120 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardFloatValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | FloatValue::FloatValue() | ||
31 | :Value() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | FloatValue::FloatValue(float f) | ||
36 | : Value(), | ||
37 | value_(f) | ||
38 | { | ||
39 | parsed_ = true; | ||
40 | } | ||
41 | |||
42 | FloatValue::FloatValue(const FloatValue & x) | ||
43 | :Value(x) | ||
44 | { | ||
45 | value_ = x.value_; | ||
46 | } | ||
47 | |||
48 | FloatValue::FloatValue(const QCString & s) | ||
49 | :Value(s) | ||
50 | { | ||
51 | } | ||
52 | |||
53 | FloatValue & | ||
54 | FloatValue::operator = (FloatValue & x) | ||
55 | { | ||
56 | if (*this == x) return *this; | ||
57 | |||
58 | x.parse(); | ||
59 | value_ = x.value_; | ||
60 | |||
61 | Value::operator = (x); | ||
62 | return *this; | ||
63 | } | ||
64 | |||
65 | FloatValue & | ||
66 | FloatValue::operator = (const QCString & s) | ||
67 | { | ||
68 | Value::operator = (s); | ||
69 | return *this; | ||
70 | } | ||
71 | |||
72 | bool | ||
73 | FloatValue::operator == (FloatValue & x) | ||
74 | { | ||
75 | x.parse(); | ||
76 | return (value_ == x.value_); | ||
77 | } | ||
78 | |||
79 | FloatValue::~FloatValue() | ||
80 | { | ||
81 | } | ||
82 | |||
83 | void | ||
84 | FloatValue::_parse() | ||
85 | { | ||
86 | bool negative(false); | ||
87 | |||
88 | if (strRep_[0] == '-' || strRep_[1] == '+') { | ||
89 | |||
90 | if (strRep_[0] == '-') | ||
91 | negative = true; | ||
92 | |||
93 | strRep_.remove(0, 1); | ||
94 | } | ||
95 | |||
96 | value_ = strRep_.toFloat(); | ||
97 | if (negative) | ||
98 | value_ = -value_; | ||
99 | } | ||
100 | |||
101 | void | ||
102 | FloatValue::_assemble() | ||
103 | { | ||
104 | strRep_ = QCString().setNum(value_); | ||
105 | } | ||
106 | |||
107 | float | ||
108 | FloatValue::value() | ||
109 | { | ||
110 | parse(); | ||
111 | return value_; | ||
112 | } | ||
113 | |||
114 | void | ||
115 | FloatValue::setValue(float f) | ||
116 | { | ||
117 | parsed_ = true; | ||
118 | value_ = f; | ||
119 | } | ||
120 | |||
diff --git a/kabc/vcard/GeoValue.cpp b/kabc/vcard/GeoValue.cpp new file mode 100644 index 0000000..e02b402 --- a/dev/null +++ b/kabc/vcard/GeoValue.cpp | |||
@@ -0,0 +1,100 @@ | |||
1 | /* | ||
2 | This file is part of libvcard. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include <VCardGeoValue.h> | ||
22 | |||
23 | #include <VCardValue.h> | ||
24 | |||
25 | #include <kdebug.h> | ||
26 | |||
27 | using namespace VCARD; | ||
28 | |||
29 | GeoValue::GeoValue() | ||
30 | :Value() | ||
31 | { | ||
32 | } | ||
33 | |||
34 | GeoValue::GeoValue(const GeoValue & x) | ||
35 | :Value(x), latitude_(x.latitude_), longitude_(x.longitude_) | ||
36 | { | ||
37 | } | ||
38 | |||
39 | GeoValue::GeoValue(const QCString & s) | ||
40 | :Value(s) | ||
41 | { | ||
42 | } | ||
43 | |||
44 | GeoValue & | ||
45 | GeoValue::operator = (GeoValue & x) | ||
46 | { | ||
47 | if (*this == x) return *this; | ||
48 | |||
49 | latitude_ = x.latitude_; | ||
50 | longitude_ = x.longitude_; | ||
51 | |||
52 | Value::operator = (x); | ||
53 | return *this; | ||
54 | } | ||
55 | |||
56 | GeoValue & | ||
57 | GeoValue::operator = (const QCString & s) | ||
58 | { | ||
59 | Value::operator = (s); | ||
60 | return *this; | ||
61 | } | ||
62 | |||
63 | bool | ||
64 | GeoValue::operator == (GeoValue & x) | ||
65 | { | ||
66 | x.parse(); | ||
67 | |||
68 | if ( latitude_ != x.latitude_ ) return false; | ||
69 | if ( longitude_ != x.longitude_ ) return false; | ||
70 | |||
71 | return true; | ||
72 | } | ||
73 | |||
74 | GeoValue::~GeoValue() | ||
75 | { | ||
76 | } | ||
77 | |||
78 | GeoValue * | ||
79 | GeoValue::clone() | ||
80 | { | ||
81 | return new GeoValue( *this ); | ||
82 | } | ||
83 | |||
84 | void | ||
85 | GeoValue::_parse() | ||
86 | { | ||
87 | int semiColon = strRep_.find( ";" ); | ||
88 | |||
89 | if ( semiColon == -1 ) // invalid | ||
90 | return; | ||
91 | |||
92 | latitude_ = strRep_.left( semiColon ).toFloat(); | ||
93 | longitude_ = strRep_.mid( semiColon + 1, strRep_.length() - semiColon ).toFloat(); | ||
94 | } | ||
95 | |||
96 | void | ||
97 | GeoValue::_assemble() | ||
98 | { | ||
99 | strRep_.sprintf( "%.6f;%.6f", latitude_, longitude_ ); | ||
100 | } | ||
diff --git a/kabc/vcard/ImageParam.cpp b/kabc/vcard/ImageParam.cpp new file mode 100644 index 0000000..c9cf6fd --- a/dev/null +++ b/kabc/vcard/ImageParam.cpp | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardImageParam.h> | ||
25 | |||
26 | #include <VCardParam.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | ImageParam::ImageParam() | ||
31 | :Param() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | ImageParam::ImageParam(const ImageParam & x) | ||
36 | :Param(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | ImageParam::ImageParam(const QCString & s) | ||
41 | :Param(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | ImageParam & | ||
46 | ImageParam::operator = (ImageParam & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Param::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | ImageParam & | ||
55 | ImageParam::operator = (const QCString & s) | ||
56 | { | ||
57 | Param::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | ImageParam::operator == (ImageParam & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | ImageParam::~ImageParam() | ||
69 | { | ||
70 | } | ||
71 | |||
72 | void | ||
73 | ImageParam::_parse() | ||
74 | { | ||
75 | } | ||
76 | |||
77 | void | ||
78 | ImageParam::_assemble() | ||
79 | { | ||
80 | } | ||
81 | |||
diff --git a/kabc/vcard/ImageValue.cpp b/kabc/vcard/ImageValue.cpp new file mode 100644 index 0000000..4630fac --- a/dev/null +++ b/kabc/vcard/ImageValue.cpp | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardImageValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | ImageValue::ImageValue() | ||
31 | :Value() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | ImageValue::ImageValue(const ImageValue & x) | ||
36 | :Value(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | ImageValue::ImageValue(const QCString & s) | ||
41 | :Value(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | ImageValue & | ||
46 | ImageValue::operator = (ImageValue & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Value::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | ImageValue & | ||
55 | ImageValue::operator = (const QCString & s) | ||
56 | { | ||
57 | Value::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | ImageValue::operator == (ImageValue & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | ImageValue::~ImageValue() | ||
69 | { | ||
70 | } | ||
71 | |||
72 | void | ||
73 | ImageValue::_parse() | ||
74 | { | ||
75 | } | ||
76 | |||
77 | void | ||
78 | ImageValue::_assemble() | ||
79 | { | ||
80 | } | ||
81 | |||
diff --git a/kabc/vcard/ImgValue.cpp b/kabc/vcard/ImgValue.cpp new file mode 100644 index 0000000..7b961f8 --- a/dev/null +++ b/kabc/vcard/ImgValue.cpp | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardImgValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | ImgValue::ImgValue() | ||
31 | :Value() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | ImgValue::ImgValue(const ImgValue & x) | ||
36 | :Value(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | ImgValue::ImgValue(const QCString & s) | ||
41 | :Value(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | ImgValue & | ||
46 | ImgValue::operator = (ImgValue & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Value::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | ImgValue & | ||
55 | ImgValue::operator = (const QCString & s) | ||
56 | { | ||
57 | Value::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | ImgValue::operator == (ImgValue & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | ImgValue::~ImgValue() | ||
69 | { | ||
70 | } | ||
71 | |||
72 | void | ||
73 | ImgValue::_parse() | ||
74 | { | ||
75 | } | ||
76 | |||
77 | void | ||
78 | ImgValue::_assemble() | ||
79 | { | ||
80 | } | ||
81 | |||
diff --git a/kabc/vcard/LangValue.cpp b/kabc/vcard/LangValue.cpp new file mode 100644 index 0000000..edf1804 --- a/dev/null +++ b/kabc/vcard/LangValue.cpp | |||
@@ -0,0 +1,127 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardRToken.h> | ||
25 | |||
26 | #include <VCardLangValue.h> | ||
27 | |||
28 | #include <VCardValue.h> | ||
29 | |||
30 | using namespace VCARD; | ||
31 | |||
32 | LangValue::LangValue() | ||
33 | :Value() | ||
34 | { | ||
35 | } | ||
36 | |||
37 | LangValue::LangValue(const LangValue & x) | ||
38 | :Value(x) | ||
39 | { | ||
40 | } | ||
41 | |||
42 | LangValue::LangValue(const QCString & s) | ||
43 | :Value(s) | ||
44 | { | ||
45 | } | ||
46 | |||
47 | LangValue & | ||
48 | LangValue::operator = (LangValue & x) | ||
49 | { | ||
50 | if (*this == x) return *this; | ||
51 | |||
52 | Value::operator = (x); | ||
53 | return *this; | ||
54 | } | ||
55 | |||
56 | LangValue & | ||
57 | LangValue::operator = (const QCString & s) | ||
58 | { | ||
59 | Value::operator = (s); | ||
60 | return *this; | ||
61 | } | ||
62 | |||
63 | bool | ||
64 | LangValue::operator == (LangValue & x) | ||
65 | { | ||
66 | x.parse(); | ||
67 | return false; | ||
68 | } | ||
69 | |||
70 | LangValue::~LangValue() | ||
71 | { | ||
72 | } | ||
73 | |||
74 | void | ||
75 | LangValue::_parse() | ||
76 | { | ||
77 | QStrList l; | ||
78 | RTokenise(strRep_, "-", l); | ||
79 | |||
80 | if (l.count() == 0) return; | ||
81 | |||
82 | primary_ = l.at(0); | ||
83 | |||
84 | l.remove(0u); | ||
85 | |||
86 | subtags_ = l; | ||
87 | } | ||
88 | |||
89 | void | ||
90 | LangValue::_assemble() | ||
91 | { | ||
92 | strRep_ = primary_; | ||
93 | |||
94 | QStrListIterator it(subtags_); | ||
95 | |||
96 | for (; it.current(); ++it) | ||
97 | strRep_ += QCString('-') + it.current(); | ||
98 | } | ||
99 | |||
100 | QCString | ||
101 | LangValue::primary() | ||
102 | { | ||
103 | parse(); | ||
104 | return primary_; | ||
105 | } | ||
106 | |||
107 | QStrList | ||
108 | LangValue::subtags() | ||
109 | { | ||
110 | parse(); | ||
111 | return subtags_; | ||
112 | } | ||
113 | |||
114 | void | ||
115 | LangValue::setPrimary(const QCString & s) | ||
116 | { | ||
117 | parse(); | ||
118 | primary_ = s; | ||
119 | } | ||
120 | |||
121 | void | ||
122 | LangValue::setSubTags(const QStrList & l) | ||
123 | { | ||
124 | parse(); | ||
125 | subtags_ = l; | ||
126 | } | ||
127 | |||
diff --git a/kabc/vcard/NValue.cpp b/kabc/vcard/NValue.cpp new file mode 100644 index 0000000..cdec621 --- a/dev/null +++ b/kabc/vcard/NValue.cpp | |||
@@ -0,0 +1,128 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <qstrlist.h> | ||
25 | |||
26 | #include <VCardRToken.h> | ||
27 | #include <VCardNValue.h> | ||
28 | #include <VCardValue.h> | ||
29 | #include <VCardDefines.h> | ||
30 | |||
31 | using namespace VCARD; | ||
32 | |||
33 | NValue::NValue() | ||
34 | :Value() | ||
35 | { | ||
36 | vDebug("ctor"); | ||
37 | } | ||
38 | |||
39 | NValue::NValue(const NValue & x) | ||
40 | :Value(x), | ||
41 | family_(x.family_), | ||
42 | given_(x.given_), | ||
43 | middle_(x.middle_), | ||
44 | prefix_(x.prefix_), | ||
45 | suffix_(x.suffix_) | ||
46 | { | ||
47 | } | ||
48 | |||
49 | NValue::NValue(const QCString & s) | ||
50 | :Value(s) | ||
51 | { | ||
52 | vDebug("ctor"); | ||
53 | } | ||
54 | |||
55 | NValue & | ||
56 | NValue::operator = (NValue & x) | ||
57 | { | ||
58 | if (*this == x) return *this; | ||
59 | |||
60 | family_= x.family_; | ||
61 | given_= x.given_; | ||
62 | middle_= x.middle_; | ||
63 | prefix_= x.prefix_; | ||
64 | suffix_= x.suffix_; | ||
65 | |||
66 | Value::operator = (x); | ||
67 | return *this; | ||
68 | } | ||
69 | |||
70 | NValue & | ||
71 | NValue::operator = (const QCString & s) | ||
72 | { | ||
73 | Value::operator = (s); | ||
74 | return *this; | ||
75 | } | ||
76 | |||
77 | bool | ||
78 | NValue::operator == (NValue & x) | ||
79 | { | ||
80 | x.parse(); | ||
81 | |||
82 | return ( | ||
83 | family_ == x.family_&& | ||
84 | given_ == x.given_&& | ||
85 | middle_ == x.middle_&& | ||
86 | prefix_ == x.prefix_&& | ||
87 | suffix_ == x.suffix_); | ||
88 | } | ||
89 | |||
90 | NValue::~NValue() | ||
91 | { | ||
92 | } | ||
93 | |||
94 | NValue * | ||
95 | NValue::clone() | ||
96 | { | ||
97 | return new NValue( *this ); | ||
98 | } | ||
99 | |||
100 | void | ||
101 | NValue::_parse() | ||
102 | { | ||
103 | QStrList l; | ||
104 | RTokenise(strRep_, ";", l); | ||
105 | |||
106 | for (unsigned int i = 0; i < l.count(); i++) { | ||
107 | |||
108 | switch (i) { | ||
109 | case 0: family_ = l.at(0);break; | ||
110 | case 1: given_ = l.at(1);break; | ||
111 | case 2: middle_ = l.at(2);break; | ||
112 | case 3: prefix_ = l.at(3);break; | ||
113 | case 4: suffix_ = l.at(4);break; | ||
114 | default: break; | ||
115 | } | ||
116 | } | ||
117 | } | ||
118 | |||
119 | void | ||
120 | NValue::_assemble() | ||
121 | { | ||
122 | strRep_ = family_; | ||
123 | strRep_ += ";" +given_; | ||
124 | strRep_ += ";" +middle_; | ||
125 | strRep_ += ";" +prefix_; | ||
126 | strRep_ += ";" +suffix_; | ||
127 | } | ||
128 | |||
diff --git a/kabc/vcard/OrgValue.cpp b/kabc/vcard/OrgValue.cpp new file mode 100644 index 0000000..c3134c8 --- a/dev/null +++ b/kabc/vcard/OrgValue.cpp | |||
@@ -0,0 +1,107 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardRToken.h> | ||
25 | |||
26 | #include <VCardOrgValue.h> | ||
27 | |||
28 | #include <VCardValue.h> | ||
29 | |||
30 | using namespace VCARD; | ||
31 | |||
32 | OrgValue::OrgValue() | ||
33 | :Value() | ||
34 | { | ||
35 | } | ||
36 | |||
37 | OrgValue::OrgValue(const OrgValue & x) | ||
38 | :Value(x) | ||
39 | { | ||
40 | } | ||
41 | |||
42 | OrgValue::OrgValue(const QCString & s) | ||
43 | :Value(s) | ||
44 | { | ||
45 | } | ||
46 | |||
47 | OrgValue & | ||
48 | OrgValue::operator = (OrgValue & x) | ||
49 | { | ||
50 | if (*this == x) return *this; | ||
51 | |||
52 | Value::operator = (x); | ||
53 | return *this; | ||
54 | } | ||
55 | |||
56 | OrgValue & | ||
57 | OrgValue::operator = (const QCString & s) | ||
58 | { | ||
59 | Value::operator = (s); | ||
60 | return *this; | ||
61 | } | ||
62 | |||
63 | bool | ||
64 | OrgValue::operator == (OrgValue & x) | ||
65 | { | ||
66 | x.parse(); | ||
67 | return false; | ||
68 | } | ||
69 | |||
70 | OrgValue::~OrgValue() | ||
71 | { | ||
72 | } | ||
73 | |||
74 | void | ||
75 | OrgValue::_parse() | ||
76 | { | ||
77 | RTokenise(strRep_, ";", valueList_); | ||
78 | } | ||
79 | |||
80 | void | ||
81 | OrgValue::_assemble() | ||
82 | { | ||
83 | bool first(true); | ||
84 | |||
85 | QStrListIterator it(valueList_); | ||
86 | |||
87 | for (; it.current(); ++it) { | ||
88 | if (!first) strRep_ += ';'; | ||
89 | strRep_ += it.current(); | ||
90 | first = false; | ||
91 | } | ||
92 | } | ||
93 | |||
94 | unsigned int | ||
95 | OrgValue::numValues() | ||
96 | { | ||
97 | parse(); | ||
98 | return valueList_.count(); | ||
99 | } | ||
100 | |||
101 | QCString | ||
102 | OrgValue::value(unsigned int i) | ||
103 | { | ||
104 | parse(); | ||
105 | return valueList_.at(i); | ||
106 | } | ||
107 | |||
diff --git a/kabc/vcard/Param.cpp b/kabc/vcard/Param.cpp new file mode 100644 index 0000000..c513613 --- a/dev/null +++ b/kabc/vcard/Param.cpp | |||
@@ -0,0 +1,129 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardParam.h> | ||
25 | |||
26 | #include <VCardEntity.h> | ||
27 | |||
28 | #include <VCardRToken.h> | ||
29 | |||
30 | using namespace VCARD; | ||
31 | |||
32 | Param::Param() | ||
33 | :Entity(), | ||
34 | name_(""), | ||
35 | value_("") | ||
36 | { | ||
37 | } | ||
38 | |||
39 | Param::Param(const Param & x) | ||
40 | :Entity(x), | ||
41 | name_(x.name_), | ||
42 | value_(x.value_) | ||
43 | { | ||
44 | } | ||
45 | |||
46 | Param::Param(const QCString & s) | ||
47 | :Entity(s), | ||
48 | name_(""), | ||
49 | value_("") | ||
50 | { | ||
51 | } | ||
52 | |||
53 | Param & | ||
54 | Param::operator = (Param & x) | ||
55 | { | ||
56 | if (*this == x) return *this; | ||
57 | |||
58 | Entity::operator = (x); | ||
59 | name_ = x.name_; | ||
60 | value_ = x.value_; | ||
61 | |||
62 | return *this; | ||
63 | } | ||
64 | |||
65 | Param & | ||
66 | Param::operator = (const QCString & s) | ||
67 | { | ||
68 | Entity::operator = (s); | ||
69 | return *this; | ||
70 | } | ||
71 | |||
72 | bool | ||
73 | Param::operator == (Param & x) | ||
74 | { | ||
75 | x.parse(); | ||
76 | return false; | ||
77 | } | ||
78 | |||
79 | Param::~Param() | ||
80 | { | ||
81 | } | ||
82 | |||
83 | void | ||
84 | Param::_parse() | ||
85 | { | ||
86 | } | ||
87 | |||
88 | void | ||
89 | Param::_assemble() | ||
90 | { | ||
91 | strRep_ = name_ + "=" + value_; | ||
92 | } | ||
93 | |||
94 | Param::Param(const QCString &name, const QCString &value) | ||
95 | :Entity(), | ||
96 | name_(name), | ||
97 | value_(value) | ||
98 | { | ||
99 | parsed_ = true; | ||
100 | assembled_ = false; | ||
101 | } | ||
102 | |||
103 | void | ||
104 | Param::setName(const QCString & name) | ||
105 | { | ||
106 | name_ = name; | ||
107 | |||
108 | assembled_ = false; | ||
109 | } | ||
110 | |||
111 | void | ||
112 | Param::setValue(const QCString & value) | ||
113 | { | ||
114 | value_ = value; | ||
115 | |||
116 | assembled_ = false; | ||
117 | } | ||
118 | |||
119 | QCString | ||
120 | Param::name() | ||
121 | { | ||
122 | return name_; | ||
123 | } | ||
124 | |||
125 | QCString | ||
126 | Param::value() | ||
127 | { | ||
128 | return value_; | ||
129 | } | ||
diff --git a/kabc/vcard/PhoneNumberValue.cpp b/kabc/vcard/PhoneNumberValue.cpp new file mode 100644 index 0000000..17b1400 --- a/dev/null +++ b/kabc/vcard/PhoneNumberValue.cpp | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardPhoneNumberValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | PhoneNumberValue::PhoneNumberValue() | ||
31 | :Value() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | PhoneNumberValue::PhoneNumberValue(const PhoneNumberValue & x) | ||
36 | :Value(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | PhoneNumberValue::PhoneNumberValue(const QCString & s) | ||
41 | :Value(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | PhoneNumberValue & | ||
46 | PhoneNumberValue::operator = (PhoneNumberValue & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Value::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | PhoneNumberValue & | ||
55 | PhoneNumberValue::operator = (const QCString & s) | ||
56 | { | ||
57 | Value::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | PhoneNumberValue::operator == (PhoneNumberValue & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | PhoneNumberValue::~PhoneNumberValue() | ||
69 | { | ||
70 | } | ||
71 | |||
72 | void | ||
73 | PhoneNumberValue::_parse() | ||
74 | { | ||
75 | } | ||
76 | |||
77 | void | ||
78 | PhoneNumberValue::_assemble() | ||
79 | { | ||
80 | } | ||
81 | |||
diff --git a/kabc/vcard/README b/kabc/vcard/README new file mode 100644 index 0000000..18a9daf --- a/dev/null +++ b/kabc/vcard/README | |||
@@ -0,0 +1,15 @@ | |||
1 | libvcard (C) 1999 Rik Hemsley <rik@kde.org> | ||
2 | Written for the KDE project. | ||
3 | |||
4 | This software is licensed under the MIT license. | ||
5 | |||
6 | A vCard 3.0 parser based on the same principles that librmm (from Empath) uses. | ||
7 | |||
8 | It's small and very fast due to parsing and assembly of object being lazy. | ||
9 | |||
10 | There is a base64 codec declared in Enum.h | ||
11 | |||
12 | Feedback welcome. | ||
13 | |||
14 | Rik <rik@kde.org> | ||
15 | |||
diff --git a/kabc/vcard/RToken.cpp b/kabc/vcard/RToken.cpp new file mode 100644 index 0000000..2a85820 --- a/dev/null +++ b/kabc/vcard/RToken.cpp | |||
@@ -0,0 +1,88 @@ | |||
1 | /* | ||
2 | |||
3 | libvcard - vCard parsing library for vCard version 3.0 | ||
4 | |||
5 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
6 | |||
7 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
8 | of this software and associated documentation files (the "Software"), to | ||
9 | deal in the Software without restriction, including without limitation the | ||
10 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
11 | sell copies of the Software, and to permit persons to whom the Software is | ||
12 | furnished to do so, subject to the following conditions: | ||
13 | |||
14 | The above copyright notice and this permission notice shall be included in | ||
15 | all copies or substantial portions of the Software. | ||
16 | |||
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
20 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
21 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
23 | */ | ||
24 | |||
25 | #include <string.h> | ||
26 | #include <stddef.h> | ||
27 | #include <qcstring.h> | ||
28 | #include <qstrlist.h> | ||
29 | |||
30 | namespace VCARD | ||
31 | { | ||
32 | |||
33 | Q_UINT32 | ||
34 | RTokenise(const char * str, const char * delim, QStrList & l) | ||
35 | { | ||
36 | // FIXME no stderr ! | ||
37 | l.clear(); | ||
38 | |||
39 | if (!delim || !str || strlen(delim) == 0 || strlen(str) == 0) return 0; | ||
40 | |||
41 | char * len = (char *)(str + strlen(str));// End of string. | ||
42 | |||
43 | register char * rstart = new char[strlen(str) + 1]; | ||
44 | register char * r = rstart; | ||
45 | |||
46 | |||
47 | register const char * i = str;// Cursor. | ||
48 | |||
49 | while (i <= len) { | ||
50 | |||
51 | if (*i == '\\') { // Escaped chars go straight through. | ||
52 | *r++ = *i++; | ||
53 | if (i <= len) | ||
54 | *r++ = *i++; | ||
55 | continue; | ||
56 | } | ||
57 | |||
58 | if (strchr(delim, *i) != 0) { | ||
59 | // We hit a delimiter. If we have some text, make a new token. | ||
60 | // This has the effect that multiple delimiters are collapsed. | ||
61 | // cs: We mustn't collapse multiple delimiters, otherwise we | ||
62 | // lose empty fields. | ||
63 | *r = '\0'; | ||
64 | // if (r != rstart) { | ||
65 | l.append(rstart); | ||
66 | // } | ||
67 | r = rstart; | ||
68 | ++i; | ||
69 | continue; | ||
70 | } | ||
71 | |||
72 | *r++ = *i++; | ||
73 | } | ||
74 | |||
75 | // Catch last token | ||
76 | //if (r != rstart) { | ||
77 | *r = '\0'; | ||
78 | l.append(rstart); | ||
79 | //} | ||
80 | |||
81 | r = 0; | ||
82 | |||
83 | delete [] rstart; | ||
84 | |||
85 | return l.count(); | ||
86 | } | ||
87 | |||
88 | } | ||
diff --git a/kabc/vcard/SoundValue.cpp b/kabc/vcard/SoundValue.cpp new file mode 100644 index 0000000..81040d1 --- a/dev/null +++ b/kabc/vcard/SoundValue.cpp | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardSoundValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | SoundValue::SoundValue() | ||
31 | :Value() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | SoundValue::SoundValue(const SoundValue & x) | ||
36 | :Value(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | SoundValue::SoundValue(const QCString & s) | ||
41 | :Value(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | SoundValue & | ||
46 | SoundValue::operator = (SoundValue & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Value::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | SoundValue & | ||
55 | SoundValue::operator = (const QCString & s) | ||
56 | { | ||
57 | Value::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | SoundValue::operator == (SoundValue & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | SoundValue::~SoundValue() | ||
69 | { | ||
70 | } | ||
71 | |||
72 | void | ||
73 | SoundValue::_parse() | ||
74 | { | ||
75 | } | ||
76 | |||
77 | void | ||
78 | SoundValue::_assemble() | ||
79 | { | ||
80 | } | ||
81 | |||
diff --git a/kabc/vcard/SourceParam.cpp b/kabc/vcard/SourceParam.cpp new file mode 100644 index 0000000..cd51cbd --- a/dev/null +++ b/kabc/vcard/SourceParam.cpp | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardSourceParam.h> | ||
25 | |||
26 | #include <VCardParam.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | SourceParam::SourceParam() | ||
31 | :Param(), | ||
32 | type_(SourceParam::TypeUnknown) | ||
33 | { | ||
34 | } | ||
35 | |||
36 | SourceParam::SourceParam(const SourceParam & x) | ||
37 | :Param(x), | ||
38 | type_(x.type_), | ||
39 | par_(x.par_), | ||
40 | val_(x.val_) | ||
41 | { | ||
42 | } | ||
43 | |||
44 | SourceParam::SourceParam(const QCString & s) | ||
45 | :Param(s), | ||
46 | type_(SourceParam::TypeUnknown) | ||
47 | { | ||
48 | } | ||
49 | |||
50 | SourceParam & | ||
51 | SourceParam::operator = (SourceParam & x) | ||
52 | { | ||
53 | if (*this == x) return *this; | ||
54 | type_= x.type(); | ||
55 | par_= x.par(); | ||
56 | val_= x.val(); | ||
57 | |||
58 | Param::operator = (x); | ||
59 | return *this; | ||
60 | } | ||
61 | |||
62 | SourceParam & | ||
63 | SourceParam::operator = (const QCString & s) | ||
64 | { | ||
65 | Param::operator = (s); | ||
66 | return *this; | ||
67 | } | ||
68 | |||
69 | bool | ||
70 | SourceParam::operator == (SourceParam & x) | ||
71 | { | ||
72 | x.parse(); | ||
73 | return false; | ||
74 | } | ||
75 | |||
76 | SourceParam::~SourceParam() | ||
77 | { | ||
78 | } | ||
79 | |||
80 | void | ||
81 | SourceParam::_parse() | ||
82 | { | ||
83 | int i = strRep_.find('='); | ||
84 | if (i == -1) // Invalid | ||
85 | return; | ||
86 | |||
87 | par_ = strRep_.left(i); | ||
88 | val_ = strRep_.right(strRep_.length() - i - 1); | ||
89 | |||
90 | if (qstricmp(par_, "VALUE") == 0 && qstricmp(val_, "uri") == 0) | ||
91 | type_ = TypeValue; | ||
92 | else if (qstricmp(par_, "CONTEXT") == 0 && qstricmp(val_, "word") == 0) | ||
93 | type_ = TypeContext; | ||
94 | else if (qstrnicmp(par_, "X-", 2) == 0) { | ||
95 | type_ = TypeX; | ||
96 | } | ||
97 | else type_ = TypeUnknown; | ||
98 | |||
99 | } | ||
100 | |||
101 | void | ||
102 | SourceParam::_assemble() | ||
103 | { | ||
104 | if (type_ == TypeValue) | ||
105 | strRep_ = "VALUE=uri"; | ||
106 | else if (type_ == TypeContext) | ||
107 | strRep_ = "CONTEXT=word"; | ||
108 | else if (type_ == TypeX) | ||
109 | strRep_ = par_ + "=" + val_; | ||
110 | else strRep_ = ""; | ||
111 | } | ||
112 | |||
diff --git a/kabc/vcard/TelParam.cpp b/kabc/vcard/TelParam.cpp new file mode 100644 index 0000000..9d9fe4d --- a/dev/null +++ b/kabc/vcard/TelParam.cpp | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardTelParam.h> | ||
25 | |||
26 | #include <VCardParam.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | TelParam::TelParam() | ||
31 | :Param() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | TelParam::TelParam(const TelParam & x) | ||
36 | :Param(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | TelParam::TelParam(const QCString & s) | ||
41 | :Param(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | TelParam & | ||
46 | TelParam::operator = (TelParam & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Param::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | TelParam & | ||
55 | TelParam::operator = (const QCString & s) | ||
56 | { | ||
57 | Param::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | TelParam::operator == (TelParam & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | TelParam::~TelParam() | ||
69 | { | ||
70 | } | ||
71 | |||
72 | void | ||
73 | TelParam::_parse() | ||
74 | { | ||
75 | } | ||
76 | |||
77 | void | ||
78 | TelParam::_assemble() | ||
79 | { | ||
80 | } | ||
81 | |||
diff --git a/kabc/vcard/TelValue.cpp b/kabc/vcard/TelValue.cpp new file mode 100644 index 0000000..349f99a --- a/dev/null +++ b/kabc/vcard/TelValue.cpp | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardTelValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | TelValue::TelValue() | ||
31 | :Value() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | TelValue::TelValue(const TelValue & x) | ||
36 | :Value(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | TelValue::TelValue(const QCString & s) | ||
41 | :Value(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | TelValue & | ||
46 | TelValue::operator = (TelValue & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Value::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | TelValue & | ||
55 | TelValue::operator = (const QCString & s) | ||
56 | { | ||
57 | Value::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | TelValue::operator == (TelValue & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | TelValue::~TelValue() | ||
69 | { | ||
70 | } | ||
71 | |||
72 | void | ||
73 | TelValue::_parse() | ||
74 | { | ||
75 | } | ||
76 | |||
77 | void | ||
78 | TelValue::_assemble() | ||
79 | { | ||
80 | } | ||
81 | |||
diff --git a/kabc/vcard/TextBinParam.cpp b/kabc/vcard/TextBinParam.cpp new file mode 100644 index 0000000..66f2946 --- a/dev/null +++ b/kabc/vcard/TextBinParam.cpp | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardTextBinParam.h> | ||
25 | |||
26 | #include <VCardParam.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | TextBinParam::TextBinParam() | ||
31 | :Param() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | TextBinParam::TextBinParam(const TextBinParam & x) | ||
36 | :Param(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | TextBinParam::TextBinParam(const QCString & s) | ||
41 | :Param(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | TextBinParam & | ||
46 | TextBinParam::operator = (TextBinParam & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Param::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | TextBinParam & | ||
55 | TextBinParam::operator = (const QCString & s) | ||
56 | { | ||
57 | Param::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | TextBinParam::operator == (TextBinParam & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | TextBinParam::~TextBinParam() | ||
69 | { | ||
70 | } | ||
71 | |||
72 | void | ||
73 | TextBinParam::_parse() | ||
74 | { | ||
75 | } | ||
76 | |||
77 | void | ||
78 | TextBinParam::_assemble() | ||
79 | { | ||
80 | } | ||
81 | |||
diff --git a/kabc/vcard/TextBinValue.cpp b/kabc/vcard/TextBinValue.cpp new file mode 100644 index 0000000..c584009 --- a/dev/null +++ b/kabc/vcard/TextBinValue.cpp | |||
@@ -0,0 +1,104 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <kmdcodec.h> | ||
25 | |||
26 | #include <VCardTextBinValue.h> | ||
27 | #include <VCardValue.h> | ||
28 | |||
29 | using namespace VCARD; | ||
30 | |||
31 | TextBinValue::TextBinValue() | ||
32 | :Value() | ||
33 | { | ||
34 | } | ||
35 | |||
36 | TextBinValue::TextBinValue(const TextBinValue & x) | ||
37 | :Value(x) | ||
38 | { | ||
39 | mIsBinary_ = x.mIsBinary_; | ||
40 | mData_ = x.mData_; | ||
41 | mUrl_ = x.mUrl_; | ||
42 | } | ||
43 | |||
44 | TextBinValue::TextBinValue(const QCString & s) | ||
45 | :Value(s) | ||
46 | { | ||
47 | } | ||
48 | |||
49 | TextBinValue & | ||
50 | TextBinValue::operator = (TextBinValue & x) | ||
51 | { | ||
52 | if (*this == x) return *this; | ||
53 | |||
54 | mIsBinary_ = x.mIsBinary_; | ||
55 | mData_ = x.mData_; | ||
56 | mUrl_ = x.mUrl_; | ||
57 | |||
58 | Value::operator = (x); | ||
59 | return *this; | ||
60 | } | ||
61 | |||
62 | TextBinValue & | ||
63 | TextBinValue::operator = (const QCString & s) | ||
64 | { | ||
65 | Value::operator = (s); | ||
66 | return *this; | ||
67 | } | ||
68 | |||
69 | bool | ||
70 | TextBinValue::operator == (TextBinValue & x) | ||
71 | { | ||
72 | x.parse(); | ||
73 | |||
74 | if ( mIsBinary_ != x.mIsBinary_ ) return false; | ||
75 | if ( mData_ != x.mData_ ) return false; | ||
76 | if ( mUrl_ != x.mUrl_ ) return false; | ||
77 | |||
78 | return true; | ||
79 | } | ||
80 | |||
81 | TextBinValue::~TextBinValue() | ||
82 | { | ||
83 | } | ||
84 | |||
85 | TextBinValue * | ||
86 | TextBinValue::clone() | ||
87 | { | ||
88 | return new TextBinValue( *this ); | ||
89 | } | ||
90 | |||
91 | void | ||
92 | TextBinValue::_parse() | ||
93 | { | ||
94 | } | ||
95 | |||
96 | void | ||
97 | TextBinValue::_assemble() | ||
98 | { | ||
99 | if ( mIsBinary_ ) { | ||
100 | strRep_ = KCodecs::base64Encode( mData_ ); | ||
101 | } else | ||
102 | strRep_ = mUrl_.utf8(); | ||
103 | } | ||
104 | |||
diff --git a/kabc/vcard/TextListValue.cpp b/kabc/vcard/TextListValue.cpp new file mode 100644 index 0000000..c4ac1e3 --- a/dev/null +++ b/kabc/vcard/TextListValue.cpp | |||
@@ -0,0 +1,107 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardRToken.h> | ||
25 | |||
26 | #include <VCardTextListValue.h> | ||
27 | |||
28 | #include <VCardValue.h> | ||
29 | |||
30 | using namespace VCARD; | ||
31 | |||
32 | TextListValue::TextListValue() | ||
33 | :Value() | ||
34 | { | ||
35 | } | ||
36 | |||
37 | TextListValue::TextListValue(const TextListValue & x) | ||
38 | :Value(x) | ||
39 | { | ||
40 | } | ||
41 | |||
42 | TextListValue::TextListValue(const QCString & s) | ||
43 | :Value(s) | ||
44 | { | ||
45 | } | ||
46 | |||
47 | TextListValue & | ||
48 | TextListValue::operator = (TextListValue & x) | ||
49 | { | ||
50 | if (*this == x) return *this; | ||
51 | |||
52 | Value::operator = (x); | ||
53 | return *this; | ||
54 | } | ||
55 | |||
56 | TextListValue & | ||
57 | TextListValue::operator = (const QCString & s) | ||
58 | { | ||
59 | Value::operator = (s); | ||
60 | return *this; | ||
61 | } | ||
62 | |||
63 | bool | ||
64 | TextListValue::operator == (TextListValue & x) | ||
65 | { | ||
66 | x.parse(); | ||
67 | return false; | ||
68 | } | ||
69 | |||
70 | TextListValue::~TextListValue() | ||
71 | { | ||
72 | } | ||
73 | |||
74 | void | ||
75 | TextListValue::_parse() | ||
76 | { | ||
77 | RTokenise(strRep_, ";", valueList_); | ||
78 | } | ||
79 | |||
80 | void | ||
81 | TextListValue::_assemble() | ||
82 | { | ||
83 | bool first(true); | ||
84 | |||
85 | QStrListIterator it(valueList_); | ||
86 | |||
87 | for (; it.current(); ++it) { | ||
88 | if (!first) strRep_ += ';'; | ||
89 | strRep_ += it.current(); | ||
90 | first = false; | ||
91 | } | ||
92 | } | ||
93 | |||
94 | unsigned int | ||
95 | TextListValue::numValues() | ||
96 | { | ||
97 | parse(); | ||
98 | return valueList_.count(); | ||
99 | } | ||
100 | |||
101 | QCString | ||
102 | TextListValue::value(unsigned int i) | ||
103 | { | ||
104 | parse(); | ||
105 | return valueList_.at(i); | ||
106 | } | ||
107 | |||
diff --git a/kabc/vcard/TextParam.cpp b/kabc/vcard/TextParam.cpp new file mode 100644 index 0000000..7c68700 --- a/dev/null +++ b/kabc/vcard/TextParam.cpp | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardTextParam.h> | ||
25 | |||
26 | #include <VCardParam.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | TextParam::TextParam() | ||
31 | :Param() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | TextParam::TextParam(const TextParam & x) | ||
36 | :Param(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | TextParam::TextParam(const QCString & s) | ||
41 | :Param(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | TextParam & | ||
46 | TextParam::operator = (TextParam & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Param::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | TextParam & | ||
55 | TextParam::operator = (const QCString & s) | ||
56 | { | ||
57 | Param::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | TextParam::operator == (TextParam & x) | ||
63 | { | ||
64 | x.parse(); | ||
65 | |||
66 | return false; | ||
67 | } | ||
68 | |||
69 | TextParam::~TextParam() | ||
70 | { | ||
71 | } | ||
72 | |||
73 | void | ||
74 | TextParam::_parse() | ||
75 | { | ||
76 | } | ||
77 | |||
78 | void | ||
79 | TextParam::_assemble() | ||
80 | { | ||
81 | } | ||
82 | |||
diff --git a/kabc/vcard/TextValue.cpp b/kabc/vcard/TextValue.cpp new file mode 100644 index 0000000..09934fa --- a/dev/null +++ b/kabc/vcard/TextValue.cpp | |||
@@ -0,0 +1,86 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardTextValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | TextValue::TextValue() | ||
31 | :Value() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | TextValue::TextValue(const TextValue & x) | ||
36 | :Value(x) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | TextValue::TextValue(const QCString & s) | ||
41 | :Value(s) | ||
42 | { | ||
43 | } | ||
44 | |||
45 | TextValue & | ||
46 | TextValue::operator = (TextValue & x) | ||
47 | { | ||
48 | if (*this == x) return *this; | ||
49 | |||
50 | Value::operator = (x); | ||
51 | return *this; | ||
52 | } | ||
53 | |||
54 | TextValue & | ||
55 | TextValue::operator = (const QCString & s) | ||
56 | { | ||
57 | Value::operator = (s); | ||
58 | return *this; | ||
59 | } | ||
60 | |||
61 | bool | ||
62 | TextValue::operator == (TextValue & x) | ||
63 | { | ||
64 | return strRep_ = x.strRep_; | ||
65 | } | ||
66 | |||
67 | TextValue::~TextValue() | ||
68 | { | ||
69 | } | ||
70 | |||
71 | TextValue * | ||
72 | TextValue::clone() | ||
73 | { | ||
74 | return new TextValue( *this ); | ||
75 | } | ||
76 | |||
77 | void | ||
78 | TextValue::_parse() | ||
79 | { | ||
80 | } | ||
81 | |||
82 | void | ||
83 | TextValue::_assemble() | ||
84 | { | ||
85 | } | ||
86 | |||
diff --git a/kabc/vcard/URIValue.cpp b/kabc/vcard/URIValue.cpp new file mode 100644 index 0000000..c1d1022 --- a/dev/null +++ b/kabc/vcard/URIValue.cpp | |||
@@ -0,0 +1,133 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardURIValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | URIValue::URIValue() | ||
31 | :Value() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | URIValue::URIValue(const QCString & scheme, const QCString & schemeSpecificPart) | ||
36 | :Value(), | ||
37 | scheme_ (scheme), | ||
38 | schemeSpecificPart_(schemeSpecificPart) | ||
39 | { | ||
40 | parsed_ = true; | ||
41 | } | ||
42 | |||
43 | URIValue::URIValue(const URIValue & x) | ||
44 | : Value (x), | ||
45 | scheme_ (x.scheme_), | ||
46 | schemeSpecificPart_(x.schemeSpecificPart_) | ||
47 | { | ||
48 | } | ||
49 | |||
50 | URIValue::URIValue(const QCString & s) | ||
51 | :Value(s) | ||
52 | { | ||
53 | } | ||
54 | |||
55 | URIValue & | ||
56 | URIValue::operator = (URIValue & x) | ||
57 | { | ||
58 | if (*this == x) return *this; | ||
59 | |||
60 | scheme_ = x.scheme_; | ||
61 | schemeSpecificPart_= x.schemeSpecificPart_; | ||
62 | |||
63 | Value::operator = (x); | ||
64 | return *this; | ||
65 | } | ||
66 | |||
67 | URIValue & | ||
68 | URIValue::operator = (const QCString & s) | ||
69 | { | ||
70 | Value::operator = (s); | ||
71 | return *this; | ||
72 | } | ||
73 | |||
74 | bool | ||
75 | URIValue::operator == (URIValue & x) | ||
76 | { | ||
77 | x.parse(); | ||
78 | return ( | ||
79 | (scheme_ == x.scheme_) && | ||
80 | (schemeSpecificPart_== x.schemeSpecificPart_)); | ||
81 | |||
82 | return false; | ||
83 | } | ||
84 | |||
85 | URIValue::~URIValue() | ||
86 | { | ||
87 | } | ||
88 | |||
89 | void | ||
90 | URIValue::_parse() | ||
91 | { | ||
92 | int split = strRep_.find(':'); | ||
93 | if (split == -1) | ||
94 | return; | ||
95 | |||
96 | scheme_ = strRep_.left(split); | ||
97 | schemeSpecificPart_ = strRep_.mid(split + 1); | ||
98 | } | ||
99 | |||
100 | void | ||
101 | URIValue::_assemble() | ||
102 | { | ||
103 | strRep_ = scheme_ + ':' + schemeSpecificPart_; | ||
104 | } | ||
105 | |||
106 | QCString | ||
107 | URIValue::scheme() | ||
108 | { | ||
109 | parse(); | ||
110 | return scheme_; | ||
111 | } | ||
112 | |||
113 | QCString | ||
114 | URIValue::schemeSpecificPart() | ||
115 | { | ||
116 | parse(); | ||
117 | return schemeSpecificPart_; | ||
118 | } | ||
119 | |||
120 | void | ||
121 | URIValue::setScheme(const QCString & s) | ||
122 | { | ||
123 | parse(); | ||
124 | scheme_ = s; | ||
125 | } | ||
126 | |||
127 | void | ||
128 | URIValue::setSchemeSpecificPart(const QCString & s) | ||
129 | { | ||
130 | parse(); | ||
131 | schemeSpecificPart_ = s; | ||
132 | } | ||
133 | |||
diff --git a/kabc/vcard/UTCValue.cpp b/kabc/vcard/UTCValue.cpp new file mode 100644 index 0000000..374306c --- a/dev/null +++ b/kabc/vcard/UTCValue.cpp | |||
@@ -0,0 +1,110 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardUTCValue.h> | ||
25 | |||
26 | #include <VCardValue.h> | ||
27 | |||
28 | using namespace VCARD; | ||
29 | |||
30 | UTCValue::UTCValue() | ||
31 | :Value() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | UTCValue::UTCValue(const UTCValue & x) | ||
36 | : Value(x),positive_(x.positive_), hour_(x.hour_), minute_(x.minute_) | ||
37 | |||
38 | { | ||
39 | } | ||
40 | |||
41 | UTCValue::UTCValue(const QCString & s) | ||
42 | :Value(s) | ||
43 | { | ||
44 | } | ||
45 | |||
46 | UTCValue & | ||
47 | UTCValue::operator = (UTCValue & x) | ||
48 | { | ||
49 | if (*this == x) return *this; | ||
50 | |||
51 | positive_ = x.positive_; | ||
52 | hour_ = x.hour_; | ||
53 | minute_ = x.minute_; | ||
54 | |||
55 | Value::operator = (x); | ||
56 | return *this; | ||
57 | } | ||
58 | |||
59 | UTCValue & | ||
60 | UTCValue::operator = (const QCString & s) | ||
61 | { | ||
62 | Value::operator = (s); | ||
63 | return *this; | ||
64 | } | ||
65 | |||
66 | bool | ||
67 | UTCValue::operator == (UTCValue & x) | ||
68 | { | ||
69 | x.parse(); | ||
70 | |||
71 | if (positive_ != x.positive_) return false; | ||
72 | if (hour_ != x.hour_) return false; | ||
73 | if (minute_ != x.minute_) return false; | ||
74 | |||
75 | return true; | ||
76 | } | ||
77 | |||
78 | UTCValue::~UTCValue() | ||
79 | { | ||
80 | } | ||
81 | |||
82 | UTCValue * | ||
83 | UTCValue::clone() | ||
84 | { | ||
85 | return new UTCValue( *this ); | ||
86 | } | ||
87 | |||
88 | void | ||
89 | UTCValue::_parse() | ||
90 | { | ||
91 | if ( strRep_.isEmpty() ) | ||
92 | return; | ||
93 | |||
94 | positive_ = ( strRep_[0] == '+' ); | ||
95 | |||
96 | int colon = strRep_.find( ':' ); | ||
97 | |||
98 | if ( colon == -1 ) // Not valid. | ||
99 | return; | ||
100 | |||
101 | hour_= strRep_.mid( 1, 2 ).toInt(); | ||
102 | minute_= strRep_.right( 2 ).toInt(); | ||
103 | } | ||
104 | |||
105 | void | ||
106 | UTCValue::_assemble() | ||
107 | { | ||
108 | strRep_.sprintf( "%c%.2i:%.2i", (positive_ ? '+' : '-'), hour_, minute_ ); | ||
109 | } | ||
110 | |||
diff --git a/kabc/vcard/VCardEntity.cpp b/kabc/vcard/VCardEntity.cpp new file mode 100644 index 0000000..0c21e2f --- a/dev/null +++ b/kabc/vcard/VCardEntity.cpp | |||
@@ -0,0 +1,119 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <qregexp.h> | ||
25 | |||
26 | #include <VCardDefines.h> | ||
27 | #include <VCardVCardEntity.h> | ||
28 | |||
29 | using namespace VCARD; | ||
30 | |||
31 | VCardEntity::VCardEntity() | ||
32 | :Entity() | ||
33 | { | ||
34 | } | ||
35 | |||
36 | VCardEntity::VCardEntity(const VCardEntity & x) | ||
37 | :Entity(x) | ||
38 | { | ||
39 | } | ||
40 | |||
41 | VCardEntity::VCardEntity(const QCString & s) | ||
42 | :Entity(s) | ||
43 | { | ||
44 | } | ||
45 | |||
46 | VCardEntity & | ||
47 | VCardEntity::operator = (VCardEntity & x) | ||
48 | { | ||
49 | if (*this == x) return *this; | ||
50 | |||
51 | Entity::operator = (x); | ||
52 | return *this; | ||
53 | } | ||
54 | |||
55 | VCardEntity & | ||
56 | VCardEntity::operator = (const QCString & s) | ||
57 | { | ||
58 | Entity::operator = (s); | ||
59 | return *this; | ||
60 | } | ||
61 | |||
62 | bool | ||
63 | VCardEntity::operator == (VCardEntity & x) | ||
64 | { | ||
65 | x.parse(); | ||
66 | return false; | ||
67 | } | ||
68 | |||
69 | VCardEntity::~VCardEntity() | ||
70 | { | ||
71 | } | ||
72 | |||
73 | void | ||
74 | VCardEntity::_parse() | ||
75 | { | ||
76 | vDebug("parse"); | ||
77 | QCString s(strRep_); | ||
78 | |||
79 | int i = s.find(QRegExp("BEGIN:VCARD", false)); | ||
80 | |||
81 | while (i != -1) { | ||
82 | |||
83 | i = s.find(QRegExp("BEGIN:VCARD", false), 11); | ||
84 | |||
85 | QCString cardStr(s.left(i)); | ||
86 | |||
87 | VCard * v = new VCard(cardStr); | ||
88 | |||
89 | cardList_.append(v); | ||
90 | |||
91 | v->parse(); | ||
92 | |||
93 | s.remove(0, i); | ||
94 | } | ||
95 | } | ||
96 | |||
97 | void | ||
98 | VCardEntity::_assemble() | ||
99 | { | ||
100 | VCardListIterator it(cardList_); | ||
101 | |||
102 | for (; it.current(); ++it) | ||
103 | strRep_ += it.current()->asString() + "\r\n"; // One CRLF for luck. | ||
104 | } | ||
105 | |||
106 | VCardList & | ||
107 | VCardEntity::cardList() | ||
108 | { | ||
109 | parse(); | ||
110 | return cardList_; | ||
111 | } | ||
112 | |||
113 | void | ||
114 | VCardEntity::setCardList(const VCardList & l) | ||
115 | { | ||
116 | parse(); | ||
117 | cardList_ = l; | ||
118 | } | ||
119 | |||
diff --git a/kabc/vcard/VCardv.cpp b/kabc/vcard/VCardv.cpp new file mode 100644 index 0000000..8d271f4 --- a/dev/null +++ b/kabc/vcard/VCardv.cpp | |||
@@ -0,0 +1,282 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <qcstring.h> | ||
25 | #include <qstrlist.h> | ||
26 | |||
27 | #include <VCardEntity.h> | ||
28 | #include <VCardVCard.h> | ||
29 | #include <VCardContentLine.h> | ||
30 | #include <VCardRToken.h> | ||
31 | |||
32 | #include <VCardDefines.h> | ||
33 | |||
34 | using namespace VCARD; | ||
35 | |||
36 | VCard::VCard() | ||
37 | :Entity() | ||
38 | { | ||
39 | } | ||
40 | |||
41 | VCard::VCard(const VCard & x) | ||
42 | :Entity(x), | ||
43 | group_(x.group_), | ||
44 | contentLineList_(x.contentLineList_) | ||
45 | { | ||
46 | } | ||
47 | |||
48 | VCard::VCard(const QCString & s) | ||
49 | :Entity(s) | ||
50 | { | ||
51 | } | ||
52 | |||
53 | VCard & | ||
54 | VCard::operator = (VCard & x) | ||
55 | { | ||
56 | if (*this == x) return *this; | ||
57 | |||
58 | group_ = x.group(); | ||
59 | contentLineList_= x.contentLineList_; | ||
60 | |||
61 | Entity::operator = (x); | ||
62 | return *this; | ||
63 | } | ||
64 | |||
65 | VCard & | ||
66 | VCard::operator = (const QCString & s) | ||
67 | { | ||
68 | Entity::operator = (s); | ||
69 | return *this; | ||
70 | } | ||
71 | |||
72 | bool | ||
73 | VCard::operator == (VCard & x) | ||
74 | { | ||
75 | x.parse(); | ||
76 | return false; | ||
77 | } | ||
78 | |||
79 | VCard::~VCard() | ||
80 | { | ||
81 | } | ||
82 | |||
83 | void | ||
84 | VCard::_parse() | ||
85 | { | ||
86 | vDebug("parse() called"); | ||
87 | QStrList l; | ||
88 | |||
89 | RTokenise(strRep_, "\r\n", l); | ||
90 | |||
91 | if (l.count() < 3) { // Invalid VCARD ! | ||
92 | vDebug("Invalid vcard"); | ||
93 | return; | ||
94 | } | ||
95 | |||
96 | // Get the first line | ||
97 | QCString beginLine = QCString(l.at(0)).stripWhiteSpace(); | ||
98 | |||
99 | vDebug("Begin line == \"" + beginLine + "\""); | ||
100 | |||
101 | // Remove extra blank lines | ||
102 | while (QCString(l.last()).isEmpty()) | ||
103 | l.remove(l.last()); | ||
104 | |||
105 | // Now we know this is the last line | ||
106 | QCString endLine = l.last(); | ||
107 | |||
108 | // Trash the first and last lines as we have seen them. | ||
109 | l.remove(0u); | ||
110 | l.remove(l.last()); | ||
111 | |||
112 | /////////////////////////////////////////////////////////////// | ||
113 | // FIRST LINE | ||
114 | |||
115 | int split = beginLine.find(':'); | ||
116 | |||
117 | if (split == -1) { // invalid, no BEGIN | ||
118 | vDebug("No split"); | ||
119 | return; | ||
120 | } | ||
121 | |||
122 | QCString firstPart(beginLine.left(split)); | ||
123 | QCString valuePart(beginLine.mid(split + 1)); | ||
124 | |||
125 | split = firstPart.find('.'); | ||
126 | |||
127 | if (split != -1) { | ||
128 | group_ = firstPart.left(split); | ||
129 | firstPart= firstPart.right(firstPart.length() - split - 1); | ||
130 | } | ||
131 | |||
132 | if (qstrnicmp(firstPart, "BEGIN", 5) != 0) { // No BEGIN ! | ||
133 | vDebug("No BEGIN"); | ||
134 | return; | ||
135 | } | ||
136 | |||
137 | if (qstrnicmp(valuePart, "VCARD", 5) != 0) { // Not a vcard ! | ||
138 | vDebug("No VCARD"); | ||
139 | return; | ||
140 | } | ||
141 | |||
142 | /////////////////////////////////////////////////////////////// | ||
143 | // CONTENT LINES | ||
144 | // | ||
145 | vDebug("Content lines"); | ||
146 | |||
147 | // Handle folded lines. | ||
148 | |||
149 | QStrList refolded; | ||
150 | |||
151 | QStrListIterator it(l); | ||
152 | |||
153 | QCString cur; | ||
154 | |||
155 | for (; it.current(); ++it) { | ||
156 | |||
157 | cur = it.current(); | ||
158 | |||
159 | ++it; | ||
160 | |||
161 | while ( | ||
162 | it.current() && | ||
163 | it.current()[0] == ' '&& | ||
164 | strlen(it.current()) != 1) | ||
165 | { | ||
166 | cur += it.current() + 1; | ||
167 | ++it; | ||
168 | } | ||
169 | |||
170 | --it; | ||
171 | |||
172 | refolded.append(cur); | ||
173 | } | ||
174 | |||
175 | QStrListIterator it2(refolded); | ||
176 | |||
177 | for (; it2.current(); ++it2) { | ||
178 | |||
179 | vDebug("New contentline using \"" + QCString(it2.current()) + "\""); | ||
180 | ContentLine * cl = new ContentLine(it2.current()); | ||
181 | |||
182 | cl->parse(); | ||
183 | |||
184 | contentLineList_.append(cl); | ||
185 | } | ||
186 | |||
187 | /////////////////////////////////////////////////////////////// | ||
188 | // LAST LINE | ||
189 | |||
190 | split = endLine.find(':'); | ||
191 | |||
192 | if (split == -1) // invalid, no END | ||
193 | return; | ||
194 | |||
195 | firstPart = endLine.left(split); | ||
196 | valuePart = endLine.right(firstPart.length() - split - 1); | ||
197 | |||
198 | split = firstPart.find('.'); | ||
199 | |||
200 | if (split != -1) { | ||
201 | group_ = firstPart.left(split); | ||
202 | firstPart= firstPart.right(firstPart.length() - split - 1); | ||
203 | } | ||
204 | |||
205 | if (qstricmp(firstPart, "END") != 0) // No END ! | ||
206 | return; | ||
207 | |||
208 | if (qstricmp(valuePart, "VCARD") != 0) // Not a vcard ! | ||
209 | return; | ||
210 | } | ||
211 | |||
212 | void | ||
213 | VCard::_assemble() | ||
214 | { | ||
215 | vDebug("Assembling vcard"); | ||
216 | strRep_ = "BEGIN:VCARD\r\n"; | ||
217 | strRep_ += "VERSION:3.0\r\n"; | ||
218 | |||
219 | QPtrListIterator<ContentLine> it(contentLineList_); | ||
220 | |||
221 | for (; it.current(); ++it) | ||
222 | strRep_ += it.current()->asString() + "\r\n"; | ||
223 | |||
224 | strRep_ += "END:VCARD\r\n"; | ||
225 | } | ||
226 | |||
227 | bool | ||
228 | VCard::has(EntityType t) | ||
229 | { | ||
230 | parse(); | ||
231 | return contentLine(t) == 0 ? false : true; | ||
232 | } | ||
233 | |||
234 | bool | ||
235 | VCard::has(const QCString & s) | ||
236 | { | ||
237 | parse(); | ||
238 | return contentLine(s) == 0 ? false : true; | ||
239 | } | ||
240 | |||
241 | void | ||
242 | VCard::add(const ContentLine & cl) | ||
243 | { | ||
244 | parse(); | ||
245 | ContentLine * c = new ContentLine(cl); | ||
246 | contentLineList_.append(c); | ||
247 | } | ||
248 | |||
249 | void | ||
250 | VCard::add(const QCString & s) | ||
251 | { | ||
252 | parse(); | ||
253 | ContentLine * c = new ContentLine(s); | ||
254 | contentLineList_.append(c); | ||
255 | } | ||
256 | |||
257 | ContentLine * | ||
258 | VCard::contentLine(EntityType t) | ||
259 | { | ||
260 | parse(); | ||
261 | QPtrListIterator<ContentLine> it(contentLineList_); | ||
262 | |||
263 | for (; it.current(); ++it) | ||
264 | if (it.current()->entityType() == t) | ||
265 | return it.current(); | ||
266 | |||
267 | return 0; | ||
268 | } | ||
269 | |||
270 | ContentLine * | ||
271 | VCard::contentLine(const QCString & s) | ||
272 | { | ||
273 | parse(); | ||
274 | QPtrListIterator<ContentLine> it(contentLineList_); | ||
275 | |||
276 | for (; it.current(); ++it) | ||
277 | if (it.current()->entityType() == EntityNameToEntityType(s)) | ||
278 | return it.current(); | ||
279 | |||
280 | return 0; | ||
281 | } | ||
282 | |||
diff --git a/kabc/vcard/Value.cpp b/kabc/vcard/Value.cpp new file mode 100644 index 0000000..1978af2 --- a/dev/null +++ b/kabc/vcard/Value.cpp | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #include <VCardEntity.h> | ||
25 | #include <VCardValue.h> | ||
26 | |||
27 | using namespace VCARD; | ||
28 | |||
29 | Value::Value() | ||
30 | :Entity() | ||
31 | { | ||
32 | } | ||
33 | |||
34 | Value::Value(const Value & x) | ||
35 | :Entity(x) | ||
36 | { | ||
37 | } | ||
38 | |||
39 | Value::Value(const QCString & s) | ||
40 | :Entity(s) | ||
41 | { | ||
42 | } | ||
43 | |||
44 | Value & | ||
45 | Value::operator = (Value & x) | ||
46 | { | ||
47 | if (*this == x) return *this; | ||
48 | |||
49 | Entity::operator = (x); | ||
50 | return *this; | ||
51 | } | ||
52 | |||
53 | Value & | ||
54 | Value::operator = (const QCString & s) | ||
55 | { | ||
56 | Entity::operator = (s); | ||
57 | return *this; | ||
58 | } | ||
59 | |||
60 | bool | ||
61 | Value::operator == (Value & x) | ||
62 | { | ||
63 | x.parse(); | ||
64 | return false; | ||
65 | } | ||
66 | |||
67 | Value::~Value() | ||
68 | { | ||
69 | } | ||
70 | |||
71 | void | ||
72 | Value::_parse() | ||
73 | { | ||
74 | } | ||
75 | |||
76 | void | ||
77 | Value::_assemble() | ||
78 | { | ||
79 | //USvDebug("Value::_assemble()"); | ||
80 | qDebug("Value::_assemble()"); | ||
81 | } | ||
82 | |||
diff --git a/kabc/vcard/include/VCard.h b/kabc/vcard/include/VCard.h new file mode 100644 index 0000000..17b50e8 --- a/dev/null +++ b/kabc/vcard/include/VCard.h | |||
@@ -0,0 +1,43 @@ | |||
1 | #ifndef VCARD_H | ||
2 | #define VCARD_H | ||
3 | |||
4 | #include "VCardAdrParam.h" | ||
5 | #include "VCardAdrValue.h" | ||
6 | #include "VCardAgentParam.h" | ||
7 | #include "VCardAgentValue.h" | ||
8 | #include "VCardClassValue.h" | ||
9 | #include "VCardContentLine.h" | ||
10 | #include "VCardDateParam.h" | ||
11 | #include "VCardDateValue.h" | ||
12 | #include "VCardDefines.h" | ||
13 | #include "VCardEmailParam.h" | ||
14 | #include "VCardEntity.h" | ||
15 | #include "VCardEnum.h" | ||
16 | #include "VCardFloatValue.h" | ||
17 | #include "VCardGeoValue.h" | ||
18 | #include "VCardGroup.h" | ||
19 | #include "VCardImageParam.h" | ||
20 | #include "VCardImageValue.h" | ||
21 | #include "VCardImgValue.h" | ||
22 | #include "VCardLangValue.h" | ||
23 | #include "VCardNValue.h" | ||
24 | #include "VCardOrgValue.h" | ||
25 | #include "VCardParam.h" | ||
26 | #include "VCardPhoneNumberValue.h" | ||
27 | #include "VCardRToken.h" | ||
28 | #include "VCardSoundValue.h" | ||
29 | #include "VCardSourceParam.h" | ||
30 | #include "VCardTelParam.h" | ||
31 | #include "VCardTelValue.h" | ||
32 | #include "VCardTextBinParam.h" | ||
33 | #include "VCardTextBinValue.h" | ||
34 | #include "VCardTextListValue.h" | ||
35 | #include "VCardTextParam.h" | ||
36 | #include "VCardTextValue.h" | ||
37 | #include "VCardURIValue.h" | ||
38 | #include "VCardUTCValue.h" | ||
39 | #include "VCardVCard.h" | ||
40 | #include "VCardVCardEntity.h" | ||
41 | #include "VCardValue.h" | ||
42 | |||
43 | #endif | ||
diff --git a/kabc/vcard/include/VCardAdrParam.h b/kabc/vcard/include/VCardAdrParam.h new file mode 100644 index 0000000..89dcb64 --- a/dev/null +++ b/kabc/vcard/include/VCardAdrParam.h | |||
@@ -0,0 +1,64 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef ADRPARAM_H | ||
25 | #define ADRPARAM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | #include <qstrlist.h> | ||
29 | |||
30 | #include <VCardParam.h> | ||
31 | |||
32 | namespace VCARD | ||
33 | { | ||
34 | |||
35 | class AdrParam : public Param | ||
36 | { | ||
37 | |||
38 | #include "AdrParam-generated.h" | ||
39 | |||
40 | QStrList adrTypeList() | ||
41 | { parse(); return adrTypeList_; } | ||
42 | |||
43 | QCString textParam() | ||
44 | { parse(); return textParam_; } | ||
45 | |||
46 | void setAdrTypeList(const QStrList & l) | ||
47 | { adrTypeList_ = l; assembled_ = false; } | ||
48 | |||
49 | void setTextParam(const QCString & s) | ||
50 | { textParam_ = s; assembled_ = false; } | ||
51 | |||
52 | enum AdrType { | ||
53 | AdrDom, AdrIntl, AdrPostal, AdrParcel, AdrHome, AdrWork, AdrPref, | ||
54 | AdrIANA, AdrX | ||
55 | }; | ||
56 | |||
57 | private: | ||
58 | |||
59 | QStrListadrTypeList_; | ||
60 | QCStringtextParam_; | ||
61 | }; | ||
62 | } | ||
63 | |||
64 | #endif | ||
diff --git a/kabc/vcard/include/VCardAdrValue.h b/kabc/vcard/include/VCardAdrValue.h new file mode 100644 index 0000000..0731924 --- a/dev/null +++ b/kabc/vcard/include/VCardAdrValue.h | |||
@@ -0,0 +1,83 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef ADRVALUE_H | ||
25 | #define ADRVALUE_H | ||
26 | |||
27 | #include <qstrlist.h> | ||
28 | #include <VCardValue.h> | ||
29 | |||
30 | namespace VCARD | ||
31 | { | ||
32 | |||
33 | class AdrValue : public Value | ||
34 | { | ||
35 | |||
36 | #include "AdrValue-generated.h" | ||
37 | |||
38 | AdrValue *clone(); | ||
39 | |||
40 | void setPOBox(const QCString & s) | ||
41 | { poBox_ = s; assembled_ = false; } | ||
42 | |||
43 | void setExtAddress(const QCString & s) | ||
44 | { extAddress_ = s; assembled_ = false; } | ||
45 | |||
46 | void setStreet(const QCString & s) | ||
47 | { street_ = s; assembled_ = false; } | ||
48 | |||
49 | void setLocality(const QCString & s) | ||
50 | { locality_ = s; assembled_ = false; } | ||
51 | |||
52 | void setRegion(const QCString & s) | ||
53 | { region_ = s; assembled_ = false; } | ||
54 | |||
55 | void setPostCode(const QCString & s) | ||
56 | { postCode_ = s; assembled_ = false; } | ||
57 | |||
58 | void setCountryName(const QCString & s) | ||
59 | { countryName_ = s; assembled_ = false; } | ||
60 | |||
61 | QCString poBox() { parse(); return poBox_;} | ||
62 | QCString extAddress() { parse(); return extAddress_;} | ||
63 | QCString street() { parse(); return street_;} | ||
64 | QCString locality() { parse(); return locality_;} | ||
65 | QCString region() { parse(); return region_;} | ||
66 | QCString postCode() { parse(); return postCode_;} | ||
67 | QCString countryName() { parse(); return countryName_;} | ||
68 | |||
69 | private: | ||
70 | |||
71 | QCString poBox_; | ||
72 | QCString extAddress_; | ||
73 | QCString street_; | ||
74 | QCString locality_; | ||
75 | QCString region_; | ||
76 | QCString postCode_; | ||
77 | QCString countryName_; | ||
78 | }; | ||
79 | |||
80 | } | ||
81 | |||
82 | #endif | ||
83 | |||
diff --git a/kabc/vcard/include/VCardAgentParam.h b/kabc/vcard/include/VCardAgentParam.h new file mode 100644 index 0000000..72a05db --- a/dev/null +++ b/kabc/vcard/include/VCardAgentParam.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef AGENTPARAM_H | ||
25 | #define AGENTPARAM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardParam.h> | ||
30 | #include <VCardURIValue.h> | ||
31 | |||
32 | namespace VCARD | ||
33 | { | ||
34 | |||
35 | class AgentParam : public Param | ||
36 | { | ||
37 | |||
38 | #include "AgentParam-generated.h" | ||
39 | |||
40 | bool refer() | ||
41 | { parse(); return refer_; } | ||
42 | |||
43 | URIValue uri() | ||
44 | { parse(); return uri_; } | ||
45 | |||
46 | void setRefer(bool b) | ||
47 | { refer_ = b; assembled_ = false; } | ||
48 | |||
49 | void setURI(const QCString & s) | ||
50 | { uri_ = s; assembled_ = false; } | ||
51 | |||
52 | private: | ||
53 | |||
54 | bool refer_; | ||
55 | URIValueuri_; | ||
56 | }; | ||
57 | |||
58 | } | ||
59 | |||
60 | #endif | ||
diff --git a/kabc/vcard/include/VCardAgentValue.h b/kabc/vcard/include/VCardAgentValue.h new file mode 100644 index 0000000..f655836 --- a/dev/null +++ b/kabc/vcard/include/VCardAgentValue.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef AGENTVALUE_H | ||
25 | #define AGENTVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardValue.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class AgentValue : public Value | ||
35 | { | ||
36 | |||
37 | #include "AgentValue-generated.h" | ||
38 | |||
39 | private: | ||
40 | }; | ||
41 | |||
42 | } | ||
43 | |||
44 | #endif | ||
diff --git a/kabc/vcard/include/VCardClassValue.h b/kabc/vcard/include/VCardClassValue.h new file mode 100644 index 0000000..ff133c2 --- a/dev/null +++ b/kabc/vcard/include/VCardClassValue.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef CLASSVALUE_H | ||
25 | #define CLASSVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardValue.h> | ||
30 | |||
31 | #include <kdebug.h> | ||
32 | |||
33 | namespace VCARD | ||
34 | { | ||
35 | |||
36 | class ClassValue : public Value | ||
37 | { | ||
38 | |||
39 | #include "ClassValue-generated.h" | ||
40 | |||
41 | enum ClassType { | ||
42 | Public, Private, Confidential, Other | ||
43 | }; | ||
44 | |||
45 | ClassValue *clone(); | ||
46 | |||
47 | void setType( int type ) { classType_ = type; assembled_ = false; parsed_ = true; } | ||
48 | int type() { parse(); return classType_; } | ||
49 | |||
50 | private: | ||
51 | int classType_; | ||
52 | }; | ||
53 | |||
54 | } | ||
55 | |||
56 | #endif | ||
diff --git a/kabc/vcard/include/VCardContentLine.h b/kabc/vcard/include/VCardContentLine.h new file mode 100644 index 0000000..1c5f5be --- a/dev/null +++ b/kabc/vcard/include/VCardContentLine.h | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef CONTENTLINE_H | ||
25 | #define CONTENTLINE_H | ||
26 | |||
27 | #include <qptrlist.h> | ||
28 | |||
29 | #include "VCardEnum.h" | ||
30 | #include "VCardEntity.h" | ||
31 | #include "VCardParam.h" | ||
32 | #include "VCardValue.h" | ||
33 | |||
34 | namespace VCARD | ||
35 | { | ||
36 | |||
37 | class ContentLine : public Entity | ||
38 | { | ||
39 | |||
40 | #include "ContentLine-generated.h" | ||
41 | |||
42 | QCString group() { parse(); return group_;} | ||
43 | QCString name() { parse(); return name_;} | ||
44 | Value * value() { parse(); return value_;} | ||
45 | ParamList paramList() { parse(); return paramList_;} | ||
46 | ParamType paramType() { parse(); return paramType_;} | ||
47 | ValueType valueType() { parse(); return valueType_;} | ||
48 | EntityType entityType() { parse(); return entityType_;} | ||
49 | |||
50 | void setGroup (const QCString & s) | ||
51 | { group_ = s; assembled_ = false; } | ||
52 | |||
53 | void setName (const QCString & s) | ||
54 | { name_ = s; assembled_ = false; } | ||
55 | |||
56 | void setValue (Value *s) | ||
57 | { value_ = s; assembled_ = false; } | ||
58 | |||
59 | void setParamList(const ParamList & l) | ||
60 | { paramList_ = l; assembled_ = false; } | ||
61 | |||
62 | void clear (); | ||
63 | |||
64 | private: | ||
65 | |||
66 | QCString group_; | ||
67 | QCString name_; | ||
68 | QPtrList<Param> paramList_; | ||
69 | Value * value_; | ||
70 | |||
71 | ParamType paramType_; | ||
72 | ValueType valueType_; | ||
73 | EntityType entityType_; | ||
74 | }; | ||
75 | } | ||
76 | |||
77 | #endif | ||
diff --git a/kabc/vcard/include/VCardDateParam.h b/kabc/vcard/include/VCardDateParam.h new file mode 100644 index 0000000..21ac1f1 --- a/dev/null +++ b/kabc/vcard/include/VCardDateParam.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef DATEPARAM_H | ||
25 | #define DATEPARAM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardParam.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class DateParam : public Param | ||
35 | { | ||
36 | |||
37 | #include "DateParam-generated.h" | ||
38 | |||
39 | private: | ||
40 | }; | ||
41 | |||
42 | } | ||
43 | |||
44 | #endif | ||
diff --git a/kabc/vcard/include/VCardDateValue.h b/kabc/vcard/include/VCardDateValue.h new file mode 100644 index 0000000..c248966 --- a/dev/null +++ b/kabc/vcard/include/VCardDateValue.h | |||
@@ -0,0 +1,99 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef DATEVALUE_H | ||
25 | #define DATEVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | #include <qdatetime.h> | ||
29 | |||
30 | #include <VCardValue.h> | ||
31 | |||
32 | namespace VCARD | ||
33 | { | ||
34 | |||
35 | class DateValue : public Value | ||
36 | { | ||
37 | #include "DateValue-generated.h" | ||
38 | |||
39 | DateValue( | ||
40 | unsigned intyear, | ||
41 | unsigned intmonth, | ||
42 | unsigned intday, | ||
43 | unsigned inthour = 0, | ||
44 | unsigned intminute = 0, | ||
45 | unsigned intsecond = 0, | ||
46 | double secFrac = 0, | ||
47 | bool zonePositive = true, | ||
48 | unsigned intzoneHour = 0, | ||
49 | unsigned intzoneMinute = 0); | ||
50 | |||
51 | DateValue(const QDate &); | ||
52 | DateValue(const QDateTime &); | ||
53 | |||
54 | DateValue *clone(); | ||
55 | |||
56 | bool hasTime(); | ||
57 | |||
58 | unsigned intyear(); | ||
59 | unsigned intmonth(); | ||
60 | unsigned intday(); | ||
61 | unsigned inthour(); | ||
62 | unsigned intminute(); | ||
63 | unsigned intsecond(); | ||
64 | double secondFraction(); | ||
65 | bool zonePositive(); | ||
66 | unsigned intzoneHour(); | ||
67 | unsigned intzoneMinute(); | ||
68 | |||
69 | void setYear (unsigned int); | ||
70 | void setMonth (unsigned int); | ||
71 | void setDay (unsigned int); | ||
72 | void setHour (unsigned int); | ||
73 | void setMinute (unsigned int); | ||
74 | void setSecond (unsigned int); | ||
75 | void setSecondFraction(double); | ||
76 | void setZonePositive(bool); | ||
77 | void setZoneHour (unsigned int); | ||
78 | void setZoneMinute (unsigned int); | ||
79 | |||
80 | QDate qdate(); | ||
81 | QTime qtime(); | ||
82 | QDateTime qdt(); | ||
83 | |||
84 | private: | ||
85 | |||
86 | unsigned intyear_, month_, day_, | ||
87 | hour_, minute_, second_, | ||
88 | zoneHour_, zoneMinute_; | ||
89 | |||
90 | double secFrac_; | ||
91 | |||
92 | bool zonePositive_; | ||
93 | |||
94 | bool hasTime_; | ||
95 | }; | ||
96 | |||
97 | } | ||
98 | |||
99 | #endif | ||
diff --git a/kabc/vcard/include/VCardDefines.h b/kabc/vcard/include/VCardDefines.h new file mode 100644 index 0000000..dd38ae2 --- a/dev/null +++ b/kabc/vcard/include/VCardDefines.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1998 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef VCARD_DEFINES_H | ||
25 | #define VCARD_DEFINES_H | ||
26 | |||
27 | #include <kdebug.h> | ||
28 | |||
29 | #ifdef VCARD_DEBUG | ||
30 | #define vDebug(a) kdDebug(5710) << a << endl; | ||
31 | #else | ||
32 | #define vDebug(a) | ||
33 | #endif | ||
34 | |||
35 | #if 0 | ||
36 | #ifndef NDEBUG | ||
37 | #include <qcstring.h> | ||
38 | #include <iostream> | ||
39 | #ifdef __GNUG__ | ||
40 | # define vDebug(a) cerr << className() << ":" << __FUNCTION__ << " (" \ | ||
41 | << __LINE__ << "): " << QCString((a)).data() << endl; | ||
42 | #else | ||
43 | # define vDebug(a) cerr << className() << ": " \ | ||
44 | << QCString((a)).data() << endl; | ||
45 | #endif | ||
46 | #else | ||
47 | #define vDebug(a) | ||
48 | #endif | ||
49 | #endif | ||
50 | |||
51 | #endif // Included this file | ||
52 | |||
diff --git a/kabc/vcard/include/VCardEmailParam.h b/kabc/vcard/include/VCardEmailParam.h new file mode 100644 index 0000000..98d1b30 --- a/dev/null +++ b/kabc/vcard/include/VCardEmailParam.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef EMAILPARAM_H | ||
25 | #define EMAILPARAM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardParam.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class EmailParam : public Param | ||
35 | { | ||
36 | |||
37 | #include "EmailParam-generated.h" | ||
38 | |||
39 | QCString emailType() { parse(); return emailType_;} | ||
40 | bool pref() { parse(); return pref_; } | ||
41 | |||
42 | void setEmailType(const QCString & s) | ||
43 | { emailType_ = s; assembled_ = false; } | ||
44 | |||
45 | void setPref(bool b) | ||
46 | { pref_ = b; assembled_ = false; } | ||
47 | |||
48 | private: | ||
49 | |||
50 | QCStringemailType_; | ||
51 | bool pref_; | ||
52 | }; | ||
53 | |||
54 | } | ||
55 | |||
56 | #endif | ||
diff --git a/kabc/vcard/include/VCardEntity.h b/kabc/vcard/include/VCardEntity.h new file mode 100644 index 0000000..3c945b5 --- a/dev/null +++ b/kabc/vcard/include/VCardEntity.h | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef ENTITY_H | ||
25 | #define ENTITY_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | namespace VCARD | ||
30 | { | ||
31 | |||
32 | class Entity | ||
33 | { | ||
34 | public: | ||
35 | |||
36 | Entity(); | ||
37 | Entity(const Entity & e); | ||
38 | Entity(const QCString & s); | ||
39 | |||
40 | virtual Entity & operator = (const Entity & e); | ||
41 | virtual Entity & operator = (const QCString & s); | ||
42 | |||
43 | virtual bool operator == (Entity & e); | ||
44 | virtual bool operator != (Entity & e); | ||
45 | virtual bool operator == (const QCString & s); | ||
46 | virtual bool operator != (const QCString & s); | ||
47 | |||
48 | virtual ~Entity(); | ||
49 | |||
50 | QCString asString(); | ||
51 | |||
52 | virtual void parse(); | ||
53 | virtual void assemble(); | ||
54 | |||
55 | virtual void _parse() = 0; | ||
56 | virtual void _assemble() = 0; | ||
57 | |||
58 | protected: | ||
59 | |||
60 | QCString strRep_; | ||
61 | bool parsed_; | ||
62 | bool assembled_; | ||
63 | }; | ||
64 | |||
65 | } | ||
66 | |||
67 | #endif | ||
diff --git a/kabc/vcard/include/VCardEnum.h b/kabc/vcard/include/VCardEnum.h new file mode 100644 index 0000000..b4e4094 --- a/dev/null +++ b/kabc/vcard/include/VCardEnum.h | |||
@@ -0,0 +1,120 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef ENUM_H | ||
25 | #define ENUM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | namespace VCARD | ||
30 | { | ||
31 | |||
32 | extern const QCString paramNames []; | ||
33 | |||
34 | enum EntityType { | ||
35 | EntityName, | ||
36 | EntityProfile, | ||
37 | EntitySource, | ||
38 | EntityFullName, | ||
39 | EntityN, | ||
40 | EntityNickname, | ||
41 | EntityPhoto, | ||
42 | EntityBirthday, | ||
43 | EntityAddress, | ||
44 | EntityLabel, | ||
45 | EntityTelephone, | ||
46 | EntityEmail, | ||
47 | EntityMailer, | ||
48 | EntityTimeZone, | ||
49 | EntityGeo, | ||
50 | EntityTitle, | ||
51 | EntityRole, | ||
52 | EntityLogo, | ||
53 | EntityAgent, | ||
54 | EntityOrganisation, | ||
55 | EntityCategories, | ||
56 | EntityNote, | ||
57 | EntityProductID, | ||
58 | EntityRevision, | ||
59 | EntitySortString, | ||
60 | EntitySound, | ||
61 | EntityUID, | ||
62 | EntityURL, | ||
63 | EntityVersion, | ||
64 | EntityClass, | ||
65 | EntityKey, | ||
66 | EntityExtension, | ||
67 | EntityUnknown | ||
68 | }; | ||
69 | |||
70 | enum ValueType { | ||
71 | ValueSound, | ||
72 | ValueAgent, | ||
73 | ValueAddress, | ||
74 | ValueTel, | ||
75 | ValueTextBin, | ||
76 | ValueOrg, | ||
77 | ValueN, | ||
78 | ValueUTC, | ||
79 | ValueURI, | ||
80 | ValueClass, | ||
81 | ValueFloat, | ||
82 | ValueImage, | ||
83 | ValueDate, | ||
84 | ValueTextList, | ||
85 | ValueText, | ||
86 | ValueGeo, | ||
87 | ValueUnknown | ||
88 | }; | ||
89 | |||
90 | enum ParamType { | ||
91 | ParamUnknown, | ||
92 | ParamNone, | ||
93 | ParamSource, | ||
94 | ParamText, | ||
95 | ParamImage, | ||
96 | ParamDate, | ||
97 | ParamAddrText, | ||
98 | ParamTel, | ||
99 | ParamEmail, | ||
100 | ParamMailer, | ||
101 | ParamAgent, | ||
102 | ParamTextBin, | ||
103 | ParamTextNS, | ||
104 | ParamSound | ||
105 | }; | ||
106 | |||
107 | extern const ParamType paramTypesTable[]; | ||
108 | |||
109 | ParamType EntityTypeToParamType(EntityType); | ||
110 | ValueType EntityTypeToValueType(EntityType); | ||
111 | QCString EntityTypeToParamName(EntityType); | ||
112 | EntityType EntityNameToEntityType(const QCString &); | ||
113 | |||
114 | char * encodeBase64(const char *, unsigned long, unsigned long &); | ||
115 | char * decodeBase64(const char *, unsigned long, unsigned long &); | ||
116 | |||
117 | } | ||
118 | |||
119 | #endif | ||
120 | |||
diff --git a/kabc/vcard/include/VCardFloatValue.h b/kabc/vcard/include/VCardFloatValue.h new file mode 100644 index 0000000..69fdc22 --- a/dev/null +++ b/kabc/vcard/include/VCardFloatValue.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef FLOATVALUE_H | ||
25 | #define FLOATVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardValue.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class FloatValue : public Value | ||
35 | { | ||
36 | |||
37 | #include "FloatValue-generated.h" | ||
38 | |||
39 | FloatValue(float); | ||
40 | |||
41 | float value(); | ||
42 | void setValue(float); | ||
43 | |||
44 | private: | ||
45 | |||
46 | float value_; | ||
47 | }; | ||
48 | |||
49 | } | ||
50 | |||
51 | #endif | ||
diff --git a/kabc/vcard/include/VCardGeoValue.h b/kabc/vcard/include/VCardGeoValue.h new file mode 100644 index 0000000..662761c --- a/dev/null +++ b/kabc/vcard/include/VCardGeoValue.h | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | This file is part of libvcard. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef GEOVALUE_H | ||
22 | #define GEOVALUE_H | ||
23 | |||
24 | #include <VCardValue.h> | ||
25 | |||
26 | namespace VCARD | ||
27 | { | ||
28 | |||
29 | class GeoValue : public Value | ||
30 | { | ||
31 | |||
32 | #include "GeoValue-generated.h" | ||
33 | |||
34 | GeoValue *clone(); | ||
35 | |||
36 | void setLatitude( float lat ) { latitude_ = lat; assembled_ = false; } | ||
37 | void setLongitude( float lon ) { longitude_ = lon; assembled_ = false; } | ||
38 | |||
39 | float latitude() { parse(); return latitude_; } | ||
40 | float longitude() { parse(); return longitude_; } | ||
41 | |||
42 | private: | ||
43 | float latitude_; | ||
44 | float longitude_; | ||
45 | }; | ||
46 | |||
47 | } | ||
48 | |||
49 | #endif | ||
diff --git a/kabc/vcard/include/VCardGroup.h b/kabc/vcard/include/VCardGroup.h new file mode 100644 index 0000000..ff775fb --- a/dev/null +++ b/kabc/vcard/include/VCardGroup.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef GROUP_H | ||
25 | #define GROUP_H | ||
26 | |||
27 | #include <VCardEntity.h> | ||
28 | |||
29 | namespace VCARD | ||
30 | { | ||
31 | |||
32 | class Group : public Entity | ||
33 | { | ||
34 | #include "Group-generated.h" | ||
35 | }; | ||
36 | |||
37 | } | ||
38 | |||
39 | #endif | ||
diff --git a/kabc/vcard/include/VCardImageParam.h b/kabc/vcard/include/VCardImageParam.h new file mode 100644 index 0000000..ce99ccc --- a/dev/null +++ b/kabc/vcard/include/VCardImageParam.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef IMGPARAM_H | ||
25 | #define IMGPARAM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardParam.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class ImageParam : public Param | ||
35 | { | ||
36 | |||
37 | #include "ImageParam-generated.h" | ||
38 | |||
39 | private: | ||
40 | }; | ||
41 | |||
42 | } | ||
43 | |||
44 | #endif | ||
diff --git a/kabc/vcard/include/VCardImageValue.h b/kabc/vcard/include/VCardImageValue.h new file mode 100644 index 0000000..6ce0371 --- a/dev/null +++ b/kabc/vcard/include/VCardImageValue.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef IMAGEVALUE_H | ||
25 | #define IMAGEVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardValue.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class ImageValue : public Value | ||
35 | { | ||
36 | |||
37 | #include "ImageValue-generated.h" | ||
38 | |||
39 | private: | ||
40 | }; | ||
41 | |||
42 | } | ||
43 | |||
44 | #endif | ||
diff --git a/kabc/vcard/include/VCardImgValue.h b/kabc/vcard/include/VCardImgValue.h new file mode 100644 index 0000000..b09ad64 --- a/dev/null +++ b/kabc/vcard/include/VCardImgValue.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef IMGVALUE_H | ||
25 | #define IMGVALUE_H | ||
26 | |||
27 | #include <VCardValue.h> | ||
28 | |||
29 | namespace VCARD | ||
30 | { | ||
31 | |||
32 | class ImgValue : public Value | ||
33 | { | ||
34 | #include "ImgValue-generated.h" | ||
35 | }; | ||
36 | |||
37 | } | ||
38 | |||
39 | #endif | ||
diff --git a/kabc/vcard/include/VCardLangValue.h b/kabc/vcard/include/VCardLangValue.h new file mode 100644 index 0000000..991ceed --- a/dev/null +++ b/kabc/vcard/include/VCardLangValue.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef LANGVALUE_H | ||
25 | #define LANGVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | #include <qstrlist.h> | ||
29 | |||
30 | #include <VCardValue.h> | ||
31 | |||
32 | namespace VCARD | ||
33 | { | ||
34 | |||
35 | class LangValue : public Value | ||
36 | { | ||
37 | #include "LangValue-generated.h" | ||
38 | |||
39 | QCString primary(); | ||
40 | QStrList subtags(); | ||
41 | |||
42 | void setPrimary(const QCString &); | ||
43 | void setSubTags(const QStrList &); | ||
44 | |||
45 | QCString primary_; | ||
46 | QStrList subtags_; | ||
47 | }; | ||
48 | |||
49 | } | ||
50 | |||
51 | #endif | ||
diff --git a/kabc/vcard/include/VCardNValue.h b/kabc/vcard/include/VCardNValue.h new file mode 100644 index 0000000..306821b --- a/dev/null +++ b/kabc/vcard/include/VCardNValue.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef NVALUE_H | ||
25 | #define NVALUE_H | ||
26 | |||
27 | #include <VCardValue.h> | ||
28 | |||
29 | namespace VCARD | ||
30 | { | ||
31 | |||
32 | class NValue : public Value | ||
33 | { | ||
34 | #include "NValue-generated.h" | ||
35 | NValue *clone(); | ||
36 | |||
37 | QCString family() { parse(); return family_;} | ||
38 | QCString given() { parse(); return given_;} | ||
39 | QCString middle() { parse(); return middle_;} | ||
40 | QCString prefix() { parse(); return prefix_;} | ||
41 | QCString suffix() { parse(); return suffix_;} | ||
42 | |||
43 | void setFamily (const QCString & s) { family_= s; assembled_ = false; } | ||
44 | void setGiven (const QCString & s) { given_= s; assembled_ = false; } | ||
45 | void setMiddle (const QCString & s) { middle_= s; assembled_ = false; } | ||
46 | void setPrefix (const QCString & s) { prefix_= s; assembled_ = false; } | ||
47 | void setSuffix (const QCString & s) { suffix_= s; assembled_ = false; } | ||
48 | |||
49 | private: | ||
50 | |||
51 | QCString family_, given_, middle_, prefix_, suffix_; | ||
52 | }; | ||
53 | |||
54 | } | ||
55 | |||
56 | #endif | ||
diff --git a/kabc/vcard/include/VCardOrgValue.h b/kabc/vcard/include/VCardOrgValue.h new file mode 100644 index 0000000..c4f3f25 --- a/dev/null +++ b/kabc/vcard/include/VCardOrgValue.h | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef ORGVALUE_H | ||
25 | #define ORGVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | #include <qstrlist.h> | ||
29 | |||
30 | #include <VCardValue.h> | ||
31 | |||
32 | namespace VCARD | ||
33 | { | ||
34 | |||
35 | class OrgValue : public Value | ||
36 | { | ||
37 | |||
38 | #include "OrgValue-generated.h" | ||
39 | |||
40 | unsigned int numValues(); | ||
41 | QCString value(unsigned int); | ||
42 | |||
43 | private: | ||
44 | |||
45 | QStrList valueList_; | ||
46 | }; | ||
47 | |||
48 | } | ||
49 | |||
50 | #endif | ||
diff --git a/kabc/vcard/include/VCardParam.h b/kabc/vcard/include/VCardParam.h new file mode 100644 index 0000000..b61ce5c --- a/dev/null +++ b/kabc/vcard/include/VCardParam.h | |||
@@ -0,0 +1,59 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef PARAM_H | ||
25 | #define PARAM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | #include <qptrlist.h> | ||
29 | |||
30 | #include <VCardEntity.h> | ||
31 | |||
32 | namespace VCARD | ||
33 | { | ||
34 | |||
35 | class Param : public Entity | ||
36 | { | ||
37 | |||
38 | #include "Param-generated.h" | ||
39 | |||
40 | Param(const QCString &name, const QCString &value); | ||
41 | |||
42 | void setName(const QCString &); | ||
43 | void setValue(const QCString &); | ||
44 | |||
45 | QCString name(); | ||
46 | QCString value(); | ||
47 | |||
48 | private: | ||
49 | |||
50 | QCString name_; | ||
51 | QCString value_; | ||
52 | }; | ||
53 | |||
54 | typedef QPtrList<Param> ParamList; | ||
55 | typedef QPtrListIterator<Param> ParamListIterator; | ||
56 | |||
57 | } | ||
58 | |||
59 | #endif | ||
diff --git a/kabc/vcard/include/VCardPhoneNumberValue.h b/kabc/vcard/include/VCardPhoneNumberValue.h new file mode 100644 index 0000000..a567bdc --- a/dev/null +++ b/kabc/vcard/include/VCardPhoneNumberValue.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef PHONENUMBERVALUE_H | ||
25 | #define PHONENUMBERVALUE_H | ||
26 | |||
27 | #include <VCardValue.h> | ||
28 | |||
29 | namespace VCARD | ||
30 | { | ||
31 | |||
32 | class PhoneNumberValue : public Value | ||
33 | { | ||
34 | #include "PhoneNumberValue-generated.h" | ||
35 | }; | ||
36 | |||
37 | } | ||
38 | |||
39 | #endif | ||
diff --git a/kabc/vcard/include/VCardRToken.h b/kabc/vcard/include/VCardRToken.h new file mode 100644 index 0000000..2f95f1b --- a/dev/null +++ b/kabc/vcard/include/VCardRToken.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | |||
3 | libvcard - vCard parsing library for vCard version 3.0 | ||
4 | |||
5 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
6 | |||
7 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
8 | of this software and associated documentation files (the "Software"), to | ||
9 | deal in the Software without restriction, including without limitation the | ||
10 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
11 | sell copies of the Software, and to permit persons to whom the Software is | ||
12 | furnished to do so, subject to the following conditions: | ||
13 | |||
14 | The above copyright notice and this permission notice shall be included in | ||
15 | all copies or substantial portions of the Software. | ||
16 | |||
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
20 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
21 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
23 | */ | ||
24 | |||
25 | #ifndef RTOKEN_H | ||
26 | #define RTOKEN_H | ||
27 | |||
28 | #include <qstrlist.h> | ||
29 | |||
30 | namespace VCARD | ||
31 | { | ||
32 | |||
33 | Q_UINT32 RTokenise(const char * str, const char * delim, QStrList & l); | ||
34 | |||
35 | } | ||
36 | |||
37 | #endif | ||
38 | |||
diff --git a/kabc/vcard/include/VCardSndValue.h b/kabc/vcard/include/VCardSndValue.h new file mode 100644 index 0000000..ce56221 --- a/dev/null +++ b/kabc/vcard/include/VCardSndValue.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef SNDVALUE_H | ||
25 | #define SNDVALUE_H | ||
26 | |||
27 | #include <VCardValue.h> | ||
28 | |||
29 | namespace VCARD | ||
30 | { | ||
31 | |||
32 | class SndValue : public Value | ||
33 | { | ||
34 | #include "SndValue-generated.h" | ||
35 | }; | ||
36 | |||
37 | } | ||
38 | |||
39 | #endif | ||
diff --git a/kabc/vcard/include/VCardSoundValue.h b/kabc/vcard/include/VCardSoundValue.h new file mode 100644 index 0000000..994f55e --- a/dev/null +++ b/kabc/vcard/include/VCardSoundValue.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef SOUNDVALUE_H | ||
25 | #define SOUNDVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardValue.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class SoundValue : public Value | ||
35 | { | ||
36 | |||
37 | #include "SoundValue-generated.h" | ||
38 | |||
39 | private: | ||
40 | }; | ||
41 | |||
42 | } | ||
43 | |||
44 | #endif | ||
diff --git a/kabc/vcard/include/VCardSourceParam.h b/kabc/vcard/include/VCardSourceParam.h new file mode 100644 index 0000000..887ea20 --- a/dev/null +++ b/kabc/vcard/include/VCardSourceParam.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef SOURCEPARAM_H | ||
25 | #define SOURCEPARAM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardParam.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class SourceParam : public Param | ||
35 | { | ||
36 | |||
37 | #include "SourceParam-generated.h" | ||
38 | |||
39 | enum SourceParamType { TypeUnknown, TypeValue, TypeContext, TypeX }; | ||
40 | |||
41 | SourceParamType type(){ parse(); return type_;} | ||
42 | QCString par() { parse(); return par_; } | ||
43 | QCString val() { parse(); return val_; } | ||
44 | |||
45 | void setType(SourceParamType t) { type_= t; assembled_ = false; } | ||
46 | void setPar(const QCString & s) { par_= s; assembled_ = false; } | ||
47 | void setVal(const QCString & s) { val_= s; assembled_ = false; } | ||
48 | |||
49 | private: | ||
50 | |||
51 | SourceParamType type_; | ||
52 | // May be "VALUE = uri" or "CONTEXT = word" or "x-name = *SAFE-CHAR" | ||
53 | QCString par_, val_; // Sub-parameter, value | ||
54 | }; | ||
55 | |||
56 | } | ||
57 | |||
58 | #endif | ||
diff --git a/kabc/vcard/include/VCardTelParam.h b/kabc/vcard/include/VCardTelParam.h new file mode 100644 index 0000000..27d7dcc --- a/dev/null +++ b/kabc/vcard/include/VCardTelParam.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef TELPARAM_H | ||
25 | #define TELPARAM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardParam.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class TelParam : public Param | ||
35 | { | ||
36 | #include "TelParam-generated.h" | ||
37 | |||
38 | enum TelType { | ||
39 | TelHome, TelWork, TelPref, TelVoice, TelFex, TelMsg, TelCell, | ||
40 | TelPager, TelBBS, TelModem, TelCar, TelISDN, TelVideo, TelPCS, | ||
41 | TelIANA, TelX | ||
42 | }; | ||
43 | |||
44 | private: | ||
45 | |||
46 | QPtrList<TelType> types_; | ||
47 | }; | ||
48 | |||
49 | } | ||
50 | |||
51 | #endif | ||
diff --git a/kabc/vcard/include/VCardTelValue.h b/kabc/vcard/include/VCardTelValue.h new file mode 100644 index 0000000..9cf5a98 --- a/dev/null +++ b/kabc/vcard/include/VCardTelValue.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef TELVALUE_H | ||
25 | #define TELVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardValue.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class TelValue : public Value | ||
35 | { | ||
36 | |||
37 | #include "TelValue-generated.h" | ||
38 | |||
39 | private: | ||
40 | }; | ||
41 | |||
42 | } | ||
43 | |||
44 | #endif | ||
diff --git a/kabc/vcard/include/VCardTextBinParam.h b/kabc/vcard/include/VCardTextBinParam.h new file mode 100644 index 0000000..31dec86 --- a/dev/null +++ b/kabc/vcard/include/VCardTextBinParam.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef TEXTBINPARAM_H | ||
25 | #define TEXTBINPARAM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardParam.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class TextBinParam : public Param | ||
35 | { | ||
36 | |||
37 | #include "TextBinParam-generated.h" | ||
38 | |||
39 | private: | ||
40 | }; | ||
41 | |||
42 | } | ||
43 | |||
44 | #endif | ||
diff --git a/kabc/vcard/include/VCardTextBinValue.h b/kabc/vcard/include/VCardTextBinValue.h new file mode 100644 index 0000000..8d44fdf --- a/dev/null +++ b/kabc/vcard/include/VCardTextBinValue.h | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef TEXTBINVALUE_H | ||
25 | #define TEXTBINVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardValue.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class TextBinValue : public Value | ||
35 | { | ||
36 | |||
37 | #include "TextBinValue-generated.h" | ||
38 | |||
39 | TextBinValue *clone(); | ||
40 | |||
41 | bool isBinary() { parse(); return mIsBinary_; } | ||
42 | QByteArray data() { parse(); return mData_; } | ||
43 | QString url() { parse(); return mUrl_; } | ||
44 | |||
45 | void setData( const QByteArray &data ) | ||
46 | { | ||
47 | mData_ = data; | ||
48 | mIsBinary_ = true; | ||
49 | assembled_ = false; | ||
50 | } | ||
51 | |||
52 | void setUrl( const QString &url ) | ||
53 | { | ||
54 | mUrl_ = url; | ||
55 | mIsBinary_ = false; | ||
56 | assembled_ = false; | ||
57 | } | ||
58 | |||
59 | private: | ||
60 | int mIsBinary_; | ||
61 | QByteArray mData_; | ||
62 | QString mUrl_; | ||
63 | }; | ||
64 | |||
65 | } | ||
66 | |||
67 | #endif | ||
diff --git a/kabc/vcard/include/VCardTextListValue.h b/kabc/vcard/include/VCardTextListValue.h new file mode 100644 index 0000000..8e47af5 --- a/dev/null +++ b/kabc/vcard/include/VCardTextListValue.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef TEXTLISTVALUE_H | ||
25 | #define TEXTLISTVALUE_H | ||
26 | |||
27 | #include <qstrlist.h> | ||
28 | |||
29 | #include <qcstring.h> | ||
30 | |||
31 | #include <VCardValue.h> | ||
32 | |||
33 | namespace VCARD | ||
34 | { | ||
35 | |||
36 | class TextListValue : public Value | ||
37 | { | ||
38 | |||
39 | #include "TextListValue-generated.h" | ||
40 | |||
41 | unsigned int numValues(); | ||
42 | QCString value(unsigned int); | ||
43 | |||
44 | private: | ||
45 | |||
46 | QStrList valueList_; | ||
47 | }; | ||
48 | |||
49 | } | ||
50 | |||
51 | #endif | ||
diff --git a/kabc/vcard/include/VCardTextParam.h b/kabc/vcard/include/VCardTextParam.h new file mode 100644 index 0000000..08b5f57 --- a/dev/null +++ b/kabc/vcard/include/VCardTextParam.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef TEXTPARAM_H | ||
25 | #define TEXTPARAM_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardParam.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class TextParam : public Param | ||
35 | { | ||
36 | |||
37 | #include "TextParam-generated.h" | ||
38 | |||
39 | private: | ||
40 | }; | ||
41 | |||
42 | } | ||
43 | |||
44 | #endif | ||
diff --git a/kabc/vcard/include/VCardTextValue.h b/kabc/vcard/include/VCardTextValue.h new file mode 100644 index 0000000..afe8753 --- a/dev/null +++ b/kabc/vcard/include/VCardTextValue.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef TEXTVALUE_H | ||
25 | #define TEXTVALUE_H | ||
26 | |||
27 | #include <VCardValue.h> | ||
28 | |||
29 | namespace VCARD | ||
30 | { | ||
31 | |||
32 | class TextValue : public Value | ||
33 | { | ||
34 | #include "TextValue-generated.h" | ||
35 | |||
36 | TextValue *clone(); | ||
37 | }; | ||
38 | |||
39 | } | ||
40 | |||
41 | #endif | ||
diff --git a/kabc/vcard/include/VCardURIValue.h b/kabc/vcard/include/VCardURIValue.h new file mode 100644 index 0000000..5fd7184 --- a/dev/null +++ b/kabc/vcard/include/VCardURIValue.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef URIVALUE_H | ||
25 | #define URIVALUE_H | ||
26 | |||
27 | #include <VCardValue.h> | ||
28 | |||
29 | namespace VCARD | ||
30 | { | ||
31 | |||
32 | class URIValue : public Value | ||
33 | { | ||
34 | #include "URIValue-generated.h" | ||
35 | |||
36 | URIValue(const QCString & scheme, const QCString & schemeSpecificPart); | ||
37 | |||
38 | QCString scheme(); | ||
39 | QCString schemeSpecificPart(); | ||
40 | |||
41 | void setScheme (const QCString &); | ||
42 | void setSchemeSpecificPart(const QCString &); | ||
43 | |||
44 | private: | ||
45 | |||
46 | QCString scheme_; | ||
47 | QCString schemeSpecificPart_; | ||
48 | }; | ||
49 | |||
50 | } | ||
51 | |||
52 | #endif | ||
diff --git a/kabc/vcard/include/VCardUTCValue.h b/kabc/vcard/include/VCardUTCValue.h new file mode 100644 index 0000000..ff695e0 --- a/dev/null +++ b/kabc/vcard/include/VCardUTCValue.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef UTCVALUE_H | ||
25 | #define UTCVALUE_H | ||
26 | |||
27 | #include <qcstring.h> | ||
28 | |||
29 | #include <VCardValue.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class UTCValue : public Value | ||
35 | { | ||
36 | |||
37 | #include "UTCValue-generated.h" | ||
38 | |||
39 | UTCValue *clone(); | ||
40 | |||
41 | void setPositive( int p ) { positive_ = p; assembled_ = false; } | ||
42 | void setHour( int h ) { hour_ = h; assembled_ = false; } | ||
43 | void setMinute( int m ) { minute_ = m; assembled_ = false; } | ||
44 | |||
45 | bool positive() { parse(); return positive_; } | ||
46 | unsigned int hour() { parse(); return hour_; } | ||
47 | unsigned int minute() { parse(); return minute_; } | ||
48 | |||
49 | private: | ||
50 | |||
51 | bool positive_; | ||
52 | unsigned int hour_; | ||
53 | unsigned int minute_; | ||
54 | }; | ||
55 | |||
56 | } | ||
57 | |||
58 | #endif | ||
diff --git a/kabc/vcard/include/VCardVCard.h b/kabc/vcard/include/VCardVCard.h new file mode 100644 index 0000000..5dec166 --- a/dev/null +++ b/kabc/vcard/include/VCardVCard.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef VCARD_VCARD_H | ||
25 | #define VCARD_VCARD_H | ||
26 | |||
27 | #include <qstring.h> | ||
28 | #include <qptrlist.h> | ||
29 | |||
30 | #include <VCardEnum.h> | ||
31 | #include <VCardEntity.h> | ||
32 | #include <VCardContentLine.h> | ||
33 | |||
34 | namespace VCARD | ||
35 | { | ||
36 | |||
37 | class VCard : public Entity | ||
38 | { | ||
39 | |||
40 | #include "VCard-generated.h" | ||
41 | |||
42 | bool has(EntityType); | ||
43 | bool has(const QCString &); | ||
44 | |||
45 | void add(const ContentLine &); | ||
46 | void add(const QCString &); | ||
47 | |||
48 | ContentLine * contentLine(EntityType); | ||
49 | ContentLine * contentLine(const QCString &); | ||
50 | |||
51 | QCString group() { parse(); return group_; } | ||
52 | |||
53 | QPtrList<ContentLine>contentLineList() { parse(); return contentLineList_; } | ||
54 | |||
55 | private: | ||
56 | |||
57 | QCString group_; | ||
58 | QPtrList<ContentLine>contentLineList_; | ||
59 | }; | ||
60 | |||
61 | } | ||
62 | |||
63 | #endif | ||
diff --git a/kabc/vcard/include/VCardVCardEntity.h b/kabc/vcard/include/VCardVCardEntity.h new file mode 100644 index 0000000..47ba370 --- a/dev/null +++ b/kabc/vcard/include/VCardVCardEntity.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef VCARD_ENTITY_H | ||
25 | #define VCARD_ENTITY_H | ||
26 | |||
27 | #include <qstring.h> | ||
28 | #include <qptrlist.h> | ||
29 | |||
30 | #include <VCardEnum.h> | ||
31 | #include <VCardVCard.h> | ||
32 | #include <VCardEntity.h> | ||
33 | |||
34 | namespace VCARD | ||
35 | { | ||
36 | |||
37 | typedef QPtrList<VCard> VCardList; | ||
38 | typedef QPtrListIterator<VCard> VCardListIterator; | ||
39 | |||
40 | class VCardEntity : public Entity | ||
41 | { | ||
42 | |||
43 | #include "VCardEntity-generated.h" | ||
44 | |||
45 | void setCardList(const VCardList & l); | ||
46 | VCardList & cardList(); | ||
47 | |||
48 | private: | ||
49 | |||
50 | VCardList cardList_; | ||
51 | |||
52 | }; | ||
53 | |||
54 | } | ||
55 | |||
56 | #endif | ||
diff --git a/kabc/vcard/include/VCardValue.h b/kabc/vcard/include/VCardValue.h new file mode 100644 index 0000000..7cfe4a0 --- a/dev/null +++ b/kabc/vcard/include/VCardValue.h | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | libvcard - vCard parsing library for vCard version 3.0 | ||
3 | |||
4 | Copyright (C) 1999 Rik Hemsley rik@kde.org | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to | ||
8 | deal in the Software without restriction, including without limitation the | ||
9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | sell copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in | ||
14 | all copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
22 | */ | ||
23 | |||
24 | #ifndef VALUE_H | ||
25 | #define VALUE_H | ||
26 | |||
27 | #include <qptrlist.h> | ||
28 | |||
29 | #include <VCardEntity.h> | ||
30 | |||
31 | namespace VCARD | ||
32 | { | ||
33 | |||
34 | class Value : public Entity | ||
35 | { | ||
36 | #include "Value-generated.h" | ||
37 | |||
38 | virtual Value *clone() { return new Value( *this ); } | ||
39 | }; | ||
40 | |||
41 | typedef QPtrList<Value> ValueList; | ||
42 | typedef QPtrListIterator<Value> ValueListIterator; | ||
43 | |||
44 | } | ||
45 | |||
46 | #endif | ||
diff --git a/kabc/vcard/include/generated/AdrParam-generated.h b/kabc/vcard/include/generated/AdrParam-generated.h new file mode 100644 index 0000000..3e265d8 --- a/dev/null +++ b/kabc/vcard/include/generated/AdrParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | AdrParam(); | ||
5 | AdrParam(const AdrParam&); | ||
6 | AdrParam(const QCString&); | ||
7 | AdrParam & operator = (AdrParam&); | ||
8 | AdrParam & operator = (const QCString&); | ||
9 | bool operator ==(AdrParam&); | ||
10 | bool operator !=(AdrParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {AdrParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~AdrParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "AdrParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/AdrValue-generated.h b/kabc/vcard/include/generated/AdrValue-generated.h new file mode 100644 index 0000000..e1d93e4 --- a/dev/null +++ b/kabc/vcard/include/generated/AdrValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | AdrValue(); | ||
5 | AdrValue(const AdrValue&); | ||
6 | AdrValue(const QCString&); | ||
7 | AdrValue & operator = (AdrValue&); | ||
8 | AdrValue & operator = (const QCString&); | ||
9 | bool operator ==(AdrValue&); | ||
10 | bool operator !=(AdrValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {AdrValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~AdrValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "AdrValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/AgentParam-generated.h b/kabc/vcard/include/generated/AgentParam-generated.h new file mode 100644 index 0000000..6423867 --- a/dev/null +++ b/kabc/vcard/include/generated/AgentParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | AgentParam(); | ||
5 | AgentParam(const AgentParam&); | ||
6 | AgentParam(const QCString&); | ||
7 | AgentParam & operator = (AgentParam&); | ||
8 | AgentParam & operator = (const QCString&); | ||
9 | bool operator ==(AgentParam&); | ||
10 | bool operator !=(AgentParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {AgentParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~AgentParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "AgentParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/AgentValue-generated.h b/kabc/vcard/include/generated/AgentValue-generated.h new file mode 100644 index 0000000..76bb81c --- a/dev/null +++ b/kabc/vcard/include/generated/AgentValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | AgentValue(); | ||
5 | AgentValue(const AgentValue&); | ||
6 | AgentValue(const QCString&); | ||
7 | AgentValue & operator = (AgentValue&); | ||
8 | AgentValue & operator = (const QCString&); | ||
9 | bool operator ==(AgentValue&); | ||
10 | bool operator !=(AgentValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {AgentValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~AgentValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "AgentValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/ClassValue-generated.h b/kabc/vcard/include/generated/ClassValue-generated.h new file mode 100644 index 0000000..df4ed5f --- a/dev/null +++ b/kabc/vcard/include/generated/ClassValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | ClassValue(); | ||
5 | ClassValue(const ClassValue&); | ||
6 | ClassValue(const QCString&); | ||
7 | ClassValue & operator = (ClassValue&); | ||
8 | ClassValue & operator = (const QCString&); | ||
9 | bool operator ==(ClassValue&); | ||
10 | bool operator !=(ClassValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {ClassValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~ClassValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "ClassValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/ContentLine-generated.h b/kabc/vcard/include/generated/ContentLine-generated.h new file mode 100644 index 0000000..9efe273 --- a/dev/null +++ b/kabc/vcard/include/generated/ContentLine-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | ContentLine(); | ||
5 | ContentLine(const ContentLine&); | ||
6 | ContentLine(const QCString&); | ||
7 | ContentLine & operator = (ContentLine&); | ||
8 | ContentLine & operator = (const QCString&); | ||
9 | bool operator ==(ContentLine&); | ||
10 | bool operator !=(ContentLine& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {ContentLine a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~ContentLine(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "ContentLine"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/DateParam-generated.h b/kabc/vcard/include/generated/DateParam-generated.h new file mode 100644 index 0000000..ff1da58 --- a/dev/null +++ b/kabc/vcard/include/generated/DateParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | DateParam(); | ||
5 | DateParam(const DateParam&); | ||
6 | DateParam(const QCString&); | ||
7 | DateParam & operator = (DateParam&); | ||
8 | DateParam & operator = (const QCString&); | ||
9 | bool operator ==(DateParam&); | ||
10 | bool operator !=(DateParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {DateParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~DateParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "DateParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/DateValue-generated.h b/kabc/vcard/include/generated/DateValue-generated.h new file mode 100644 index 0000000..a382823 --- a/dev/null +++ b/kabc/vcard/include/generated/DateValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | DateValue(); | ||
5 | DateValue(const DateValue&); | ||
6 | DateValue(const QCString&); | ||
7 | DateValue & operator = (DateValue&); | ||
8 | DateValue & operator = (const QCString&); | ||
9 | bool operator ==(DateValue&); | ||
10 | bool operator !=(DateValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {DateValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~DateValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "DateValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/EmailParam-generated.h b/kabc/vcard/include/generated/EmailParam-generated.h new file mode 100644 index 0000000..428a6fc --- a/dev/null +++ b/kabc/vcard/include/generated/EmailParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | EmailParam(); | ||
5 | EmailParam(const EmailParam&); | ||
6 | EmailParam(const QCString&); | ||
7 | EmailParam & operator = (EmailParam&); | ||
8 | EmailParam & operator = (const QCString&); | ||
9 | bool operator ==(EmailParam&); | ||
10 | bool operator !=(EmailParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {EmailParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~EmailParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "EmailParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/FloatValue-generated.h b/kabc/vcard/include/generated/FloatValue-generated.h new file mode 100644 index 0000000..cac55cf --- a/dev/null +++ b/kabc/vcard/include/generated/FloatValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | FloatValue(); | ||
5 | FloatValue(const FloatValue&); | ||
6 | FloatValue(const QCString&); | ||
7 | FloatValue & operator = (FloatValue&); | ||
8 | FloatValue & operator = (const QCString&); | ||
9 | bool operator ==(FloatValue&); | ||
10 | bool operator !=(FloatValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {FloatValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~FloatValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "FloatValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/GeoValue-generated.h b/kabc/vcard/include/generated/GeoValue-generated.h new file mode 100644 index 0000000..594f3ad --- a/dev/null +++ b/kabc/vcard/include/generated/GeoValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | GeoValue(); | ||
5 | GeoValue(const GeoValue&); | ||
6 | GeoValue(const QCString&); | ||
7 | GeoValue & operator = (GeoValue&); | ||
8 | GeoValue & operator = (const QCString&); | ||
9 | bool operator ==(GeoValue&); | ||
10 | bool operator !=(GeoValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {GeoValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~GeoValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "GeoValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/Group-generated.h b/kabc/vcard/include/generated/Group-generated.h new file mode 100644 index 0000000..f39302d --- a/dev/null +++ b/kabc/vcard/include/generated/Group-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | Group(); | ||
5 | Group(const Group&); | ||
6 | Group(const QCString&); | ||
7 | Group & operator = (Group&); | ||
8 | Group & operator = (const QCString&); | ||
9 | bool operator ==(Group&); | ||
10 | bool operator !=(Group& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {Group a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~Group(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "Group"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/ImageParam-generated.h b/kabc/vcard/include/generated/ImageParam-generated.h new file mode 100644 index 0000000..81edfd2 --- a/dev/null +++ b/kabc/vcard/include/generated/ImageParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | ImageParam(); | ||
5 | ImageParam(const ImageParam&); | ||
6 | ImageParam(const QCString&); | ||
7 | ImageParam & operator = (ImageParam&); | ||
8 | ImageParam & operator = (const QCString&); | ||
9 | bool operator ==(ImageParam&); | ||
10 | bool operator !=(ImageParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {ImageParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~ImageParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "ImageParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/ImageValue-generated.h b/kabc/vcard/include/generated/ImageValue-generated.h new file mode 100644 index 0000000..5a2c493 --- a/dev/null +++ b/kabc/vcard/include/generated/ImageValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | ImageValue(); | ||
5 | ImageValue(const ImageValue&); | ||
6 | ImageValue(const QCString&); | ||
7 | ImageValue & operator = (ImageValue&); | ||
8 | ImageValue & operator = (const QCString&); | ||
9 | bool operator ==(ImageValue&); | ||
10 | bool operator !=(ImageValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {ImageValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~ImageValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "ImageValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/ImgParam-generated.h b/kabc/vcard/include/generated/ImgParam-generated.h new file mode 100644 index 0000000..46a6ca0 --- a/dev/null +++ b/kabc/vcard/include/generated/ImgParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | ImgParam(); | ||
5 | ImgParam(const ImgParam&); | ||
6 | ImgParam(const QCString&); | ||
7 | ImgParam & operator = (ImgParam&); | ||
8 | ImgParam & operator = (const QCString&); | ||
9 | bool operator ==(ImgParam&); | ||
10 | bool operator !=(ImgParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {ImgParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~ImgParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | virtual const char * className() const { return "ImgParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/ImgValue-generated.h b/kabc/vcard/include/generated/ImgValue-generated.h new file mode 100644 index 0000000..d75d545 --- a/dev/null +++ b/kabc/vcard/include/generated/ImgValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | ImgValue(); | ||
5 | ImgValue(const ImgValue&); | ||
6 | ImgValue(const QCString&); | ||
7 | ImgValue & operator = (ImgValue&); | ||
8 | ImgValue & operator = (const QCString&); | ||
9 | bool operator ==(ImgValue&); | ||
10 | bool operator !=(ImgValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {ImgValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~ImgValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | virtual const char * className() const { return "ImgValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/LangValue-generated.h b/kabc/vcard/include/generated/LangValue-generated.h new file mode 100644 index 0000000..23e138b --- a/dev/null +++ b/kabc/vcard/include/generated/LangValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | LangValue(); | ||
5 | LangValue(const LangValue&); | ||
6 | LangValue(const QCString&); | ||
7 | LangValue & operator = (LangValue&); | ||
8 | LangValue & operator = (const QCString&); | ||
9 | bool operator ==(LangValue&); | ||
10 | bool operator !=(LangValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {LangValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~LangValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "LangValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/NValue-generated.h b/kabc/vcard/include/generated/NValue-generated.h new file mode 100644 index 0000000..082c253 --- a/dev/null +++ b/kabc/vcard/include/generated/NValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | NValue(); | ||
5 | NValue(const NValue&); | ||
6 | NValue(const QCString&); | ||
7 | NValue & operator = (NValue&); | ||
8 | NValue & operator = (const QCString&); | ||
9 | bool operator ==(NValue&); | ||
10 | bool operator !=(NValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {NValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~NValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "NValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/Name-generated.h b/kabc/vcard/include/generated/Name-generated.h new file mode 100644 index 0000000..0e69abd --- a/dev/null +++ b/kabc/vcard/include/generated/Name-generated.h | |||
@@ -0,0 +1,22 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | V_Name(); | ||
5 | V_Name(const V_Name&); | ||
6 | V_Name(const QCString&); | ||
7 | V_Name & operator = (V_Name&); | ||
8 | V_Name & operator = (const QCString&); | ||
9 | bool operator ==(V_Name&); | ||
10 | bool operator !=(V_Name& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {V_Name a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~V_Name(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | |||
22 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/OrgValue-generated.h b/kabc/vcard/include/generated/OrgValue-generated.h new file mode 100644 index 0000000..51eb1b7 --- a/dev/null +++ b/kabc/vcard/include/generated/OrgValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | OrgValue(); | ||
5 | OrgValue(const OrgValue&); | ||
6 | OrgValue(const QCString&); | ||
7 | OrgValue & operator = (OrgValue&); | ||
8 | OrgValue & operator = (const QCString&); | ||
9 | bool operator ==(OrgValue&); | ||
10 | bool operator !=(OrgValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {OrgValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~OrgValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "OrgValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/Param-generated.h b/kabc/vcard/include/generated/Param-generated.h new file mode 100644 index 0000000..cf4666a --- a/dev/null +++ b/kabc/vcard/include/generated/Param-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | Param(); | ||
5 | Param(const Param&); | ||
6 | Param(const QCString&); | ||
7 | Param & operator = (Param&); | ||
8 | Param & operator = (const QCString&); | ||
9 | bool operator ==(Param&); | ||
10 | bool operator !=(Param& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {Param a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~Param(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "Param"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/ParamName-generated.h b/kabc/vcard/include/generated/ParamName-generated.h new file mode 100644 index 0000000..ef673c3 --- a/dev/null +++ b/kabc/vcard/include/generated/ParamName-generated.h | |||
@@ -0,0 +1,22 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | V_ParamName(); | ||
5 | V_ParamName(const V_ParamName&); | ||
6 | V_ParamName(const QCString&); | ||
7 | V_ParamName & operator = (V_ParamName&); | ||
8 | V_ParamName & operator = (const QCString&); | ||
9 | bool operator ==(V_ParamName&); | ||
10 | bool operator !=(V_ParamName& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {V_ParamName a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~V_ParamName(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | |||
22 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/ParamValue-generated.h b/kabc/vcard/include/generated/ParamValue-generated.h new file mode 100644 index 0000000..e73500f --- a/dev/null +++ b/kabc/vcard/include/generated/ParamValue-generated.h | |||
@@ -0,0 +1,22 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | V_ParamValue(); | ||
5 | V_ParamValue(const V_ParamValue&); | ||
6 | V_ParamValue(const QCString&); | ||
7 | V_ParamValue & operator = (V_ParamValue&); | ||
8 | V_ParamValue & operator = (const QCString&); | ||
9 | bool operator ==(V_ParamValue&); | ||
10 | bool operator !=(V_ParamValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {V_ParamValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~V_ParamValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | |||
22 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/PhoneNumberValue-generated.h b/kabc/vcard/include/generated/PhoneNumberValue-generated.h new file mode 100644 index 0000000..1320f18 --- a/dev/null +++ b/kabc/vcard/include/generated/PhoneNumberValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | PhoneNumberValue(); | ||
5 | PhoneNumberValue(const PhoneNumberValue&); | ||
6 | PhoneNumberValue(const QCString&); | ||
7 | PhoneNumberValue & operator = (PhoneNumberValue&); | ||
8 | PhoneNumberValue & operator = (const QCString&); | ||
9 | bool operator ==(PhoneNumberValue&); | ||
10 | bool operator !=(PhoneNumberValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {PhoneNumberValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~PhoneNumberValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "PhoneNumberValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/SoundValue-generated.h b/kabc/vcard/include/generated/SoundValue-generated.h new file mode 100644 index 0000000..a9ab2e8 --- a/dev/null +++ b/kabc/vcard/include/generated/SoundValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | SoundValue(); | ||
5 | SoundValue(const SoundValue&); | ||
6 | SoundValue(const QCString&); | ||
7 | SoundValue & operator = (SoundValue&); | ||
8 | SoundValue & operator = (const QCString&); | ||
9 | bool operator ==(SoundValue&); | ||
10 | bool operator !=(SoundValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {SoundValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~SoundValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "SoundValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/SourceParam-generated.h b/kabc/vcard/include/generated/SourceParam-generated.h new file mode 100644 index 0000000..75fefb8 --- a/dev/null +++ b/kabc/vcard/include/generated/SourceParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | SourceParam(); | ||
5 | SourceParam(const SourceParam&); | ||
6 | SourceParam(const QCString&); | ||
7 | SourceParam & operator = (SourceParam&); | ||
8 | SourceParam & operator = (const QCString&); | ||
9 | bool operator ==(SourceParam&); | ||
10 | bool operator !=(SourceParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {SourceParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~SourceParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "SourceParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/TelParam-generated.h b/kabc/vcard/include/generated/TelParam-generated.h new file mode 100644 index 0000000..3ee77cc --- a/dev/null +++ b/kabc/vcard/include/generated/TelParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | TelParam(); | ||
5 | TelParam(const TelParam&); | ||
6 | TelParam(const QCString&); | ||
7 | TelParam & operator = (TelParam&); | ||
8 | TelParam & operator = (const QCString&); | ||
9 | bool operator ==(TelParam&); | ||
10 | bool operator !=(TelParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {TelParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~TelParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "TelParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/TelValue-generated.h b/kabc/vcard/include/generated/TelValue-generated.h new file mode 100644 index 0000000..3213e1c --- a/dev/null +++ b/kabc/vcard/include/generated/TelValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | TelValue(); | ||
5 | TelValue(const TelValue&); | ||
6 | TelValue(const QCString&); | ||
7 | TelValue & operator = (TelValue&); | ||
8 | TelValue & operator = (const QCString&); | ||
9 | bool operator ==(TelValue&); | ||
10 | bool operator !=(TelValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {TelValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~TelValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "TelValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/TextBinParam-generated.h b/kabc/vcard/include/generated/TextBinParam-generated.h new file mode 100644 index 0000000..d075c10 --- a/dev/null +++ b/kabc/vcard/include/generated/TextBinParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | TextBinParam(); | ||
5 | TextBinParam(const TextBinParam&); | ||
6 | TextBinParam(const QCString&); | ||
7 | TextBinParam & operator = (TextBinParam&); | ||
8 | TextBinParam & operator = (const QCString&); | ||
9 | bool operator ==(TextBinParam&); | ||
10 | bool operator !=(TextBinParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {TextBinParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~TextBinParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "TextBinParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/TextBinValue-generated.h b/kabc/vcard/include/generated/TextBinValue-generated.h new file mode 100644 index 0000000..e9553ac --- a/dev/null +++ b/kabc/vcard/include/generated/TextBinValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | TextBinValue(); | ||
5 | TextBinValue(const TextBinValue&); | ||
6 | TextBinValue(const QCString&); | ||
7 | TextBinValue & operator = (TextBinValue&); | ||
8 | TextBinValue & operator = (const QCString&); | ||
9 | bool operator ==(TextBinValue&); | ||
10 | bool operator !=(TextBinValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {TextBinValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~TextBinValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "TextBinValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/TextListValue-generated.h b/kabc/vcard/include/generated/TextListValue-generated.h new file mode 100644 index 0000000..9f46124 --- a/dev/null +++ b/kabc/vcard/include/generated/TextListValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | TextListValue(); | ||
5 | TextListValue(const TextListValue&); | ||
6 | TextListValue(const QCString&); | ||
7 | TextListValue & operator = (TextListValue&); | ||
8 | TextListValue & operator = (const QCString&); | ||
9 | bool operator ==(TextListValue&); | ||
10 | bool operator !=(TextListValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {TextListValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~TextListValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "TextListValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/TextNSParam-generated.h b/kabc/vcard/include/generated/TextNSParam-generated.h new file mode 100644 index 0000000..d7f58ca --- a/dev/null +++ b/kabc/vcard/include/generated/TextNSParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | TextNSParam(); | ||
5 | TextNSParam(const TextNSParam&); | ||
6 | TextNSParam(const QCString&); | ||
7 | TextNSParam & operator = (TextNSParam&); | ||
8 | TextNSParam & operator = (const QCString&); | ||
9 | bool operator ==(TextNSParam&); | ||
10 | bool operator !=(TextNSParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {TextNSParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~TextNSParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "TextNSParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/TextParam-generated.h b/kabc/vcard/include/generated/TextParam-generated.h new file mode 100644 index 0000000..154e1bf --- a/dev/null +++ b/kabc/vcard/include/generated/TextParam-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | TextParam(); | ||
5 | TextParam(const TextParam&); | ||
6 | TextParam(const QCString&); | ||
7 | TextParam & operator = (TextParam&); | ||
8 | TextParam & operator = (const QCString&); | ||
9 | bool operator ==(TextParam&); | ||
10 | bool operator !=(TextParam& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {TextParam a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~TextParam(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "TextParam"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/TextValue-generated.h b/kabc/vcard/include/generated/TextValue-generated.h new file mode 100644 index 0000000..e1c4dcc --- a/dev/null +++ b/kabc/vcard/include/generated/TextValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | TextValue(); | ||
5 | TextValue(const TextValue&); | ||
6 | TextValue(const QCString&); | ||
7 | TextValue & operator = (TextValue&); | ||
8 | TextValue & operator = (const QCString&); | ||
9 | bool operator ==(TextValue&); | ||
10 | bool operator !=(TextValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {TextValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~TextValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "TextValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/URIValue-generated.h b/kabc/vcard/include/generated/URIValue-generated.h new file mode 100644 index 0000000..dbcb5c1 --- a/dev/null +++ b/kabc/vcard/include/generated/URIValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | URIValue(); | ||
5 | URIValue(const URIValue&); | ||
6 | URIValue(const QCString&); | ||
7 | URIValue & operator = (URIValue&); | ||
8 | URIValue & operator = (const QCString&); | ||
9 | bool operator ==(URIValue&); | ||
10 | bool operator !=(URIValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {URIValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~URIValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "URIValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/UTCValue-generated.h b/kabc/vcard/include/generated/UTCValue-generated.h new file mode 100644 index 0000000..46e447b --- a/dev/null +++ b/kabc/vcard/include/generated/UTCValue-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | UTCValue(); | ||
5 | UTCValue(const UTCValue&); | ||
6 | UTCValue(const QCString&); | ||
7 | UTCValue & operator = (UTCValue&); | ||
8 | UTCValue & operator = (const QCString&); | ||
9 | bool operator ==(UTCValue&); | ||
10 | bool operator !=(UTCValue& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {UTCValue a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~UTCValue(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "UTCValue"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/VCard-generated.h b/kabc/vcard/include/generated/VCard-generated.h new file mode 100644 index 0000000..4d7d96d --- a/dev/null +++ b/kabc/vcard/include/generated/VCard-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | VCard(); | ||
5 | VCard(const VCard&); | ||
6 | VCard(const QCString&); | ||
7 | VCard & operator = (VCard&); | ||
8 | VCard & operator = (const QCString&); | ||
9 | bool operator ==(VCard&); | ||
10 | bool operator !=(VCard& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {VCard a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~VCard(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "VCard"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/VCardEntity-generated.h b/kabc/vcard/include/generated/VCardEntity-generated.h new file mode 100644 index 0000000..9f2dfbc --- a/dev/null +++ b/kabc/vcard/include/generated/VCardEntity-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | VCardEntity(); | ||
5 | VCardEntity(const VCardEntity&); | ||
6 | VCardEntity(const QCString&); | ||
7 | VCardEntity & operator = (VCardEntity&); | ||
8 | VCardEntity & operator = (const QCString&); | ||
9 | bool operator ==(VCardEntity&); | ||
10 | bool operator !=(VCardEntity& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {VCardEntity a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~VCardEntity(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "VCardEntity"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/Value-generated.h b/kabc/vcard/include/generated/Value-generated.h new file mode 100644 index 0000000..7afac34 --- a/dev/null +++ b/kabc/vcard/include/generated/Value-generated.h | |||
@@ -0,0 +1,23 @@ | |||
1 | // XXX Automatically generated. DO NOT EDIT! XXX // | ||
2 | |||
3 | public: | ||
4 | Value(); | ||
5 | Value(const Value&); | ||
6 | Value(const QCString&); | ||
7 | Value & operator = (Value&); | ||
8 | Value & operator = (const QCString&); | ||
9 | bool operator ==(Value&); | ||
10 | bool operator !=(Value& x) {return !(*this==x);} | ||
11 | bool operator ==(const QCString& s) {Value a(s);return(*this==a);} | ||
12 | bool operator != (const QCString& s) {return !(*this == s);} | ||
13 | |||
14 | virtual ~Value(); | ||
15 | void parse() {if(!parsed_) _parse();parsed_=true;assembled_=false;} | ||
16 | |||
17 | void assemble() {if(assembled_) return;parse();_assemble();assembled_=true;} | ||
18 | |||
19 | void _parse(); | ||
20 | void _assemble(); | ||
21 | const char * className() const { return "Value"; } | ||
22 | |||
23 | // End of automatically generated code // | ||
diff --git a/kabc/vcard/include/generated/generate b/kabc/vcard/include/generated/generate new file mode 100644 index 0000000..926dbf1 --- a/dev/null +++ b/kabc/vcard/include/generated/generate | |||
@@ -0,0 +1,2 @@ | |||
1 | #!/bin/sh | ||
2 | cat headerBodies | awk -f generateHeaders.awk | ||
diff --git a/kabc/vcard/include/generated/generateHeaders.awk b/kabc/vcard/include/generated/generateHeaders.awk new file mode 100644 index 0000000..1053144 --- a/dev/null +++ b/kabc/vcard/include/generated/generateHeaders.awk | |||
@@ -0,0 +1,40 @@ | |||
1 | #!/bin/awk -f | ||
2 | |||
3 | { | ||
4 | outfile = $1 "-generated.h" | ||
5 | name = $1 | ||
6 | |||
7 | OFS="" | ||
8 | |||
9 | print "// XXX Automatically generated. DO NOT EDIT! XXX //\n" > outfile | ||
10 | |||
11 | if ($2 == "v") { pre = "virtual " } else { pre = "" } | ||
12 | |||
13 | print "public:" >> outfile | ||
14 | print name "();" >> outfile | ||
15 | print name "(const " name "&);" >> outfile | ||
16 | print name "(const QCString&);" >> outfile | ||
17 | print pre name " & operator = (" name "&);" >> outfile | ||
18 | print pre name " & operator = (const QCString&);" >> outfile | ||
19 | print pre "bool operator ==(" name "&);" >> outfile | ||
20 | print pre "bool operator !=(" name "& x) {return !(*this==x);}" \ | ||
21 | >> outfile | ||
22 | print pre "bool operator ==(const QCString& s) {" name " a(s);" \ | ||
23 | "return(*this==a);} " >> outfile | ||
24 | print pre "bool operator != (const QCString& s) {return !(*this == s);}\n" \ | ||
25 | >> outfile | ||
26 | print "virtual ~" name "();" >> outfile | ||
27 | print pre "void parse() " \ | ||
28 | "{if(!parsed_) _parse();parsed_=true;assembled_=false;}\n" \ | ||
29 | >> outfile | ||
30 | print pre "void assemble() " \ | ||
31 | "{if(assembled_) return;parse();_assemble();assembled_=true;}\n" \ | ||
32 | >> outfile | ||
33 | print pre "void _parse();" >> outfile | ||
34 | print pre "void _assemble();" >> outfile | ||
35 | print pre "const char * className() const { return \"" name "\"; }" \ | ||
36 | >> outfile | ||
37 | |||
38 | print "\n// End of automatically generated code //" >> outfile | ||
39 | } | ||
40 | |||
diff --git a/kabc/vcard/include/generated/headerBodies b/kabc/vcard/include/generated/headerBodies new file mode 100644 index 0000000..5e77b2b --- a/dev/null +++ b/kabc/vcard/include/generated/headerBodies | |||
@@ -0,0 +1,34 @@ | |||
1 | AdrParam Param | ||
2 | AdrValue Value | ||
3 | AgentParam Param | ||
4 | ContentLine Entity | ||
5 | DateParam Param | ||
6 | DateValue Value | ||
7 | EmailParam Param | ||
8 | GeoValue Value | ||
9 | Group Entity | ||
10 | ImageParam Param | ||
11 | ImageValue Value | ||
12 | LangValue Value | ||
13 | NValue Value | ||
14 | Param Entity | ||
15 | PhoneNumberValue Value | ||
16 | SourceParam Param | ||
17 | TelParam Param | ||
18 | TextParam Param | ||
19 | TextNSParam Param | ||
20 | TextValue Value | ||
21 | TextBinParam Param | ||
22 | URIValue Value | ||
23 | VCard Entity | ||
24 | VCardEntity Entity | ||
25 | Value Entity | ||
26 | SoundValue Value | ||
27 | AgentValue Value | ||
28 | TelValue Value | ||
29 | TextBinValue Value | ||
30 | OrgValue Value | ||
31 | UTCValue Value | ||
32 | ClassValue Value | ||
33 | FloatValue Value | ||
34 | TextListValue Value | ||
diff --git a/kabc/vcard/testread.cpp b/kabc/vcard/testread.cpp new file mode 100644 index 0000000..919c661 --- a/dev/null +++ b/kabc/vcard/testread.cpp | |||
@@ -0,0 +1,129 @@ | |||
1 | #include <iostream> | ||
2 | #include <stdlib.h> | ||
3 | #include <assert.h> | ||
4 | |||
5 | #include <qfile.h> | ||
6 | #include <qtextstream.h> | ||
7 | |||
8 | #include <VCard.h> | ||
9 | |||
10 | using namespace std; | ||
11 | |||
12 | int main(int argc, char * argv[]) | ||
13 | { | ||
14 | if (argc != 2) { | ||
15 | cerr << "Usage: " << argv[0] << " <filename>" << endl; | ||
16 | exit(1); | ||
17 | } | ||
18 | |||
19 | QFile f(argv[1]); | ||
20 | |||
21 | QCString str; | ||
22 | |||
23 | if (!f.open(IO_ReadOnly)) { | ||
24 | cerr << "Couldn't open file \"" << argv[1] << endl; | ||
25 | exit(1); | ||
26 | } | ||
27 | |||
28 | QTextStream t(&f); | ||
29 | |||
30 | while (!t.eof()) | ||
31 | str += t.readLine().utf8() + '\n'; | ||
32 | |||
33 | using namespace VCARD; | ||
34 | |||
35 | // Iterate through all vCards in the file. | ||
36 | |||
37 | cout << "--------- begin ----------" << endl; | ||
38 | cout << str.data(); | ||
39 | cout << "--------- end ----------" << endl; | ||
40 | |||
41 | VCardEntity e(str); | ||
42 | |||
43 | VCardListIterator it(e.cardList()); | ||
44 | |||
45 | for (; it.current(); ++it) { | ||
46 | |||
47 | cerr << "****************** VCARD ********************" << endl; | ||
48 | |||
49 | // Create a vcard using the string representation. | ||
50 | VCard & v (*it.current()); | ||
51 | |||
52 | if (v.has(EntityEmail)) { | ||
53 | cerr << "Email parameter found" << endl; | ||
54 | |||
55 | QCString s = v.contentLine(EntityEmail)->value()->asString(); | ||
56 | |||
57 | cerr << "Email value == " << s << endl; | ||
58 | } | ||
59 | |||
60 | if (v.has(EntityNickname)) { | ||
61 | cerr << "Nickname parameter found" << endl; | ||
62 | |||
63 | cerr << "Nickname value == " << | ||
64 | v.contentLine(EntityNickname)->value()->asString() << | ||
65 | endl; | ||
66 | } | ||
67 | |||
68 | if (v.has(EntityRevision)) { | ||
69 | |||
70 | cerr << "Revision parameter found" << endl; | ||
71 | |||
72 | DateValue * d = | ||
73 | (DateValue *) | ||
74 | v.contentLine(EntityRevision)->value(); | ||
75 | |||
76 | assert(d != 0); | ||
77 | |||
78 | cerr << "Revision date: " << endl; | ||
79 | cerr << "Day : " << d->day() << endl; | ||
80 | cerr << "Month : " << d->month()<< endl; | ||
81 | cerr << "Year : " << d->year() << endl; | ||
82 | |||
83 | if (d->hasTime()) { | ||
84 | cerr << "Revision date has a time component" << endl; | ||
85 | cerr << "Revision time: " << endl; | ||
86 | cerr << "Hour : " << d->hour()<< endl; | ||
87 | cerr << "Minute : " << d->minute()<< endl; | ||
88 | cerr << "Second : " << d->second()<< endl; | ||
89 | |||
90 | } | ||
91 | else cerr << "Revision date does NOT have a time component" << endl; | ||
92 | } | ||
93 | |||
94 | if (v.has(EntityURL)) { | ||
95 | cerr << "URL Parameter found" << endl; | ||
96 | |||
97 | cerr << "URL Value == " << | ||
98 | v.contentLine(EntityURL)->value()->asString() << | ||
99 | endl; | ||
100 | |||
101 | URIValue * urlVal = | ||
102 | (URIValue *)v.contentLine(EntityURL)->value(); | ||
103 | |||
104 | assert(urlVal != 0); | ||
105 | |||
106 | cerr << "URL scheme == " << | ||
107 | urlVal->scheme() << endl; | ||
108 | |||
109 | cerr << "URL scheme specific part == " << | ||
110 | urlVal->schemeSpecificPart() << endl; | ||
111 | } | ||
112 | |||
113 | if (v.has(EntityN)) { | ||
114 | cerr << "N Parameter found" << endl; | ||
115 | |||
116 | NValue * n = | ||
117 | (NValue *)(v.contentLine(EntityN)->value()); | ||
118 | |||
119 | cerr << "Family name == " << n->family()<< endl; | ||
120 | cerr << "Given name == " << n->given()<< endl; | ||
121 | cerr << "Middle name == " << n->middle()<< endl; | ||
122 | cerr << "Prefix == " << n->prefix()<< endl; | ||
123 | cerr << "Suffix == " << n->suffix()<< endl; | ||
124 | } | ||
125 | |||
126 | cerr << "***************** END VCARD ******************" << endl; | ||
127 | } | ||
128 | } | ||
129 | |||
diff --git a/kabc/vcard/testwrite.cpp b/kabc/vcard/testwrite.cpp new file mode 100644 index 0000000..e4bbe7b --- a/dev/null +++ b/kabc/vcard/testwrite.cpp | |||
@@ -0,0 +1,41 @@ | |||
1 | #include <kaboutdata.h> | ||
2 | #include <kapplication.h> | ||
3 | #include <kdebug.h> | ||
4 | #include <klocale.h> | ||
5 | #include <kcmdlineargs.h> | ||
6 | |||
7 | #include <VCard.h> | ||
8 | |||
9 | int main(int argc,char **argv) | ||
10 | { | ||
11 | KAboutData aboutData("testwrite",I18N_NOOP("TestWritevCard"),"0.1"); | ||
12 | KCmdLineArgs::init(argc,argv,&aboutData); | ||
13 | |||
14 | KApplication app; | ||
15 | |||
16 | kdDebug() << "Test Write VCard" << endl; | ||
17 | |||
18 | using namespace VCARD; | ||
19 | |||
20 | VCard v; | ||
21 | |||
22 | ContentLine cl1; | ||
23 | cl1.setName(EntityTypeToParamName(EntityName)); | ||
24 | cl1.setValue(new TextValue("Hans Wurst")); | ||
25 | v.add(cl1); | ||
26 | |||
27 | ContentLine cl2; | ||
28 | cl2.setName(EntityTypeToParamName(EntityTelephone)); | ||
29 | cl2.setValue(new TelValue("12345")); | ||
30 | ParamList p; | ||
31 | p.append( new TelParam("home") ); | ||
32 | p.append( new TelParam("fax") ); | ||
33 | cl2.setParamList( p ); | ||
34 | v.add(cl2); | ||
35 | |||
36 | QCString str = v.asString(); | ||
37 | |||
38 | kdDebug() << "--- VCard begin ---" << endl | ||
39 | << str | ||
40 | << "--- VCard end ---" << endl; | ||
41 | } | ||
diff --git a/kabc/vcard/vCard-all.cpp b/kabc/vcard/vCard-all.cpp new file mode 100644 index 0000000..07bbcd2 --- a/dev/null +++ b/kabc/vcard/vCard-all.cpp | |||
@@ -0,0 +1,37 @@ | |||
1 | #include "AdrParam.cpp" | ||
2 | #include "AdrValue.cpp" | ||
3 | #include "AgentParam.cpp" | ||
4 | #include "AgentValue.cpp" | ||
5 | #include "ClassValue.cpp" | ||
6 | #include "ContentLine.cpp" | ||
7 | #include "DateParam.cpp" | ||
8 | #include "DateValue.cpp" | ||
9 | #include "EmailParam.cpp" | ||
10 | #include "Entity.cpp" | ||
11 | #include "Enum.cpp" | ||
12 | #include "FloatValue.cpp" | ||
13 | #include "GeoValue.cpp" | ||
14 | #include "ImageParam.cpp" | ||
15 | #include "ImageValue.cpp" | ||
16 | #include "ImgValue.cpp" | ||
17 | #include "LangValue.cpp" | ||
18 | #include "NValue.cpp" | ||
19 | #include "OrgValue.cpp" | ||
20 | #include "Param.cpp" | ||
21 | #include "PhoneNumberValue.cpp" | ||
22 | #include "RToken.cpp" | ||
23 | #include "SoundValue.cpp" | ||
24 | #include "SourceParam.cpp" | ||
25 | #include "TelParam.cpp" | ||
26 | #include "TelValue.cpp" | ||
27 | #include "TextBinParam.cpp" | ||
28 | #include "TextBinValue.cpp" | ||
29 | #include "TextListValue.cpp" | ||
30 | #include "TextParam.cpp" | ||
31 | #include "TextValue.cpp" | ||
32 | #include "URIValue.cpp" | ||
33 | #include "UTCValue.cpp" | ||
34 | #include "VCard.cpp" | ||
35 | #include "VCardEntity.cpp" | ||
36 | #include "Value.cpp" | ||
37 | |||
diff --git a/kabc/vcard21parser.cpp b/kabc/vcard21parser.cpp new file mode 100644 index 0000000..b02aac4 --- a/dev/null +++ b/kabc/vcard21parser.cpp | |||
@@ -0,0 +1,606 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Mark Westcott <mark@houseoffish.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <qmap.h> | ||
29 | #include <qregexp.h> | ||
30 | #include <kmdcodec.h> | ||
31 | |||
32 | #include "vcard21parser.h" | ||
33 | #include "vcardconverter.h" | ||
34 | |||
35 | using namespace KABC; | ||
36 | |||
37 | bool VCardLineX::isValid() const | ||
38 | { | ||
39 | // Invalid: if it is "begin:vcard" or "end:vcard" | ||
40 | if ( name == VCARD_BEGIN_N || name == VCARD_END_N ) | ||
41 | return false; | ||
42 | |||
43 | if ( name[0] == 'x' && name[1] == '-' ) // A custom x- line | ||
44 | return true; | ||
45 | |||
46 | // This is long but it makes it a bit faster (and saves me from using | ||
47 | // a tree which is probably the ideal situation, but a bit memory heavy) | ||
48 | switch( name[0] ) { | ||
49 | case 'a': | ||
50 | if ( name == VCARD_ADR && qualified && | ||
51 | (qualifiers.contains(VCARD_ADR_DOM) || | ||
52 | qualifiers.contains(VCARD_ADR_INTL) || | ||
53 | qualifiers.contains(VCARD_ADR_POSTAL) || | ||
54 | qualifiers.contains(VCARD_ADR_HOME) || | ||
55 | qualifiers.contains(VCARD_ADR_WORK) || | ||
56 | qualifiers.contains(VCARD_ADR_PREF) | ||
57 | ) ) | ||
58 | return true; | ||
59 | |||
60 | if ( name == VCARD_AGENT ) | ||
61 | return true; | ||
62 | break; | ||
63 | |||
64 | case 'b': | ||
65 | if ( name == VCARD_BDAY ) | ||
66 | return true; | ||
67 | break; | ||
68 | |||
69 | case 'c': | ||
70 | if ( name == VCARD_CATEGORIES ) | ||
71 | return true; | ||
72 | if ( name == VCARD_CLASS && qualified && | ||
73 | (qualifiers.contains(VCARD_CLASS_PUBLIC) || | ||
74 | qualifiers.contains(VCARD_CLASS_PRIVATE) || | ||
75 | qualifiers.contains(VCARD_CLASS_CONFIDENTIAL) | ||
76 | ) ) | ||
77 | return true; | ||
78 | break; | ||
79 | |||
80 | case 'e': | ||
81 | if ( name == VCARD_EMAIL && qualified && | ||
82 | (qualifiers.contains(VCARD_EMAIL_INTERNET) || | ||
83 | qualifiers.contains(VCARD_EMAIL_PREF) || | ||
84 | qualifiers.contains(VCARD_EMAIL_X400) | ||
85 | ) ) | ||
86 | return true; | ||
87 | break; | ||
88 | |||
89 | case 'f': | ||
90 | if ( name == VCARD_FN ) | ||
91 | return true; | ||
92 | break; | ||
93 | |||
94 | case 'g': | ||
95 | if ( name == VCARD_GEO ) | ||
96 | return true; | ||
97 | break; | ||
98 | |||
99 | case 'k': | ||
100 | if ( name == VCARD_KEY && qualified && | ||
101 | (qualifiers.contains(VCARD_KEY_X509) || | ||
102 | qualifiers.contains(VCARD_KEY_PGP) | ||
103 | ) ) | ||
104 | return true; | ||
105 | break; | ||
106 | |||
107 | case 'l': | ||
108 | if ( name == VCARD_LABEL ) | ||
109 | return true; | ||
110 | if ( name == VCARD_LOGO ) | ||
111 | return true; | ||
112 | break; | ||
113 | |||
114 | case 'm': | ||
115 | if ( name == VCARD_MAILER ) | ||
116 | return true; | ||
117 | break; | ||
118 | |||
119 | case 'n': | ||
120 | if ( name == VCARD_N ) | ||
121 | return true; | ||
122 | if ( name == VCARD_NAME ) | ||
123 | return true; | ||
124 | if ( name == VCARD_NICKNAME ) | ||
125 | return true; | ||
126 | if ( name == VCARD_NOTE ) | ||
127 | return true; | ||
128 | break; | ||
129 | |||
130 | case 'o': | ||
131 | if ( name == VCARD_ORG ) | ||
132 | return true; | ||
133 | break; | ||
134 | |||
135 | case 'p': | ||
136 | if ( name == VCARD_PHOTO ) | ||
137 | return true; | ||
138 | if ( name == VCARD_PROFILE ) | ||
139 | return true; | ||
140 | if ( name == VCARD_PRODID ) | ||
141 | return true; | ||
142 | break; | ||
143 | |||
144 | case 'r': | ||
145 | if ( name == VCARD_ROLE ) | ||
146 | return true; | ||
147 | if ( name == VCARD_REV ) | ||
148 | return true; | ||
149 | break; | ||
150 | |||
151 | case 's': | ||
152 | if ( name == VCARD_SOURCE ) | ||
153 | return true; | ||
154 | if ( name == VCARD_SOUND ) | ||
155 | return true; | ||
156 | break; | ||
157 | |||
158 | case 't': | ||
159 | if ( name == VCARD_TEL && qualified && | ||
160 | (qualifiers.contains(VCARD_TEL_HOME) || | ||
161 | qualifiers.contains(VCARD_TEL_WORK) || | ||
162 | qualifiers.contains(VCARD_TEL_PREF) || | ||
163 | qualifiers.contains(VCARD_TEL_VOICE) || | ||
164 | qualifiers.contains(VCARD_TEL_FAX) || | ||
165 | qualifiers.contains(VCARD_TEL_MSG) || | ||
166 | qualifiers.contains(VCARD_TEL_CELL) || | ||
167 | qualifiers.contains(VCARD_TEL_PAGER) || | ||
168 | qualifiers.contains(VCARD_TEL_BBS) || | ||
169 | qualifiers.contains(VCARD_TEL_MODEM) || | ||
170 | qualifiers.contains(VCARD_TEL_CAR) || | ||
171 | qualifiers.contains(VCARD_TEL_ISDN) || | ||
172 | qualifiers.contains(VCARD_TEL_VIDEO) || | ||
173 | qualifiers.contains(VCARD_TEL_PCS) | ||
174 | ) ) | ||
175 | return true; | ||
176 | if ( name == VCARD_TZ ) | ||
177 | return true; | ||
178 | if ( name == VCARD_TITLE ) | ||
179 | return true; | ||
180 | break; | ||
181 | |||
182 | case 'u': | ||
183 | if ( name == VCARD_URL ) | ||
184 | return true; | ||
185 | if ( name == VCARD_UID ) | ||
186 | return true; | ||
187 | break; | ||
188 | |||
189 | case 'v': | ||
190 | if ( name == VCARD_VERSION ) | ||
191 | return true; | ||
192 | break; | ||
193 | default: | ||
194 | break; | ||
195 | } | ||
196 | |||
197 | return false; | ||
198 | } | ||
199 | |||
200 | |||
201 | VCard21Parser::VCard21Parser() | ||
202 | { | ||
203 | } | ||
204 | |||
205 | VCard21Parser::~VCard21Parser() | ||
206 | { | ||
207 | } | ||
208 | |||
209 | void VCard21Parser::readFromString(KABC::AddressBook *addressbook, const QString &data) | ||
210 | { | ||
211 | KABC::Addressee mAddressee = readFromString(data); | ||
212 | addressbook->insertAddressee(mAddressee); | ||
213 | } | ||
214 | |||
215 | KABC::Addressee VCard21Parser::readFromString( const QString &data) | ||
216 | { | ||
217 | KABC::Addressee addressee; | ||
218 | VCard21ParserImpl *mVCard = VCard21ParserImpl::parseVCard(data); | ||
219 | QString tmpStr; | ||
220 | |||
221 | // Check if parsing failed | ||
222 | if (mVCard == 0) | ||
223 | { | ||
224 | kdDebug() << "Parsing failed" << endl; | ||
225 | return addressee; | ||
226 | } | ||
227 | //set the addressees name and formated name | ||
228 | QStringList tmpList = mVCard->getValues(VCARD_N); | ||
229 | QString formattedName = ""; | ||
230 | if (tmpList.count() > 0) | ||
231 | addressee.setFamilyName(tmpList[0]); | ||
232 | if (tmpList.count() > 1) | ||
233 | addressee.setGivenName(tmpList[1]); | ||
234 | if (tmpList.count() > 2) | ||
235 | addressee.setAdditionalName(tmpList[2]); | ||
236 | if (tmpList.count() > 3) | ||
237 | addressee.setPrefix(tmpList[3]); | ||
238 | if (tmpList.count() > 4) | ||
239 | addressee.setSuffix(tmpList[4]); | ||
240 | |||
241 | tmpStr = (mVCard->getValue(VCARD_FN)); | ||
242 | if (!tmpStr.isEmpty()) | ||
243 | addressee.setFormattedName(tmpStr); | ||
244 | |||
245 | //set the addressee's nick name | ||
246 | tmpStr = mVCard->getValue(VCARD_NICKNAME); | ||
247 | addressee.setNickName(tmpStr); | ||
248 | //set the addressee's organisation | ||
249 | tmpStr = mVCard->getValue(VCARD_ORG); | ||
250 | addressee.setOrganization(tmpStr); | ||
251 | //set the addressee's title | ||
252 | tmpStr = mVCard->getValue(VCARD_TITLE); | ||
253 | addressee.setTitle(tmpStr); | ||
254 | //set the addressee's email - we can only deal with two. The preferenced one and one other. | ||
255 | tmpStr = mVCard->getValue(VCARD_EMAIL, VCARD_EMAIL_INTERNET); | ||
256 | addressee.insertEmail(tmpStr, false); | ||
257 | tmpStr = mVCard->getValue(VCARD_EMAIL,VCARD_EMAIL_PREF); | ||
258 | addressee.insertEmail(tmpStr, true); | ||
259 | //set the addressee's url | ||
260 | tmpStr = mVCard->getValue(VCARD_URL); | ||
261 | if (tmpStr.isEmpty()) tmpStr = mVCard->getValue(VCARD_URL, VCARD_ADR_WORK); | ||
262 | if (tmpStr.isEmpty()) tmpStr = mVCard->getValue(VCARD_URL, VCARD_ADR_HOME); | ||
263 | if (!tmpStr.isEmpty()) { | ||
264 | addressee.setUrl(KURL(tmpStr)); | ||
265 | } | ||
266 | |||
267 | //set the addressee's birthday | ||
268 | tmpStr = mVCard->getValue(VCARD_BDAY); | ||
269 | addressee.setBirthday(VCardStringToDate(tmpStr)); | ||
270 | |||
271 | //set the addressee's phone numbers | ||
272 | for ( QValueListIterator<VCardLineX> i = mVCard->_vcdata->begin();i != mVCard->_vcdata->end(); ++i ) { | ||
273 | if ( (*i).name == VCARD_TEL ) { | ||
274 | int type = 0; | ||
275 | if ( (*i).qualified ) { | ||
276 | if ( (*i).qualifiers.contains( VCARD_TEL_HOME ) ) | ||
277 | type |= PhoneNumber::Home; | ||
278 | if ( (*i).qualifiers.contains( VCARD_TEL_WORK ) ) | ||
279 | type |= PhoneNumber::Work; | ||
280 | if ( (*i).qualifiers.contains( VCARD_TEL_PREF ) ) | ||
281 | type |= PhoneNumber::Pref; | ||
282 | // if ( (*i).qualifiers.contains( VCARD_TEL_VOICE ) ) | ||
283 | // type |= PhoneNumber::Voice; | ||
284 | if ( (*i).qualifiers.contains( VCARD_TEL_FAX ) ) | ||
285 | type |= PhoneNumber::Fax; | ||
286 | if ( (*i).qualifiers.contains( VCARD_TEL_MSG ) ) | ||
287 | type |= PhoneNumber::Msg; | ||
288 | if ( (*i).qualifiers.contains( VCARD_TEL_CELL ) ) | ||
289 | type |= PhoneNumber::Cell; | ||
290 | if ( (*i).qualifiers.contains( VCARD_TEL_PAGER ) ) | ||
291 | type |= PhoneNumber::Pager; | ||
292 | if ( (*i).qualifiers.contains( VCARD_TEL_BBS ) ) | ||
293 | type |= PhoneNumber::Bbs; | ||
294 | if ( (*i).qualifiers.contains( VCARD_TEL_MODEM ) ) | ||
295 | type |= PhoneNumber::Modem; | ||
296 | if ( (*i).qualifiers.contains( VCARD_TEL_CAR ) ) | ||
297 | type |= PhoneNumber::Car; | ||
298 | if ( (*i).qualifiers.contains( VCARD_TEL_ISDN ) ) | ||
299 | type |= PhoneNumber::Isdn; | ||
300 | if ( (*i).qualifiers.contains( VCARD_TEL_VIDEO ) ) | ||
301 | type |= PhoneNumber::Video; | ||
302 | if ( (*i).qualifiers.contains( VCARD_TEL_PCS ) ) | ||
303 | type |= PhoneNumber::Pcs; | ||
304 | } | ||
305 | addressee.insertPhoneNumber( PhoneNumber( (*i).parameters[ 0 ], type ) ); | ||
306 | } | ||
307 | } | ||
308 | |||
309 | //set the addressee's addresses | ||
310 | for ( QValueListIterator<VCardLineX> i = mVCard->_vcdata->begin();i != mVCard->_vcdata->end(); ++i ) { | ||
311 | if ( (*i).name == VCARD_ADR ) { | ||
312 | int type = 0; | ||
313 | if ( (*i).qualified ) { | ||
314 | if ( (*i).qualifiers.contains( VCARD_ADR_DOM ) ) | ||
315 | type |= Address::Dom; | ||
316 | if ( (*i).qualifiers.contains( VCARD_ADR_INTL ) ) | ||
317 | type |= Address::Intl; | ||
318 | if ( (*i).qualifiers.contains( VCARD_ADR_POSTAL ) ) | ||
319 | type |= Address::Postal; | ||
320 | if ( (*i).qualifiers.contains( VCARD_ADR_PARCEL ) ) | ||
321 | type |= Address::Parcel; | ||
322 | if ( (*i).qualifiers.contains( VCARD_ADR_HOME ) ) | ||
323 | type |= Address::Home; | ||
324 | if ( (*i).qualifiers.contains( VCARD_ADR_WORK ) ) | ||
325 | type |= Address::Work; | ||
326 | if ( (*i).qualifiers.contains( VCARD_ADR_PREF ) ) | ||
327 | type |= Address::Pref; | ||
328 | } | ||
329 | addressee.insertAddress( readAddressFromQStringList( (*i).parameters, type ) ); | ||
330 | } | ||
331 | } | ||
332 | |||
333 | //set the addressee's delivery label | ||
334 | tmpStr = mVCard->getValue(VCARD_LABEL); | ||
335 | if (!tmpStr.isEmpty()) { | ||
336 | qDebug("VCard21Parser::readFromString please verify if replace is correct"); | ||
337 | //US tmpStr.replace("\r\n","\n"); | ||
338 | tmpStr.replace( QRegExp("\r\n"), "\n" ); | ||
339 | Address tmpAddress; | ||
340 | tmpAddress.setLabel(tmpStr); | ||
341 | addressee.insertAddress(tmpAddress); | ||
342 | } | ||
343 | |||
344 | //set the addressee's notes | ||
345 | tmpStr = mVCard->getValue(VCARD_NOTE); | ||
346 | qDebug("VCard21Parser::readFromString please verify if correct"); | ||
347 | //US tmpStr.replace("\r\n","\n"); | ||
348 | tmpStr.replace( QRegExp("\r\n"), "\n" ); | ||
349 | addressee.setNote(tmpStr); | ||
350 | |||
351 | //set the addressee's timezone | ||
352 | tmpStr = mVCard->getValue(VCARD_TZ); | ||
353 | TimeZone tmpZone(tmpStr.toInt()); | ||
354 | addressee.setTimeZone(tmpZone); | ||
355 | |||
356 | //set the addressee's geographical position | ||
357 | tmpList = mVCard->getValues(VCARD_GEO); | ||
358 | if (tmpList.count()==2) | ||
359 | { | ||
360 | tmpStr = tmpList[0]; | ||
361 | float glat = tmpStr.toFloat(); | ||
362 | tmpStr = tmpList[1]; | ||
363 | float glong = tmpStr.toFloat(); | ||
364 | Geo tmpGeo(glat,glong); | ||
365 | addressee.setGeo(tmpGeo); | ||
366 | } | ||
367 | |||
368 | //set the last revision date | ||
369 | tmpStr = mVCard->getValue(VCARD_REV); | ||
370 | addressee.setRevision(VCardStringToDate(tmpStr)); | ||
371 | |||
372 | //set the role of the addressee | ||
373 | tmpStr = mVCard->getValue(VCARD_ROLE); | ||
374 | addressee.setRole(tmpStr); | ||
375 | |||
376 | return addressee; | ||
377 | } | ||
378 | |||
379 | |||
380 | |||
381 | KABC::Address VCard21Parser::readAddressFromQStringList ( const QStringList &data, const int type ) | ||
382 | { | ||
383 | KABC::Address mAddress; | ||
384 | mAddress.setType( type ); | ||
385 | |||
386 | if ( data.count() > 0 ) | ||
387 | mAddress.setPostOfficeBox( data[0] ); | ||
388 | if ( data.count() > 1 ) | ||
389 | mAddress.setExtended( data[1] ); | ||
390 | if ( data.count() > 2 ) | ||
391 | mAddress.setStreet( data[2] ); | ||
392 | if ( data.count() > 3 ) | ||
393 | mAddress.setLocality( data[3] ); | ||
394 | if ( data.count() > 4 ) | ||
395 | mAddress.setRegion( data[4] ); | ||
396 | if ( data.count() > 5 ) | ||
397 | mAddress.setPostalCode( data[5] ); | ||
398 | if ( data.count() > 6 ) | ||
399 | mAddress.setCountry( data[6] ); | ||
400 | |||
401 | return mAddress; | ||
402 | } | ||
403 | |||
404 | |||
405 | VCard21ParserImpl *VCard21ParserImpl::parseVCard( const QString& vc, int *err ) | ||
406 | { | ||
407 | int _err = 0; | ||
408 | int _state = VC_STATE_BEGIN; | ||
409 | |||
410 | QValueList<VCardLineX> *_vcdata; | ||
411 | QValueList<QString> lines; | ||
412 | |||
413 | _vcdata = new QValueList<VCardLineX>; | ||
414 | |||
415 | lines = QStringList::split( QRegExp( "[\x0d\x0a]" ), vc ); | ||
416 | |||
417 | // for each line in the vCard | ||
418 | for ( QStringList::Iterator j = lines.begin(); j != lines.end(); ++j ) { | ||
419 | VCardLineX _vcl; | ||
420 | |||
421 | // take spaces off the end - ugly but necessary hack | ||
422 | for ( int g = (*j).length()-1; g > 0 && (*j)[g].isSpace(); --g ) | ||
423 | (*j)[g] = 0; | ||
424 | |||
425 | // first token: | ||
426 | // verify state, update if necessary | ||
427 | if ( _state & VC_STATE_BEGIN) { | ||
428 | if ( !qstricmp( (*j).latin1(), VCARD_BEGIN ) ) { | ||
429 | _state = VC_STATE_BODY; | ||
430 | continue; | ||
431 | } else { | ||
432 | _err = VC_ERR_NO_BEGIN; | ||
433 | break; | ||
434 | } | ||
435 | } else if ( _state & VC_STATE_BODY ) { | ||
436 | if ( !qstricmp( (*j).latin1(), VCARD_END ) ) { | ||
437 | _state |= VC_STATE_END; | ||
438 | break; | ||
439 | } | ||
440 | |||
441 | // split into two tokens | ||
442 | int colon = (*j).find( ':' ); | ||
443 | if ( colon < 0 ) { | ||
444 | _err = VC_ERR_INVALID_LINE; | ||
445 | break; | ||
446 | } | ||
447 | |||
448 | QString key = (*j).left( colon ); | ||
449 | QString value = (*j).mid( colon + 1 ); | ||
450 | |||
451 | // check for qualifiers and | ||
452 | // set name, qualified, qualifier(s) | ||
453 | QStringList keyTokens = QStringList::split( ';', key ); | ||
454 | bool qp = false, first_pass = true; | ||
455 | bool b64 = false; | ||
456 | |||
457 | if ( keyTokens.count() > 0 ) { | ||
458 | _vcl.qualified = false; | ||
459 | _vcl.name = keyTokens[ 0 ].lower(); | ||
460 | |||
461 | for ( QStringList::Iterator z = keyTokens.begin(); z != keyTokens.end(); ++z ) { | ||
462 | QString zz = (*z).lower(); | ||
463 | if ( zz == VCARD_QUOTED_PRINTABLE || zz == VCARD_ENCODING_QUOTED_PRINTABLE ) { | ||
464 | qp = true; | ||
465 | } else if ( zz == VCARD_BASE64 ) { | ||
466 | b64 = true; | ||
467 | } else if ( !first_pass ) { | ||
468 | _vcl.qualified = true; | ||
469 | _vcl.qualifiers.append( zz ); | ||
470 | } | ||
471 | first_pass = false; | ||
472 | } | ||
473 | } else { | ||
474 | _err = VC_ERR_INVALID_LINE; | ||
475 | } | ||
476 | |||
477 | if ( _err != 0 ) | ||
478 | break; | ||
479 | |||
480 | if ( _vcl.name == VCARD_VERSION ) | ||
481 | _state |= VC_STATE_HAVE_VERSION; | ||
482 | |||
483 | if ( _vcl.name == VCARD_N || _vcl.name == VCARD_FN ) | ||
484 | _state |= VC_STATE_HAVE_N; | ||
485 | |||
486 | // second token: | ||
487 | // split into tokens by ; | ||
488 | // add to parameters vector | ||
489 | if ( b64 ) { | ||
490 | if ( value.at( value.length() - 1 ) != '=' ) | ||
491 | do { | ||
492 | value += *( ++j ); | ||
493 | } while ( (*j).at( (*j).length() - 1 ) != '=' ); | ||
494 | } else { | ||
495 | if ( qp ) { // join any split lines | ||
496 | while ( value.at( value.length() - 1 ) == '=' ) { | ||
497 | value.remove( value.length() - 1, 1 ); | ||
498 | value.append(*( ++j )); | ||
499 | } | ||
500 | } | ||
501 | _vcl.parameters = QStringList::split( ';', value, true ); | ||
502 | if ( qp ) { // decode the quoted printable | ||
503 | for ( QStringList::Iterator z = _vcl.parameters.begin(); z != _vcl.parameters.end(); ++z ) | ||
504 | *z = KCodecs::quotedPrintableDecode( (*z).latin1() ); | ||
505 | } | ||
506 | } | ||
507 | } else { | ||
508 | _err = VC_ERR_INTERNAL; | ||
509 | break; | ||
510 | } | ||
511 | |||
512 | // validate VCardLineX | ||
513 | if ( !_vcl.isValid() ) { | ||
514 | _err = VC_ERR_INVALID_LINE; | ||
515 | break; | ||
516 | } | ||
517 | |||
518 | // add to vector | ||
519 | _vcdata->append( _vcl ); | ||
520 | } | ||
521 | |||
522 | // errors to check at the last minute (exit state related) | ||
523 | if ( _err == 0 ) { | ||
524 | if ( !( _state & VC_STATE_END ) ) // we have to have an end!! | ||
525 | _err = VC_ERR_NO_END; | ||
526 | |||
527 | if ( !( _state & VC_STATE_HAVE_N ) || // we have to have the mandatories! | ||
528 | !( _state & VC_STATE_HAVE_VERSION ) ) | ||
529 | _err = VC_ERR_MISSING_MANDATORY; | ||
530 | } | ||
531 | |||
532 | // set the error message if we can, and only return an object | ||
533 | // if the vCard was valid. | ||
534 | if ( err ) | ||
535 | *err = _err; | ||
536 | |||
537 | if ( _err != 0 ) { | ||
538 | delete _vcdata; | ||
539 | return 0; | ||
540 | } | ||
541 | |||
542 | return new VCard21ParserImpl( _vcdata ); | ||
543 | } | ||
544 | |||
545 | VCard21ParserImpl::VCard21ParserImpl(QValueList<VCardLineX> *_vcd) : _vcdata(_vcd) | ||
546 | { | ||
547 | } | ||
548 | |||
549 | |||
550 | QString VCard21ParserImpl::getValue(const QString& name, const QString& qualifier) | ||
551 | { | ||
552 | QString failed; | ||
553 | const QString lowname = name.lower(); | ||
554 | const QString lowqualifier = qualifier.lower(); | ||
555 | |||
556 | for (QValueListIterator<VCardLineX> i = _vcdata->begin();i != _vcdata->end();++i) { | ||
557 | if ((*i).name == lowname && (*i).qualified && (*i).qualifiers.contains(lowqualifier)) { | ||
558 | if ((*i).parameters.count() > 0) | ||
559 | return (*i).parameters[0]; | ||
560 | else return failed; | ||
561 | } | ||
562 | } | ||
563 | return failed; | ||
564 | } | ||
565 | |||
566 | |||
567 | QString VCard21ParserImpl::getValue(const QString& name) | ||
568 | { | ||
569 | QString failed; | ||
570 | const QString lowname = name.lower(); | ||
571 | |||
572 | for (QValueListIterator<VCardLineX> i = _vcdata->begin();i != _vcdata->end();++i) { | ||
573 | if ((*i).name == lowname && !(*i).qualified) { | ||
574 | if ((*i).parameters.count() > 0) | ||
575 | return (*i).parameters[0]; | ||
576 | else return failed; | ||
577 | } | ||
578 | } | ||
579 | return failed; | ||
580 | } | ||
581 | |||
582 | |||
583 | QStringList VCard21ParserImpl::getValues(const QString& name) | ||
584 | { | ||
585 | const QString lowname = name.lower(); | ||
586 | for (QValueListIterator<VCardLineX> i = _vcdata->begin();i != _vcdata->end();++i) { | ||
587 | if ((*i).name == lowname && !(*i).qualified) | ||
588 | return (*i).parameters; | ||
589 | } | ||
590 | // failed. | ||
591 | return QStringList(); | ||
592 | } | ||
593 | |||
594 | QStringList VCard21ParserImpl::getValues(const QString& name, const QString& qualifier) | ||
595 | { | ||
596 | const QString lowname = name.lower(); | ||
597 | const QString lowqualifier = qualifier.lower(); | ||
598 | for (QValueListIterator<VCardLineX> i = _vcdata->begin();i != _vcdata->end();++i) { | ||
599 | if ((*i).name == lowname && (*i).qualified && (*i).qualifiers.contains(lowqualifier)) | ||
600 | return (*i).parameters; | ||
601 | } | ||
602 | // failed. | ||
603 | return QStringList(); | ||
604 | } | ||
605 | |||
606 | |||
diff --git a/kabc/vcard21parser.h b/kabc/vcard21parser.h new file mode 100644 index 0000000..24b0eb2 --- a/dev/null +++ b/kabc/vcard21parser.h | |||
@@ -0,0 +1,225 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | |||
4 | Copyright (c) 2002 Mark Westcott <mark@houseoffish.org> | ||
5 | Copyright (c) 2000 George Staikos <staikos@kde.org> | ||
6 | This library is free software; you can redistribute it and/or | ||
7 | modify it under the terms of the GNU Library General Public | ||
8 | License as published by the Free Software Foundation; either | ||
9 | version 2 of the License, or (at your option) any later version. | ||
10 | |||
11 | This library is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | Library General Public License for more details. | ||
15 | |||
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 | ||
18 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
19 | Boston, MA 02111-1307, USA. | ||
20 | */ | ||
21 | |||
22 | /* | ||
23 | Enhanced Version of the file for platform independent KDE tools. | ||
24 | Copyright (c) 2004 Ulf Schenk | ||
25 | |||
26 | $Id$ | ||
27 | */ | ||
28 | |||
29 | #ifndef KABC_VCARD21FORMAT_H | ||
30 | #define KABC_VCARD21FORMAT_H | ||
31 | |||
32 | #include <qdatetime.h> | ||
33 | #include <kdebug.h> | ||
34 | #include <qregexp.h> | ||
35 | #include <qstring.h> | ||
36 | #include <kurl.h> | ||
37 | #include <qvaluelist.h> | ||
38 | |||
39 | #include "addressee.h" | ||
40 | #include "addressbook.h" | ||
41 | #include "phonenumber.h" | ||
42 | |||
43 | |||
44 | #define VCARD_BEGIN "begin:vcard" | ||
45 | #define VCARD_END "end:vcard" | ||
46 | #define VCARD_BEGIN_N "begin" | ||
47 | #define VCARD_END_N "end" | ||
48 | #define VCARD_VERSION "version" | ||
49 | |||
50 | #define VCARD_FN "fn" | ||
51 | #define VCARD_N "n" | ||
52 | |||
53 | // optional | ||
54 | #define VCARD_NAME "name" | ||
55 | #define VCARD_NICKNAME "nickname" | ||
56 | #define VCARD_PHOTO "photo" | ||
57 | #define VCARD_BDAY "bday" | ||
58 | #define VCARD_ADR "adr" | ||
59 | |||
60 | // types | ||
61 | #define VCARD_ADR_DOM "dom" | ||
62 | #define VCARD_ADR_INTL "intl" | ||
63 | #define VCARD_ADR_POSTAL "postal" | ||
64 | #define VCARD_ADR_PARCEL "parcel" | ||
65 | #define VCARD_ADR_HOME "home" | ||
66 | #define VCARD_ADR_WORK "work" | ||
67 | #define VCARD_ADR_PREF "pref" | ||
68 | // values | ||
69 | #define VCARD_ADR_POBOX "PO Box" | ||
70 | #define VCARD_ADR_EXTADR "Extended Address" | ||
71 | #define VCARD_ADR_STREET "Street" | ||
72 | #define VCARD_ADR_LOCALITY "Locality" | ||
73 | #define VCARD_ADR_REGION "Region" | ||
74 | #define VCARD_ADR_POSTCODE "Postal Code" | ||
75 | #define VCARD_ADR_COUNTRY "Country Name" | ||
76 | #define VCARD_LABEL "label" | ||
77 | #define VCARD_PROFILE "profile" | ||
78 | #define VCARD_SOURCE "source" | ||
79 | #define VCARD_TEL "tel" | ||
80 | // types | ||
81 | #define VCARD_TEL_HOME "home" | ||
82 | #define VCARD_TEL_WORK "work" | ||
83 | #define VCARD_TEL_PREF "pref" | ||
84 | #define VCARD_TEL_VOICE "voice" | ||
85 | #define VCARD_TEL_FAX "fax" | ||
86 | #define VCARD_TEL_MSG "msg" | ||
87 | #define VCARD_TEL_CELL "cell" | ||
88 | #define VCARD_TEL_PAGER "pager" | ||
89 | #define VCARD_TEL_BBS "bbs" | ||
90 | #define VCARD_TEL_MODEM "modem" | ||
91 | #define VCARD_TEL_CAR "car" | ||
92 | #define VCARD_TEL_ISDN "isdn" | ||
93 | #define VCARD_TEL_VIDEO "video" | ||
94 | #define VCARD_TEL_PCS "pcs" | ||
95 | #define VCARD_EMAIL "email" | ||
96 | // types | ||
97 | #define VCARD_EMAIL_PREF "pref" | ||
98 | #define VCARD_EMAIL_INTERNET "internet" | ||
99 | #define VCARD_EMAIL_X400 "x400" | ||
100 | #define VCARD_TZ "tz" | ||
101 | #define VCARD_GEO "geo" | ||
102 | #define VCARD_MAILER "mailer" | ||
103 | #define VCARD_TITLE "title" | ||
104 | #define VCARD_ROLE "role" | ||
105 | #define VCARD_LOGO "logo" | ||
106 | #define VCARD_AGENT "agent" | ||
107 | #define VCARD_ORG "org" | ||
108 | #define VCARD_CATEGORIES "categories" | ||
109 | #define VCARD_NOTE "note" | ||
110 | #define VCARD_PRODID "prodid" | ||
111 | #define VCARD_REV "rev" | ||
112 | #define VCARD_SOUND "sound" | ||
113 | #define VCARD_UID "uid" | ||
114 | #define VCARD_URL "url" | ||
115 | #define VCARD_CLASS "class" | ||
116 | #define VCARD_CLASS_PUBLIC "public" | ||
117 | #define VCARD_CLASS_PRIVATE "private" | ||
118 | #define VCARD_CLASS_CONFIDENTIAL "confidential" | ||
119 | #define VCARD_KEY "key" | ||
120 | // types | ||
121 | #define VCARD_KEY_X509 "x509" | ||
122 | #define VCARD_KEY_PGP "pgp" | ||
123 | |||
124 | #define VCARD_QUOTED_PRINTABLE "quoted-printable" | ||
125 | // this one is a temporary hack until we support TYPE=VALUE | ||
126 | #define VCARD_ENCODING_QUOTED_PRINTABLE "encoding=quoted-printable" | ||
127 | #define VCARD_BASE64 "base64" | ||
128 | |||
129 | #define VC_STATE_BEGIN 1 | ||
130 | #define VC_STATE_BODY 2 | ||
131 | #define VC_STATE_END 4 | ||
132 | #define VC_STATE_HAVE_N 8 | ||
133 | #define VC_STATE_HAVE_VERSION 16 | ||
134 | |||
135 | #define VC_ERR_NO_BEGIN 1 | ||
136 | #define VC_ERR_NO_END 2 | ||
137 | #define VC_ERR_INVALID_LINE 3 | ||
138 | #define VC_ERR_INTERNAL 4 | ||
139 | #define VC_ERR_INVALID_NAME 5 | ||
140 | #define VC_ERR_MISSING_MANDATORY 6 | ||
141 | |||
142 | namespace KABC { | ||
143 | |||
144 | class AddressBook; | ||
145 | |||
146 | class VCard21Parser | ||
147 | { | ||
148 | public: | ||
149 | |||
150 | /** | ||
151 | * Constructor. | ||
152 | */ | ||
153 | VCard21Parser(); | ||
154 | |||
155 | /** | ||
156 | * Destructor. | ||
157 | */ | ||
158 | virtual ~VCard21Parser(); | ||
159 | |||
160 | /** | ||
161 | * Parses a string in vcard2.1 format and saves the single addressees | ||
162 | * to the address book. | ||
163 | * | ||
164 | * @param ab The address book. | ||
165 | * @param str The vcard string. | ||
166 | */ | ||
167 | void readFromString( KABC::AddressBook *ab, const QString &str ); | ||
168 | |||
169 | /** | ||
170 | * FIXME: we need a writeToString method | ||
171 | * QString writeToString (KABC::AddressBook *); | ||
172 | */ | ||
173 | |||
174 | /** | ||
175 | * Parses a string in vcard2.1 format and returns the inherent addressee. | ||
176 | */ | ||
177 | KABC::Addressee readFromString( const QString &data); | ||
178 | |||
179 | /** | ||
180 | * Helper method to store a address. | ||
181 | * | ||
182 | * @param data A string list, that is filled with 'street', 'house number' ... | ||
183 | * @param type The type of the returned address. | ||
184 | */ | ||
185 | static KABC::Address readAddressFromQStringList (const QStringList &data, const int type); | ||
186 | }; | ||
187 | |||
188 | } | ||
189 | |||
190 | /** | ||
191 | * @short Helper class | ||
192 | */ | ||
193 | class VCardLineX | ||
194 | { | ||
195 | public: | ||
196 | QString name; | ||
197 | bool qualified; | ||
198 | QValueList<QString> qualifiers; | ||
199 | QValueList<QString> parameters; | ||
200 | bool isValid() const; | ||
201 | }; | ||
202 | |||
203 | /** | ||
204 | * @short Helper class | ||
205 | */ | ||
206 | class VCard21ParserImpl | ||
207 | { | ||
208 | friend class VCardLineX; | ||
209 | |||
210 | public: | ||
211 | VCard21ParserImpl() { }; | ||
212 | virtual ~VCard21ParserImpl() { }; | ||
213 | static VCard21ParserImpl *parseVCard(const QString& vc, int *err = NULL); | ||
214 | QString getValue(const QString& name, const QString& qualifier); | ||
215 | QString getValue(const QString& name); | ||
216 | QStringList getValues(const QString& name, const QString& qualifier); | ||
217 | QStringList getValues(const QString& name); | ||
218 | |||
219 | QValueList<VCardLineX> *_vcdata; | ||
220 | |||
221 | private: | ||
222 | VCard21ParserImpl (QValueList<VCardLineX> *_vcd); | ||
223 | }; | ||
224 | |||
225 | #endif | ||
diff --git a/kabc/vcardconverter.cpp b/kabc/vcardconverter.cpp new file mode 100644 index 0000000..266cdf9 --- a/dev/null +++ b/kabc/vcardconverter.cpp | |||
@@ -0,0 +1,115 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | //US | ||
29 | #include "kglobal.h" | ||
30 | |||
31 | #include "vcard21parser.h" | ||
32 | #include "vcardformatimpl.h" | ||
33 | |||
34 | #include "vcardconverter.h" | ||
35 | |||
36 | using namespace KABC; | ||
37 | |||
38 | struct VCardConverter::VCardConverterData | ||
39 | { | ||
40 | VCard21Parser vcard21parser; | ||
41 | VCardFormatImpl vcard30parser; | ||
42 | }; | ||
43 | |||
44 | VCardConverter::VCardConverter() | ||
45 | : d( new VCardConverterData ) | ||
46 | { | ||
47 | } | ||
48 | |||
49 | VCardConverter::~VCardConverter() | ||
50 | { | ||
51 | delete d; | ||
52 | d = 0; | ||
53 | } | ||
54 | |||
55 | bool VCardConverter::vCardToAddressee( const QString &str, Addressee &addr, Version version ) | ||
56 | { | ||
57 | if ( version == v2_1 ) { | ||
58 | addr = d->vcard21parser.readFromString( str ); | ||
59 | return true; | ||
60 | } | ||
61 | |||
62 | if ( version == v3_0 ) | ||
63 | return d->vcard30parser.readFromString( str, addr ); | ||
64 | |||
65 | return false; | ||
66 | } | ||
67 | |||
68 | bool VCardConverter::addresseeToVCard( const Addressee &addr, QString &str, Version version ) | ||
69 | { | ||
70 | if ( version == v2_1 ) | ||
71 | return false; | ||
72 | |||
73 | if ( version == v3_0 ) | ||
74 | return d->vcard30parser.writeToString( addr, str ); | ||
75 | |||
76 | return false; | ||
77 | } | ||
78 | |||
79 | |||
80 | /* Helper functions */ | ||
81 | |||
82 | QString KABC::dateToVCardString( const QDateTime &dateTime ) | ||
83 | { | ||
84 | qDebug("vcardconverter.cpp : KABC::dateToVCardString transformation does not work yet"); | ||
85 | return KGlobal::locale()->formatDate(dateTime.date(), true); | ||
86 | //US return dateTime.toString("yyyyMMddThhmmssZ"); | ||
87 | } | ||
88 | |||
89 | QString KABC::dateToVCardString( const QDate &date ) | ||
90 | { | ||
91 | qDebug("vcardconverter.cpp : KABC::dateToVCardString transformation does not work yet"); | ||
92 | return KGlobal::locale()->formatDate(date, true); | ||
93 | //US return date.toString("yyyyMMdd"); | ||
94 | } | ||
95 | |||
96 | QDateTime KABC::VCardStringToDate( const QString &dateString ) | ||
97 | { | ||
98 | QDate date; | ||
99 | QTime time; | ||
100 | QString d( dateString ); | ||
101 | |||
102 | //US I hope this is correct | ||
103 | //US d = d.remove('-').remove(':'); | ||
104 | d = d.replace( QRegExp("-"), "" ); | ||
105 | d = d.replace( QRegExp(":"), "" ); | ||
106 | |||
107 | |||
108 | if (d.length()>=8) | ||
109 | date = QDate( d.mid(0,4).toUInt(), d.mid(4,2).toUInt(), d.mid(6,2).toUInt() ); | ||
110 | if (d.length()>9 && d[8].upper()=='T') | ||
111 | time = QTime( d.mid(9,2).toUInt(), d.mid(11,2).toUInt(), d.mid(13,2).toUInt() ); | ||
112 | |||
113 | return QDateTime( date, time ); | ||
114 | } | ||
115 | |||
diff --git a/kabc/vcardconverter.h b/kabc/vcardconverter.h new file mode 100644 index 0000000..52259fc --- a/dev/null +++ b/kabc/vcardconverter.h | |||
@@ -0,0 +1,120 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_VCARDCONVERTER_H | ||
29 | #define KABC_VCARDCONVERTER_H | ||
30 | |||
31 | #include <qstring.h> | ||
32 | |||
33 | #include "addressee.h" | ||
34 | |||
35 | namespace KABC { | ||
36 | |||
37 | /** | ||
38 | * Class to convert a vcard string to a addressee and vice versa. | ||
39 | * At the moment there exists read support for vCard2.1 and vCard3.0 | ||
40 | * and write support for vCard3.0 | ||
41 | */ | ||
42 | class VCardConverter | ||
43 | { | ||
44 | public: | ||
45 | |||
46 | /** | ||
47 | * @li v2_1 - VCard format version 2.1 | ||
48 | * @li v3_0 - VCard format version 3.0 | ||
49 | */ | ||
50 | enum Version | ||
51 | { | ||
52 | v2_1, | ||
53 | v3_0 | ||
54 | }; | ||
55 | |||
56 | /** | ||
57 | * Constructor. | ||
58 | */ | ||
59 | VCardConverter(); | ||
60 | |||
61 | /** | ||
62 | * Destructor. | ||
63 | */ | ||
64 | ~VCardConverter(); | ||
65 | |||
66 | /** | ||
67 | * Converts a vcard string to an addressee. | ||
68 | * | ||
69 | * @param str The vcard string. | ||
70 | * @param addr The addressee. | ||
71 | * @param version The version of the vcard string. | ||
72 | */ | ||
73 | bool vCardToAddressee( const QString &str, Addressee &addr, Version version = v3_0 ); | ||
74 | |||
75 | /** | ||
76 | * Converts an addressee to a vcard string. | ||
77 | * | ||
78 | * @param addr The addressee. | ||
79 | * @param str The vcard string. | ||
80 | * @param version The version of the vcard string. | ||
81 | */ | ||
82 | bool addresseeToVCard( const Addressee &addr, QString &str, Version version = v3_0 ); | ||
83 | |||
84 | private: | ||
85 | struct VCardConverterData; | ||
86 | VCardConverterData *d; | ||
87 | }; | ||
88 | |||
89 | |||
90 | /** | ||
91 | Helper functions | ||
92 | */ | ||
93 | |||
94 | /** | ||
95 | * Converts a QDateTime to a date string as it is used in VCard and LDIF files. | ||
96 | * The return value is in the form "yyyyMMddThhmmssZ" (e.g. "20031201T120000Z") | ||
97 | * @param dateTime date and time to be converted | ||
98 | * @since 3.2 | ||
99 | */ | ||
100 | QString dateToVCardString( const QDateTime &dateTime ); | ||
101 | |||
102 | /** | ||
103 | * Converts a QDate to a short date string as it is used in VCard and LDIF files. | ||
104 | * The return value is in the form "yyyyMMdd" (e.g. "20031201") | ||
105 | * @param date date to be converted | ||
106 | * @since 3.2 | ||
107 | */ | ||
108 | QString dateToVCardString( const QDate &date ); | ||
109 | |||
110 | /** | ||
111 | * Converts a date string as it is used in VCard and LDIF files to a QDateTime value. | ||
112 | * If the date string does not contain a time value, it will be returned as 00:00:00. | ||
113 | * (e.g. "20031201T120000" will return a QDateTime for 2003-12-01 at 12:00) | ||
114 | * @param dateString string representing the date and time. | ||
115 | * @since 3.2 | ||
116 | */ | ||
117 | QDateTime VCardStringToDate( const QString &dateString ); | ||
118 | |||
119 | } | ||
120 | #endif | ||
diff --git a/kabc/vcardformatimpl.cpp b/kabc/vcardformatimpl.cpp new file mode 100644 index 0000000..f90f813 --- a/dev/null +++ b/kabc/vcardformatimpl.cpp | |||
@@ -0,0 +1,1023 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #include <qfile.h> | ||
29 | #include <qregexp.h> | ||
30 | |||
31 | #include <kdebug.h> | ||
32 | #include <kmdcodec.h> | ||
33 | #include <kstandarddirs.h> | ||
34 | #include <ktempfile.h> | ||
35 | |||
36 | #include <VCard.h> | ||
37 | |||
38 | #include "addressbook.h" | ||
39 | #include "vcardformatimpl.h" | ||
40 | |||
41 | using namespace KABC; | ||
42 | using namespace VCARD; | ||
43 | |||
44 | bool VCardFormatImpl::load( Addressee &addressee, QFile *file ) | ||
45 | { | ||
46 | kdDebug(5700) << "VCardFormat::load()" << endl; | ||
47 | |||
48 | QByteArray fdata = file->readAll(); | ||
49 | QCString data(fdata.data(), fdata.size()+1); | ||
50 | |||
51 | VCardEntity e( data ); | ||
52 | |||
53 | VCardListIterator it( e.cardList() ); | ||
54 | |||
55 | if ( it.current() ) { | ||
56 | VCard v(*it.current()); | ||
57 | loadAddressee( addressee, v ); | ||
58 | return true; | ||
59 | } | ||
60 | |||
61 | return false; | ||
62 | } | ||
63 | |||
64 | bool VCardFormatImpl::loadAll( AddressBook *addressBook, Resource *resource, QFile *file ) | ||
65 | { | ||
66 | kdDebug(5700) << "VCardFormat::loadAll()" << endl; | ||
67 | |||
68 | QByteArray fdata = file->readAll(); | ||
69 | QCString data(fdata.data(), fdata.size()+1); | ||
70 | |||
71 | VCardEntity e( data ); | ||
72 | |||
73 | VCardListIterator it( e.cardList() ); | ||
74 | |||
75 | for (; it.current(); ++it) { | ||
76 | VCard v(*it.current()); | ||
77 | Addressee addressee; | ||
78 | loadAddressee( addressee, v ); | ||
79 | addressee.setResource( resource ); | ||
80 | addressBook->insertAddressee( addressee ); | ||
81 | } | ||
82 | |||
83 | return true; | ||
84 | } | ||
85 | |||
86 | void VCardFormatImpl::save( const Addressee &addressee, QFile *file ) | ||
87 | { | ||
88 | VCardEntity vcards; | ||
89 | VCardList vcardlist; | ||
90 | vcardlist.setAutoDelete( true ); | ||
91 | |||
92 | VCard *v = new VCard; | ||
93 | |||
94 | saveAddressee( addressee, v, false ); | ||
95 | |||
96 | vcardlist.append( v ); | ||
97 | vcards.setCardList( vcardlist ); | ||
98 | |||
99 | QCString vcardData = vcards.asString(); | ||
100 | file->writeBlock( (const char*)vcardData, vcardData.length() ); | ||
101 | } | ||
102 | |||
103 | void VCardFormatImpl::saveAll( AddressBook *ab, Resource *resource, QFile *file ) | ||
104 | { | ||
105 | VCardEntity vcards; | ||
106 | VCardList vcardlist; | ||
107 | vcardlist.setAutoDelete( true ); | ||
108 | |||
109 | AddressBook::Iterator it; | ||
110 | for ( it = ab->begin(); it != ab->end(); ++it ) { | ||
111 | if ( (*it).resource() == resource ) { | ||
112 | VCard *v = new VCard; | ||
113 | saveAddressee( (*it), v, false ); | ||
114 | (*it).setChanged( false ); | ||
115 | vcardlist.append( v ); | ||
116 | } | ||
117 | } | ||
118 | |||
119 | vcards.setCardList( vcardlist ); | ||
120 | |||
121 | QCString vcardData = vcards.asString(); | ||
122 | file->writeBlock( (const char*)vcardData, vcardData.length() ); | ||
123 | } | ||
124 | |||
125 | bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCard &v ) | ||
126 | { | ||
127 | QPtrList<ContentLine> contentLines = v.contentLineList(); | ||
128 | ContentLine *cl; | ||
129 | |||
130 | for( cl = contentLines.first(); cl; cl = contentLines.next() ) { | ||
131 | QCString n = cl->name(); | ||
132 | if ( n.left( 2 ) == "X-" ) { | ||
133 | n = n.mid( 2 ); | ||
134 | int posDash = n.find( "-" ); | ||
135 | addressee.insertCustom( QString::fromUtf8( n.left( posDash ) ), | ||
136 | QString::fromUtf8( n.mid( posDash + 1 ) ), | ||
137 | QString::fromUtf8( cl->value()->asString() ) ); | ||
138 | continue; | ||
139 | } | ||
140 | |||
141 | EntityType type = cl->entityType(); | ||
142 | switch( type ) { | ||
143 | |||
144 | case EntityUID: | ||
145 | addressee.setUid( readTextValue( cl ) ); | ||
146 | break; | ||
147 | |||
148 | case EntityEmail: | ||
149 | addressee.insertEmail( readTextValue( cl ) ); | ||
150 | break; | ||
151 | |||
152 | case EntityName: | ||
153 | addressee.setName( readTextValue( cl ) ); | ||
154 | break; | ||
155 | |||
156 | case EntityFullName: | ||
157 | addressee.setFormattedName( readTextValue( cl ) ); | ||
158 | break; | ||
159 | |||
160 | case EntityURL: | ||
161 | addressee.setUrl( KURL( readTextValue( cl ) ) ); | ||
162 | break; | ||
163 | |||
164 | case EntityNickname: | ||
165 | addressee.setNickName( readTextValue( cl ) ); | ||
166 | break; | ||
167 | |||
168 | case EntityLabel: | ||
169 | // not yet supported by kabc | ||
170 | break; | ||
171 | |||
172 | case EntityMailer: | ||
173 | addressee.setMailer( readTextValue( cl ) ); | ||
174 | break; | ||
175 | |||
176 | case EntityTitle: | ||
177 | addressee.setTitle( readTextValue( cl ) ); | ||
178 | break; | ||
179 | |||
180 | case EntityRole: | ||
181 | addressee.setRole( readTextValue( cl ) ); | ||
182 | break; | ||
183 | |||
184 | case EntityOrganisation: | ||
185 | addressee.setOrganization( readTextValue( cl ) ); | ||
186 | break; | ||
187 | |||
188 | case EntityNote: | ||
189 | addressee.setNote( readTextValue( cl ) ); | ||
190 | break; | ||
191 | |||
192 | case EntityProductID: | ||
193 | addressee.setProductId( readTextValue( cl ) ); | ||
194 | break; | ||
195 | |||
196 | case EntitySortString: | ||
197 | addressee.setSortString( readTextValue( cl ) ); | ||
198 | break; | ||
199 | |||
200 | case EntityN: | ||
201 | readNValue( cl, addressee ); | ||
202 | break; | ||
203 | |||
204 | case EntityAddress: | ||
205 | addressee.insertAddress( readAddressValue( cl ) ); | ||
206 | break; | ||
207 | |||
208 | case EntityTelephone: | ||
209 | addressee.insertPhoneNumber( readTelephoneValue( cl ) ); | ||
210 | break; | ||
211 | |||
212 | case EntityCategories: | ||
213 | addressee.setCategories( QStringList::split( ",", readTextValue( cl ) ) ); | ||
214 | break; | ||
215 | |||
216 | case EntityBirthday: | ||
217 | addressee.setBirthday( readDateValue( cl ) ); | ||
218 | break; | ||
219 | |||
220 | case EntityRevision: | ||
221 | addressee.setRevision( readDateTimeValue( cl ) ); | ||
222 | break; | ||
223 | |||
224 | case EntityGeo: | ||
225 | addressee.setGeo( readGeoValue( cl ) ); | ||
226 | break; | ||
227 | |||
228 | case EntityTimeZone: | ||
229 | addressee.setTimeZone( readUTCValue( cl ) ); | ||
230 | break; | ||
231 | |||
232 | case EntityVersion: | ||
233 | break; | ||
234 | |||
235 | case EntityClass: | ||
236 | addressee.setSecrecy( readClassValue( cl ) ); | ||
237 | break; | ||
238 | |||
239 | case EntityKey: | ||
240 | addressee.insertKey( readKeyValue( cl ) ); | ||
241 | break; | ||
242 | |||
243 | case EntityPhoto: | ||
244 | addressee.setPhoto( readPictureValue( cl, EntityPhoto, addressee ) ); | ||
245 | break; | ||
246 | |||
247 | case EntityLogo: | ||
248 | addressee.setLogo( readPictureValue( cl, EntityLogo, addressee ) ); | ||
249 | break; | ||
250 | |||
251 | case EntityAgent: | ||
252 | addressee.setAgent( readAgentValue( cl ) ); | ||
253 | break; | ||
254 | |||
255 | case EntitySound: | ||
256 | addressee.setSound( readSoundValue( cl, addressee ) ); | ||
257 | break; | ||
258 | |||
259 | default: | ||
260 | kdDebug(5700) << "VCardFormat::load(): Unsupported entity: " | ||
261 | << int( type ) << ": " << cl->asString() << endl; | ||
262 | break; | ||
263 | } | ||
264 | } | ||
265 | |||
266 | for( cl = contentLines.first(); cl; cl = contentLines.next() ) { | ||
267 | EntityType type = cl->entityType(); | ||
268 | if ( type == EntityLabel ) { | ||
269 | int type = readAddressParam( cl ); | ||
270 | Address address = addressee.address( type ); | ||
271 | if ( address.isEmpty() ) | ||
272 | address.setType( type ); | ||
273 | |||
274 | address.setLabel( QString::fromUtf8( cl->value()->asString() ) ); | ||
275 | addressee.insertAddress( address ); | ||
276 | } | ||
277 | } | ||
278 | |||
279 | return true; | ||
280 | } | ||
281 | |||
282 | void VCardFormatImpl::saveAddressee( const Addressee &addressee, VCard *v, bool intern ) | ||
283 | { | ||
284 | ContentLine cl; | ||
285 | QString value; | ||
286 | |||
287 | addTextValue( v, EntityName, addressee.name() ); | ||
288 | addTextValue( v, EntityUID, addressee.uid() ); | ||
289 | addTextValue( v, EntityFullName, addressee.formattedName() ); | ||
290 | |||
291 | QStringList emails = addressee.emails(); | ||
292 | QStringList::ConstIterator it4; | ||
293 | for( it4 = emails.begin(); it4 != emails.end(); ++it4 ) { | ||
294 | addTextValue( v, EntityEmail, *it4 ); | ||
295 | } | ||
296 | |||
297 | QStringList customs = addressee.customs(); | ||
298 | QStringList::ConstIterator it5; | ||
299 | for( it5 = customs.begin(); it5 != customs.end(); ++it5 ) { | ||
300 | addCustomValue( v, *it5 ); | ||
301 | } | ||
302 | |||
303 | addTextValue( v, EntityURL, addressee.url().url() ); | ||
304 | |||
305 | addNValue( v, addressee ); | ||
306 | |||
307 | addTextValue( v, EntityNickname, addressee.nickName() ); | ||
308 | addTextValue( v, EntityMailer, addressee.mailer() ); | ||
309 | addTextValue( v, EntityTitle, addressee.title() ); | ||
310 | addTextValue( v, EntityRole, addressee.role() ); | ||
311 | addTextValue( v, EntityOrganisation, addressee.organization() ); | ||
312 | addTextValue( v, EntityNote, addressee.note() ); | ||
313 | addTextValue( v, EntityProductID, addressee.productId() ); | ||
314 | addTextValue( v, EntitySortString, addressee.sortString() ); | ||
315 | |||
316 | Address::List addresses = addressee.addresses(); | ||
317 | Address::List::ConstIterator it3; | ||
318 | for( it3 = addresses.begin(); it3 != addresses.end(); ++it3 ) { | ||
319 | addAddressValue( v, *it3 ); | ||
320 | addLabelValue( v, *it3 ); | ||
321 | } | ||
322 | |||
323 | PhoneNumber::List phoneNumbers = addressee.phoneNumbers(); | ||
324 | PhoneNumber::List::ConstIterator it2; | ||
325 | for( it2 = phoneNumbers.begin(); it2 != phoneNumbers.end(); ++it2 ) { | ||
326 | addTelephoneValue( v, *it2 ); | ||
327 | } | ||
328 | |||
329 | Key::List keys = addressee.keys(); | ||
330 | Key::List::ConstIterator it6; | ||
331 | for( it6 = keys.begin(); it6 != keys.end(); ++it6 ) { | ||
332 | addKeyValue( v, *it6 ); | ||
333 | } | ||
334 | |||
335 | addTextValue( v, EntityCategories, addressee.categories().join(",") ); | ||
336 | |||
337 | addDateValue( v, EntityBirthday, addressee.birthday().date() ); | ||
338 | addDateTimeValue( v, EntityRevision, addressee.revision() ); | ||
339 | addGeoValue( v, addressee.geo() ); | ||
340 | addUTCValue( v, addressee.timeZone() ); | ||
341 | |||
342 | addClassValue( v, addressee.secrecy() ); | ||
343 | |||
344 | addPictureValue( v, EntityPhoto, addressee.photo(), addressee, intern ); | ||
345 | addPictureValue( v, EntityLogo, addressee.logo(), addressee, intern ); | ||
346 | |||
347 | addAgentValue( v, addressee.agent() ); | ||
348 | |||
349 | addSoundValue( v, addressee.sound(), addressee, intern ); | ||
350 | } | ||
351 | |||
352 | void VCardFormatImpl::addCustomValue( VCard *v, const QString &txt ) | ||
353 | { | ||
354 | if ( txt.isEmpty() ) return; | ||
355 | |||
356 | ContentLine cl; | ||
357 | cl.setName( "X-" + txt.left( txt.find( ":" ) ).utf8() ); | ||
358 | QString value = txt.mid( txt.find( ":" ) + 1 ); | ||
359 | if ( value.isEmpty() ) | ||
360 | return; | ||
361 | cl.setValue( new TextValue( value.utf8() ) ); | ||
362 | v->add(cl); | ||
363 | } | ||
364 | |||
365 | void VCardFormatImpl::addTextValue( VCard *v, EntityType type, const QString &txt ) | ||
366 | { | ||
367 | if ( txt.isEmpty() ) return; | ||
368 | |||
369 | ContentLine cl; | ||
370 | cl.setName( EntityTypeToParamName( type ) ); | ||
371 | cl.setValue( new TextValue( txt.utf8() ) ); | ||
372 | v->add(cl); | ||
373 | } | ||
374 | |||
375 | void VCardFormatImpl::addDateValue( VCard *vcard, EntityType type, | ||
376 | const QDate &date ) | ||
377 | { | ||
378 | if ( !date.isValid() ) return; | ||
379 | |||
380 | ContentLine cl; | ||
381 | cl.setName( EntityTypeToParamName( type ) ); | ||
382 | |||
383 | DateValue *v = new DateValue( date ); | ||
384 | cl.setValue( v ); | ||
385 | vcard->add(cl); | ||
386 | } | ||
387 | |||
388 | void VCardFormatImpl::addDateTimeValue( VCard *vcard, EntityType type, | ||
389 | const QDateTime &dateTime ) | ||
390 | { | ||
391 | if ( !dateTime.isValid() ) return; | ||
392 | |||
393 | ContentLine cl; | ||
394 | cl.setName( EntityTypeToParamName( type ) ); | ||
395 | |||
396 | DateValue *v = new DateValue( dateTime ); | ||
397 | cl.setValue( v ); | ||
398 | vcard->add(cl); | ||
399 | } | ||
400 | |||
401 | void VCardFormatImpl::addAddressValue( VCard *vcard, const Address &a ) | ||
402 | { | ||
403 | if ( a.isEmpty() ) | ||
404 | return; | ||
405 | |||
406 | ContentLine cl; | ||
407 | cl.setName( EntityTypeToParamName( EntityAddress ) ); | ||
408 | |||
409 | AdrValue *v = new AdrValue; | ||
410 | v->setPOBox( a.postOfficeBox().utf8() ); | ||
411 | v->setExtAddress( a.extended().utf8() ); | ||
412 | v->setStreet( a.street().utf8() ); | ||
413 | v->setLocality( a.locality().utf8() ); | ||
414 | v->setRegion( a.region().utf8() ); | ||
415 | v->setPostCode( a.postalCode().utf8() ); | ||
416 | v->setCountryName( a.country().utf8() ); | ||
417 | cl.setValue( v ); | ||
418 | |||
419 | addAddressParam( &cl, a.type() ); | ||
420 | |||
421 | vcard->add( cl ); | ||
422 | } | ||
423 | |||
424 | void VCardFormatImpl::addLabelValue( VCard *vcard, const Address &a ) | ||
425 | { | ||
426 | if ( a.label().isEmpty() ) return; | ||
427 | |||
428 | ContentLine cl; | ||
429 | cl.setName( EntityTypeToParamName( EntityLabel ) ); | ||
430 | cl.setValue( new TextValue( a.label().utf8() ) ); | ||
431 | |||
432 | addAddressParam( &cl, a.type() ); | ||
433 | |||
434 | vcard->add( cl ); | ||
435 | } | ||
436 | |||
437 | void VCardFormatImpl::addAddressParam( ContentLine *cl, int type ) | ||
438 | { | ||
439 | ParamList params; | ||
440 | if ( type & Address::Dom ) params.append( new Param( "TYPE", "dom" ) ); | ||
441 | if ( type & Address::Intl ) params.append( new Param( "TYPE", "intl" ) ); | ||
442 | if ( type & Address::Parcel ) params.append( new Param( "TYPE", "parcel" ) ); | ||
443 | if ( type & Address::Postal ) params.append( new Param( "TYPE", "postal" ) ); | ||
444 | if ( type & Address::Work ) params.append( new Param( "TYPE", "work" ) ); | ||
445 | if ( type & Address::Home ) params.append( new Param( "TYPE", "home" ) ); | ||
446 | if ( type & Address::Pref ) params.append( new Param( "TYPE", "pref" ) ); | ||
447 | cl->setParamList( params ); | ||
448 | } | ||
449 | |||
450 | void VCardFormatImpl::addGeoValue( VCard *vcard, const Geo &geo ) | ||
451 | { | ||
452 | if ( !geo.isValid() ) return; | ||
453 | |||
454 | ContentLine cl; | ||
455 | cl.setName( EntityTypeToParamName( EntityGeo ) ); | ||
456 | |||
457 | GeoValue *v = new GeoValue; | ||
458 | v->setLatitude( geo.latitude() ); | ||
459 | v->setLongitude( geo.longitude() ); | ||
460 | |||
461 | cl.setValue( v ); | ||
462 | vcard->add(cl); | ||
463 | } | ||
464 | |||
465 | void VCardFormatImpl::addUTCValue( VCard *vcard, const TimeZone &tz ) | ||
466 | { | ||
467 | if ( !tz.isValid() ) return; | ||
468 | |||
469 | ContentLine cl; | ||
470 | cl.setName( EntityTypeToParamName( EntityTimeZone ) ); | ||
471 | |||
472 | UTCValue *v = new UTCValue; | ||
473 | |||
474 | v->setPositive( tz.offset() >= 0 ); | ||
475 | v->setHour( (tz.offset() / 60) * ( tz.offset() >= 0 ? 1 : -1 ) ); | ||
476 | v->setMinute( (tz.offset() % 60) * ( tz.offset() >= 0 ? 1 : -1 ) ); | ||
477 | |||
478 | cl.setValue( v ); | ||
479 | vcard->add(cl); | ||
480 | } | ||
481 | |||
482 | void VCardFormatImpl::addClassValue( VCard *vcard, const Secrecy &secrecy ) | ||
483 | { | ||
484 | ContentLine cl; | ||
485 | cl.setName( EntityTypeToParamName( EntityClass ) ); | ||
486 | |||
487 | ClassValue *v = new ClassValue; | ||
488 | switch ( secrecy.type() ) { | ||
489 | case Secrecy::Public: | ||
490 | v->setType( (int)ClassValue::Public ); | ||
491 | break; | ||
492 | case Secrecy::Private: | ||
493 | v->setType( (int)ClassValue::Private ); | ||
494 | break; | ||
495 | case Secrecy::Confidential: | ||
496 | v->setType( (int)ClassValue::Confidential ); | ||
497 | break; | ||
498 | } | ||
499 | |||
500 | cl.setValue( v ); | ||
501 | vcard->add(cl); | ||
502 | } | ||
503 | |||
504 | |||
505 | Address VCardFormatImpl::readAddressValue( ContentLine *cl ) | ||
506 | { | ||
507 | Address a; | ||
508 | AdrValue *v = (AdrValue *)cl->value(); | ||
509 | a.setPostOfficeBox( QString::fromUtf8( v->poBox() ) ); | ||
510 | a.setExtended( QString::fromUtf8( v->extAddress() ) ); | ||
511 | a.setStreet( QString::fromUtf8( v->street() ) ); | ||
512 | a.setLocality( QString::fromUtf8( v->locality() ) ); | ||
513 | a.setRegion( QString::fromUtf8( v->region() ) ); | ||
514 | a.setPostalCode( QString::fromUtf8( v->postCode() ) ); | ||
515 | a.setCountry( QString::fromUtf8( v->countryName() ) ); | ||
516 | |||
517 | a.setType( readAddressParam( cl ) ); | ||
518 | |||
519 | return a; | ||
520 | } | ||
521 | |||
522 | int VCardFormatImpl::readAddressParam( ContentLine *cl ) | ||
523 | { | ||
524 | int type = 0; | ||
525 | ParamList params = cl->paramList(); | ||
526 | ParamListIterator it( params ); | ||
527 | for( ; it.current(); ++it ) { | ||
528 | if ( (*it)->name() == "TYPE" ) { | ||
529 | if ( (*it)->value() == "dom" ) type |= Address::Dom; | ||
530 | else if ( (*it)->value() == "intl" ) type |= Address::Intl; | ||
531 | else if ( (*it)->value() == "parcel" ) type |= Address::Parcel; | ||
532 | else if ( (*it)->value() == "postal" ) type |= Address::Postal; | ||
533 | else if ( (*it)->value() == "work" ) type |= Address::Work; | ||
534 | else if ( (*it)->value() == "home" ) type |= Address::Home; | ||
535 | else if ( (*it)->value() == "pref" ) type |= Address::Pref; | ||
536 | } | ||
537 | } | ||
538 | return type; | ||
539 | } | ||
540 | |||
541 | void VCardFormatImpl::addNValue( VCard *vcard, const Addressee &a ) | ||
542 | { | ||
543 | ContentLine cl; | ||
544 | cl.setName(EntityTypeToParamName( EntityN ) ); | ||
545 | NValue *v = new NValue; | ||
546 | v->setFamily( a.familyName().utf8() ); | ||
547 | v->setGiven( a.givenName().utf8() ); | ||
548 | v->setMiddle( a.additionalName().utf8() ); | ||
549 | v->setPrefix( a.prefix().utf8() ); | ||
550 | v->setSuffix( a.suffix().utf8() ); | ||
551 | |||
552 | cl.setValue( v ); | ||
553 | vcard->add(cl); | ||
554 | } | ||
555 | |||
556 | void VCardFormatImpl::readNValue( ContentLine *cl, Addressee &a ) | ||
557 | { | ||
558 | NValue *v = (NValue *)cl->value(); | ||
559 | a.setFamilyName( QString::fromUtf8( v->family() ) ); | ||
560 | a.setGivenName( QString::fromUtf8( v->given() ) ); | ||
561 | a.setAdditionalName( QString::fromUtf8( v->middle() ) ); | ||
562 | a.setPrefix( QString::fromUtf8( v->prefix() ) ); | ||
563 | a.setSuffix( QString::fromUtf8( v->suffix() ) ); | ||
564 | } | ||
565 | |||
566 | void VCardFormatImpl::addTelephoneValue( VCard *v, const PhoneNumber &p ) | ||
567 | { | ||
568 | if ( p.number().isEmpty() ) | ||
569 | return; | ||
570 | |||
571 | ContentLine cl; | ||
572 | cl.setName(EntityTypeToParamName(EntityTelephone)); | ||
573 | cl.setValue(new TelValue( p.number().utf8() )); | ||
574 | |||
575 | ParamList params; | ||
576 | if( p.type() & PhoneNumber::Home ) params.append( new Param( "TYPE", "home" ) ); | ||
577 | if( p.type() & PhoneNumber::Work ) params.append( new Param( "TYPE", "work" ) ); | ||
578 | if( p.type() & PhoneNumber::Msg ) params.append( new Param( "TYPE", "msg" ) ); | ||
579 | if( p.type() & PhoneNumber::Pref ) params.append( new Param( "TYPE", "pref" ) ); | ||
580 | if( p.type() & PhoneNumber::Voice ) params.append( new Param( "TYPE", "voice" ) ); | ||
581 | if( p.type() & PhoneNumber::Fax ) params.append( new Param( "TYPE", "fax" ) ); | ||
582 | if( p.type() & PhoneNumber::Cell ) params.append( new Param( "TYPE", "cell" ) ); | ||
583 | if( p.type() & PhoneNumber::Video ) params.append( new Param( "TYPE", "video" ) ); | ||
584 | if( p.type() & PhoneNumber::Bbs ) params.append( new Param( "TYPE", "bbs" ) ); | ||
585 | if( p.type() & PhoneNumber::Modem ) params.append( new Param( "TYPE", "modem" ) ); | ||
586 | if( p.type() & PhoneNumber::Car ) params.append( new Param( "TYPE", "car" ) ); | ||
587 | if( p.type() & PhoneNumber::Isdn ) params.append( new Param( "TYPE", "isdn" ) ); | ||
588 | if( p.type() & PhoneNumber::Pcs ) params.append( new Param( "TYPE", "pcs" ) ); | ||
589 | if( p.type() & PhoneNumber::Pager ) params.append( new Param( "TYPE", "pager" ) ); | ||
590 | cl.setParamList( params ); | ||
591 | |||
592 | v->add(cl); | ||
593 | } | ||
594 | |||
595 | PhoneNumber VCardFormatImpl::readTelephoneValue( ContentLine *cl ) | ||
596 | { | ||
597 | PhoneNumber p; | ||
598 | TelValue *value = (TelValue *)cl->value(); | ||
599 | p.setNumber( QString::fromUtf8( value->asString() ) ); | ||
600 | |||
601 | int type = 0; | ||
602 | ParamList params = cl->paramList(); | ||
603 | ParamListIterator it( params ); | ||
604 | for( ; it.current(); ++it ) { | ||
605 | if ( (*it)->name() == "TYPE" ) { | ||
606 | if ( (*it)->value() == "home" ) type |= PhoneNumber::Home; | ||
607 | else if ( (*it)->value() == "work" ) type |= PhoneNumber::Work; | ||
608 | else if ( (*it)->value() == "msg" ) type |= PhoneNumber::Msg; | ||
609 | else if ( (*it)->value() == "pref" ) type |= PhoneNumber::Pref; | ||
610 | else if ( (*it)->value() == "voice" ) type |= PhoneNumber::Voice; | ||
611 | else if ( (*it)->value() == "fax" ) type |= PhoneNumber::Fax; | ||
612 | else if ( (*it)->value() == "cell" ) type |= PhoneNumber::Cell; | ||
613 | else if ( (*it)->value() == "video" ) type |= PhoneNumber::Video; | ||
614 | else if ( (*it)->value() == "bbs" ) type |= PhoneNumber::Bbs; | ||
615 | else if ( (*it)->value() == "modem" ) type |= PhoneNumber::Modem; | ||
616 | else if ( (*it)->value() == "car" ) type |= PhoneNumber::Car; | ||
617 | else if ( (*it)->value() == "isdn" ) type |= PhoneNumber::Isdn; | ||
618 | else if ( (*it)->value() == "pcs" ) type |= PhoneNumber::Pcs; | ||
619 | else if ( (*it)->value() == "pager" ) type |= PhoneNumber::Pager; | ||
620 | } | ||
621 | } | ||
622 | p.setType( type ); | ||
623 | |||
624 | return p; | ||
625 | } | ||
626 | |||
627 | QString VCardFormatImpl::readTextValue( ContentLine *cl ) | ||
628 | { | ||
629 | VCARD::Value *value = cl->value(); | ||
630 | if ( value ) { | ||
631 | return QString::fromUtf8( value->asString() ); | ||
632 | } else { | ||
633 | kdDebug(5700) << "No value: " << cl->asString() << endl; | ||
634 | return QString::null; | ||
635 | } | ||
636 | } | ||
637 | |||
638 | QDate VCardFormatImpl::readDateValue( ContentLine *cl ) | ||
639 | { | ||
640 | DateValue *dateValue = (DateValue *)cl->value(); | ||
641 | if ( dateValue ) | ||
642 | return dateValue->qdate(); | ||
643 | else | ||
644 | return QDate(); | ||
645 | } | ||
646 | |||
647 | QDateTime VCardFormatImpl::readDateTimeValue( ContentLine *cl ) | ||
648 | { | ||
649 | DateValue *dateValue = (DateValue *)cl->value(); | ||
650 | if ( dateValue ) | ||
651 | return dateValue->qdt(); | ||
652 | else | ||
653 | return QDateTime(); | ||
654 | } | ||
655 | |||
656 | Geo VCardFormatImpl::readGeoValue( ContentLine *cl ) | ||
657 | { | ||
658 | GeoValue *geoValue = (GeoValue *)cl->value(); | ||
659 | if ( geoValue ) { | ||
660 | Geo geo( geoValue->latitude(), geoValue->longitude() ); | ||
661 | return geo; | ||
662 | } else | ||
663 | return Geo(); | ||
664 | } | ||
665 | |||
666 | TimeZone VCardFormatImpl::readUTCValue( ContentLine *cl ) | ||
667 | { | ||
668 | UTCValue *utcValue = (UTCValue *)cl->value(); | ||
669 | if ( utcValue ) { | ||
670 | TimeZone tz; | ||
671 | tz.setOffset(((utcValue->hour()*60)+utcValue->minute())*(utcValue->positive() ? 1 : -1)); | ||
672 | return tz; | ||
673 | } else | ||
674 | return TimeZone(); | ||
675 | } | ||
676 | |||
677 | Secrecy VCardFormatImpl::readClassValue( ContentLine *cl ) | ||
678 | { | ||
679 | ClassValue *classValue = (ClassValue *)cl->value(); | ||
680 | if ( classValue ) { | ||
681 | Secrecy secrecy; | ||
682 | switch ( classValue->type() ) { | ||
683 | case ClassValue::Public: | ||
684 | secrecy.setType( Secrecy::Public ); | ||
685 | break; | ||
686 | case ClassValue::Private: | ||
687 | secrecy.setType( Secrecy::Private ); | ||
688 | break; | ||
689 | case ClassValue::Confidential: | ||
690 | secrecy.setType( Secrecy::Confidential ); | ||
691 | break; | ||
692 | } | ||
693 | |||
694 | return secrecy; | ||
695 | } else | ||
696 | return Secrecy(); | ||
697 | } | ||
698 | |||
699 | void VCardFormatImpl::addKeyValue( VCARD::VCard *vcard, const Key &key ) | ||
700 | { | ||
701 | ContentLine cl; | ||
702 | cl.setName( EntityTypeToParamName( EntityKey ) ); | ||
703 | |||
704 | ParamList params; | ||
705 | if ( key.isBinary() ) { | ||
706 | cl.setValue( new TextValue( KCodecs::base64Encode( key.binaryData() ) ) ); | ||
707 | params.append( new Param( "ENCODING", "b" ) ); | ||
708 | } else { | ||
709 | cl.setValue( new TextValue( key.textData().utf8() ) ); | ||
710 | } | ||
711 | |||
712 | switch ( key.type() ) { | ||
713 | case Key::X509: | ||
714 | params.append( new Param( "TYPE", "X509" ) ); | ||
715 | break; | ||
716 | case Key::PGP: | ||
717 | params.append( new Param( "TYPE", "PGP" ) ); | ||
718 | break; | ||
719 | case Key::Custom: | ||
720 | params.append( new Param( "TYPE", key.customTypeString().utf8() ) ); | ||
721 | break; | ||
722 | } | ||
723 | |||
724 | cl.setParamList( params ); | ||
725 | vcard->add( cl ); | ||
726 | } | ||
727 | |||
728 | Key VCardFormatImpl::readKeyValue( VCARD::ContentLine *cl ) | ||
729 | { | ||
730 | Key key; | ||
731 | bool isBinary = false; | ||
732 | TextValue *v = (TextValue *)cl->value(); | ||
733 | |||
734 | ParamList params = cl->paramList(); | ||
735 | ParamListIterator it( params ); | ||
736 | for( ; it.current(); ++it ) { | ||
737 | if ( (*it)->name() == "ENCODING" && (*it)->value() == "b" ) | ||
738 | isBinary = true; | ||
739 | if ( (*it)->name() == "TYPE" ) { | ||
740 | if ( (*it)->value().isEmpty() ) | ||
741 | continue; | ||
742 | if ( (*it)->value() == "X509" ) | ||
743 | key.setType( Key::X509 ); | ||
744 | else if ( (*it)->value() == "PGP" ) | ||
745 | key.setType( Key::PGP ); | ||
746 | else { | ||
747 | key.setType( Key::Custom ); | ||
748 | key.setCustomTypeString( QString::fromUtf8( (*it)->value() ) ); | ||
749 | } | ||
750 | } | ||
751 | } | ||
752 | |||
753 | |||
754 | if ( isBinary ) { | ||
755 | QByteArray data; | ||
756 | KCodecs::base64Decode( v->asString().stripWhiteSpace(), data ); | ||
757 | key.setBinaryData( data ); | ||
758 | } else { | ||
759 | key.setTextData( QString::fromUtf8( v->asString() ) ); | ||
760 | } | ||
761 | |||
762 | return key; | ||
763 | } | ||
764 | |||
765 | |||
766 | void VCardFormatImpl::addAgentValue( VCARD::VCard *vcard, const Agent &agent ) | ||
767 | { | ||
768 | if ( agent.isIntern() && !agent.addressee() ) | ||
769 | return; | ||
770 | |||
771 | if ( !agent.isIntern() && agent.url().isEmpty() ) | ||
772 | return; | ||
773 | |||
774 | ContentLine cl; | ||
775 | cl.setName( EntityTypeToParamName( EntityAgent ) ); | ||
776 | |||
777 | ParamList params; | ||
778 | if ( agent.isIntern() ) { | ||
779 | QString vstr; | ||
780 | Addressee *addr = agent.addressee(); | ||
781 | if ( addr ) { | ||
782 | writeToString( (*addr), vstr ); | ||
783 | |||
784 | qDebug("VCardFormatImpl::addAgentValue please verify if replace is correct"); | ||
785 | /*US | ||
786 | vstr.replace( ":", "\\:" ); | ||
787 | vstr.replace( ",", "\\," ); | ||
788 | vstr.replace( ";", "\\;" ); | ||
789 | vstr.replace( "\r\n", "\\n" ); | ||
790 | */ | ||
791 | vstr.replace( QRegExp(":"), "\\:" ); | ||
792 | vstr.replace( QRegExp(","), "\\," ); | ||
793 | vstr.replace( QRegExp(";"), "\\;" ); | ||
794 | vstr.replace( QRegExp("\r\n"), "\\n" ); | ||
795 | |||
796 | cl.setValue( new TextValue( vstr.utf8() ) ); | ||
797 | } else | ||
798 | return; | ||
799 | } else { | ||
800 | cl.setValue( new TextValue( agent.url().utf8() ) ); | ||
801 | params.append( new Param( "VALUE", "uri" ) ); | ||
802 | } | ||
803 | |||
804 | cl.setParamList( params ); | ||
805 | vcard->add( cl ); | ||
806 | } | ||
807 | |||
808 | Agent VCardFormatImpl::readAgentValue( VCARD::ContentLine *cl ) | ||
809 | { | ||
810 | Agent agent; | ||
811 | bool isIntern = true; | ||
812 | TextValue *v = (TextValue *)cl->value(); | ||
813 | |||
814 | ParamList params = cl->paramList(); | ||
815 | ParamListIterator it( params ); | ||
816 | for( ; it.current(); ++it ) { | ||
817 | if ( (*it)->name() == "VALUE" && (*it)->value() == "uri" ) | ||
818 | isIntern = false; | ||
819 | } | ||
820 | |||
821 | if ( isIntern ) { | ||
822 | QString vstr = QString::fromUtf8( v->asString() ); | ||
823 | qDebug("VCardFormatImpl::addAgentValue please verify if replace is correct"); | ||
824 | /*US | ||
825 | vstr.replace( "\\n", "\r\n" ); | ||
826 | vstr.replace( "\\:", ":" ); | ||
827 | vstr.replace( "\\,", "," ); | ||
828 | vstr.replace( "\\;", ";" ); | ||
829 | */ | ||
830 | vstr.replace( QRegExp("\\n"), "\r\n" ); | ||
831 | vstr.replace( QRegExp("\\:"), ":" ); | ||
832 | vstr.replace( QRegExp("\\,"), "," ); | ||
833 | vstr.replace( QRegExp("\\;"), ";" ); | ||
834 | |||
835 | Addressee *addr = new Addressee; | ||
836 | readFromString( vstr, *addr ); | ||
837 | agent.setAddressee( addr ); | ||
838 | } else { | ||
839 | agent.setUrl( QString::fromUtf8( v->asString() ) ); | ||
840 | } | ||
841 | |||
842 | return agent; | ||
843 | } | ||
844 | |||
845 | void VCardFormatImpl::addPictureValue( VCARD::VCard *vcard, VCARD::EntityType type, const Picture &pic, const Addressee &addr, bool intern ) | ||
846 | { | ||
847 | ContentLine cl; | ||
848 | cl.setName( EntityTypeToParamName( type ) ); | ||
849 | |||
850 | if ( pic.isIntern() && pic.data().isNull() ) | ||
851 | return; | ||
852 | |||
853 | if ( !pic.isIntern() && pic.url().isEmpty() ) | ||
854 | return; | ||
855 | |||
856 | ParamList params; | ||
857 | if ( pic.isIntern() ) { | ||
858 | QImage img = pic.data(); | ||
859 | if ( intern ) { // only for vCard export we really write the data inline | ||
860 | QByteArray data; | ||
861 | QDataStream s( data, IO_WriteOnly ); | ||
862 | s.setVersion( 4 ); // to produce valid png files | ||
863 | s << img; | ||
864 | cl.setValue( new TextValue( KCodecs::base64Encode( data ) ) ); | ||
865 | |||
866 | } else { // save picture in cache | ||
867 | QString dir; | ||
868 | if ( type == EntityPhoto ) | ||
869 | dir = "photos"; | ||
870 | if ( type == EntityLogo ) | ||
871 | dir = "logos"; | ||
872 | |||
873 | img.save( locateLocal( "data", "kabc/" + dir + "/" + addr.uid() ), pic.type().utf8() ); | ||
874 | cl.setValue( new TextValue( "<dummy>" ) ); | ||
875 | } | ||
876 | params.append( new Param( "ENCODING", "b" ) ); | ||
877 | if ( !pic.type().isEmpty() ) | ||
878 | params.append( new Param( "TYPE", pic.type().utf8() ) ); | ||
879 | } else { | ||
880 | |||
881 | cl.setValue( new TextValue( pic.url().utf8() ) ); | ||
882 | params.append( new Param( "VALUE", "uri" ) ); | ||
883 | } | ||
884 | |||
885 | cl.setParamList( params ); | ||
886 | vcard->add( cl ); | ||
887 | } | ||
888 | |||
889 | Picture VCardFormatImpl::readPictureValue( VCARD::ContentLine *cl, VCARD::EntityType type, const Addressee &addr ) | ||
890 | { | ||
891 | Picture pic; | ||
892 | bool isInline = false; | ||
893 | QString picType; | ||
894 | TextValue *v = (TextValue *)cl->value(); | ||
895 | |||
896 | ParamList params = cl->paramList(); | ||
897 | ParamListIterator it( params ); | ||
898 | for( ; it.current(); ++it ) { | ||
899 | if ( (*it)->name() == "ENCODING" && (*it)->value() == "b" ) | ||
900 | isInline = true; | ||
901 | if ( (*it)->name() == "TYPE" && !(*it)->value().isEmpty() ) | ||
902 | picType = QString::fromUtf8( (*it)->value() ); | ||
903 | } | ||
904 | |||
905 | if ( isInline ) { | ||
906 | QImage img; | ||
907 | if ( v->asString() == "<dummy>" ) { // no picture inline stored => picture is in cache | ||
908 | QString dir; | ||
909 | if ( type == EntityPhoto ) | ||
910 | dir = "photos"; | ||
911 | if ( type == EntityLogo ) | ||
912 | dir = "logos"; | ||
913 | |||
914 | img.load( locateLocal( "data", "kabc/" + dir + "/" + addr.uid() ) ); | ||
915 | } else { | ||
916 | QByteArray data; | ||
917 | KCodecs::base64Decode( v->asString(), data ); | ||
918 | img.loadFromData( data ); | ||
919 | } | ||
920 | pic.setData( img ); | ||
921 | pic.setType( picType ); | ||
922 | } else { | ||
923 | pic.setUrl( QString::fromUtf8( v->asString() ) ); | ||
924 | } | ||
925 | |||
926 | return pic; | ||
927 | } | ||
928 | |||
929 | void VCardFormatImpl::addSoundValue( VCARD::VCard *vcard, const Sound &sound, const Addressee &addr, bool intern ) | ||
930 | { | ||
931 | ContentLine cl; | ||
932 | cl.setName( EntityTypeToParamName( EntitySound ) ); | ||
933 | |||
934 | if ( sound.isIntern() && sound.data().isNull() ) | ||
935 | return; | ||
936 | |||
937 | if ( !sound.isIntern() && sound.url().isEmpty() ) | ||
938 | return; | ||
939 | |||
940 | ParamList params; | ||
941 | if ( sound.isIntern() ) { | ||
942 | QByteArray data = sound.data(); | ||
943 | if ( intern ) { // only for vCard export we really write the data inline | ||
944 | cl.setValue( new TextValue( KCodecs::base64Encode( data ) ) ); | ||
945 | } else { // save sound in cache | ||
946 | QFile file( locateLocal( "data", "kabc/sounds/" + addr.uid() ) ); | ||
947 | if ( file.open( IO_WriteOnly ) ) { | ||
948 | file.writeBlock( data ); | ||
949 | } | ||
950 | cl.setValue( new TextValue( "<dummy>" ) ); | ||
951 | } | ||
952 | params.append( new Param( "ENCODING", "b" ) ); | ||
953 | } else { | ||
954 | cl.setValue( new TextValue( sound.url().utf8() ) ); | ||
955 | params.append( new Param( "VALUE", "uri" ) ); | ||
956 | } | ||
957 | |||
958 | cl.setParamList( params ); | ||
959 | vcard->add( cl ); | ||
960 | } | ||
961 | |||
962 | Sound VCardFormatImpl::readSoundValue( VCARD::ContentLine *cl, const Addressee &addr ) | ||
963 | { | ||
964 | Sound sound; | ||
965 | bool isInline = false; | ||
966 | TextValue *v = (TextValue *)cl->value(); | ||
967 | |||
968 | ParamList params = cl->paramList(); | ||
969 | ParamListIterator it( params ); | ||
970 | for( ; it.current(); ++it ) { | ||
971 | if ( (*it)->name() == "ENCODING" && (*it)->value() == "b" ) | ||
972 | isInline = true; | ||
973 | } | ||
974 | |||
975 | if ( isInline ) { | ||
976 | QByteArray data; | ||
977 | if ( v->asString() == "<dummy>" ) { // no sound inline stored => sound is in cache | ||
978 | QFile file( locateLocal( "data", "kabc/sounds/" + addr.uid() ) ); | ||
979 | if ( file.open( IO_ReadOnly ) ) { | ||
980 | data = file.readAll(); | ||
981 | file.close(); | ||
982 | } | ||
983 | } else { | ||
984 | KCodecs::base64Decode( v->asString(), data ); | ||
985 | } | ||
986 | sound.setData( data ); | ||
987 | } else { | ||
988 | sound.setUrl( QString::fromUtf8( v->asString() ) ); | ||
989 | } | ||
990 | |||
991 | return sound; | ||
992 | } | ||
993 | |||
994 | bool VCardFormatImpl::readFromString( const QString &vcard, Addressee &addressee ) | ||
995 | { | ||
996 | VCardEntity e( vcard.utf8() ); | ||
997 | VCardListIterator it( e.cardList() ); | ||
998 | |||
999 | if ( it.current() ) { | ||
1000 | VCard v(*it.current()); | ||
1001 | loadAddressee( addressee, v ); | ||
1002 | return true; | ||
1003 | } | ||
1004 | |||
1005 | return false; | ||
1006 | } | ||
1007 | |||
1008 | bool VCardFormatImpl::writeToString( const Addressee &addressee, QString &vcard ) | ||
1009 | { | ||
1010 | VCardEntity vcards; | ||
1011 | VCardList vcardlist; | ||
1012 | vcardlist.setAutoDelete( true ); | ||
1013 | |||
1014 | VCard *v = new VCard; | ||
1015 | |||
1016 | saveAddressee( addressee, v, true ); | ||
1017 | |||
1018 | vcardlist.append( v ); | ||
1019 | vcards.setCardList( vcardlist ); | ||
1020 | vcard = QString::fromUtf8( vcards.asString() ); | ||
1021 | |||
1022 | return true; | ||
1023 | } | ||
diff --git a/kabc/vcardformatimpl.h b/kabc/vcardformatimpl.h new file mode 100644 index 0000000..2dd68d9 --- a/dev/null +++ b/kabc/vcardformatimpl.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | Enhanced Version of the file for platform independent KDE tools. | ||
23 | Copyright (c) 2004 Ulf Schenk | ||
24 | |||
25 | $Id$ | ||
26 | */ | ||
27 | |||
28 | #ifndef KABC_VCARDFORMATIMPL_H | ||
29 | #define KABC_VCARDFORMATIMPL_H | ||
30 | |||
31 | #include <qstring.h> | ||
32 | #include <qfile.h> | ||
33 | |||
34 | #include "address.h" | ||
35 | #include "addressee.h" | ||
36 | |||
37 | #include <VCard.h> | ||
38 | |||
39 | namespace KABC { | ||
40 | |||
41 | class AddressBook; | ||
42 | |||
43 | /** | ||
44 | @short Implementation of vCard backend for address book. | ||
45 | |||
46 | This class implements reading and writing of address book information using | ||
47 | the vCard format. It requires the vCard lib from kdepim. | ||
48 | */ | ||
49 | class VCardFormatImpl | ||
50 | { | ||
51 | public: | ||
52 | bool load( Addressee &, QFile *file ); | ||
53 | bool loadAll( AddressBook *, Resource *, QFile *file ); | ||
54 | void save( const Addressee &, QFile *file ); | ||
55 | void saveAll( AddressBook *, Resource *, QFile *file ); | ||
56 | |||
57 | bool readFromString( const QString &vcard, Addressee &addr ); | ||
58 | bool writeToString( const Addressee &addressee, QString &vcard ); | ||
59 | |||
60 | protected: | ||
61 | bool loadAddressee( Addressee &, VCARD::VCard & ); | ||
62 | void saveAddressee( const Addressee &, VCARD::VCard *, bool intern ); | ||
63 | |||
64 | void addTextValue (VCARD::VCard *, VCARD::EntityType, const QString & ); | ||
65 | QString readTextValue( VCARD::ContentLine * ); | ||
66 | |||
67 | void addDateValue( VCARD::VCard *, VCARD::EntityType, const QDate & ); | ||
68 | QDate readDateValue( VCARD::ContentLine * ); | ||
69 | |||
70 | void addDateTimeValue( VCARD::VCard *, VCARD::EntityType, const QDateTime & ); | ||
71 | QDateTime readDateTimeValue( VCARD::ContentLine * ); | ||
72 | |||
73 | void addAddressValue( VCARD::VCard *, const Address & ); | ||
74 | Address readAddressValue( VCARD::ContentLine * ); | ||
75 | |||
76 | void addLabelValue( VCARD::VCard *, const Address & ); | ||
77 | |||
78 | void addTelephoneValue( VCARD::VCard *, const PhoneNumber & ); | ||
79 | PhoneNumber readTelephoneValue( VCARD::ContentLine * ); | ||
80 | |||
81 | void addNValue( VCARD::VCard *, const Addressee & ); | ||
82 | void readNValue( VCARD::ContentLine *, Addressee & ); | ||
83 | |||
84 | void addCustomValue( VCARD::VCard *, const QString & ); | ||
85 | |||
86 | void addAddressParam( VCARD::ContentLine *, int ); | ||
87 | int readAddressParam( VCARD::ContentLine * ); | ||
88 | |||
89 | void addGeoValue( VCARD::VCard *, const Geo & ); | ||
90 | Geo readGeoValue( VCARD::ContentLine * ); | ||
91 | |||
92 | void addUTCValue( VCARD::VCard *, const TimeZone & ); | ||
93 | TimeZone readUTCValue( VCARD::ContentLine * ); | ||
94 | |||
95 | void addClassValue( VCARD::VCard *, const Secrecy & ); | ||
96 | Secrecy readClassValue( VCARD::ContentLine * ); | ||
97 | |||
98 | void addKeyValue( VCARD::VCard *, const Key & ); | ||
99 | Key readKeyValue( VCARD::ContentLine * ); | ||
100 | |||
101 | void addPictureValue( VCARD::VCard *, VCARD::EntityType, const Picture &, const Addressee &, bool ); | ||
102 | Picture readPictureValue( VCARD::ContentLine *, VCARD::EntityType, const Addressee &addr ); | ||
103 | |||
104 | void addSoundValue( VCARD::VCard *, const Sound &, const Addressee &, bool ); | ||
105 | Sound readSoundValue( VCARD::ContentLine *, const Addressee &addr ); | ||
106 | |||
107 | void addAgentValue( VCARD::VCard *, const Agent & ); | ||
108 | Agent readAgentValue( VCARD::ContentLine * ); | ||
109 | }; | ||
110 | |||
111 | } | ||
112 | #endif | ||
diff --git a/kabc/vcardformatplugin.cpp b/kabc/vcardformatplugin.cpp new file mode 100644 index 0000000..3cba59a --- a/dev/null +++ b/kabc/vcardformatplugin.cpp | |||
@@ -0,0 +1,66 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include "vcardformatplugin.h" | ||
22 | #include "vcardformatimpl.h" | ||
23 | |||
24 | using namespace KABC; | ||
25 | |||
26 | VCardFormatPlugin::VCardFormatPlugin() | ||
27 | { | ||
28 | mImpl = new VCardFormatImpl; | ||
29 | } | ||
30 | |||
31 | VCardFormatPlugin::~VCardFormatPlugin() | ||
32 | { | ||
33 | delete mImpl; | ||
34 | } | ||
35 | |||
36 | bool VCardFormatPlugin::load( Addressee &addressee, QFile *file ) | ||
37 | { | ||
38 | return mImpl->load( addressee, file ); | ||
39 | } | ||
40 | |||
41 | bool VCardFormatPlugin::loadAll( AddressBook *addressBook, Resource *resource, QFile *file ) | ||
42 | { | ||
43 | return mImpl->loadAll( addressBook, resource, file ); | ||
44 | } | ||
45 | |||
46 | void VCardFormatPlugin::save( const Addressee &addressee, QFile *file ) | ||
47 | { | ||
48 | mImpl->save( addressee, file ); | ||
49 | } | ||
50 | |||
51 | void VCardFormatPlugin::saveAll( AddressBook *addressBook, Resource *resource, QFile *file ) | ||
52 | { | ||
53 | mImpl->saveAll( addressBook, resource, file ); | ||
54 | } | ||
55 | |||
56 | bool VCardFormatPlugin::checkFormat( QFile *file ) const | ||
57 | { | ||
58 | QString line; | ||
59 | |||
60 | file->readLine( line, 1024 ); | ||
61 | line = line.stripWhiteSpace(); | ||
62 | if ( line == "BEGIN:VCARD" ) | ||
63 | return true; | ||
64 | else | ||
65 | return false; | ||
66 | } | ||
diff --git a/kabc/vcardformatplugin.h b/kabc/vcardformatplugin.h new file mode 100644 index 0000000..dc2b45d --- a/dev/null +++ b/kabc/vcardformatplugin.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef KABC_VCARDFORMATPLUGIN_H | ||
22 | #define KABC_VCARDFORMATPLUGIN_H | ||
23 | |||
24 | #include "formatplugin.h" | ||
25 | |||
26 | namespace KABC { | ||
27 | |||
28 | class AddressBook; | ||
29 | class Addressee; | ||
30 | class VCardFormatImpl; | ||
31 | |||
32 | /** | ||
33 | @short Interface of vCard backend for address book. | ||
34 | |||
35 | This class implements the file format interface of address book entries for | ||
36 | the vCard format. | ||
37 | */ | ||
38 | class VCardFormatPlugin : public FormatPlugin | ||
39 | { | ||
40 | public: | ||
41 | VCardFormatPlugin(); | ||
42 | virtual ~VCardFormatPlugin(); | ||
43 | |||
44 | bool load( Addressee &, QFile *file ); | ||
45 | bool loadAll( AddressBook *, Resource *, QFile *file ); | ||
46 | void save( const Addressee &, QFile *file ); | ||
47 | void saveAll( AddressBook *, Resource *, QFile *file ); | ||
48 | |||
49 | bool checkFormat( QFile *file ) const; | ||
50 | |||
51 | private: | ||
52 | VCardFormatImpl *mImpl; | ||
53 | }; | ||
54 | |||
55 | } | ||
56 | #endif | ||
diff --git a/kabc/vcardparser/vcard.cpp b/kabc/vcardparser/vcard.cpp new file mode 100644 index 0000000..da97ec2 --- a/dev/null +++ b/kabc/vcardparser/vcard.cpp | |||
@@ -0,0 +1,144 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include "vcard.h" | ||
22 | |||
23 | using namespace KABC; | ||
24 | |||
25 | VCard::VCard() | ||
26 | : mLineMap( 0 ) | ||
27 | { | ||
28 | } | ||
29 | |||
30 | VCard::VCard( const VCard& vcard ) | ||
31 | : mLineMap( 0 ) | ||
32 | { | ||
33 | if ( vcard.mLineMap ) { | ||
34 | if ( !mLineMap ) | ||
35 | mLineMap = new QMap<QString, QValueList<VCardLine> >; | ||
36 | |||
37 | *mLineMap = *(vcard.mLineMap); | ||
38 | } else { | ||
39 | delete mLineMap; | ||
40 | mLineMap = 0; | ||
41 | } | ||
42 | } | ||
43 | |||
44 | VCard::~VCard() | ||
45 | { | ||
46 | delete mLineMap; | ||
47 | mLineMap = 0; | ||
48 | } | ||
49 | |||
50 | VCard& VCard::operator=( const VCard& vcard ) | ||
51 | { | ||
52 | if ( &vcard == this ) | ||
53 | return *this; | ||
54 | |||
55 | if ( vcard.mLineMap ) { | ||
56 | if ( !mLineMap ) | ||
57 | mLineMap = new QMap<QString, QValueList<VCardLine> >; | ||
58 | |||
59 | *mLineMap = *(vcard.mLineMap); | ||
60 | } else { | ||
61 | delete mLineMap; | ||
62 | mLineMap = 0; | ||
63 | } | ||
64 | |||
65 | return *this; | ||
66 | } | ||
67 | |||
68 | void VCard::clear() | ||
69 | { | ||
70 | if ( mLineMap ) | ||
71 | mLineMap->clear(); | ||
72 | } | ||
73 | |||
74 | QStringList VCard::identifiers() const | ||
75 | { | ||
76 | if ( !mLineMap ) | ||
77 | return QStringList(); | ||
78 | else { | ||
79 | //US method QMap::keys() not available yet. SO collect the data manually | ||
80 | //US return mLineMap->keys(); | ||
81 | |||
82 | QStringList result; | ||
83 | |||
84 | QMap< QString, VCardLine::List >::ConstIterator it; | ||
85 | for( it = mLineMap->begin(); it != mLineMap->end(); ++it ) { | ||
86 | result << it.key().latin1(); | ||
87 | } | ||
88 | return result; | ||
89 | } | ||
90 | } | ||
91 | |||
92 | void VCard::addLine( const VCardLine& line ) | ||
93 | { | ||
94 | if ( !mLineMap ) | ||
95 | mLineMap = new QMap<QString, QValueList<VCardLine> >; | ||
96 | |||
97 | (*mLineMap)[ line.identifier() ].append( line ); | ||
98 | } | ||
99 | |||
100 | VCardLine::List VCard::lines( const QString& identifier ) | ||
101 | { | ||
102 | if ( !mLineMap ) | ||
103 | return VCardLine::List(); | ||
104 | else | ||
105 | return (*mLineMap)[ identifier ]; | ||
106 | } | ||
107 | |||
108 | VCardLine VCard::line( const QString& identifier ) | ||
109 | { | ||
110 | if ( !mLineMap ) | ||
111 | return VCardLine(); | ||
112 | else | ||
113 | return (*mLineMap)[ identifier ][ 0 ]; | ||
114 | } | ||
115 | |||
116 | void VCard::setVersion( Version version ) | ||
117 | { | ||
118 | if ( !mLineMap ) | ||
119 | mLineMap = new QMap<QString, QValueList<VCardLine> >; | ||
120 | else { | ||
121 | //US mLineMap->erase( "VERSION" ); | ||
122 | mLineMap->remove( "VERSION" ); | ||
123 | } | ||
124 | VCardLine line; | ||
125 | line.setIdentifier( "VERSION" ); | ||
126 | if ( version == v2_1 ) | ||
127 | line.setIdentifier( "2.1" ); | ||
128 | if ( version == v3_0 ) | ||
129 | line.setIdentifier( "3.0" ); | ||
130 | |||
131 | (*mLineMap)[ "VERSION" ].append( line ); | ||
132 | } | ||
133 | |||
134 | VCard::Version VCard::version() const | ||
135 | { | ||
136 | if ( !mLineMap ) | ||
137 | return v3_0; | ||
138 | |||
139 | VCardLine line = (*mLineMap)[ "VERSION" ][ 0 ]; | ||
140 | if ( line.value() == "2.1" ) | ||
141 | return v2_1; | ||
142 | else | ||
143 | return v3_0; | ||
144 | } | ||
diff --git a/kabc/vcardparser/vcard.h b/kabc/vcardparser/vcard.h new file mode 100644 index 0000000..ce672b5 --- a/dev/null +++ b/kabc/vcardparser/vcard.h | |||
@@ -0,0 +1,90 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef VCARD_H | ||
22 | #define VCARD_H | ||
23 | |||
24 | #include "vcardline.h" | ||
25 | #include <qmap.h> | ||
26 | #include <qstringlist.h> | ||
27 | #include <qvaluelist.h> | ||
28 | |||
29 | namespace KABC { | ||
30 | |||
31 | class VCard | ||
32 | { | ||
33 | public: | ||
34 | typedef QValueList<VCard> List; | ||
35 | |||
36 | enum Version { v2_1, v3_0 }; | ||
37 | |||
38 | VCard(); | ||
39 | VCard( const VCard& ); | ||
40 | |||
41 | ~VCard(); | ||
42 | |||
43 | VCard& operator=( const VCard& ); | ||
44 | |||
45 | /** | ||
46 | * Removes all lines from the vCard. | ||
47 | */ | ||
48 | void clear(); | ||
49 | |||
50 | /** | ||
51 | * Returns a list of all identifiers that exists in the | ||
52 | * vCard. | ||
53 | */ | ||
54 | QStringList identifiers() const; | ||
55 | |||
56 | /** | ||
57 | * Adds a VCardLine to the VCard | ||
58 | */ | ||
59 | void addLine( const VCardLine& line ); | ||
60 | |||
61 | /** | ||
62 | * Returns all lines of the vcard with a special identifier. | ||
63 | */ | ||
64 | VCardLine::List lines( const QString& identifier ); | ||
65 | |||
66 | /** | ||
67 | * Returns only the first line of the vcard with a special identifier. | ||
68 | */ | ||
69 | VCardLine line( const QString& identifier ); | ||
70 | |||
71 | /** | ||
72 | * Set the version of the vCard. | ||
73 | */ | ||
74 | void setVersion( Version version ); | ||
75 | |||
76 | /** | ||
77 | * Returns the version of this vCard. | ||
78 | */ | ||
79 | Version version() const; | ||
80 | |||
81 | private: | ||
82 | QMap< QString, VCardLine::List > *mLineMap; | ||
83 | |||
84 | class VCardPrivate; | ||
85 | VCardPrivate *d; | ||
86 | }; | ||
87 | |||
88 | } | ||
89 | |||
90 | #endif | ||
diff --git a/kabc/vcardparser/vcardline.cpp b/kabc/vcardparser/vcardline.cpp new file mode 100644 index 0000000..84638f8 --- a/dev/null +++ b/kabc/vcardparser/vcardline.cpp | |||
@@ -0,0 +1,148 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include "vcardline.h" | ||
22 | |||
23 | using namespace KABC; | ||
24 | |||
25 | VCardLine::VCardLine() | ||
26 | : mParamMap( 0 ) | ||
27 | { | ||
28 | } | ||
29 | |||
30 | VCardLine::VCardLine( const QString &identifier ) | ||
31 | : mParamMap( 0 ) | ||
32 | { | ||
33 | mIdentifier = identifier; | ||
34 | } | ||
35 | |||
36 | VCardLine::VCardLine( const QString &identifier, const QVariant &value ) | ||
37 | : mParamMap( 0 ) | ||
38 | { | ||
39 | mIdentifier = identifier; | ||
40 | mValue = value; | ||
41 | } | ||
42 | |||
43 | VCardLine::VCardLine( const VCardLine& line ) | ||
44 | : mParamMap( 0 ) | ||
45 | { | ||
46 | if ( line.mParamMap ) { | ||
47 | if ( !mParamMap ) | ||
48 | mParamMap = new QMap<QString, QStringList>; | ||
49 | |||
50 | *mParamMap = *(line.mParamMap); | ||
51 | } else { | ||
52 | delete mParamMap; | ||
53 | mParamMap = 0; | ||
54 | } | ||
55 | |||
56 | mValue = line.mValue; | ||
57 | mIdentifier = line.mIdentifier; | ||
58 | } | ||
59 | |||
60 | VCardLine::~VCardLine() | ||
61 | { | ||
62 | delete mParamMap; | ||
63 | mParamMap = 0; | ||
64 | } | ||
65 | |||
66 | VCardLine& VCardLine::operator=( const VCardLine& line ) | ||
67 | { | ||
68 | if ( &line == this ) | ||
69 | return *this; | ||
70 | |||
71 | if ( line.mParamMap ) { | ||
72 | if ( !mParamMap ) | ||
73 | mParamMap = new QMap<QString, QStringList>; | ||
74 | |||
75 | *mParamMap = *(line.mParamMap); | ||
76 | } else { | ||
77 | delete mParamMap; | ||
78 | mParamMap = 0; | ||
79 | } | ||
80 | |||
81 | mValue = line.mValue; | ||
82 | mIdentifier = line.mIdentifier; | ||
83 | |||
84 | return *this; | ||
85 | } | ||
86 | |||
87 | void VCardLine::setIdentifier( const QString& identifier ) | ||
88 | { | ||
89 | mIdentifier = identifier; | ||
90 | } | ||
91 | |||
92 | QString VCardLine::identifier() const | ||
93 | { | ||
94 | return mIdentifier; | ||
95 | } | ||
96 | void VCardLine::setValue( const QVariant& value ) | ||
97 | { | ||
98 | mValue = value; | ||
99 | } | ||
100 | |||
101 | QVariant VCardLine::value() const | ||
102 | { | ||
103 | return mValue; | ||
104 | } | ||
105 | |||
106 | QStringList VCardLine::parameterList() const | ||
107 | { | ||
108 | if ( !mParamMap ) | ||
109 | return QStringList(); | ||
110 | else { | ||
111 | //US method QMap::keys() not available yet. SO collect the data manually | ||
112 | //US return mParamMap->keys(); | ||
113 | |||
114 | QStringList result; | ||
115 | |||
116 | QMap<QString, QStringList>::ConstIterator it; | ||
117 | for( it = mParamMap->begin(); it != mParamMap->end(); ++it ) { | ||
118 | result << it.key().latin1(); | ||
119 | } | ||
120 | return result; | ||
121 | } | ||
122 | } | ||
123 | |||
124 | void VCardLine::addParameter( const QString& param, const QString& value ) | ||
125 | { | ||
126 | if ( !mParamMap ) | ||
127 | mParamMap = new QMap<QString, QStringList>; | ||
128 | |||
129 | QStringList &list = (*mParamMap)[ param ]; | ||
130 | if ( list.find( value ) == list.end() ) // not included yet | ||
131 | list.append( value ); | ||
132 | } | ||
133 | |||
134 | QStringList VCardLine::parameters( const QString& param ) const | ||
135 | { | ||
136 | if ( !mParamMap ) | ||
137 | return QStringList(); | ||
138 | else | ||
139 | return (*mParamMap)[ param ]; | ||
140 | } | ||
141 | |||
142 | QString VCardLine::parameter( const QString& param ) const | ||
143 | { | ||
144 | if ( !mParamMap ) | ||
145 | return QString::null; | ||
146 | else | ||
147 | return (*mParamMap)[ param ][ 0 ]; | ||
148 | } | ||
diff --git a/kabc/vcardparser/vcardline.h b/kabc/vcardparser/vcardline.h new file mode 100644 index 0000000..78b61f8 --- a/dev/null +++ b/kabc/vcardparser/vcardline.h | |||
@@ -0,0 +1,99 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef VCARDLINE_H | ||
22 | #define VCARDLINE_H | ||
23 | |||
24 | #include <qstringlist.h> | ||
25 | #include <qvaluelist.h> | ||
26 | #include <qvariant.h> | ||
27 | #include <qmap.h> | ||
28 | #include <qstring.h> | ||
29 | |||
30 | namespace KABC { | ||
31 | |||
32 | class VCardLine | ||
33 | { | ||
34 | public: | ||
35 | typedef QValueList<VCardLine> List; | ||
36 | |||
37 | VCardLine(); | ||
38 | VCardLine( const QString &identifier ); | ||
39 | VCardLine( const QString &identifier, const QVariant &value ); | ||
40 | VCardLine( const VCardLine& ); | ||
41 | |||
42 | ~VCardLine(); | ||
43 | |||
44 | VCardLine& operator=( const VCardLine& ); | ||
45 | |||
46 | /** | ||
47 | * Sets the identifier of this line e.g. UID, FN, CLASS | ||
48 | */ | ||
49 | void setIdentifier( const QString& identifier ); | ||
50 | |||
51 | /** | ||
52 | * Returns the identifier of this line. | ||
53 | */ | ||
54 | QString identifier() const; | ||
55 | |||
56 | /** | ||
57 | * Sets the value of of this line. | ||
58 | */ | ||
59 | void setValue( const QVariant& value ); | ||
60 | |||
61 | /** | ||
62 | * Returns the value of this line. | ||
63 | */ | ||
64 | QVariant value() const; | ||
65 | |||
66 | /** | ||
67 | * Returns all parameters. | ||
68 | */ | ||
69 | QStringList parameterList() const; | ||
70 | |||
71 | /** | ||
72 | * Add a new parameter to the line. | ||
73 | */ | ||
74 | void addParameter( const QString& param, const QString& value ); | ||
75 | |||
76 | /** | ||
77 | * Returns the values of a special parameter. | ||
78 | * You can get a list of all parameters with @ref paramList(). | ||
79 | */ | ||
80 | QStringList parameters( const QString& param ) const; | ||
81 | |||
82 | /** | ||
83 | * Returns only the first value of a special parameter. | ||
84 | * You can get a list of all parameters with @ref paramList(). | ||
85 | */ | ||
86 | QString parameter( const QString& param ) const; | ||
87 | |||
88 | private: | ||
89 | QMap< QString, QStringList > *mParamMap; | ||
90 | QString mIdentifier; | ||
91 | QVariant mValue; | ||
92 | |||
93 | class VCardLinePrivate; | ||
94 | VCardLinePrivate *d; | ||
95 | }; | ||
96 | |||
97 | } | ||
98 | |||
99 | #endif | ||
diff --git a/kabc/vcardparser/vcardparser.cpp b/kabc/vcardparser/vcardparser.cpp new file mode 100644 index 0000000..9ea084d --- a/dev/null +++ b/kabc/vcardparser/vcardparser.cpp | |||
@@ -0,0 +1,233 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include <qregexp.h> | ||
22 | |||
23 | #include <kmdcodec.h> | ||
24 | |||
25 | #include "vcardparser.h" | ||
26 | |||
27 | #define FOLD_WIDTH 75 | ||
28 | |||
29 | using namespace KABC; | ||
30 | |||
31 | VCardParser::VCardParser() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | VCardParser::~VCardParser() | ||
36 | { | ||
37 | } | ||
38 | |||
39 | VCard::List VCardParser::parseVCards( const QString& text ) | ||
40 | { | ||
41 | VCard currentVCard; | ||
42 | VCard::List vCardList; | ||
43 | QString currentLine; | ||
44 | |||
45 | QStringList lines = QStringList::split( QRegExp( "[\x0d\x0a]" ), text ); | ||
46 | QStringList::Iterator it; | ||
47 | |||
48 | bool inVCard = false; | ||
49 | for ( it = lines.begin(); it != lines.end(); ++it ) { | ||
50 | |||
51 | if ( (*it).isEmpty() ) // empty line | ||
52 | continue; | ||
53 | |||
54 | if ( (*it)[ 0 ] == ' ' || (*it)[ 0 ] == '\t' ) { // folded line => append to previous | ||
55 | currentLine += (*it).remove( 0, 1 ); | ||
56 | continue; | ||
57 | } else { | ||
58 | if ( inVCard && !currentLine.isEmpty() ) { // now parse the line | ||
59 | int colon = currentLine.find( ':' ); | ||
60 | if ( colon == -1 ) { // invalid line | ||
61 | currentLine = (*it); | ||
62 | continue; | ||
63 | } | ||
64 | |||
65 | VCardLine vCardLine; | ||
66 | QString key = currentLine.left( colon ).stripWhiteSpace(); | ||
67 | QString value = currentLine.mid( colon + 1 ); | ||
68 | |||
69 | QStringList params = QStringList::split( ';', key ); | ||
70 | vCardLine.setIdentifier( params[0] ); | ||
71 | if ( params.count() > 1 ) { // find all parameters | ||
72 | for ( uint i = 1; i < params.count(); ++i ) { | ||
73 | QStringList pair = QStringList::split( '=', params[i] ); | ||
74 | //US if ( pair.size() == 1 ) { | ||
75 | if ( pair.count() == 1 ) { | ||
76 | pair.prepend( "type" ); | ||
77 | } | ||
78 | if ( pair[1].contains( ',' ) ) { // parameter in type=x,y,z format | ||
79 | QStringList args = QStringList::split( ',', pair[ 1 ] ); | ||
80 | for ( uint j = 0; j < args.count(); ++j ) | ||
81 | vCardLine.addParameter( pair[0].lower(), args[j] ); | ||
82 | } else | ||
83 | vCardLine.addParameter( pair[0].lower(), pair[1] ); | ||
84 | } | ||
85 | } | ||
86 | |||
87 | params = vCardLine.parameterList(); | ||
88 | if ( params.contains( "encoding" ) ) { // have to decode the data | ||
89 | #if 0 | ||
90 | QByteArray input, output; | ||
91 | input = value.local8Bit(); | ||
92 | if ( vCardLine.parameter( "encoding" ).lower() == "b" ) | ||
93 | KCodecs::base64Decode( input, output ); | ||
94 | else if ( vCardLine.parameter( "encoding" ).lower() == "quoted-printable" ) | ||
95 | KCodecs::quotedPrintableDecode( input, output ); | ||
96 | |||
97 | //qDebug("VCardParser::parseVCards has to be verified"); | ||
98 | //US I am not sure if this is correct | ||
99 | //US vCardLine.setValue( output ); | ||
100 | QCString cs(output); | ||
101 | qDebug("len1 %d len2 %d ",input.size(), output.size( )); | ||
102 | #endif | ||
103 | QCString cs = value.local8Bit(); | ||
104 | qDebug("****************************************** "); | ||
105 | qDebug("************* WARNING ******************** "); | ||
106 | qDebug("****************************************** "); | ||
107 | qDebug("Make sure, the decoding is done after"); | ||
108 | qDebug("QVariant conversion!"); | ||
109 | qDebug("Insert Line DECODING OKAY, where this is implemented"); | ||
110 | // use for decoding the above code! | ||
111 | vCardLine.setValue( cs ); | ||
112 | } else { | ||
113 | |||
114 | //qDebug("VCardParser::parseVCards has to be verified"); | ||
115 | //US vCardLine.setValue( value.replace( "\\n", "\n" ) ); | ||
116 | vCardLine.setValue( value.replace( QRegExp("\\n"), "\n" ) ); | ||
117 | } | ||
118 | |||
119 | currentVCard.addLine( vCardLine ); | ||
120 | } | ||
121 | // we do not save the start and end tag as vcardline | ||
122 | if ( (*it).lower().startsWith( "begin:vcard" ) ) { | ||
123 | inVCard = true; | ||
124 | //qDebug("VCardParser::parseVCards has to be verified"); | ||
125 | //US currentLine.setLength( 0 ); | ||
126 | currentLine = ""; | ||
127 | currentVCard.clear(); // flush vcard | ||
128 | continue; | ||
129 | } | ||
130 | |||
131 | if ( (*it).lower().startsWith( "end:vcard" ) ) { | ||
132 | inVCard = false; | ||
133 | vCardList.append( currentVCard ); | ||
134 | //qDebug("VCardParser::parseVCards has to be verified"); | ||
135 | //US currentLine.setLength( 0 ); | ||
136 | currentLine = ""; | ||
137 | currentVCard.clear(); // flush vcard | ||
138 | continue; | ||
139 | } | ||
140 | |||
141 | currentLine = (*it); | ||
142 | } | ||
143 | } | ||
144 | |||
145 | return vCardList; | ||
146 | } | ||
147 | |||
148 | QString VCardParser::createVCards( const VCard::List& list ) | ||
149 | { | ||
150 | QString text; | ||
151 | QString textLine; | ||
152 | QString encodingType; | ||
153 | QStringList idents; | ||
154 | QStringList params; | ||
155 | QStringList values; | ||
156 | QStringList::ConstIterator identIt; | ||
157 | QStringList::Iterator paramIt; | ||
158 | QStringList::Iterator valueIt; | ||
159 | |||
160 | VCardLine::List lines; | ||
161 | VCardLine::List::Iterator lineIt; | ||
162 | VCard::List::ConstIterator cardIt; | ||
163 | |||
164 | bool hasEncoding; | ||
165 | |||
166 | |||
167 | // iterate over the cards | ||
168 | for ( cardIt = list.begin(); cardIt != list.end(); ++cardIt ) { | ||
169 | text.append( "BEGIN:VCARD\r\n" ); | ||
170 | |||
171 | idents = (*cardIt).identifiers(); | ||
172 | for ( identIt = idents.begin(); identIt != idents.end(); ++identIt ) { | ||
173 | VCard card = (*cardIt); | ||
174 | lines = card.lines( (*identIt) ); | ||
175 | |||
176 | // iterate over the lines | ||
177 | for ( lineIt = lines.begin(); lineIt != lines.end(); ++lineIt ) { | ||
178 | if ( !(*lineIt).value().asString().isEmpty() ) { | ||
179 | textLine = (*lineIt).identifier(); | ||
180 | |||
181 | params = (*lineIt).parameterList(); | ||
182 | hasEncoding = false; | ||
183 | if ( params.count() > 0 ) { // we have parameters | ||
184 | for ( paramIt = params.begin(); paramIt != params.end(); ++paramIt ) { | ||
185 | if ( (*paramIt) == "encoding" ) { | ||
186 | hasEncoding = true; | ||
187 | encodingType = (*lineIt).parameter( "encoding" ).lower(); | ||
188 | } | ||
189 | |||
190 | values = (*lineIt).parameters( *paramIt ); | ||
191 | for ( valueIt = values.begin(); valueIt != values.end(); ++valueIt ) { | ||
192 | textLine.append( ";" + (*paramIt).upper() ); | ||
193 | if ( !(*valueIt).isEmpty() ) | ||
194 | textLine.append( "=" + (*valueIt) ); | ||
195 | } | ||
196 | } | ||
197 | } | ||
198 | |||
199 | if ( hasEncoding ) { // have to encode the data | ||
200 | QByteArray input, output; | ||
201 | |||
202 | qDebug("VCardParser::createVCards has to be verified"); | ||
203 | //US input = (*lineIt).value().toByteArray(); | ||
204 | |||
205 | //US I am not sure if this is correct | ||
206 | QCString cs ((*lineIt).value().toCString()); | ||
207 | input = cs; | ||
208 | |||
209 | if ( encodingType == "b" ) | ||
210 | KCodecs::base64Encode( input, output ); | ||
211 | else if ( encodingType == "quoted-printable" ) | ||
212 | KCodecs::quotedPrintableEncode( input, output ); | ||
213 | textLine.append( ":" + QString( output ) ); | ||
214 | } else { | ||
215 | qDebug("VCardParser::createVCards has to be verified"); | ||
216 | //US textLine.append( ":" + (*lineIt).value().asString().replace( "\n", "\\n" ) ); | ||
217 | textLine.append( ":" + (*lineIt).value().asString().replace( QRegExp("\n"), "\\n" ) ); | ||
218 | } | ||
219 | if ( textLine.length() > FOLD_WIDTH ) { // we have to fold the line | ||
220 | for ( uint i = 0; i <= ( textLine.length() / FOLD_WIDTH ); ++i ) | ||
221 | text.append( ( i == 0 ? "" : " " ) + textLine.mid( i * FOLD_WIDTH, FOLD_WIDTH ) + "\r\n" ); | ||
222 | } else | ||
223 | text.append( textLine + "\r\n" ); | ||
224 | } | ||
225 | } | ||
226 | } | ||
227 | |||
228 | text.append( "END:VCARD\r\n" ); | ||
229 | text.append( "\r\n" ); | ||
230 | } | ||
231 | |||
232 | return text; | ||
233 | } | ||
diff --git a/kabc/vcardparser/vcardparser.h b/kabc/vcardparser/vcardparser.h new file mode 100644 index 0000000..ae185ef --- a/dev/null +++ b/kabc/vcardparser/vcardparser.h | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef VCARDPARSER_H | ||
22 | #define VCARDPARSER_H | ||
23 | |||
24 | #include "vcard.h" | ||
25 | |||
26 | namespace KABC { | ||
27 | |||
28 | class VCardParser | ||
29 | { | ||
30 | public: | ||
31 | VCardParser(); | ||
32 | ~VCardParser(); | ||
33 | |||
34 | static VCard::List parseVCards( const QString& text ); | ||
35 | static QString createVCards( const VCard::List& list ); | ||
36 | }; | ||
37 | |||
38 | } | ||
39 | |||
40 | #endif | ||
diff --git a/kabc/vcardparser/vcardtool.cpp b/kabc/vcardparser/vcardtool.cpp new file mode 100644 index 0000000..01c5b3e --- a/dev/null +++ b/kabc/vcardparser/vcardtool.cpp | |||
@@ -0,0 +1,883 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #include <qdatastream.h> | ||
22 | #include <qstring.h> | ||
23 | #include <qregexp.h> | ||
24 | #include <kmdcodec.h> | ||
25 | |||
26 | #include "agent.h" | ||
27 | #include "key.h" | ||
28 | #include "picture.h" | ||
29 | #include "secrecy.h" | ||
30 | #include "sound.h" | ||
31 | |||
32 | #include "vcardtool.h" | ||
33 | |||
34 | using namespace KABC; | ||
35 | |||
36 | VCardTool::VCardTool() | ||
37 | { | ||
38 | mAddressTypeMap.insert( "dom", Address::Dom ); | ||
39 | mAddressTypeMap.insert( "intl", Address::Intl ); | ||
40 | mAddressTypeMap.insert( "postal", Address::Postal ); | ||
41 | mAddressTypeMap.insert( "parcel", Address::Parcel ); | ||
42 | mAddressTypeMap.insert( "home", Address::Home ); | ||
43 | mAddressTypeMap.insert( "work", Address::Work ); | ||
44 | mAddressTypeMap.insert( "pref", Address::Pref ); | ||
45 | |||
46 | mPhoneTypeMap.insert( "HOME", PhoneNumber::Home ); | ||
47 | mPhoneTypeMap.insert( "WORK", PhoneNumber::Work ); | ||
48 | mPhoneTypeMap.insert( "MSG", PhoneNumber::Msg ); | ||
49 | mPhoneTypeMap.insert( "PREF", PhoneNumber::Pref ); | ||
50 | mPhoneTypeMap.insert( "VOICE", PhoneNumber::Voice ); | ||
51 | mPhoneTypeMap.insert( "FAX", PhoneNumber::Fax ); | ||
52 | mPhoneTypeMap.insert( "CELL", PhoneNumber::Cell ); | ||
53 | mPhoneTypeMap.insert( "VIDEO", PhoneNumber::Video ); | ||
54 | mPhoneTypeMap.insert( "BBS", PhoneNumber::Bbs ); | ||
55 | mPhoneTypeMap.insert( "MODEM", PhoneNumber::Modem ); | ||
56 | mPhoneTypeMap.insert( "CAR", PhoneNumber::Car ); | ||
57 | mPhoneTypeMap.insert( "ISDN", PhoneNumber::Isdn ); | ||
58 | mPhoneTypeMap.insert( "PCS", PhoneNumber::Pcs ); | ||
59 | mPhoneTypeMap.insert( "PAGER", PhoneNumber::Pager ); | ||
60 | } | ||
61 | |||
62 | VCardTool::~VCardTool() | ||
63 | { | ||
64 | } | ||
65 | |||
66 | QString VCardTool::createVCards( Addressee::List list, VCard::Version version ) | ||
67 | { | ||
68 | VCard::List vCardList; | ||
69 | |||
70 | Addressee::List::Iterator addrIt; | ||
71 | for ( addrIt = list.begin(); addrIt != list.end(); ++addrIt ) { | ||
72 | VCard card; | ||
73 | QStringList::ConstIterator strIt; | ||
74 | |||
75 | // ADR + LABEL | ||
76 | Address::List addresses = (*addrIt).addresses(); | ||
77 | for ( Address::List::Iterator it = addresses.begin(); it != addresses.end(); ++it ) { | ||
78 | QStringList address; | ||
79 | |||
80 | /*US | ||
81 | address.append( (*it).postOfficeBox().replace( ';', "\\;" ) ); | ||
82 | address.append( (*it).extended().replace( ';', "\\;" ) ); | ||
83 | address.append( (*it).street().replace( ';', "\\;" ) ); | ||
84 | address.append( (*it).locality().replace( ';', "\\;" ) ); | ||
85 | address.append( (*it).region().replace( ';', "\\;" ) ); | ||
86 | address.append( (*it).postalCode().replace( ';', "\\;" ) ); | ||
87 | address.append( (*it).country().replace( ';', "\\;" ) ); | ||
88 | */ | ||
89 | //US using the old implementation instead | ||
90 | //qDebug("VCardTool::createVCards has to be verified"); | ||
91 | address.append( (*it).postOfficeBox().replace( QRegExp(";"), "\\;" ) ); | ||
92 | address.append( (*it).extended().replace( QRegExp(";"), "\\;" ) ); | ||
93 | address.append( (*it).street().replace( QRegExp(";"), "\\;" ) ); | ||
94 | address.append( (*it).locality().replace( QRegExp(";"), "\\;" ) ); | ||
95 | address.append( (*it).region().replace( QRegExp(";"), "\\;" ) ); | ||
96 | address.append( (*it).postalCode().replace( QRegExp(";"), "\\;" ) ); | ||
97 | address.append( (*it).country().replace( QRegExp(";"), "\\;" ) ); | ||
98 | |||
99 | VCardLine adrLine( "ADR", address.join( ";" ) ); | ||
100 | VCardLine labelLine( "LABEL", (*it).label() ); | ||
101 | |||
102 | bool hasLabel = !(*it).label().isEmpty(); | ||
103 | QMap<QString, int>::Iterator typeIt; | ||
104 | for ( typeIt = mAddressTypeMap.begin(); typeIt != mAddressTypeMap.end(); ++typeIt ) { | ||
105 | if ( typeIt.data() & (*it).type() ) { | ||
106 | adrLine.addParameter( "TYPE", typeIt.key() ); | ||
107 | if ( hasLabel ) | ||
108 | labelLine.addParameter( "TYPE", typeIt.key() ); | ||
109 | } | ||
110 | } | ||
111 | |||
112 | card.addLine( adrLine ); | ||
113 | if ( hasLabel ) | ||
114 | card.addLine( labelLine ); | ||
115 | } | ||
116 | |||
117 | // AGENT | ||
118 | card.addLine( createAgent( version, (*addrIt).agent() ) ); | ||
119 | |||
120 | // BDAY | ||
121 | card.addLine( VCardLine( "BDAY", createDateTime( (*addrIt).birthday() ) ) ); | ||
122 | |||
123 | // CATEGORIES | ||
124 | if ( version == VCard::v3_0 ) { | ||
125 | QStringList categories = (*addrIt).categories(); | ||
126 | QStringList::Iterator catIt; | ||
127 | for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) | ||
128 | { | ||
129 | //US using the old implementation instead | ||
130 | // qDebug("VCardTool::createVCards has to be verified"); | ||
131 | //US (*catIt).replace( ',', "\\," ); | ||
132 | (*catIt).replace( QRegExp(","), "\\," ); | ||
133 | } | ||
134 | card.addLine( VCardLine( "CATEGORIES", categories.join( "," ) ) ); | ||
135 | } | ||
136 | |||
137 | // CLASS | ||
138 | if ( version == VCard::v3_0 ) { | ||
139 | card.addLine( createSecrecy( (*addrIt).secrecy() ) ); | ||
140 | } | ||
141 | |||
142 | |||
143 | QStringList emails = (*addrIt).emails(); | ||
144 | bool pref = true; | ||
145 | for ( strIt = emails.begin(); strIt != emails.end(); ++strIt ) { | ||
146 | VCardLine line( "EMAIL", *strIt ); | ||
147 | if ( pref == true ) { | ||
148 | line.addParameter( "TYPE", "PREF" ); | ||
149 | pref = false; | ||
150 | } | ||
151 | card.addLine( line ); | ||
152 | } | ||
153 | |||
154 | // FN | ||
155 | card.addLine( VCardLine( "FN", (*addrIt).formattedName() ) ); | ||
156 | |||
157 | // GEO | ||
158 | Geo geo = (*addrIt).geo(); | ||
159 | if ( geo.isValid() ) { | ||
160 | QString str; | ||
161 | str.sprintf( "%.6f;%.6f", geo.latitude(), geo.longitude() ); | ||
162 | card.addLine( VCardLine( "GEO", str ) ); | ||
163 | } | ||
164 | |||
165 | // KEY | ||
166 | Key::List keys = (*addrIt).keys(); | ||
167 | Key::List::ConstIterator keyIt; | ||
168 | for ( keyIt = keys.begin(); keyIt != keys.end(); ++keyIt ) | ||
169 | card.addLine( createKey( *keyIt ) ); | ||
170 | |||
171 | // LOGO | ||
172 | card.addLine( createPicture( "LOGO", (*addrIt).logo() ) ); | ||
173 | |||
174 | // MAILER | ||
175 | card.addLine( VCardLine( "MAILER", (*addrIt).mailer() ) ); | ||
176 | |||
177 | // N | ||
178 | QStringList name; | ||
179 | //US using the old implementation instead | ||
180 | //qDebug("VCardTool::createVCards has to be verified"); | ||
181 | /*US | ||
182 | name.append( (*addrIt).familyName().replace( ';', "\\;" ) ); | ||
183 | name.append( (*addrIt).givenName().replace( ';', "\\;" ) ); | ||
184 | name.append( (*addrIt).additionalName().replace( ';', "\\;" ) ); | ||
185 | name.append( (*addrIt).prefix().replace( ';', "\\;" ) ); | ||
186 | name.append( (*addrIt).suffix().replace( ';', "\\;" ) ); | ||
187 | */ | ||
188 | name.append( (*addrIt).familyName().replace( QRegExp(";"), "\\;" ) ); | ||
189 | name.append( (*addrIt).givenName().replace( QRegExp(";"), "\\;" ) ); | ||
190 | name.append( (*addrIt).additionalName().replace( QRegExp(";"), "\\;" ) ); | ||
191 | name.append( (*addrIt).prefix().replace( QRegExp(";"), "\\;" ) ); | ||
192 | name.append( (*addrIt).suffix().replace( QRegExp(";"), "\\;" ) ); | ||
193 | |||
194 | if ( !name.join( "" ).isEmpty() ) | ||
195 | card.addLine( VCardLine( "N", name.join( ";" ) ) ); | ||
196 | |||
197 | // NICKNAME | ||
198 | if ( version == VCard::v3_0 ) | ||
199 | card.addLine( VCardLine( "NICKNAME", (*addrIt).nickName() ) ); | ||
200 | |||
201 | // NOTE | ||
202 | card.addLine( VCardLine( "NOTE", (*addrIt).note() ) ); | ||
203 | |||
204 | // ORG | ||
205 | card.addLine( VCardLine( "ORG", (*addrIt).organization() ) ); | ||
206 | |||
207 | // PHOTO | ||
208 | card.addLine( createPicture( "PHOTO", (*addrIt).photo() ) ); | ||
209 | |||
210 | // PROID | ||
211 | if ( version == VCard::v3_0 ) | ||
212 | card.addLine( VCardLine( "PRODID", (*addrIt).productId() ) ); | ||
213 | |||
214 | // REV | ||
215 | card.addLine( VCardLine( "REV", createDateTime( (*addrIt).revision() ) ) ); | ||
216 | |||
217 | // ROLE | ||
218 | card.addLine( VCardLine( "ROLE", (*addrIt).role() ) ); | ||
219 | |||
220 | // SORT-STRING | ||
221 | if ( version == VCard::v3_0 ) | ||
222 | card.addLine( VCardLine( "SORT-STRING", (*addrIt).sortString() ) ); | ||
223 | |||
224 | // SOUND | ||
225 | card.addLine( createSound( (*addrIt).sound() ) ); | ||
226 | |||
227 | // TEL | ||
228 | PhoneNumber::List phoneNumbers = (*addrIt).phoneNumbers(); | ||
229 | PhoneNumber::List::ConstIterator phoneIt; | ||
230 | for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) { | ||
231 | VCardLine line( "TEL", (*phoneIt).number() ); | ||
232 | |||
233 | QMap<QString, int>::Iterator typeIt; | ||
234 | for ( typeIt = mPhoneTypeMap.begin(); typeIt != mPhoneTypeMap.end(); ++typeIt ) { | ||
235 | if ( typeIt.data() & (*phoneIt).type() ) | ||
236 | line.addParameter( "TYPE", typeIt.key() ); | ||
237 | } | ||
238 | |||
239 | card.addLine( line ); | ||
240 | } | ||
241 | |||
242 | // TITLE | ||
243 | card.addLine( VCardLine( "TITLE", (*addrIt).title() ) ); | ||
244 | |||
245 | // TZ | ||
246 | TimeZone timeZone = (*addrIt).timeZone(); | ||
247 | if ( timeZone.isValid() ) { | ||
248 | QString str; | ||
249 | |||
250 | int neg = 1; | ||
251 | if ( timeZone.offset() < 0 ) | ||
252 | neg = -1; | ||
253 | |||
254 | str.sprintf( "%c%02d:%02d", ( timeZone.offset() >= 0 ? '+' : '-' ), | ||
255 | ( timeZone.offset() / 60 ) * neg, | ||
256 | ( timeZone.offset() % 60 ) * neg ); | ||
257 | |||
258 | card.addLine( VCardLine( "TZ", str ) ); | ||
259 | } | ||
260 | |||
261 | // UID | ||
262 | card.addLine( VCardLine( "UID", (*addrIt).uid() ) ); | ||
263 | |||
264 | // URL | ||
265 | card.addLine( VCardLine( "URL", (*addrIt).url().url() ) ); | ||
266 | |||
267 | // VERSION | ||
268 | if ( version == VCard::v2_1 ) | ||
269 | card.addLine( VCardLine( "VERSION", "2.1" ) ); | ||
270 | if ( version == VCard::v3_0 ) | ||
271 | card.addLine( VCardLine( "VERSION", "3.0" ) ); | ||
272 | |||
273 | // X- | ||
274 | QStringList customs = (*addrIt).customs(); | ||
275 | for ( strIt = customs.begin(); strIt != customs.end(); ++strIt ) { | ||
276 | QString identifier = "X-" + (*strIt).left( (*strIt).find( ":" ) ); | ||
277 | QString value = (*strIt).mid( (*strIt).find( ":" ) + 1 ); | ||
278 | if ( value.isEmpty() ) | ||
279 | continue; | ||
280 | |||
281 | card.addLine( VCardLine( identifier, value ) ); | ||
282 | } | ||
283 | |||
284 | vCardList.append( card ); | ||
285 | } | ||
286 | |||
287 | return VCardParser::createVCards( vCardList ); | ||
288 | } | ||
289 | |||
290 | Addressee::List VCardTool::parseVCards( const QString& vcard ) | ||
291 | { | ||
292 | QChar semicolonSep( ';' ); | ||
293 | QChar commaSep( ',' ); | ||
294 | QString identifier; | ||
295 | |||
296 | Addressee::List addrList; | ||
297 | VCard::List vCardList = VCardParser::parseVCards( vcard ); | ||
298 | VCard::List::Iterator cardIt; | ||
299 | for ( cardIt = vCardList.begin(); cardIt != vCardList.end(); ++cardIt ) { | ||
300 | Addressee addr; | ||
301 | QStringList idents = (*cardIt).identifiers(); | ||
302 | QStringList::ConstIterator identIt; | ||
303 | for ( identIt = idents.begin(); identIt != idents.end(); ++identIt ) { | ||
304 | VCard card = (*cardIt); | ||
305 | VCardLine::List lines = card.lines( (*identIt) ); | ||
306 | VCardLine::List::Iterator lineIt; | ||
307 | |||
308 | // iterate over the lines | ||
309 | for ( lineIt = lines.begin(); lineIt != lines.end(); ++lineIt ) { | ||
310 | QStringList params = (*lineIt).parameterList(); | ||
311 | |||
312 | identifier = (*lineIt).identifier().lower(); | ||
313 | // ADR | ||
314 | if ( identifier == "adr" ) { | ||
315 | Address address; | ||
316 | QStringList addrParts = splitString( semicolonSep, (*lineIt).value().asString() ); | ||
317 | if ( addrParts.count() > 0 ) | ||
318 | address.setPostOfficeBox( addrParts[ 0 ] ); | ||
319 | if ( addrParts.count() > 1 ) | ||
320 | address.setExtended( addrParts[ 1 ] ); | ||
321 | if ( addrParts.count() > 2 ) | ||
322 | address.setStreet( addrParts[ 2 ].replace ( QRegExp("\\\\n") , "\n") ); | ||
323 | if ( addrParts.count() > 3 ) | ||
324 | address.setLocality( addrParts[ 3 ] ); | ||
325 | if ( addrParts.count() > 4 ) | ||
326 | address.setRegion( addrParts[ 4 ] ); | ||
327 | if ( addrParts.count() > 5 ) | ||
328 | address.setPostalCode( addrParts[ 5 ] ); | ||
329 | if ( addrParts.count() > 6 ) | ||
330 | address.setCountry( addrParts[ 6 ] ); | ||
331 | |||
332 | int type = 0; | ||
333 | |||
334 | QStringList types = (*lineIt).parameters( "type" ); | ||
335 | for ( QStringList::Iterator it = types.begin(); it != types.end(); ++it ) | ||
336 | type += mAddressTypeMap[ (*it).lower() ]; | ||
337 | |||
338 | if ( !type ) | ||
339 | type = Address::Home; // default | ||
340 | |||
341 | address.setType( type ); | ||
342 | addr.insertAddress( address ); | ||
343 | } | ||
344 | |||
345 | // AGENT | ||
346 | if ( identifier == "agent" ) | ||
347 | addr.setAgent( parseAgent( *lineIt ) ); | ||
348 | |||
349 | // BDAY | ||
350 | if ( identifier == "bday" ) | ||
351 | addr.setBirthday( parseDateTime( (*lineIt).value().asString() ) ); | ||
352 | |||
353 | // CATEGORIES | ||
354 | if ( identifier == "categories" ) { | ||
355 | QStringList categories = splitString( commaSep, (*lineIt).value().asString() ); | ||
356 | addr.setCategories( categories ); | ||
357 | } | ||
358 | |||
359 | // CLASS | ||
360 | if ( identifier == "class" ) | ||
361 | addr.setSecrecy( parseSecrecy( *lineIt ) ); | ||
362 | |||
363 | |||
364 | if ( identifier == "email" ) { | ||
365 | QStringList types = (*lineIt).parameters( "type" ); | ||
366 | addr.insertEmail( (*lineIt).value().asString(), types.contains( "PREF" ) ); | ||
367 | } | ||
368 | |||
369 | // FN | ||
370 | if ( identifier == "fn" ) | ||
371 | addr.setFormattedName( (*lineIt).value().asString() ); | ||
372 | |||
373 | // GEO | ||
374 | if ( identifier == "geo" ) { | ||
375 | Geo geo; | ||
376 | |||
377 | QStringList geoParts = QStringList::split( ';', (*lineIt).value().asString(), true ); | ||
378 | geo.setLatitude( geoParts[ 0 ].toFloat() ); | ||
379 | geo.setLongitude( geoParts[ 1 ].toFloat() ); | ||
380 | |||
381 | addr.setGeo( geo ); | ||
382 | } | ||
383 | |||
384 | // KEY | ||
385 | if ( identifier == "key" ) | ||
386 | addr.insertKey( parseKey( *lineIt ) ); | ||
387 | |||
388 | // LABEL | ||
389 | if ( identifier == "label" ) { | ||
390 | int type = 0; | ||
391 | |||
392 | QStringList types = (*lineIt).parameters( "type" ); | ||
393 | for ( QStringList::Iterator it = types.begin(); it != types.end(); ++it ) | ||
394 | type += mAddressTypeMap[ (*it).lower() ]; | ||
395 | |||
396 | if ( !type ) | ||
397 | type = Address::Home; | ||
398 | |||
399 | KABC::Address::List addressList = addr.addresses(); | ||
400 | KABC::Address::List::Iterator it; | ||
401 | for ( it = addressList.begin(); it != addressList.end(); ++it ) { | ||
402 | if ( (*it).type() == type ) { | ||
403 | (*it).setLabel( (*lineIt).value().asString() ); | ||
404 | addr.insertAddress( *it ); | ||
405 | } | ||
406 | } | ||
407 | } | ||
408 | |||
409 | // LOGO | ||
410 | if ( identifier == "logo" ) | ||
411 | addr.setLogo( parsePicture( *lineIt ) ); | ||
412 | |||
413 | // MAILER | ||
414 | if ( identifier == "mailer" ) | ||
415 | addr.setMailer( (*lineIt).value().asString() ); | ||
416 | |||
417 | // N | ||
418 | if ( identifier == "n" ) { | ||
419 | QStringList nameParts = splitString( semicolonSep, (*lineIt).value().asString() ); | ||
420 | if ( nameParts.count() > 0 ) | ||
421 | addr.setFamilyName( nameParts[ 0 ] ); | ||
422 | if ( nameParts.count() > 1 ) | ||
423 | addr.setGivenName( nameParts[ 1 ] ); | ||
424 | if ( nameParts.count() > 2 ) | ||
425 | addr.setAdditionalName( nameParts[ 2 ] ); | ||
426 | if ( nameParts.count() > 3 ) | ||
427 | addr.setPrefix( nameParts[ 3 ] ); | ||
428 | if ( nameParts.count() > 4 ) | ||
429 | addr.setSuffix( nameParts[ 4 ] ); | ||
430 | } | ||
431 | |||
432 | // NICKNAME | ||
433 | if ( identifier == "nickname" ) | ||
434 | addr.setNickName( (*lineIt).value().asString() ); | ||
435 | |||
436 | // NOTE | ||
437 | if ( identifier == "note" ) { | ||
438 | // #ifdef DESKTOP_VERSION | ||
439 | // addr.setNote( (*lineIt).value().asString() ); | ||
440 | // #else | ||
441 | QString note = (*lineIt).value().asString(); | ||
442 | if ( ! note.isEmpty() ) | ||
443 | addr.setNote( note.replace ( QRegExp("\\\\n") , "\n") ); | ||
444 | else | ||
445 | addr.setNote( note ); | ||
446 | //#endif | ||
447 | } | ||
448 | |||
449 | // ORGANIZATION | ||
450 | if ( identifier == "org" ) | ||
451 | addr.setOrganization( (*lineIt).value().asString() ); | ||
452 | |||
453 | // PHOTO | ||
454 | if ( identifier == "photo" ) | ||
455 | addr.setPhoto( parsePicture( *lineIt ) ); | ||
456 | |||
457 | // PROID | ||
458 | if ( identifier == "prodid" ) | ||
459 | addr.setProductId( (*lineIt).value().asString() ); | ||
460 | |||
461 | // REV | ||
462 | if ( identifier == "rev" ) | ||
463 | addr.setRevision( parseDateTime( (*lineIt).value().asString() ) ); | ||
464 | |||
465 | // ROLE | ||
466 | if ( identifier == "role" ) | ||
467 | addr.setRole( (*lineIt).value().asString() ); | ||
468 | |||
469 | // SORT-STRING | ||
470 | if ( identifier == "sort-string" ) | ||
471 | addr.setSortString( (*lineIt).value().asString() ); | ||
472 | |||
473 | // SOUND | ||
474 | if ( identifier == "sound" ) | ||
475 | addr.setSound( parseSound( *lineIt ) ); | ||
476 | |||
477 | // TEL | ||
478 | if ( identifier == "tel" ) { | ||
479 | PhoneNumber phone; | ||
480 | phone.setNumber( (*lineIt).value().asString() ); | ||
481 | |||
482 | int type = 0; | ||
483 | |||
484 | QStringList types = (*lineIt).parameters( "type" ); | ||
485 | for ( QStringList::Iterator it = types.begin(); it != types.end(); ++it ) | ||
486 | type += mPhoneTypeMap[(*it).upper()]; | ||
487 | |||
488 | if ( !type ) | ||
489 | type = PhoneNumber::Home; // default | ||
490 | |||
491 | phone.setType( type ); | ||
492 | |||
493 | addr.insertPhoneNumber( phone ); | ||
494 | } | ||
495 | |||
496 | // TITLE | ||
497 | if ( identifier == "title" ) | ||
498 | addr.setTitle( (*lineIt).value().asString() ); | ||
499 | |||
500 | // TZ | ||
501 | if ( identifier == "tz" ) { | ||
502 | TimeZone tz; | ||
503 | QString date = (*lineIt).value().asString(); | ||
504 | |||
505 | int hours = date.mid( 1, 2).toInt(); | ||
506 | int minutes = date.mid( 4, 2 ).toInt(); | ||
507 | int offset = ( hours * 60 ) + minutes; | ||
508 | offset = offset * ( date[ 0 ] == '+' ? 1 : -1 ); | ||
509 | |||
510 | tz.setOffset( offset ); | ||
511 | addr.setTimeZone( tz ); | ||
512 | } | ||
513 | |||
514 | // UID | ||
515 | if ( identifier == "uid" ) | ||
516 | addr.setUid( (*lineIt).value().asString() ); | ||
517 | |||
518 | // URL | ||
519 | if ( identifier == "url" ) | ||
520 | addr.setUrl( (*lineIt).value().asString() ); | ||
521 | |||
522 | // X- | ||
523 | if ( identifier.startsWith( "x-" ) ) { | ||
524 | QString key = (*lineIt).identifier().mid( 2 ); | ||
525 | int dash = key.find( "-" ); | ||
526 | addr.insertCustom( key.left( dash ), key.mid( dash + 1 ), (*lineIt).value().asString() ); | ||
527 | } | ||
528 | } | ||
529 | } | ||
530 | |||
531 | addrList.append( addr ); | ||
532 | } | ||
533 | |||
534 | return addrList; | ||
535 | } | ||
536 | |||
537 | QDateTime VCardTool::parseDateTime( const QString &str ) | ||
538 | { | ||
539 | QDateTime dateTime; | ||
540 | |||
541 | if ( str.find( '-' ) == -1 ) { // is base format (yyyymmdd) | ||
542 | dateTime.setDate( QDate( str.left( 4 ).toInt(), str.mid( 4, 2 ).toInt(), | ||
543 | str.mid( 6, 2 ).toInt() ) ); | ||
544 | |||
545 | if ( str.find( 'T' ) ) // has time information yyyymmddThh:mm:ss | ||
546 | dateTime.setTime( QTime( str.mid( 11, 2 ).toInt(), str.mid( 14, 2 ).toInt(), | ||
547 | str.mid( 17, 2 ).toInt() ) ); | ||
548 | |||
549 | } else { // is extended format yyyy-mm-dd | ||
550 | dateTime.setDate( QDate( str.left( 4 ).toInt(), str.mid( 5, 2 ).toInt(), | ||
551 | str.mid( 8, 2 ).toInt() ) ); | ||
552 | |||
553 | if ( str.find( 'T' ) ) // has time information yyyy-mm-ddThh:mm:ss | ||
554 | dateTime.setTime( QTime( str.mid( 11, 2 ).toInt(), str.mid( 14, 2 ).toInt(), | ||
555 | str.mid( 17, 2 ).toInt() ) ); | ||
556 | } | ||
557 | |||
558 | return dateTime; | ||
559 | } | ||
560 | |||
561 | QString VCardTool::createDateTime( const QDateTime &dateTime ) | ||
562 | { | ||
563 | QString str; | ||
564 | |||
565 | if ( dateTime.date().isValid() ) { | ||
566 | str.sprintf( "%4d-%02d-%02d", dateTime.date().year(), dateTime.date().month(), | ||
567 | dateTime.date().day() ); | ||
568 | if ( dateTime.time().isValid() ) { | ||
569 | QString tmp; | ||
570 | tmp.sprintf( "T%02d:%02d:%02dZ", dateTime.time().hour(), dateTime.time().minute(), | ||
571 | dateTime.time().second() ); | ||
572 | str += tmp; | ||
573 | } | ||
574 | } | ||
575 | |||
576 | return str; | ||
577 | } | ||
578 | |||
579 | Picture VCardTool::parsePicture( const VCardLine &line ) | ||
580 | { | ||
581 | Picture pic; | ||
582 | |||
583 | QStringList params = line.parameterList(); | ||
584 | if ( params.contains( "encoding" ) ) { | ||
585 | QCString cs(line.value().asCString()); | ||
586 | QByteArray input, output; | ||
587 | input = line.value().asCString(); | ||
588 | if ( line.parameter( "encoding" ).lower() == "b" ) | ||
589 | KCodecs::base64Decode( input, output ); | ||
590 | else if ( line.parameter( "encoding" ).lower() == "quoted-printable" ) | ||
591 | KCodecs::quotedPrintableDecode( input, output ); | ||
592 | |||
593 | qDebug("********** DECODING OKAY ************** (picture)"); | ||
594 | pic.setData( QImage(output) ); | ||
595 | |||
596 | } | ||
597 | else if ( params.contains( "value" ) ) { | ||
598 | if ( line.parameter( "value" ).lower() == "uri" ) | ||
599 | pic.setUrl( line.value().asString() ); | ||
600 | } | ||
601 | |||
602 | if ( params.contains( "type" ) ) | ||
603 | pic.setType( line.parameter( "type" ) ); | ||
604 | |||
605 | return pic; | ||
606 | } | ||
607 | |||
608 | VCardLine VCardTool::createPicture( const QString &identifier, const Picture &pic ) | ||
609 | { | ||
610 | // LR fixed | ||
611 | VCardLine line( identifier ); | ||
612 | |||
613 | if ( pic.isIntern() ) { | ||
614 | if ( !pic.data().isNull() ) { | ||
615 | #if 0 | ||
616 | QByteArray input; | ||
617 | QDataStream s( input, IO_WriteOnly ); | ||
618 | s.setVersion( 4 ); | ||
619 | s << pic.data(); | ||
620 | line.setValue( input ); | ||
621 | #else | ||
622 | QCString input; | ||
623 | QDataStream s( input, IO_WriteOnly ); | ||
624 | s.setVersion( 4 ); | ||
625 | s << pic.data(); | ||
626 | //QCString cs(line.value().asCString()); | ||
627 | //QImage qi(cs); | ||
628 | line.setValue( input ); | ||
629 | #endif | ||
630 | |||
631 | line.addParameter( "encoding", "b" ); | ||
632 | line.addParameter( "type", "image/png" ); | ||
633 | } | ||
634 | } else if ( !pic.url().isEmpty() ) { | ||
635 | line.setValue( pic.url() ); | ||
636 | line.addParameter( "value", "URI" ); | ||
637 | } | ||
638 | |||
639 | return line; | ||
640 | } | ||
641 | |||
642 | Sound VCardTool::parseSound( const VCardLine &line ) | ||
643 | { | ||
644 | Sound snd; | ||
645 | |||
646 | QStringList params = line.parameterList(); | ||
647 | if ( params.contains( "encoding" ) ) { | ||
648 | qDebug("VCardTool::parseSound has to be verified"); | ||
649 | //US snd.setData( line.value().asByteArray() ); | ||
650 | //US I am not sure if this is correct | ||
651 | QCString cs(line.value().asCString()); | ||
652 | snd.setData( cs ); | ||
653 | } | ||
654 | else if ( params.contains( "value" ) ) { | ||
655 | if ( line.parameter( "value" ).lower() == "uri" ) | ||
656 | snd.setUrl( line.value().asString() ); | ||
657 | } | ||
658 | |||
659 | /* TODO: support sound types | ||
660 | if ( params.contains( "type" ) ) | ||
661 | snd.setType( line.parameter( "type" ) ); | ||
662 | */ | ||
663 | |||
664 | return snd; | ||
665 | } | ||
666 | |||
667 | VCardLine VCardTool::createSound( const Sound &snd ) | ||
668 | { | ||
669 | VCardLine line( "SOUND" ); | ||
670 | |||
671 | if ( snd.isIntern() ) { | ||
672 | if ( !snd.data().isEmpty() ) { | ||
673 | qDebug("VCardTool::createSound has to be verified"); | ||
674 | //US line.setValue( snd.data() ); | ||
675 | |||
676 | //US I am not sure if this is correct | ||
677 | QCString cs(snd.data()); | ||
678 | line.setValue( cs ); | ||
679 | |||
680 | |||
681 | line.addParameter( "encoding", "b" ); | ||
682 | // TODO: need to store sound type!!! | ||
683 | } | ||
684 | } else if ( !snd.url().isEmpty() ) { | ||
685 | line.setValue( snd.url() ); | ||
686 | line.addParameter( "value", "URI" ); | ||
687 | } | ||
688 | |||
689 | return line; | ||
690 | } | ||
691 | |||
692 | Key VCardTool::parseKey( const VCardLine &line ) | ||
693 | { | ||
694 | Key key; | ||
695 | |||
696 | QStringList params = line.parameterList(); | ||
697 | if ( params.contains( "encoding" ) ) { | ||
698 | qDebug("VCardTool::parseKey has to be verified"); | ||
699 | //US key.setBinaryData( line.value().asByteArray() ); | ||
700 | |||
701 | //US I am not sure if this is correct | ||
702 | QCString cs( line.value().asCString() ); | ||
703 | key.setBinaryData( cs ); | ||
704 | } | ||
705 | else | ||
706 | key.setTextData( line.value().asString() ); | ||
707 | |||
708 | if ( params.contains( "type" ) ) { | ||
709 | if ( line.parameter( "type" ).lower() == "x509" ) | ||
710 | key.setType( Key::X509 ); | ||
711 | else if ( line.parameter( "type" ).lower() == "pgp" ) | ||
712 | key.setType( Key::PGP ); | ||
713 | else { | ||
714 | key.setType( Key::Custom ); | ||
715 | key.setCustomTypeString( line.parameter( "type" ) ); | ||
716 | } | ||
717 | } | ||
718 | |||
719 | return key; | ||
720 | } | ||
721 | |||
722 | VCardLine VCardTool::createKey( const Key &key ) | ||
723 | { | ||
724 | VCardLine line( "KEY" ); | ||
725 | |||
726 | if ( key.isBinary() ) { | ||
727 | if ( !key.binaryData().isEmpty() ) { | ||
728 | qDebug("VCardTool::createKey has to be verified"); | ||
729 | //US line.setValue( key.binaryData() ); | ||
730 | //US I am not sure if this is correct | ||
731 | QCString cs(key.binaryData()); | ||
732 | line.setValue( cs ); | ||
733 | |||
734 | |||
735 | line.addParameter( "encoding", "b" ); | ||
736 | } | ||
737 | } else if ( !key.textData().isEmpty() ) | ||
738 | line.setValue( key.textData() ); | ||
739 | |||
740 | if ( key.type() == Key::X509 ) | ||
741 | line.addParameter( "type", "X509" ); | ||
742 | else if ( key.type() == Key::PGP ) | ||
743 | line.addParameter( "type", "PGP" ); | ||
744 | else if ( key.type() == Key::Custom ) | ||
745 | line.addParameter( "type", key.customTypeString() ); | ||
746 | |||
747 | return line; | ||
748 | } | ||
749 | |||
750 | Secrecy VCardTool::parseSecrecy( const VCardLine &line ) | ||
751 | { | ||
752 | Secrecy secrecy; | ||
753 | |||
754 | if ( line.value().asString().lower() == "public" ) | ||
755 | secrecy.setType( Secrecy::Public ); | ||
756 | if ( line.value().asString().lower() == "private" ) | ||
757 | secrecy.setType( Secrecy::Private ); | ||
758 | if ( line.value().asString().lower() == "confidential" ) | ||
759 | secrecy.setType( Secrecy::Confidential ); | ||
760 | |||
761 | return secrecy; | ||
762 | } | ||
763 | |||
764 | VCardLine VCardTool::createSecrecy( const Secrecy &secrecy ) | ||
765 | { | ||
766 | VCardLine line( "CLASS" ); | ||
767 | |||
768 | int type = secrecy.type(); | ||
769 | |||
770 | if ( type == Secrecy::Public ) | ||
771 | line.setValue( "PUBLIC" ); | ||
772 | else if ( type == Secrecy::Private ) | ||
773 | line.setValue( "PRIVATE" ); | ||
774 | else if ( type == Secrecy::Confidential ) | ||
775 | line.setValue( "CONFIDENTIAL" ); | ||
776 | |||
777 | return line; | ||
778 | } | ||
779 | |||
780 | Agent VCardTool::parseAgent( const VCardLine &line ) | ||
781 | { | ||
782 | Agent agent; | ||
783 | |||
784 | QStringList params = line.parameterList(); | ||
785 | if ( params.contains( "value" ) ) { | ||
786 | if ( line.parameter( "value" ).lower() == "uri" ) | ||
787 | agent.setUrl( line.value().asString() ); | ||
788 | } else { | ||
789 | QString str = line.value().asString(); | ||
790 | |||
791 | //US using the old implementation instead | ||
792 | qDebug("VCardTool::parseAgent has to be verified"); | ||
793 | /*US | ||
794 | str.replace( "\\n", "\r\n" ); | ||
795 | str.replace( "\\N", "\r\n" ); | ||
796 | str.replace( "\\;", ";" ); | ||
797 | str.replace( "\\:", ":" ); | ||
798 | str.replace( "\\,", "," ); | ||
799 | */ | ||
800 | str.replace( QRegExp("\\n") , "\r\n" ); | ||
801 | str.replace( QRegExp("\\N") , "\r\n" ); | ||
802 | str.replace( QRegExp("\\;") , ";" ); | ||
803 | str.replace( QRegExp("\\:") , ":" ); | ||
804 | str.replace( QRegExp("\\,") , "," ); | ||
805 | |||
806 | Addressee::List list = parseVCards( str ); | ||
807 | if ( list.count() > 0 ) { | ||
808 | Addressee *addr = new Addressee; | ||
809 | *addr = list[ 0 ]; | ||
810 | agent.setAddressee( addr ); | ||
811 | } | ||
812 | } | ||
813 | |||
814 | return agent; | ||
815 | } | ||
816 | |||
817 | VCardLine VCardTool::createAgent( VCard::Version version, const Agent &agent ) | ||
818 | { | ||
819 | VCardLine line( "AGENT" ); | ||
820 | |||
821 | if ( agent.isIntern() ) { | ||
822 | if ( agent.addressee() != 0 ) { | ||
823 | Addressee::List list; | ||
824 | list.append( *agent.addressee() ); | ||
825 | |||
826 | QString str = createVCards( list, version ); | ||
827 | |||
828 | //US using the old implementation instead | ||
829 | qDebug("VCardTool::createAgent has to be verified"); | ||
830 | /*US | ||
831 | str.replace( "\r\n", "\\n" ); | ||
832 | str.replace( ";", "\\;" ); | ||
833 | str.replace( ":", "\\:" ); | ||
834 | str.replace( ",", "\\," ); | ||
835 | */ | ||
836 | str.replace( QRegExp("\r\n"), "\\n" ); | ||
837 | str.replace( QRegExp(";"), "\\;" ); | ||
838 | str.replace( QRegExp(":"), "\\:" ); | ||
839 | str.replace( QRegExp(","), "\\," ); | ||
840 | line.setValue( str ); | ||
841 | } | ||
842 | } else if ( !agent.url().isEmpty() ) { | ||
843 | line.setValue( agent.url() ); | ||
844 | line.addParameter( "value", "URI" ); | ||
845 | } | ||
846 | |||
847 | return line; | ||
848 | } | ||
849 | |||
850 | QStringList VCardTool::splitString( const QChar &sep, const QString &str ) | ||
851 | { | ||
852 | QStringList list; | ||
853 | QString value( str ); | ||
854 | |||
855 | int start = 0; | ||
856 | int pos = value.find( sep, start ); | ||
857 | |||
858 | while ( pos != -1 ) { | ||
859 | if ( value[ pos - 1 ] != '\\' ) { | ||
860 | if ( pos > start && pos <= (int)value.length() ) | ||
861 | list << value.mid( start, pos - start ); | ||
862 | else | ||
863 | list << QString::null; | ||
864 | |||
865 | start = pos + 1; | ||
866 | pos = value.find( sep, start ); | ||
867 | } else { | ||
868 | if ( pos != 0 ) { | ||
869 | value.replace( pos - 1, 2, sep ); | ||
870 | pos = value.find( sep, pos ); | ||
871 | } else | ||
872 | pos = value.find( sep, pos + 1 ); | ||
873 | } | ||
874 | } | ||
875 | |||
876 | int l = value.length() - 1; | ||
877 | if ( value.mid( start, l - start + 1 ).length() > 0 ) | ||
878 | list << value.mid( start, l - start + 1 ); | ||
879 | else | ||
880 | list << QString::null; | ||
881 | |||
882 | return list; | ||
883 | } | ||
diff --git a/kabc/vcardparser/vcardtool.h b/kabc/vcardparser/vcardtool.h new file mode 100644 index 0000000..40a3b82 --- a/dev/null +++ b/kabc/vcardparser/vcardtool.h | |||
@@ -0,0 +1,88 @@ | |||
1 | /* | ||
2 | This file is part of libkabc. | ||
3 | Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Library General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Library General Public License for more details. | ||
14 | |||
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 | ||
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef KABC_VCARDTOOL_H | ||
22 | #define KABC_VCARDTOOL_H | ||
23 | |||
24 | #include "addressee.h" | ||
25 | #include "vcardparser.h" | ||
26 | |||
27 | class QDateTime; | ||
28 | |||
29 | namespace KABC { | ||
30 | |||
31 | class Agent; | ||
32 | class Key; | ||
33 | class Picture; | ||
34 | class Secrecy; | ||
35 | class Sound; | ||
36 | |||
37 | class VCardTool | ||
38 | { | ||
39 | public: | ||
40 | VCardTool(); | ||
41 | ~VCardTool(); | ||
42 | |||
43 | /** | ||
44 | Creates a string that contains the addressees from the list in | ||
45 | the vCard format. | ||
46 | */ | ||
47 | QString createVCards( Addressee::List list, VCard::Version version = VCard::v3_0 ); | ||
48 | |||
49 | /** | ||
50 | Parses the string and returns a list of addressee objects. | ||
51 | */ | ||
52 | Addressee::List parseVCards( const QString& vcard ); | ||
53 | |||
54 | private: | ||
55 | /** | ||
56 | Split a string and replaces escaped separators on the fly with | ||
57 | unescaped ones. | ||
58 | */ | ||
59 | QStringList splitString( const QChar &sep, const QString &value ); | ||
60 | |||
61 | QDateTime parseDateTime( const QString &str ); | ||
62 | QString createDateTime( const QDateTime &dateTime ); | ||
63 | |||
64 | Picture parsePicture( const VCardLine &line ); | ||
65 | VCardLine createPicture( const QString &identifier, const Picture &pic ); | ||
66 | |||
67 | Sound parseSound( const VCardLine &line ); | ||
68 | VCardLine createSound( const Sound &snd ); | ||
69 | |||
70 | Key parseKey( const VCardLine &line ); | ||
71 | VCardLine createKey( const Key &key ); | ||
72 | |||
73 | Secrecy parseSecrecy( const VCardLine &line ); | ||
74 | VCardLine createSecrecy( const Secrecy &secrecy ); | ||
75 | |||
76 | Agent parseAgent( const VCardLine &line ); | ||
77 | VCardLine createAgent( VCard::Version version, const Agent &agent ); | ||
78 | |||
79 | QMap<QString, int> mAddressTypeMap; | ||
80 | QMap<QString, int> mPhoneTypeMap; | ||
81 | |||
82 | class VCardToolPrivate; | ||
83 | VCardToolPrivate *d; | ||
84 | }; | ||
85 | |||
86 | } | ||
87 | |||
88 | #endif | ||