-rw-r--r-- | libopie/pim/ocontact.cpp | 29 | ||||
-rw-r--r-- | libopie2/opiepim/ocontact.cpp | 29 |
2 files changed, 42 insertions, 16 deletions
diff --git a/libopie/pim/ocontact.cpp b/libopie/pim/ocontact.cpp index 734f5a2..bf27d0f 100644 --- a/libopie/pim/ocontact.cpp +++ b/libopie/pim/ocontact.cpp @@ -568,18 +568,18 @@ QString OContact::toRichText() const text += "<b>" + QObject::tr("Gender: ") + "</b>" + str + "<br>"; } str = spouse(); if ( !str.isEmpty() ) text += "<b>" + QObject::tr("Spouse: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; - if ( !birthday().isNull() ){ + if ( !birthday().isValid() ){ str = TimeString::numberDateString( birthday() ); text += "<b>" + QObject::tr("Birthday: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; } - if ( !anniversary().isNull() ){ + if ( !anniversary().isValid() ){ str = TimeString::numberDateString( anniversary() ); text += "<b>" + QObject::tr("Anniversary: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; } str = nickname(); if ( !str.isEmpty() ) @@ -1120,14 +1120,22 @@ static VObject *createVObject( const OContact &c ) safeAddProp( email, VCInternetProp ); } safeAddPropValue( vcard, VCNoteProp, c.notes() ); // Exporting Birthday regarding RFC 2425 (5.8.4) - if ( !c.birthday().isNull() ){ - QString birthd_rfc2425 = c.birthday().year() + QString( "-" ) + c.birthday().month() + QString( "-" ) + c.birthday().day(); + if ( !c.birthday().isValid() ){ + QString birthd_rfc2425 = QString("%1-%2-%3") + .arg( c.birthday().year() ) + .arg( c.birthday().month(), 2 ) + .arg( c.birthday().day(), 2 ); + // Now replace spaces with "0"... + int pos = 0; + while ( ( pos = birthd_rfc2425.find (' ') ) > 0 ) + birthd_rfc2425.replace( pos, 1, "0" ); + qWarning("Exporting birthday as: %s", birthd_rfc2425.latin1()); safeAddPropValue( vcard, VCBirthDateProp, birthd_rfc2425.latin1() ); } if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) { VObject *org = safeAddProp( vcard, VCOrgProp ); @@ -1155,21 +1163,26 @@ static VObject *createVObject( const OContact &c ) \internal */ static QDate convVCardDateToDate( const QString& datestr ) { int monthPos = datestr.find('-'); int dayPos = datestr.find('-', monthPos+1 ); + int sep_ignore = 1; if ( monthPos == -1 || dayPos == -1 ) { qDebug("fromString didn't find - in str = %s; mpos = %d ypos = %d", datestr.latin1(), monthPos, dayPos ); - return QDate(); + // Ok.. Outlook is violating ISO 8601, therefore we will try to read their format ( YYYYMMDD ) + monthPos = 4; + dayPos = 6; + sep_ignore = 0; + qDebug("Try with follwing positions str = %s; mpos = %d ypos = %d", datestr.latin1(), monthPos, dayPos ); } int y = datestr.left( monthPos ).toInt(); - int m = datestr.mid( monthPos+1, dayPos - monthPos - 1 ).toInt(); - int d = datestr.mid( dayPos+1 ).toInt(); - QDate date ( y,m,d ); + int m = datestr.mid( monthPos + sep_ignore, dayPos - monthPos - sep_ignore ).toInt(); + int d = datestr.mid( dayPos + sep_ignore ).toInt(); qDebug("TimeConversion::fromString ymd = %s => %d %d %d; mpos = %d ypos = %d", datestr.latin1(), y, m, d, monthPos, dayPos); + QDate date ( y,m,d ); return date; } static OContact parseVObject( VObject *obj ) { OContact c; diff --git a/libopie2/opiepim/ocontact.cpp b/libopie2/opiepim/ocontact.cpp index 734f5a2..bf27d0f 100644 --- a/libopie2/opiepim/ocontact.cpp +++ b/libopie2/opiepim/ocontact.cpp @@ -568,18 +568,18 @@ QString OContact::toRichText() const text += "<b>" + QObject::tr("Gender: ") + "</b>" + str + "<br>"; } str = spouse(); if ( !str.isEmpty() ) text += "<b>" + QObject::tr("Spouse: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; - if ( !birthday().isNull() ){ + if ( !birthday().isValid() ){ str = TimeString::numberDateString( birthday() ); text += "<b>" + QObject::tr("Birthday: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; } - if ( !anniversary().isNull() ){ + if ( !anniversary().isValid() ){ str = TimeString::numberDateString( anniversary() ); text += "<b>" + QObject::tr("Anniversary: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; } str = nickname(); if ( !str.isEmpty() ) @@ -1120,14 +1120,22 @@ static VObject *createVObject( const OContact &c ) safeAddProp( email, VCInternetProp ); } safeAddPropValue( vcard, VCNoteProp, c.notes() ); // Exporting Birthday regarding RFC 2425 (5.8.4) - if ( !c.birthday().isNull() ){ - QString birthd_rfc2425 = c.birthday().year() + QString( "-" ) + c.birthday().month() + QString( "-" ) + c.birthday().day(); + if ( !c.birthday().isValid() ){ + QString birthd_rfc2425 = QString("%1-%2-%3") + .arg( c.birthday().year() ) + .arg( c.birthday().month(), 2 ) + .arg( c.birthday().day(), 2 ); + // Now replace spaces with "0"... + int pos = 0; + while ( ( pos = birthd_rfc2425.find (' ') ) > 0 ) + birthd_rfc2425.replace( pos, 1, "0" ); + qWarning("Exporting birthday as: %s", birthd_rfc2425.latin1()); safeAddPropValue( vcard, VCBirthDateProp, birthd_rfc2425.latin1() ); } if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) { VObject *org = safeAddProp( vcard, VCOrgProp ); @@ -1155,21 +1163,26 @@ static VObject *createVObject( const OContact &c ) \internal */ static QDate convVCardDateToDate( const QString& datestr ) { int monthPos = datestr.find('-'); int dayPos = datestr.find('-', monthPos+1 ); + int sep_ignore = 1; if ( monthPos == -1 || dayPos == -1 ) { qDebug("fromString didn't find - in str = %s; mpos = %d ypos = %d", datestr.latin1(), monthPos, dayPos ); - return QDate(); + // Ok.. Outlook is violating ISO 8601, therefore we will try to read their format ( YYYYMMDD ) + monthPos = 4; + dayPos = 6; + sep_ignore = 0; + qDebug("Try with follwing positions str = %s; mpos = %d ypos = %d", datestr.latin1(), monthPos, dayPos ); } int y = datestr.left( monthPos ).toInt(); - int m = datestr.mid( monthPos+1, dayPos - monthPos - 1 ).toInt(); - int d = datestr.mid( dayPos+1 ).toInt(); - QDate date ( y,m,d ); + int m = datestr.mid( monthPos + sep_ignore, dayPos - monthPos - sep_ignore ).toInt(); + int d = datestr.mid( dayPos + sep_ignore ).toInt(); qDebug("TimeConversion::fromString ymd = %s => %d %d %d; mpos = %d ypos = %d", datestr.latin1(), y, m, d, monthPos, dayPos); + QDate date ( y,m,d ); return date; } static OContact parseVObject( VObject *obj ) { OContact c; |