37 #include <tqstringlist.h>
39 #include <tqtextstream.h>
45 #include "addressee.h"
49 #include "ldifconverter.h"
50 #include "vcardconverter.h"
58 AddresseeList::ConstIterator it;
59 for ( it = addrList.begin(); it != addrList.end(); ++it ) {
67 static void ldif_out( TQTextStream &t, TQString formatStr, TQString value )
69 if ( value.isEmpty() )
75 t << TQString::fromUtf8(txt) <<
"\n";
83 TQTextStream t( str, IO_WriteOnly|IO_Append );
84 t.setEncoding( TQTextStream::UnicodeUTF8 );
89 ldif_out( t,
"dn", TQString(
"cn=%1,mail=%2" )
90 .arg( TQString(addr.formattedName()).simplifyWhiteSpace() )
92 ldif_out( t,
"givenname", addr.givenName() );
93 ldif_out( t,
"sn", addr.familyName() );
94 ldif_out( t,
"cn", TQString(addr.formattedName()).simplifyWhiteSpace() );
95 ldif_out( t,
"uid", addr.
uid() );
96 ldif_out( t,
"nickname", addr.nickName() );
97 ldif_out( t,
"xmozillanickname", addr.nickName() );
100 if ( addr.
emails().count() > 1 )
101 ldif_out( t,
"mozillasecondemail", addr.
emails()[ 1 ] );
104 ldif_out( t,
"telephonenumber", addr.
phoneNumber( PhoneNumber::Work ).
number() );
105 ldif_out( t,
"facsimiletelephonenumber", addr.
phoneNumber( PhoneNumber::Fax ).
number() );
112 ldif_out( t,
"streethomeaddress", homeAddr.
street() );
113 ldif_out( t,
"postalcode", workAddr.
postalCode() );
116 TQStringList streets = TQStringList::split(
'\n', homeAddr.
street() );
117 if ( streets.count() > 0 )
118 ldif_out( t,
"homepostaladdress", streets[ 0 ] );
119 if ( streets.count() > 1 )
120 ldif_out( t,
"mozillahomepostaladdress2", streets[ 1 ] );
121 ldif_out( t,
"mozillahomelocalityname", homeAddr.
locality() );
122 ldif_out( t,
"mozillahomestate", homeAddr.
region() );
123 ldif_out( t,
"mozillahomepostalcode", homeAddr.
postalCode() );
125 ldif_out( t,
"locality", workAddr.
locality() );
126 ldif_out( t,
"streetaddress", workAddr.
street() );
128 streets = TQStringList::split(
'\n', workAddr.
street() );
129 if ( streets.count() > 0 )
130 ldif_out( t,
"postaladdress", streets[ 0 ] );
131 if ( streets.count() > 1 )
132 ldif_out( t,
"mozillapostaladdress2", streets[ 1 ] );
134 ldif_out( t,
"l", workAddr.
locality() );
136 ldif_out( t,
"st", workAddr.
region() );
138 ldif_out( t,
"title", addr.title() );
139 ldif_out( t,
"vocation", addr.prefix() );
140 ldif_out( t,
"ou", addr.role() );
141 ldif_out( t,
"o", addr.organization() );
142 ldif_out( t,
"organization", addr.organization() );
143 ldif_out( t,
"organizationname", addr.organization() );
146 if ( !addr.department().
isEmpty() )
147 ldif_out( t,
"department", addr.department() );
149 ldif_out( t,
"department", addr.
custom(
"KADDRESSBOOK",
"X-Department") );
151 ldif_out( t,
"workurl", addr.url().prettyURL() );
152 ldif_out( t,
"homeurl", addr.url().prettyURL() );
153 ldif_out( t,
"description", addr.note() );
154 if (addr.revision().isValid())
155 ldif_out(t,
"modifytimestamp",
dateToVCardString( TQT_TQDATETIME_OBJECT(addr.revision())) );
157 t <<
"objectclass: top\n";
158 t <<
"objectclass: person\n";
159 t <<
"objectclass: organizationalPerson\n";
174 bool endldif =
false, end =
false;
177 const char *latinstr = str.latin1();
178 int latinstrlen = tqstrlen( latinstr );
183 data.setRawData( latinstr, latinstrlen );
186 dt = TQDateTime::currentDateTime();
188 homeAddr =
Address( Address::Home );
189 workAddr =
Address( Address::Work );
195 TQString fieldname = ldif.
attr().lower();
196 TQString value = TQString::fromUtf8( ldif.
val(), ldif.
val().size() );
197 evaluatePair( a, homeAddr, workAddr, fieldname, value );
208 addrList.append( a );
212 homeAddr =
Address( Address::Home );
213 workAddr =
Address( Address::Work );
215 case LDIF::MoreData: {
229 data.resetRawData( latinstr, latinstrlen );
236 TQString &fieldname, TQString &value )
238 if ( fieldname == TQString::fromLatin1(
"dn" ) )
241 if ( fieldname.startsWith(
"#") ) {
245 if ( fieldname.isEmpty() && !a.note().
isEmpty() ) {
248 a.setNote( a.note() +
"\n" + value );
252 if ( fieldname == TQString::fromLatin1(
"givenname" ) ) {
253 a.setGivenName( value );
257 if ( fieldname == TQString::fromLatin1(
"xmozillanickname") ||
258 fieldname == TQString::fromLatin1(
"nickname") ) {
259 a.setNickName( value );
263 if ( fieldname == TQString::fromLatin1(
"sn" ) ) {
264 a.setFamilyName( value );
268 if ( fieldname == TQString::fromLatin1(
"uid" ) ) {
272 if ( fieldname == TQString::fromLatin1(
"mail" ) ||
273 fieldname == TQString::fromLatin1(
"mozillasecondemail" ) ) {
274 if ( a.
emails().findIndex( value ) == -1 )
279 if ( fieldname == TQString::fromLatin1(
"title" ) ) {
284 if ( fieldname == TQString::fromLatin1(
"vocation" ) ) {
285 a.setPrefix( value );
289 if ( fieldname == TQString::fromLatin1(
"cn" ) ) {
290 a.setFormattedName( value );
294 if ( fieldname == TQString::fromLatin1(
"o" ) ||
295 fieldname == TQString::fromLatin1(
"organization" ) ||
296 fieldname == TQString::fromLatin1(
"organizationname" ) ) {
297 a.setOrganization( value );
301 if ( fieldname == TQString::fromLatin1(
"description" ) ) {
304 a.setNote( a.note() +
"\n" );
305 a.setNote( a.note() + value );
309 if ( fieldname == TQString::fromLatin1(
"custom1" ) ||
310 fieldname == TQString::fromLatin1(
"custom2" ) ||
311 fieldname == TQString::fromLatin1(
"custom3" ) ||
312 fieldname == TQString::fromLatin1(
"custom4" ) ) {
316 if ( fieldname == TQString::fromLatin1(
"homeurl" ) ||
317 fieldname == TQString::fromLatin1(
"workurl" ) ) {
319 a.setUrl(
KURL( value ) );
328 if ( fieldname == TQString::fromLatin1(
"homephone" ) ) {
333 if ( fieldname == TQString::fromLatin1(
"telephonenumber" ) ) {
338 if ( fieldname == TQString::fromLatin1(
"mobile" ) ) {
343 if ( fieldname == TQString::fromLatin1(
"cellphone" ) ) {
348 if ( fieldname == TQString::fromLatin1(
"pager" ) ||
349 fieldname == TQString::fromLatin1(
"pagerphone" ) ) {
354 if ( fieldname == TQString::fromLatin1(
"facsimiletelephonenumber" ) ) {
359 if ( fieldname == TQString::fromLatin1(
"xmozillaanyphone" ) ) {
364 if ( fieldname == TQString::fromLatin1(
"street" ) ||
365 fieldname == TQString::fromLatin1(
"streethomeaddress" ) ) {
370 if ( fieldname == TQString::fromLatin1(
"postaladdress" ) ) {
375 if ( fieldname == TQString::fromLatin1(
"mozillapostaladdress2" ) ) {
376 workAddr.
setStreet( workAddr.
street() + TQString::fromLatin1(
"\n" ) + value );
380 if ( fieldname == TQString::fromLatin1(
"postalcode" ) ) {
385 if ( fieldname == TQString::fromLatin1(
"postofficebox" ) ) {
390 if ( fieldname == TQString::fromLatin1(
"homepostaladdress" ) ) {
395 if ( fieldname == TQString::fromLatin1(
"mozillahomepostaladdress2" ) ) {
396 homeAddr.
setStreet( homeAddr.
street() + TQString::fromLatin1(
"\n" ) + value );
400 if ( fieldname == TQString::fromLatin1(
"mozillahomelocalityname" ) ) {
405 if ( fieldname == TQString::fromLatin1(
"mozillahomestate" ) ) {
410 if ( fieldname == TQString::fromLatin1(
"mozillahomepostalcode" ) ) {
415 if ( fieldname == TQString::fromLatin1(
"mozillahomecountryname" ) ) {
416 if ( value.length() <= 2 )
422 if ( fieldname == TQString::fromLatin1(
"locality" ) ) {
427 if ( fieldname == TQString::fromLatin1(
"streetaddress" ) ) {
432 if ( fieldname == TQString::fromLatin1(
"countryname" ) ||
433 fieldname == TQString::fromLatin1(
"c" ) ) {
434 if ( value.length() <= 2 )
440 if ( fieldname == TQString::fromLatin1(
"l" ) ) {
445 if ( fieldname == TQString::fromLatin1(
"st" ) ) {
450 if ( fieldname == TQString::fromLatin1(
"ou" ) ) {
455 if ( fieldname == TQString::fromLatin1(
"department" ) ) {
456 a.setDepartment( value );
460 if ( fieldname == TQString::fromLatin1(
"member" ) ) {
462 TQStringList list( TQStringList::split(
',', value ) );
463 TQString
name, email;
465 TQStringList::Iterator it;
466 for ( it = list.begin(); it != list.end(); ++it ) {
467 if ( (*it).startsWith(
"cn=" ) )
468 name = (*it).mid( 3 ).stripWhiteSpace();
469 if ( (*it).startsWith(
"mail=" ) )
470 email = (*it).mid( 5 ).stripWhiteSpace();
472 if ( !name.isEmpty() && !email.isEmpty() )
473 email =
" <" + email +
">";
479 if ( fieldname == TQString::fromLatin1(
"modifytimestamp" ) ) {
480 if (value == TQString::fromLatin1(
"0Z"))
483 if ( dt.isValid() ) {
489 if ( fieldname == TQString::fromLatin1(
"objectclass" ) )
492 kdWarning() << TQString(TQString(
"LDIFConverter: Unknown field for '%1': '%2=%3'\n")
493 .arg(a.formattedName()).arg(fieldname).arg(value));
502 Address &workAddr, TQString &line )
504 if ( line.isEmpty() )
507 TQString fieldname, value;
511 value = TQString::fromUtf8( val.data(), val.size() );
512 return evaluatePair( a, homeAddr, workAddr, fieldname, value);
520 value = TQString::fromUtf8( val.data(), val.size() );
527 if ( value.isEmpty() )
531 if (formatStr.find(
':') == -1)
532 formatStr.append(
": %1\n");
535 bool printable =
true;
537 len = value.length();
538 for (i = 0; i<len; ++i ) {
539 if (!value[i].isPrint()) {
546 printable = (value.find(
'\n') == -1);
548 if (!printable && allowEncode) {
551 int p = formatStr.find(
':');
553 formatStr.insert(p,
':');
557 TQCString txt = TQString(formatStr.arg(value)).utf8();
561 if (len && txt[len-1] ==
'\n')
565 txt.insert(i,
"\n ");
571 return TQString::fromUtf8(txt);
TQString street() const
Returns the street.
KABC_EXPORT bool LDIFToAddressee(const TQString &str, AddresseeList &addrList, TQDateTime dt=TQDateTime::currentDateTime())
Converts a LDIF string to a list of addressees.
void setCountry(const TQString &)
Sets the country.
TQStringList emails() const
Return list of all email addresses.
void setRegion(const TQString &)
Sets the region, e.g.
void setUid(const TQString &uid)
Set unique identifier.
bool isEmpty() const
Returns true, if the address is empty.
ParseVal nextItem()
Process the LDIF until a complete item can be returned.
void setPostOfficeBox(const TQString &)
Sets the post office box.
void setStreet(const TQString &)
Sets the street (including number).
TQString custom(const TQString &app, const TQString &name) const
Return value of custom entry, identified by app and entry name.
void insertEmail(const TQString &email, bool preferred=false)
Insert an email address.
KABC_EXPORT TQDateTime VCardStringToDate(const TQString &dateString)
Converts a date string as it is used in VCard and LDIF files to a TQDateTime value.
void setLDIF(const TQByteArray &ldif)
Sets a chunk of LDIF.
static TQString ISOtoCountry(const TQString &ISOname)
Returns a localized country name for a ISO code.
void insertAddress(const Address &address)
Insert an address.
TQString postOfficeBox() const
Returns the post office box.
static TQCString assembleLine(const TQString &fieldname, const TQByteArray &value, uint linelen=0, bool url=false)
Assembles fieldname and value into a valid LDIF line, BASE64 encodes the value if neccessary and opti...
TQString number() const
Returns the number.
static data, shared by ALL addressee objects
PhoneNumber phoneNumber(int type) const
Return phone number, which matches the given type.
Postal address information.
TQString locality() const
Returns the locality.
a TQValueList of Addressee, with sorting functionality
kdbgstream kdWarning(int area=0)
void endLDIF()
Indicates the end of the LDIF file/stream.
TQString uid() const
Return unique identifier.
TQString postalCode() const
Returns the postal code.
KABC_EXPORT TQString dateToVCardString(const TQDateTime &dateTime)
Helper functions.
TQString region() const
Returns the region.
void setPostalCode(const TQString &)
Sets the postal code.
bool isEmpty() const
Return, if the address book entry is empty.
void insertCategory(const TQString &)
Insert category.
Address address(int type) const
Return address, which matches the given type.
static bool splitLine(const TQCString &line, TQString &fieldname, TQByteArray &value)
Splits one line from an LDIF file to attribute and value components.
static TQCString base64Encode(const TQByteArray &in, bool insertLFs=false)
KABC_EXPORT bool splitLine(TQString &line, TQString &fieldname, TQString &value)
No need for this function anymore - use LDIF::splitLine()
TQString preferredEmail() const
Return preferred email address.
KABC_EXPORT bool parseSingleLine(Addressee &a, Address &homeAddr, Address &workAddr, TQString &line)
No need for this function anymore - use LDIF::splitLine() + evaluatePair()
const TQString & attr() const
Returns the attribute name.
const TQByteArray & val() const
Returns the attribute value.
KABC_EXPORT bool addresseeToLDIF(const AddresseeList &addrList, TQString &str)
Converts a list of addressees to a LDIF string.
TQString name(StdAccel id)
TQString country() const
Returns the country.
KABC_EXPORT TQString makeLDIFfieldString(TQString field, TQString value, bool allowEncode=true) KDE_DEPRECATED
void insertPhoneNumber(const PhoneNumber &phoneNumber)
Insert a phone number.
void setLocality(const TQString &)
Sets the locality, e.g.
TQString prettyURL(int _trailing=0) const