summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-10-22 02:21:29 (UTC)
committer zautrix <zautrix>2004-10-22 02:21:29 (UTC)
commitc17118a0b2da49ec633e21cdcd51798c0c38644a (patch) (side-by-side diff)
tree581fbcaa64a5566991ffe0bd3b1b2d428589d87f
parentd6f9bd535e8cabe653bdff329500f9153e5e11fb (diff)
downloadkdepimpi-c17118a0b2da49ec633e21cdcd51798c0c38644a.zip
kdepimpi-c17118a0b2da49ec633e21cdcd51798c0c38644a.tar.gz
kdepimpi-c17118a0b2da49ec633e21cdcd51798c0c38644a.tar.bz2
made addressbook much faster
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--kabc/addresseeview.cpp26
-rw-r--r--kabc/addresseeview.h10
-rw-r--r--kabc/vcard/VCardEntity.cpp45
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);