-rw-r--r-- | kabc/addresseeview.cpp | 26 | ||||
-rw-r--r-- | kabc/addresseeview.h | 10 | ||||
-rw-r--r-- | kabc/vcard/VCardEntity.cpp | 45 |
3 files changed, 62 insertions, 19 deletions
diff --git a/kabc/addresseeview.cpp b/kabc/addresseeview.cpp index 90be928..7a4336b 100644 --- a/kabc/addresseeview.cpp +++ b/kabc/addresseeview.cpp @@ -65,99 +65,96 @@ AddresseeView::AddresseeView( QWidget *parent, const char *name ) //US QStyleSheet *sheet = styleSheet(); //US QStyleSheetItem *link = sheet->item( "a" ); //US link->setColor( KGlobalSettings::linkColor() ); } void AddresseeView::setSource(const QString& n) { //qDebug("********AddresseeView::setSource %s", n.latin1()); if ( n.left( 6 ) == "mailto" ) ExternalAppHandler::instance()->mailToOneContact( n.mid(7) ); else if ( n.left( 7 ) == "phoneto" ) ExternalAppHandler::instance()->callByPhone( n.mid(8) ); else if ( n.left( 5 ) == "faxto" ) ExternalAppHandler::instance()->callByFax( n.mid(6) ); else if ( n.left( 5 ) == "smsto" ) ExternalAppHandler::instance()->callBySMS( n.mid(6) ); else if ( n.left( 7 ) == "pagerto" ) ExternalAppHandler::instance()->callByPager( n.mid(8) ); else if ( n.left( 5 ) == "sipto" ) ExternalAppHandler::instance()->callBySIP( n.mid(6) ); } -void AddresseeView::setAddressee( const KABC::Addressee& addr ) +void AddresseeView::setAddressee( const KABC::Addressee& mAddressee ) { - ExternalAppHandler* eah = ExternalAppHandler::instance(); - bool kemailAvail = eah->isEmailAppAvailable(); - - - - mAddressee = addr; + bool kemailAvail = ExternalAppHandler::instance()->isEmailAppAvailable(); + // mAddressee = addr; // clear view - setText( QString::null ); + //setText( QString::null ); - if ( mAddressee.isEmpty() ) + if ( mAddressee.isEmpty() ) { + setText( QString::null); return; - + } QString name = ( mAddressee.assembledName().isEmpty() ? mAddressee.formattedName() : mAddressee.assembledName() ); QString dynamicPart; - dynamicPart += getPhoneNumbers( true ); + dynamicPart += getPhoneNumbers( mAddressee.phoneNumbers(),true ); QStringList emails = mAddressee.emails(); QStringList::ConstIterator emailIt; QString type = i18n( "Email" ); emailIt = emails.begin(); if ( emailIt != emails.end() ) { if ( kemailAvail ) { dynamicPart += QString( "<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\"><a href=\"mailto:%2 <%3> \">%4</a></td></tr>" ) .arg( type ) .arg( name ) .arg( *emailIt ) .arg( *emailIt ); ++emailIt; } else { dynamicPart += QString( "<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\">%2</td></tr>" ) .arg( type ) .arg( *emailIt ); ++emailIt; } } if ( mAddressee.birthday().date().isValid() ) { dynamicPart += QString( "<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\">%2</td></tr>" ) .arg( i18n ("Birthday") ) .arg( KGlobal::locale()->formatDate( mAddressee.birthday().date() ,true) ); } - dynamicPart += getPhoneNumbers( false ); + dynamicPart += getPhoneNumbers( mAddressee.phoneNumbers(), false ); for ( ; emailIt != emails.end(); ++emailIt ) { if ( kemailAvail ) { dynamicPart += QString( "<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\"><a href=\"mailto:%2 <%3> \">%4</a></td></tr>" ) .arg( type ) .arg( name ) .arg( *emailIt ) .arg( *emailIt ); } else { dynamicPart += QString( "<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\">%2</td></tr>" ) .arg( type ) .arg( *emailIt ); } } if ( !mAddressee.url().url().isEmpty() ) { dynamicPart += QString( "<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\">%2</td></tr>" ) .arg( i18n( "Homepage" ) ) @@ -287,58 +284,57 @@ mText = "<table width=\"100%\">\n"; .arg( i18n(" ") ) .arg( name ); */ if ( ! mAddressee.role().isEmpty() ) mText += QString("<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\">%2</td></tr>" ) .arg( i18n(" ") ) .arg( mAddressee.role()); if ( ! mAddressee.organization().isEmpty() ) mText += QString("<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\">%2</td></tr>" ) .arg( i18n(" ") ) .arg( mAddressee.organization()); mText += dynamicPart; mText += notes; mText += "</table>"; } // at last display it... setText( mText ); } -QString AddresseeView::getPhoneNumbers( bool preferred ) +QString AddresseeView::getPhoneNumbers( KABC::PhoneNumber::List phones ,bool preferred ) { ExternalAppHandler* eah = ExternalAppHandler::instance(); bool kphoneAvail = eah->isPhoneAppAvailable(); bool kfaxAvail = eah->isFaxAppAvailable(); bool ksmsAvail = eah->isSMSAppAvailable(); bool kpagerAvail = eah->isPagerAppAvailable(); bool ksipAvail = eah->isSIPAppAvailable(); QString dynamicPart; - KABC::PhoneNumber::List phones = mAddressee.phoneNumbers(); KABC::PhoneNumber::List::ConstIterator phoneIt; QString extension; int phonetype; QString sms; for ( phoneIt = phones.begin(); phoneIt != phones.end(); ++phoneIt ) { phonetype = (*phoneIt).type(); if ( ((phonetype & KABC::PhoneNumber::Pref) == 0 ) == preferred ) continue; if (ksmsAvail && ( ((phonetype & KABC::PhoneNumber::Car) == KABC::PhoneNumber::Car) || ((phonetype & KABC::PhoneNumber::Cell) == KABC::PhoneNumber::Cell) ) ) { sms = QString("<a href=\"smsto:%1 \">(sms)</a>" ) .arg( (*phoneIt).number() ); } else sms = ""; extension = QString::null; if ((phonetype & KABC::PhoneNumber::Fax) == KABC::PhoneNumber::Fax) { @@ -356,52 +352,54 @@ QString AddresseeView::getPhoneNumbers( bool preferred ) else extension = QString::null; if ( !extension.isEmpty() ) { dynamicPart += QString( "<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\"><a href=\"%2%3 \">%4</a> %5</td></tr>" ) .arg( KABC::PhoneNumber::typeLabel( phonetype ) ) .arg( extension ) .arg( (*phoneIt).number() ) .arg( (*phoneIt).number() ) .arg( sms ); } else { dynamicPart += QString( "<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\">%2 %3</td></tr>" ) .arg( KABC::PhoneNumber::typeLabel( phonetype ) ) .arg( (*phoneIt).number() ) .arg( sms ); } } return dynamicPart; } +/* KABC::Addressee AddresseeView::addressee() const { return mAddressee; } +*/ void AddresseeView::addTag(const QString & tag,const QString & text) { if ( text.isEmpty() ) return; int number=text.contains("\n"); QString str = "<" + tag + ">"; QString tmpText=text; QString tmpStr=str; if(number !=-1) { if (number > 0) { int pos=0; QString tmp; for(int i=0;i<=number;i++) { pos=tmpText.find("\n"); tmp=tmpText.left(pos); tmpText=tmpText.right(tmpText.length()-pos-1); tmpStr+=tmp+"<br>"; } } else tmpStr += tmpText; tmpStr+="</" + tag + ">"; mText.append(tmpStr); } diff --git a/kabc/addresseeview.h b/kabc/addresseeview.h index d8a13ee..3800512 100644 --- a/kabc/addresseeview.h +++ b/kabc/addresseeview.h @@ -25,55 +25,55 @@ #include <kabc/addressee.h> #include <kdialogbase.h> //US #include <ktextbrowser.h> #include <qtextbrowser.h> namespace KPIM { //US class AddresseeView : public KTextBrowser class AddresseeView : public QTextBrowser { public: AddresseeView( QWidget *parent = 0, const char *name = 0 ); /** Sets the addressee object. The addressee is displayed immediately. @param addr The addressee object. */ void setAddressee( const KABC::Addressee& addr ); void setSource(const QString& n); /** Returns the current addressee object. */ - KABC::Addressee addressee() const; + //KABC::Addressee addressee() const; private: - KABC::Addressee mAddressee; + //KABC::Addressee mAddressee; QString mText; - QString getPhoneNumbers( bool preferred ); + QString getPhoneNumbers( KABC::PhoneNumber::List phones, bool preferred ); void addTag(const QString & tag,const QString & text); - class AddresseeViewPrivate; - AddresseeViewPrivate *d; + //class AddresseeViewPrivate; + //AddresseeViewPrivate *d; }; class AddresseeChooser : public KDialogBase { Q_OBJECT public: AddresseeChooser( KABC::Addressee loc, KABC::Addressee rem, bool takeloc, QWidget *parent = 0, const char *name = 0 ); int executeD( bool local ); private: int mSyncResult; private slots: void slot_remote(); void slot_local(); }; } #endif diff --git a/kabc/vcard/VCardEntity.cpp b/kabc/vcard/VCardEntity.cpp index 5fca3bc..b676cc7 100644 --- a/kabc/vcard/VCardEntity.cpp +++ b/kabc/vcard/VCardEntity.cpp @@ -52,70 +52,115 @@ VCardEntity::operator = (VCardEntity & x) if (*this == x) return *this; Entity::operator = (x); return *this; } VCardEntity & VCardEntity::operator = (const QCString & s) { Entity::operator = (s); return *this; } bool VCardEntity::operator == (VCardEntity & x) { x.parse(); return false; } VCardEntity::~VCardEntity() { } +#include <qdatetime.h>; void VCardEntity::_parse() { +#if 0 + QTime tim; + tim.start(); + int num = 0; + // old code vDebug("parse"); QCString s(strRep_); int i = s.find(QRegExp("BEGIN:VCARD", false)); while (i != -1) { i = s.find(QRegExp("BEGIN:VCARD", false), 11); QCString cardStr(s.left(i)); VCard * v = new VCard(cardStr); cardList_.append(v); v->parse(); s.remove(0, i); } + +#else + // this code is up to 17 (!) times faster + int start = 0; + QTime tim; + tim.start(); + int i = 11; + int len = strRep_.length(); + int num = 0; + while (i < len ) { + while( i < len ) { + int add = 1; + if ( strRep_.at(i) == 'B' ) { + if ( i+add < len && strRep_.at(i+add++) == 'E') + if ( i+add < len && strRep_.at(i+add++) == 'G') + if ( i+add < len && strRep_.at(i+add++) == 'I') + if ( i+add < len && strRep_.at(i+add++) == 'N') + if ( i+add < len && strRep_.at(i+add++) == ':') + if ( i+add < len && strRep_.at(i+add++) == 'V') + if ( i+add < len && strRep_.at(i+add++) == 'C') + if ( i+add < len && strRep_.at(i+add++) == 'A') + if ( i+add < len && strRep_.at(i+add++) == 'R') + if ( i+add < len && strRep_.at(i+add++) == 'D') + break; + } + ++i; + } + if ( i <= len ) { + ++num; + char* dat = strRep_.data()+start; + VCard * v = new VCard( QCString ( dat,i-start ) ); + start = i; + cardList_.append(v); + v->parse(); + } + i+= 11; + } +#endif + //qDebug("***time %d found %d", tim.elapsed(), num); } void VCardEntity::_assemble() { VCardListIterator it(cardList_); for (; it.current(); ++it) strRep_ += it.current()->asString() + "\r\n"; // One CRLF for luck. } VCardList & VCardEntity::cardList() { parse(); return cardList_; } void VCardEntity::setCardList(const VCardList & l) { parse(); //US cardList_ = l; VCardListIterator it(l); |