KABC::Addressee toKABC(const Kolab::Contact &contact) { KABC::Addressee addressee; addressee.setUid(fromStdString(contact.uid())); addressee.setCategories(toStringList(contact.categories())); //addressee.setName(fromStdString(contact.name()));//This one is only for compatiblity (and results in a non-existing name property) addressee.setFormattedName(fromStdString(contact.name())); //This on corresponds to fn const Kolab::NameComponents &nc = contact.nameComponents(); if (!nc.surnames().empty()) { addressee.setFamilyName(fromStdString(nc.surnames().front())); } if (!nc.given().empty()) { addressee.setGivenName(fromStdString(nc.given().front())); } if (!nc.additional().empty()) { addressee.setAdditionalName(fromStdString(nc.additional().front())); } if (!nc.prefixes().empty()) { addressee.setPrefix(fromStdString(nc.prefixes().front())); } if (!nc.suffixes().empty()) { addressee.setSuffix(fromStdString(nc.suffixes().front())); } addressee.setNote(fromStdString(contact.note())); addressee.setSecrecy(KABC::Secrecy::Public); //We don't have any privacy setting in xCard QString preferredEmail; if (!contact.emailAddresses().empty()) { QStringList emails; foreach( const Kolab::Email &email, contact.emailAddresses()) { emails << fromStdString(email.address()); const QString types = emailTypesToStringList(email.types()); if (!types.isEmpty()) { addressee.insertCustom(QLatin1String("KOLAB"), QString::fromLatin1("EmailTypes%1").arg(fromStdString(email.address())), types); } } addressee.setEmails(emails); if ((contact.emailAddressPreferredIndex() >= 0) && (contact.emailAddressPreferredIndex() < static_cast<int>(contact.emailAddresses().size()))) { preferredEmail = fromStdString(contact.emailAddresses().at(contact.emailAddressPreferredIndex()).address()); } else { preferredEmail = fromStdString(contact.emailAddresses().at(0).address()); } addressee.insertEmail(preferredEmail, true); }
void KCalConversionTest::testContactConversion_data() { QTest::addColumn<KABC::Addressee>( "kcal" ); QTest::addColumn<Kolab::Contact>( "kolab" ); Kolab::cDateTime date(2011,2,2,12,11,10,true); Kolab::cDateTime date2(2011,2,2,12,12,10,true); { KABC::Addressee kcal; kcal.setUid("uid"); kcal.setFormattedName("name"); Kolab::Contact kolab; kolab.setUid("uid"); kolab.setName("name"); QTest::newRow("basic") << kcal << kolab; } { KABC::Addressee kcal; kcal.setUid("uid"); //The first address is always the preferred kcal.setEmails(QStringList() << "*****@*****.**" << "*****@*****.**"); kcal.insertCustom("KOLAB", "*****@*****.**", "home,work"); Kolab::Contact kolab; kolab.setUid("uid"); Kolab::Email email1("*****@*****.**", Kolab::Email::Work|Kolab::Email::Home); Kolab::Email email2("*****@*****.**"); std::vector<Kolab::Email> emails; emails.push_back(email1); emails.push_back(email2); kolab.setEmailAddresses(emails, 0); QTest::newRow("emailTypesAndPreference") << kcal << kolab; } }
static void setDeleted(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-Deleted", value); }
static void setMAcceptStatusFields(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-MacceptStatusFields", value); }
static void setOpportunityRoleFields(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-OpportunityRoleFields", value); }
static void setSalutation(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-Salutation", value); }
static void setCreatedById(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-CreatedById", value); }
QString KTnef::msTNEFToVPart( const QByteArray &tnef ) { bool bOk = false; KTNEFParser parser; QByteArray b( tnef ); QBuffer buf( &b ); MemoryCalendar::Ptr cal( new MemoryCalendar( KDateTime::UTC ) ); KABC::Addressee addressee; ICalFormat calFormat; Event::Ptr event( new Event() ); if ( parser.openDevice( &buf ) ) { KTNEFMessage *tnefMsg = parser.message(); //QMap<int,KTNEFProperty*> props = parser.message()->properties(); // Everything depends from property PR_MESSAGE_CLASS // (this is added by KTNEFParser): QString msgClass = tnefMsg->findProp( 0x001A, QString(), true ).toUpper(); if ( !msgClass.isEmpty() ) { // Match the old class names that might be used by Outlook for // compatibility with Microsoft Mail for Windows for Workgroups 3.1. bool bCompatClassAppointment = false; bool bCompatMethodRequest = false; bool bCompatMethodCancled = false; bool bCompatMethodAccepted = false; bool bCompatMethodAcceptedCond = false; bool bCompatMethodDeclined = false; if ( msgClass.startsWith( QLatin1String( "IPM.MICROSOFT SCHEDULE." ) ) ) { bCompatClassAppointment = true; if ( msgClass.endsWith( QLatin1String( ".MTGREQ" ) ) ) { bCompatMethodRequest = true; } if ( msgClass.endsWith( QLatin1String( ".MTGCNCL" ) ) ) { bCompatMethodCancled = true; } if ( msgClass.endsWith( QLatin1String( ".MTGRESPP" ) ) ) { bCompatMethodAccepted = true; } if ( msgClass.endsWith( QLatin1String( ".MTGRESPA" ) ) ) { bCompatMethodAcceptedCond = true; } if ( msgClass.endsWith( QLatin1String( ".MTGRESPN" ) ) ) { bCompatMethodDeclined = true; } } bool bCompatClassNote = ( msgClass == "IPM.MICROSOFT MAIL.NOTE" ); if ( bCompatClassAppointment || "IPM.APPOINTMENT" == msgClass ) { // Compose a vCal bool bIsReply = false; QString prodID = "-//Microsoft Corporation//Outlook "; prodID += tnefMsg->findNamedProp( "0x8554", "9.0" ); prodID += "MIMEDIR/EN\n"; prodID += "VERSION:2.0\n"; calFormat.setApplication( "Outlook", prodID ); iTIPMethod method; if ( bCompatMethodRequest ) { method = iTIPRequest; } else if ( bCompatMethodCancled ) { method = iTIPCancel; } else if ( bCompatMethodAccepted || bCompatMethodAcceptedCond || bCompatMethodDeclined ) { method = iTIPReply; bIsReply = true; } else { // pending(khz): verify whether "0x0c17" is the right tag ??? // // at the moment we think there are REQUESTS and UPDATES // // but WHAT ABOUT REPLIES ??? // // if ( tnefMsg->findProp(0x0c17) == "1" ) { bIsReply = true; } method = iTIPRequest; } /// ### FIXME Need to get this attribute written ScheduleMessage schedMsg( event, method, ScheduleMessage::Unknown ); QString sSenderSearchKeyEmail( tnefMsg->findProp( 0x0C1D ) ); if ( !sSenderSearchKeyEmail.isEmpty() ) { int colon = sSenderSearchKeyEmail.indexOf( ':' ); // May be e.g. "SMTP:[email protected]" if ( sSenderSearchKeyEmail.indexOf( ':' ) == -1 ) { sSenderSearchKeyEmail.remove( 0, colon+1 ); } } QString s( tnefMsg->findProp( 0x8189 ) ); const QStringList attendees = s.split( ';' ); if ( attendees.count() ) { for ( QStringList::const_iterator it = attendees.begin(); it != attendees.end(); ++it ) { // Skip all entries that have no '@' since these are // no mail addresses if ( (*it).indexOf( '@' ) == -1 ) { s = (*it).trimmed(); Attendee::Ptr attendee( new Attendee( s, s, true ) ); if ( bIsReply ) { if ( bCompatMethodAccepted ) { attendee->setStatus( Attendee::Accepted ); } if ( bCompatMethodDeclined ) { attendee->setStatus( Attendee::Declined ); } if ( bCompatMethodAcceptedCond ) { attendee->setStatus( Attendee::Tentative ); } } else { attendee->setStatus( Attendee::NeedsAction ); attendee->setRole( Attendee::ReqParticipant ); } event->addAttendee( attendee ); } } } else { // Oops, no attendees? // This must be old style, let us use the PR_SENDER_SEARCH_KEY. s = sSenderSearchKeyEmail; if ( !s.isEmpty() ) { Attendee::Ptr attendee( new Attendee( QString(), QString(), true ) ); if ( bIsReply ) { if ( bCompatMethodAccepted ) { attendee->setStatus( Attendee::Accepted ); } if ( bCompatMethodAcceptedCond ) { attendee->setStatus( Attendee::Declined ); } if ( bCompatMethodDeclined ) { attendee->setStatus( Attendee::Tentative ); } } else { attendee->setStatus( Attendee::NeedsAction ); attendee->setRole( Attendee::ReqParticipant ); } event->addAttendee( attendee ); } } s = tnefMsg->findProp( 0x3ff8 ); // look for organizer property if ( s.isEmpty() && !bIsReply ) { s = sSenderSearchKeyEmail; } // TODO: Use the common name? if ( !s.isEmpty() ) { event->setOrganizer( s ); } s = tnefMsg->findProp( 0x819b ).remove( QChar( '-' ) ).remove( QChar( ':' ) ); event->setDtStart( KDateTime::fromString( s ) ); // ## Format?? s = tnefMsg->findProp( 0x819c ).remove( QChar( '-' ) ).remove( QChar( ':' ) ); event->setDtEnd( KDateTime::fromString( s ) ); s = tnefMsg->findProp( 0x810d ); event->setLocation( s ); // is it OK to set this to OPAQUE always ?? //vPart += "TRANSP:OPAQUE\n"; ###FIXME, portme! //vPart += "SEQUENCE:0\n"; // is "0x0023" OK - or should we look for "0x0003" ?? s = tnefMsg->findProp( 0x0023 ); event->setUid( s ); // PENDING(khz): is this value in local timezone? Must it be // adjusted? Most likely this is a bug in the server or in // Outlook - we ignore it for now. s = tnefMsg->findProp( 0x8202 ).remove( QChar( '-' ) ).remove( QChar( ':' ) ); // ### kcal always uses currentDateTime() // event->setDtStamp( QDateTime::fromString( s ) ); s = tnefMsg->findNamedProp( "Keywords" ); event->setCategories( s ); s = tnefMsg->findProp( 0x1000 ); event->setDescription( s ); s = tnefMsg->findProp( 0x0070 ); event->setSummary( s ); s = tnefMsg->findProp( 0x0026 ); event->setPriority( s.toInt() ); // is reminder flag set ? if ( !tnefMsg->findProp( 0x8503 ).isEmpty() ) { Alarm::Ptr alarm( new Alarm( event.data() ) ); // TODO: fix when KCalCore::Alarm is fixed KDateTime highNoonTime = pureISOToLocalQDateTime( tnefMsg->findProp( 0x8502 ). remove( QChar( '-' ) ).remove( QChar( ':' ) ) ); KDateTime wakeMeUpTime = pureISOToLocalQDateTime( tnefMsg->findProp( 0x8560, "" ). remove( QChar( '-' ) ).remove( QChar( ':' ) ) ); alarm->setTime( wakeMeUpTime ); if ( highNoonTime.isValid() && wakeMeUpTime.isValid() ) { alarm->setStartOffset( Duration( highNoonTime, wakeMeUpTime ) ); } else { // default: wake them up 15 minutes before the appointment alarm->setStartOffset( Duration( 15 * 60 ) ); } alarm->setDisplayAlarm( i18n( "Reminder" ) ); // Sorry: the different action types are not known (yet) // so we always set 'DISPLAY' (no sounds, no images...) event->addAlarm( alarm ); } //ensure we have a uid for this event if ( event->uid().isEmpty() ) { event->setUid( CalFormat::createUniqueId() ); } cal->addEvent( event ); bOk = true; // we finished composing a vCal } else if ( bCompatClassNote || "IPM.CONTACT" == msgClass ) { addressee.setUid( stringProp( tnefMsg, attMSGID ) ); addressee.setFormattedName( stringProp( tnefMsg, MAPI_TAG_PR_DISPLAY_NAME ) ); addressee.insertEmail( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_EMAIL1EMAILADDRESS ), true ); addressee.insertEmail( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_EMAIL2EMAILADDRESS ), false ); addressee.insertEmail( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_EMAIL3EMAILADDRESS ), false ); addressee.insertCustom( "KADDRESSBOOK", "X-IMAddress", sNamedProp( tnefMsg, MAPI_TAG_CONTACT_IMADDRESS ) ); addressee.insertCustom( "KADDRESSBOOK", "X-SpousesName", stringProp( tnefMsg, MAPI_TAG_PR_SPOUSE_NAME ) ); addressee.insertCustom( "KADDRESSBOOK", "X-ManagersName", stringProp( tnefMsg, MAPI_TAG_PR_MANAGER_NAME ) ); addressee.insertCustom( "KADDRESSBOOK", "X-AssistantsName", stringProp( tnefMsg, MAPI_TAG_PR_ASSISTANT ) ); addressee.insertCustom( "KADDRESSBOOK", "X-Department", stringProp( tnefMsg, MAPI_TAG_PR_DEPARTMENT_NAME ) ); addressee.insertCustom( "KADDRESSBOOK", "X-Office", stringProp( tnefMsg, MAPI_TAG_PR_OFFICE_LOCATION ) ); addressee.insertCustom( "KADDRESSBOOK", "X-Profession", stringProp( tnefMsg, MAPI_TAG_PR_PROFESSION ) ); QString s = tnefMsg->findProp( MAPI_TAG_PR_WEDDING_ANNIVERSARY ). remove( QChar( '-' ) ).remove( QChar( ':' ) ); if ( !s.isEmpty() ) { addressee.insertCustom( "KADDRESSBOOK", "X-Anniversary", s ); } addressee.setUrl( KUrl( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_WEBPAGE ) ) ); // collect parts of Name entry addressee.setFamilyName( stringProp( tnefMsg, MAPI_TAG_PR_SURNAME ) ); addressee.setGivenName( stringProp( tnefMsg, MAPI_TAG_PR_GIVEN_NAME ) ); addressee.setAdditionalName( stringProp( tnefMsg, MAPI_TAG_PR_MIDDLE_NAME ) ); addressee.setPrefix( stringProp( tnefMsg, MAPI_TAG_PR_DISPLAY_NAME_PREFIX ) ); addressee.setSuffix( stringProp( tnefMsg, MAPI_TAG_PR_GENERATION ) ); addressee.setNickName( stringProp( tnefMsg, MAPI_TAG_PR_NICKNAME ) ); addressee.setRole( stringProp( tnefMsg, MAPI_TAG_PR_TITLE ) ); addressee.setOrganization( stringProp( tnefMsg, MAPI_TAG_PR_COMPANY_NAME ) ); /* the MAPI property ID of this (multiline) )field is unknown: vPart += stringProp(tnefMsg, "\n","NOTE", ... , "" ); */ KABC::Address adr; adr.setPostOfficeBox( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_PO_BOX ) ); adr.setStreet( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_STREET ) ); adr.setLocality( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_CITY ) ); adr.setRegion( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_STATE_OR_PROVINCE ) ); adr.setPostalCode( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_POSTAL_CODE ) ); adr.setCountry( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_COUNTRY ) ); adr.setType( KABC::Address::Home ); addressee.insertAddress( adr ); adr.setPostOfficeBox( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSPOBOX ) ); adr.setStreet( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSSTREET ) ); adr.setLocality( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSCITY ) ); adr.setRegion( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSSTATE ) ); adr.setPostalCode( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSPOSTALCODE ) ); adr.setCountry( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSCOUNTRY ) ); adr.setType( KABC::Address::Work ); addressee.insertAddress( adr ); adr.setPostOfficeBox( stringProp( tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_PO_BOX ) ); adr.setStreet( stringProp( tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_STREET ) ); adr.setLocality( stringProp( tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_CITY ) ); adr.setRegion( stringProp( tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_STATE_OR_PROVINCE ) ); adr.setPostalCode( stringProp( tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_POSTAL_CODE ) ); adr.setCountry( stringProp( tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_COUNTRY ) ); adr.setType( KABC::Address::Dom ); addressee.insertAddress( adr ); // problem: the 'other' address was stored by KOrganizer in // a line looking like the following one: // vPart += "\nADR;TYPE=dom;TYPE=intl;TYPE=parcel;TYPE=postal;TYPE=work;" // "TYPE=home:other_pobox;;other_str1\nother_str2;other_loc;other_region;" // "other_pocode;other_country" QString nr; nr = stringProp( tnefMsg, MAPI_TAG_PR_HOME_TELEPHONE_NUMBER ); addressee.insertPhoneNumber( KABC::PhoneNumber( nr, KABC::PhoneNumber::Home ) ); nr = stringProp( tnefMsg, MAPI_TAG_PR_BUSINESS_TELEPHONE_NUMBER ); addressee.insertPhoneNumber( KABC::PhoneNumber( nr, KABC::PhoneNumber::Work ) ); nr = stringProp( tnefMsg, MAPI_TAG_PR_MOBILE_TELEPHONE_NUMBER ); addressee.insertPhoneNumber( KABC::PhoneNumber( nr, KABC::PhoneNumber::Cell ) ); nr = stringProp( tnefMsg, MAPI_TAG_PR_HOME_FAX_NUMBER ); addressee.insertPhoneNumber( KABC::PhoneNumber( nr, KABC::PhoneNumber::Fax | KABC::PhoneNumber::Home ) ); nr = stringProp( tnefMsg, MAPI_TAG_PR_BUSINESS_FAX_NUMBER ); addressee.insertPhoneNumber( KABC::PhoneNumber( nr, KABC::PhoneNumber::Fax | KABC::PhoneNumber::Work ) ); s = tnefMsg->findProp( MAPI_TAG_PR_BIRTHDAY ). remove( QChar( '-' ) ).remove( QChar( ':' ) ); if ( !s.isEmpty() ) { addressee.setBirthday( QDateTime::fromString( s ) ); } bOk = ( !addressee.isEmpty() ); } else if ( "IPM.NOTE" == msgClass ) { } // else if ... and so on ... } } // Compose return string // KDAB_TODO: Interesting, without the explicit QString the toString call is // reported to be ambigious with toString( const Incidence::Ptr & ). const QString iCal = calFormat.toString( cal, QString() ); if ( !iCal.isEmpty() ) { // This was an iCal return iCal; } // Not an iCal - try a vCard KABC::VCardConverter converter; return QString::fromUtf8( converter.createVCard( addressee ) ); }
static void setCustom(const QString &name, const QString &value, KABC::Addressee &addr) { addr.insertCustom("Scalix", name, value); }
static void setAssignedUserName(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-AssignedUserName", value); }
static void setCampaignName(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-CampaignName", value); }
static void setLeadSourceName(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-LeadSourceName", value); }
static void setAssistantPhone(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-AssistantsPhone", value); }
static void setAssistantName(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("KADDRESSBOOK", "X-AssistantsName", value); }
static void setAccountId(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-AccountId", value); }
static void setDoNotCall(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-DoNotCall", value); }
KABC::Addressee Contact::fromXml(const QString &xml) { QDomDocument document; QString errorMsg; int errorLine, errorColumn; if(!document.setContent(xml, true, &errorMsg, &errorLine, &errorColumn)) { qDebug("Error parsing XML in Scalix::Contact::fromXml: %s (%d,%d)", errorMsg.latin1(), errorLine, errorColumn); return KABC::Addressee(); } QDomElement contactElement = document.documentElement(); if(contactElement.tagName() != "contact") { if(contactElement.tagName() == "distlist") { const QDomNodeList names = contactElement.elementsByTagName("display_name"); const QString listName = (names.count() == 1 ? names.item(0).toElement().text() : "Scalix Dummy List"); /** * As we can't provide distribution list functionality we store the entry * here and return it on save. */ KPIM::DistributionList list; list.setName(listName); if(!s_distListMap) sd.setObject(s_distListMap, new QMap<QString, QString>()); s_distListMap->insert(list.uid(), xml); return list; } else { qDebug("Error interpreting XML in Scalix::Contact::fromXml: no 'contact' or 'distlist' tag found"); return KABC::Addressee(); } } QString emails[ 3 ]; KABC::Address homeAddress(KABC::Address::Home); KABC::Address workAddress(KABC::Address::Work); KABC::Address otherAddress(KABC::Address::Dom); KABC::Addressee addr; setCustom("comes_from_scalix", "true", addr); QDomNode node = contactElement.firstChild(); while(!node.isNull()) { QDomElement element = node.toElement(); if(!element.isNull()) { if(element.tagName() == "direct_ref") addr.setUid(element.text()); else if(element.tagName() == "sensitivity") setCustom("sensitivity", element.text(), addr); else if(element.tagName() == "is_recurring") setCustom("is_recurring", element.text(), addr); else if(element.tagName() == "reminder_set") setCustom("reminder_set", element.text(), addr); else if(element.tagName() == "send_rich_info") setCustom("send_rich_info", element.text(), addr); else if(element.tagName() == "last_modification_time") addr.setRevision(QDateTime::fromString(element.text(), Qt::ISODate)); // name else if(element.tagName() == "display_name_prefix") addr.setPrefix(element.text()); else if(element.tagName() == "first_name") addr.setGivenName(element.text()); else if(element.tagName() == "middle_name") addr.setAdditionalName(element.text()); else if(element.tagName() == "last_name") addr.setFamilyName(element.text()); else if(element.tagName() == "suffix") addr.setSuffix(element.text()); else if(element.tagName() == "file_as") addr.setFormattedName(element.text()); else if(element.tagName() == "nickname") addr.setNickName(element.text()); // job else if(element.tagName() == "web_page_address") addr.setUrl(element.text()); else if(element.tagName() == "company_name") addr.setOrganization(element.text()); else if(element.tagName() == "job_title") addr.setTitle(element.text()); // emails else if(element.tagName().startsWith("email")) { if(element.tagName() == "email1_address") emails[ 0 ] = element.text(); else if(element.tagName() == "email2_address") emails[ 1 ] = element.text(); else if(element.tagName() == "email3_address") emails[ 2 ] = element.text(); else setCustom(element.tagName(), element.text(), addr); } // phone numbers else if(element.tagName() == "home_phone_number") addr.insertPhoneNumber(KABC::PhoneNumber(element.text(), KABC::PhoneNumber::Home)); else if(element.tagName() == "work_phone_number") addr.insertPhoneNumber(KABC::PhoneNumber(element.text(), KABC::PhoneNumber::Work)); else if(element.tagName() == "work_fax_number") addr.insertPhoneNumber(KABC::PhoneNumber(element.text(), KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax)); else if(element.tagName() == "mobile_phone_number") addr.insertPhoneNumber(KABC::PhoneNumber(element.text(), KABC::PhoneNumber::Cell)); // address (work) else if(element.tagName() == "work_address_street") workAddress.setStreet(element.text()); else if(element.tagName() == "work_address_zip") workAddress.setPostalCode(element.text()); else if(element.tagName() == "work_address_city") workAddress.setLocality(element.text()); else if(element.tagName() == "work_address_state") workAddress.setRegion(element.text()); else if(element.tagName() == "work_address_country") workAddress.setCountry(element.text()); // address (home) else if(element.tagName() == "home_address_street") homeAddress.setStreet(element.text()); else if(element.tagName() == "home_address_zip") homeAddress.setPostalCode(element.text()); else if(element.tagName() == "home_address_city") homeAddress.setLocality(element.text()); else if(element.tagName() == "home_address_state") homeAddress.setRegion(element.text()); else if(element.tagName() == "home_address_country") homeAddress.setCountry(element.text()); // address (other) else if(element.tagName() == "other_address_street") otherAddress.setStreet(element.text()); else if(element.tagName() == "other_address_zip") otherAddress.setPostalCode(element.text()); else if(element.tagName() == "other_address_city") otherAddress.setLocality(element.text()); else if(element.tagName() == "other_address_state") otherAddress.setRegion(element.text()); else if(element.tagName() == "other_address_country") otherAddress.setCountry(element.text()); else if(element.tagName() == "selected_mailing_address") switch(element.text().toInt()) { case 1: homeAddress.setType(homeAddress.type() | KABC::Address::Pref); break; case 2: workAddress.setType(workAddress.type() | KABC::Address::Pref); break; case 3: otherAddress.setType(otherAddress.type() | KABC::Address::Pref); break; default: Q_ASSERT(!"Unknown selected_mailing_address enum"); break; } // misc else if(element.tagName() == "im_address") addr.insertCustom("KADDRESSBOOK", "X-IMAddress", element.text()); else if(element.tagName() == "manager") addr.insertCustom("KADDRESSBOOK", "X-ManagersName", element.text()); else if(element.tagName() == "department") addr.insertCustom("KADDRESSBOOK", "X-Department", element.text()); else if(element.tagName() == "assistant") addr.insertCustom("KADDRESSBOOK", "X-AssistantsName", element.text()); else if(element.tagName() == "profession") addr.insertCustom("KADDRESSBOOK", "X-Profession", element.text()); else if(element.tagName() == "office_location") addr.insertCustom("KADDRESSBOOK", "X-Office", element.text()); else if(element.tagName() == "spouse") addr.insertCustom("KADDRESSBOOK", "X-SpousesName", element.text()); else if(element.tagName() == "bday") addr.setBirthday(QDateTime::fromString(element.text(), Qt::ISODate)); else if(element.tagName() == "anniversary") addr.insertCustom("KADDRESSBOOK", "X-Anniversary", element.text()); else setCustom(element.tagName(), element.text(), addr); } node = node.nextSibling(); } for(int i = 0; i < 3; ++i) if(!emails[ i ].isEmpty()) addr.insertEmail(emails[ i ]); if(!homeAddress.isEmpty()) addr.insertAddress(homeAddress); if(!workAddress.isEmpty()) addr.insertAddress(workAddress); if(!otherAddress.isEmpty()) addr.insertAddress(otherAddress); return addr; }
static void setReportsToUserId(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-ReportsToUserId", value); }
KABC::AddresseeList GMXXXPort::importContacts( const QString& ) const { KABC::AddresseeList addrList; QString fileName = KFileDialog::getOpenFileName( ":xxport_gmx", GMX_FILESELECTION_STRING, 0 ); if ( fileName.isEmpty() ) return addrList; QFile file( fileName ); if ( !file.open( IO_ReadOnly ) ) { QString msg = i18n( "<qt>Unable to open <b>%1</b> for reading.</qt>" ); KMessageBox::error( parentWidget(), msg.arg( fileName ) ); return addrList; } QDateTime dt; QTextStream gmxStream( &file ); gmxStream.setEncoding( QTextStream::Latin1 ); QString line, line2; line = gmxStream.readLine(); line2 = gmxStream.readLine(); if (!line.startsWith("AB_ADDRESSES:") || !line2.startsWith("Address_id")) { KMessageBox::error( parentWidget(), i18n("%1 is not a GMX address book file.").arg(fileName) ); return addrList; } QStringList strList; typedef QMap<QString, KABC::Addressee *> AddressMap; AddressMap addrMap; // "Address_id,Nickname,Firstname,Lastname,Title,Birthday,Comments,Change_date,Status,Address_link_id,Categories" line = gmxStream.readLine(); while (!line.startsWith("####") && !gmxStream.atEnd()) { while (1) { strList = QStringList::split('#', line, true); if (strList.count() >= 11) break; line.append('\n'); line.append(gmxStream.readLine()); }; KABC::Addressee *addr = new KABC::Addressee; addr->setNickName(strList[1]); addr->setGivenName(strList[2]); addr->setFamilyName(strList[3]); addr->setTitle(strList[4]); if (addr->formattedName().isEmpty()) addr->setFormattedName(addr->realName()); if (checkDateTime(strList[5],dt)) addr->setBirthday(dt); addr->setNote(strList[6]); if (checkDateTime(strList[7],dt)) addr->setRevision(dt); // addr->setStatus(strList[8]); Status // addr->xxx(strList[9]); Address_link_id // addr->setCategory(strList[10]); Categories addrMap[strList[0]] = addr; line = gmxStream.readLine(); } // now read the address records line = gmxStream.readLine(); if (!line.startsWith("AB_ADDRESS_RECORDS:")) { kdWarning() << "Could not find address records!\n"; return addrList; } // Address_id,Record_id,Street,Country,Zipcode,City,Phone,Fax,Mobile,Mobile_type,Email, // Homepage,Position,Comments,Record_type_id,Record_type,Company,Department,Change_date,Preferred,Status line = gmxStream.readLine(); line = gmxStream.readLine(); while (!line.startsWith("####") && !gmxStream.atEnd()) { while (1) { strList = QStringList::split('#', line, true); if (strList.count() >= 21) break; line.append('\n'); line.append(gmxStream.readLine()); }; KABC::Addressee *addr = addrMap[strList[0]]; if (addr) { for ( QStringList::Iterator it = strList.begin(); it != strList.end(); ++it ) *it = (*it).simplifyWhiteSpace(); // strList[1] = Record_id (numbered item, ignore here) int id = strList[14].toInt(); // Record_type_id (0=work,1=home,2=other) int type = (id==0) ? KABC::Address::Work : KABC::Address::Home; if (!strList[19].isEmpty() && strList[19].toInt()!=0) type |= KABC::Address::Pref; // Preferred address (seems to be bitfield for telephone Prefs) KABC::Address adr = addr->address(type); adr.setStreet(strList[2]); adr.setCountry(strList[3]); adr.setPostalCode(strList[4]); adr.setLocality(strList[5]); addr->insertPhoneNumber( KABC::PhoneNumber(strList[6], KABC::PhoneNumber::Home) ); addr->insertPhoneNumber( KABC::PhoneNumber(strList[7], KABC::PhoneNumber::Fax) ); int celltype = KABC::PhoneNumber::Cell; // strList[9]=Mobile_type // always 0 or -1(default phone). if (strList[9].toInt()) celltype |= KABC::PhoneNumber::Pref; addr->insertPhoneNumber( KABC::PhoneNumber(strList[8], celltype) ); addr->insertEmail(strList[10]); if (!strList[11].isEmpty()) addr->setUrl(strList[11]); if (!strList[12].isEmpty()) addr->setRole(strList[12]); // strList[13]=Comments // strList[14]=Record_type_id (0,1,2) - see above // strList[15]=Record_type (name of this additional record entry) if (!strList[16].isEmpty()) addr->setOrganization(strList[16]); // Company if (!strList[17].isEmpty()) addr->insertCustom( "KADDRESSBOOK", "X-Department", strList[17]); // Department if (checkDateTime(strList[18],dt)) addr->setRevision(dt); // Change_date // strList[19]=Preferred (see above) // strList[20]=Status (should always be "1") addr->insertAddress(adr); } else { kdWarning() << "unresolved line: " << line << endl; } line = gmxStream.readLine(); } // now add the addresses to to addrList for ( AddressMap::Iterator it = addrMap.begin(); it != addrMap.end(); ++it ) { KABC::Addressee *addr = it.data(); addrList.append(*addr); delete addr; } file.close(); return addrList; }
static void setModifiedUserId(const QString &value, KABC::Addressee &addressee) { addressee.insertCustom("FATCRM", "X-ModifiedUserId", value); }