bool ResourceSql::load() { QSqlQuery query( "select addressId, name, familyName, givenName, " "additionalName, prefix, suffix, nickname, birthday, " "mailer, timezone, geo_latitude, geo_longitude, title, " "role, organization, note, productId, revision, " "sortString, url from kaddressbook_main_" + mUser); while(query.next()) { QString addrId = query.value(0).toString(); Addressee addr; addr.setResource(this); addr.setUid(addrId); addr.setName(query.value(1).toString()); addr.setFamilyName(query.value(2).toString()); addr.setGivenName(query.value(3).toString()); addr.setAdditionalName(query.value(4).toString()); addr.setPrefix(query.value(5).toString()); addr.setSuffix(query.value(6).toString()); addr.setNickName(query.value(7).toString()); addr.setBirthday(query.value(8).toDateTime()); addr.setMailer(query.value(9).toString()); addr.setTimeZone(TimeZone(query.value(10).toInt())); addr.setGeo(Geo(query.value(11).toDouble(), query.value(12).toDouble())); addr.setTitle(query.value(13).toString()); addr.setRole(query.value(14).toString()); addr.setOrganization(query.value(15).toString()); addr.setNote(query.value(16).toString()); addr.setProductId(query.value(17).toString()); addr.setRevision(query.value(18).toDateTime()); addr.setSortString(query.value(19).toString()); addr.setUrl(query.value(20).toString()); // emails { QSqlQuery emailsQuery( "select email, preferred from kaddressbook_emails " "where addressId = '" + addrId + "'"); while(emailsQuery.next()) addr.insertEmail(emailsQuery.value(0).toString(), emailsQuery.value(1).toInt()); } // phones { QSqlQuery phonesQuery( "select number, type from kaddressbook_phones " "where addressId = '" + addrId + "'"); while(phonesQuery.next()) addr.insertPhoneNumber(PhoneNumber(phonesQuery.value(0).toString(), phonesQuery.value(1).toInt())); } // addresses { QSqlQuery addressesQuery( "select postOfficeBox, extended, street, " "locality, region, postalCode, country, label, type " "from kaddressbook_addresses where addressId = '" + addrId + "'"); while(addressesQuery.next()) { Address a; a.setPostOfficeBox(addressesQuery.value(0).toString()); a.setExtended(addressesQuery.value(1).toString()); a.setStreet(addressesQuery.value(2).toString()); a.setLocality(addressesQuery.value(3).toString()); a.setRegion(addressesQuery.value(4).toString()); a.setPostalCode(addressesQuery.value(5).toString()); a.setCountry(addressesQuery.value(6).toString()); a.setLabel(addressesQuery.value(7).toString()); a.setType(addressesQuery.value(8).toInt()); addr.insertAddress(a); } } // categories { QSqlQuery categoriesQuery( "select category from kaddressbook_categories " "where addressId = '" + addrId + "'"); while(categoriesQuery.next()) addr.insertCategory(categoriesQuery.value(0).toString()); } // customs { QSqlQuery customsQuery( "select app, name, value from kaddressbook_customs " "where addressId = '" + addrId + "'"); while(customsQuery.next()) addr.insertCustom(customsQuery.value(0).toString(), customsQuery.value(1).toString(), customsQuery.value(2).toString()); } addressBook()->insertAddressee(addr); } return true; }
Addressee::List VCardTool::parseVCards(const QString &vcard) { static const QChar semicolonSep(';'); static const QChar commaSep(','); QString identifier; Addressee::List addrList; const VCard::List vCardList = VCardParser::parseVCards(vcard); VCard::List::ConstIterator cardIt; VCard::List::ConstIterator listEnd(vCardList.end()); for(cardIt = vCardList.begin(); cardIt != listEnd; ++cardIt) { Addressee addr; const QStringList idents = (*cardIt).identifiers(); QStringList::ConstIterator identIt; QStringList::ConstIterator identEnd(idents.end()); for(identIt = idents.begin(); identIt != identEnd; ++identIt) { const VCardLine::List lines = (*cardIt).lines((*identIt)); VCardLine::List::ConstIterator lineIt; // iterate over the lines for(lineIt = lines.begin(); lineIt != lines.end(); ++lineIt) { identifier = (*lineIt).identifier().lower(); // ADR if(identifier == "adr") { Address address; const QStringList addrParts = splitString(semicolonSep, (*lineIt).value().asString()); if(addrParts.count() > 0) address.setPostOfficeBox(addrParts[0]); if(addrParts.count() > 1) address.setExtended(addrParts[1]); if(addrParts.count() > 2) address.setStreet(addrParts[2]); if(addrParts.count() > 3) address.setLocality(addrParts[3]); if(addrParts.count() > 4) address.setRegion(addrParts[4]); if(addrParts.count() > 5) address.setPostalCode(addrParts[5]); if(addrParts.count() > 6) address.setCountry(addrParts[6]); int type = 0; const QStringList types = (*lineIt).parameters("type"); for(QStringList::ConstIterator it = types.begin(); it != types.end(); ++it) type += mAddressTypeMap[(*it).lower()]; address.setType(type); addr.insertAddress(address); } // AGENT else if(identifier == "agent") addr.setAgent(parseAgent(*lineIt)); // BDAY else if(identifier == "bday") addr.setBirthday(parseDateTime((*lineIt).value().asString())); // CATEGORIES else if(identifier == "categories") { const QStringList categories = splitString(commaSep, (*lineIt).value().asString()); addr.setCategories(categories); } // CLASS else if(identifier == "class") addr.setSecrecy(parseSecrecy(*lineIt)); // EMAIL else if(identifier == "email") { const QStringList types = (*lineIt).parameters("type"); addr.insertEmail((*lineIt).value().asString(), types.findIndex("PREF") != -1); } // FN else if(identifier == "fn") addr.setFormattedName((*lineIt).value().asString()); // GEO else if(identifier == "geo") { Geo geo; const QStringList geoParts = QStringList::split(';', (*lineIt).value().asString(), true); geo.setLatitude(geoParts[0].toFloat()); geo.setLongitude(geoParts[1].toFloat()); addr.setGeo(geo); } // KEY else if(identifier == "key") addr.insertKey(parseKey(*lineIt)); // LABEL else if(identifier == "label") { int type = 0; const QStringList types = (*lineIt).parameters("type"); for(QStringList::ConstIterator it = types.begin(); it != types.end(); ++it) type += mAddressTypeMap[(*it).lower()]; bool available = false; KABC::Address::List addressList = addr.addresses(); KABC::Address::List::Iterator it; for(it = addressList.begin(); it != addressList.end(); ++it) { if((*it).type() == type) { (*it).setLabel((*lineIt).value().asString()); addr.insertAddress(*it); available = true; break; } } if(!available) { // a standalone LABEL tag KABC::Address address(type); address.setLabel((*lineIt).value().asString()); addr.insertAddress(address); } } // LOGO else if(identifier == "logo") addr.setLogo(parsePicture(*lineIt)); // MAILER else if(identifier == "mailer") addr.setMailer((*lineIt).value().asString()); // N else if(identifier == "n") { const QStringList nameParts = splitString(semicolonSep, (*lineIt).value().asString()); if(nameParts.count() > 0) addr.setFamilyName(nameParts[0]); if(nameParts.count() > 1) addr.setGivenName(nameParts[1]); if(nameParts.count() > 2) addr.setAdditionalName(nameParts[2]); if(nameParts.count() > 3) addr.setPrefix(nameParts[3]); if(nameParts.count() > 4) addr.setSuffix(nameParts[4]); } // NAME else if(identifier == "name") addr.setName((*lineIt).value().asString()); // NICKNAME else if(identifier == "nickname") addr.setNickName((*lineIt).value().asString()); // NOTE else if(identifier == "note") addr.setNote((*lineIt).value().asString()); // ORGANIZATION else if(identifier == "org") { const QStringList orgParts = splitString(semicolonSep, (*lineIt).value().asString()); if(orgParts.count() > 0) addr.setOrganization(orgParts[0]); if(orgParts.count() > 1) addr.setDepartment(orgParts[1]); } // PHOTO else if(identifier == "photo") addr.setPhoto(parsePicture(*lineIt)); // PROID else if(identifier == "prodid") addr.setProductId((*lineIt).value().asString()); // REV else if(identifier == "rev") addr.setRevision(parseDateTime((*lineIt).value().asString())); // ROLE else if(identifier == "role") addr.setRole((*lineIt).value().asString()); // SORT-STRING else if(identifier == "sort-string") addr.setSortString((*lineIt).value().asString()); // SOUND else if(identifier == "sound") addr.setSound(parseSound(*lineIt)); // TEL else if(identifier == "tel") { PhoneNumber phone; phone.setNumber((*lineIt).value().asString()); int type = 0; const QStringList types = (*lineIt).parameters("type"); for(QStringList::ConstIterator it = types.begin(); it != types.end(); ++it) type += mPhoneTypeMap[(*it).upper()]; phone.setType(type); addr.insertPhoneNumber(phone); } // TITLE else if(identifier == "title") addr.setTitle((*lineIt).value().asString()); // TZ else if(identifier == "tz") { TimeZone tz; const QString date = (*lineIt).value().asString(); int hours = date.mid(1, 2).toInt(); int minutes = date.mid(4, 2).toInt(); int offset = (hours * 60) + minutes; offset = offset * (date[0] == '+' ? 1 : -1); tz.setOffset(offset); addr.setTimeZone(tz); } // UID else if(identifier == "uid") addr.setUid((*lineIt).value().asString()); // URL else if(identifier == "url") addr.setUrl(KURL((*lineIt).value().asString())); // X- else if(identifier.startsWith("x-")) { const QString key = (*lineIt).identifier().mid(2); int dash = key.find("-"); addr.insertCustom(key.left(dash), key.mid(dash + 1), (*lineIt).value().asString()); } } } addrList.append(addr); } return addrList; }
void readKAddressBookEntries(const QString &dataString, Addressee &a) { // Strip "KMail:1.0" prefix and "[EOS]" suffix. QString str = dataString.mid(11, dataString.length() - 24); QStringList entries = QStringList::split("\n[EOR]\n ", str); Address homeAddress(Address::Home); Address businessAddress(Address::Work); Address otherAddress; QStringList::ConstIterator it; for(it = entries.begin(); it != entries.end(); ++it) { int pos = (*it).find("\n"); QString fieldName = (*it).left(pos); QString fieldValue = (*it).mid(pos + 2); if(fieldName == "X-HomeFax") { a.insertPhoneNumber(PhoneNumber(fieldValue, PhoneNumber::Home | PhoneNumber::Fax)); } else if(fieldName == "X-OtherPhone") { a.insertPhoneNumber(PhoneNumber(fieldValue, 0)); } else if(fieldName == "X-PrimaryPhone") { a.insertPhoneNumber(PhoneNumber(fieldValue, PhoneNumber::Pref)); } else if(fieldName == "X-BusinessFax") { a.insertPhoneNumber(PhoneNumber(fieldValue, PhoneNumber::Work | PhoneNumber::Fax)); } else if(fieldName == "X-CarPhone") { a.insertPhoneNumber(PhoneNumber(fieldValue, PhoneNumber::Car)); } else if(fieldName == "X-MobilePhone") { a.insertPhoneNumber(PhoneNumber(fieldValue, PhoneNumber::Cell)); } else if(fieldName == "X-ISDN") { a.insertPhoneNumber(PhoneNumber(fieldValue, PhoneNumber::Isdn)); } else if(fieldName == "X-OtherFax") { a.insertPhoneNumber(PhoneNumber(fieldValue, PhoneNumber::Fax)); } else if(fieldName == "X-Pager") { a.insertPhoneNumber(PhoneNumber(fieldValue, PhoneNumber::Pager)); } else if(fieldName == "X-BusinessPhone") { a.insertPhoneNumber(PhoneNumber(fieldValue, PhoneNumber::Work)); } else if(fieldName == "X-HomePhone") { a.insertPhoneNumber(PhoneNumber(fieldValue, PhoneNumber::Home)); } else if(fieldName == "X-HomeAddress") { homeAddress.setLabel(fieldValue); } else if(fieldName == "X-HomeAddressStreet") { homeAddress.setStreet(fieldValue); } else if(fieldName == "X-HomeAddressCity") { homeAddress.setLocality(fieldValue); } else if(fieldName == "X-HomeAddressPostalCode") { homeAddress.setPostalCode(fieldValue); } else if(fieldName == "X-HomeAddressState") { homeAddress.setRegion(fieldValue); } else if(fieldName == "X-HomeAddressCountry") { homeAddress.setCountry(fieldValue); } else if(fieldName == "X-BusinessAddress") { businessAddress.setLabel(fieldValue); } else if(fieldName == "X-BusinessAddressStreet") { businessAddress.setStreet(fieldValue); } else if(fieldName == "X-BusinessAddressCity") { businessAddress.setLocality(fieldValue); } else if(fieldName == "X-BusinessAddressPostalCode") { businessAddress.setPostalCode(fieldValue); } else if(fieldName == "X-BusinessAddressState") { businessAddress.setRegion(fieldValue); } else if(fieldName == "X-BusinessAddressCountry") { businessAddress.setCountry(fieldValue); } else if(fieldName == "X-OtherAddress") { otherAddress.setLabel(fieldValue); } else if(fieldName == "X-OtherAddressStreet") { otherAddress.setStreet(fieldValue); } else if(fieldName == "X-OtherAddressCity") { otherAddress.setLocality(fieldValue); } else if(fieldName == "X-OtherAddressPostalCode") { otherAddress.setPostalCode(fieldValue); } else if(fieldName == "X-OtherAddressState") { otherAddress.setRegion(fieldValue); } else if(fieldName == "X-OtherAddressCountry") { otherAddress.setCountry(fieldValue); } else if(fieldName == "NICKNAME") { a.setNickName(fieldValue); } else if(fieldName == "ORG") { a.setOrganization(fieldValue); } else if(fieldName == "ROLE") { a.setRole(fieldValue); } else if(fieldName == "BDAY") { a.setBirthday(KGlobal::locale()->readDate(fieldValue)); } else if(fieldName == "WEBPAGE") { a.setUrl(KURL(fieldValue)); } else if(fieldName == "N") { } else if(fieldName == "X-FirstName") { } else if(fieldName == "X-MiddleName") { } else if(fieldName == "X-LastName") { } else if(fieldName == "X-Title") { } else if(fieldName == "X-Suffix") { } else if(fieldName == "X-FileAs") { } else if(fieldName == "EMAIL") { a.insertEmail(fieldValue, true); } else if(fieldName == "X-E-mail2") { a.insertEmail(fieldValue); } else if(fieldName == "X-E-mail3") { a.insertEmail(fieldValue); } else if(fieldName == "X-Notes") { } else { a.insertCustom("KADDRESSBOOK", fieldName, fieldValue); } } if(!homeAddress.isEmpty()) a.insertAddress(homeAddress); if(!businessAddress.isEmpty()) a.insertAddress(businessAddress); if(!otherAddress.isEmpty()) a.insertAddress(otherAddress); }
void ResourceSlox::parseContactAttribute( const QDomElement &e, Addressee &a ) { QString text = decodeText( e.text() ); if ( text.isEmpty() ) return; QString tag = e.tagName(); int pnType = 0; if ( tag == fieldName( Birthday ) ) { QDateTime dt = WebdavHandler::sloxToQDateTime( text ); a.setBirthday( dt.date() ); } else if ( tag == fieldName( Role ) ) { a.setRole( text ); } else if ( tag == "salutation" ) { // what's this in OX? a.setPrefix( text ); } else if ( tag == fieldName( Title ) ) { a.setTitle( text ); } else if ( tag == fieldName( Organization ) ) { a.setOrganization( text ); } else if ( tag == fieldName( Department ) ) { a.insertCustom( "KADDRESSBOOK", "X-Department", text ); } else if ( tag == fieldName( FamilyName ) ) { a.setFamilyName( text ); } else if ( tag == fieldName( GivenName) ) { a.setGivenName( text ); } else if ( tag == fieldName( SecondName ) ) { a.setAdditionalName( text ); } else if ( tag == fieldName( DisplayName ) ) { a.setFormattedName( text ); } else if ( tag == fieldName( Suffix ) ) { a.setSuffix( text ); } else if ( tag == fieldName( PrimaryEmail ) ) { a.insertEmail( text, true ); } else if ( (pnType = phoneNumberType( tag )) ) { a.insertPhoneNumber( PhoneNumber( text, pnType ) ); } else if ( tag == fieldName( Comment ) ) { a.setNote( text ); } else if ( tag == fieldName( SecondaryEmail1 ) || tag == fieldName( SecondaryEmail2 ) || tag == fieldName( SecondaryEmail3 ) ) { a.insertEmail( text ); } else if ( tag == fieldName( Url ) ) { a.setUrl( text ); } else if ( tag == fieldName( Image ) ) { QByteArray decodedPicture; KCodecs::base64Decode( text.utf8(), decodedPicture ); a.setPhoto( Picture( QImage( decodedPicture ) ) ); } else if ( tag == fieldName( NickName ) ) { a.setNickName( text ); } else if ( tag == fieldName( InstantMsg ) ) { a.insertCustom( "KADDRESSBOOK", "X-IMAddress", text ); } else if ( tag == fieldName( Office ) ) { a.insertCustom( "KADDRESSBOOK", "X-Office", text ); } else if ( tag == fieldName( Profession ) ) { a.insertCustom( "KADDRESSBOOK", "X-Profession", text ); } else if ( tag == fieldName( ManagersName ) ) { a.insertCustom( "KADDRESSBOOK", "X-ManagersName", text ); } else if ( tag == fieldName( AssistantsName ) ) { a.insertCustom( "KADDRESSBOOK", "X-AssistantsName", text ); } else if ( tag == fieldName( SpousesName ) ) { a.insertCustom( "KADDRESSBOOK", "X-SpousesName", text ); } else if ( tag == fieldName( Anniversary ) ) { QDateTime dt = WebdavHandler::sloxToQDateTime( text ); a.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt.toString( Qt::ISODate ) ); } else if ( tag == fieldName( Categories ) ) { a.setCategories( QStringList::split( QRegExp(",\\s*"), text ) ); } else if ( type() == "ox" ) { // FIXME: Address reading is missing for SLOX // read addresses Address addr; if ( tag.startsWith( fieldName( BusinessPrefix ) ) ) { addr = a.address( KABC::Address::Work ); } else if ( tag.startsWith( fieldName( OtherPrefix ) ) ) { addr = a.address( 0 ); } else { addr = a.address( KABC::Address::Home ); } if ( tag.endsWith( fieldName( Street ) ) ) { addr.setStreet( text ); } else if ( tag.endsWith( fieldName( PostalCode ) ) ) { addr.setPostalCode( text ); } else if ( tag.endsWith( fieldName( City ) ) ) { addr.setLocality( text ); } else if ( tag.endsWith( fieldName( State ) ) ) { addr.setRegion( text ); } else if ( tag.endsWith( fieldName( Country ) ) ) { addr.setCountry( text ); } a.insertAddress( addr ); } }
bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCARD::VCard &v ) { QPtrList<ContentLine> contentLines = v.contentLineList(); ContentLine *cl; for( cl = contentLines.first(); cl; cl = contentLines.next() ) { QCString n = cl->name(); if ( n.left( 2 ) == "X-" ) { n = n.mid( 2 ); int posDash = n.find( "-" ); addressee.insertCustom( QString::fromUtf8( n.left( posDash ) ), QString::fromUtf8( n.mid( posDash + 1 ) ), QString::fromUtf8( cl->value()->asString() ) ); continue; } EntityType type = cl->entityType(); switch( type ) { case EntityUID: addressee.setUid( readTextValue( cl ) ); break; case EntityEmail: addressee.insertEmail( readTextValue( cl ) ); break; case EntityName: addressee.setName( readTextValue( cl ) ); break; case EntityFullName: addressee.setFormattedName( readTextValue( cl ) ); break; case EntityURL: addressee.setUrl( KURL( readTextValue( cl ) ) ); break; case EntityNickname: addressee.setNickName( readTextValue( cl ) ); break; case EntityLabel: // not yet supported by kabc break; case EntityMailer: addressee.setMailer( readTextValue( cl ) ); break; case EntityTitle: addressee.setTitle( readTextValue( cl ) ); break; case EntityRole: addressee.setRole( readTextValue( cl ) ); break; case EntityOrganisation: addressee.setOrganization( readTextValue( cl ) ); break; case EntityNote: addressee.setNote( readTextValue( cl ) ); break; case EntityProductID: addressee.setProductId( readTextValue( cl ) ); break; case EntitySortString: addressee.setSortString( readTextValue( cl ) ); break; case EntityN: readNValue( cl, addressee ); break; case EntityAddress: addressee.insertAddress( readAddressValue( cl ) ); break; case EntityTelephone: addressee.insertPhoneNumber( readTelephoneValue( cl ) ); break; case EntityCategories: addressee.setCategories( QStringList::split( ",", readTextValue( cl ) ) ); break; case EntityBirthday: addressee.setBirthday( readDateValue( cl ) ); break; case EntityRevision: addressee.setRevision( readDateTimeValue( cl ) ); break; case EntityGeo: addressee.setGeo( readGeoValue( cl ) ); break; case EntityTimeZone: addressee.setTimeZone( readUTCValue( cl ) ); break; case EntityVersion: break; case EntityClass: addressee.setSecrecy( readClassValue( cl ) ); break; case EntityKey: addressee.insertKey( readKeyValue( cl ) ); break; case EntityPhoto: addressee.setPhoto( readPictureValue( cl, EntityPhoto, addressee ) ); break; case EntityLogo: addressee.setLogo( readPictureValue( cl, EntityLogo, addressee ) ); break; case EntityAgent: addressee.setAgent( readAgentValue( cl ) ); break; case EntitySound: addressee.setSound( readSoundValue( cl, addressee ) ); break; default: kdDebug(5700) << "VCardFormat::load(): Unsupported entity: " << int( type ) << ": " << cl->asString() << endl; break; } } for( cl = contentLines.first(); cl; cl = contentLines.next() ) { EntityType type = cl->entityType(); if ( type == EntityLabel ) { int type = readAddressParam( cl ); Address address = addressee.address( type ); if ( address.isEmpty() ) address.setType( type ); address.setLabel( QString::fromUtf8( cl->value()->asString() ) ); addressee.insertAddress( address ); } } return true; }