[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-pim
Subject:    [Kde-pim] [PATCH] import from old Kmailaddressbook
From:       Marco =?iso-8859-1?q?Z=FChlke?= <mzuehlke () nikocity ! de>
Date:       2002-02-25 10:30:47
[Download RAW message or body]

[I'm not on the kde-pim list, so please Cc me]

Hi Cornelius,

after I had seen that you made it possible to import the old style
Kmail addressbook into kabc I tested it with my emails and discovered
that it only handles very simple emailentries.

So I developed the following patch.
Irt made it poosible to import Emails with "," inside like:
"Zühlke, Marco" <mzuehlke@nikocity.de>
and even lists with such emails like:
"Zühlke, Marco" <mzuehlke@nikocity.de>, name@domain.com

I even thought about making distributionlists from these kind of
lists. But I was not sure if thats useful.

Something I did not understand is the difference between
setName, setFormatedName and the functions setGivenName, setfamilyName, ...
So I did not change the call in setNameFromString, but I had in my old style
KMail addressbook Emails with "Lastname, Givenname" and "Givename Lastname"
and realized that in the new Kaddressbook they were mixed again despite the
parsing in setNameFromString.

Is that intended ?


On the toppic of kaddressbook being slow I realized that kaddressbook
copies all Addressee's into ContactEntry's. Isn't it possible to use
Addressee in Kaddressbook aswell (for 3.1) ??

Hope that helps,

Marco


["kabc.patch" (text/plain)]

--- kab2kabc.cpp.orig	Sat Feb 23 00:08:00 2002
+++ kab2kabc.cpp	Sun Feb 24 22:29:47 2002
@@ -49,13 +49,31 @@
   kdDebug() << "KMAILENTRY: " << kmailEntry << endl;
 
   QString entry = kmailEntry.simplifyWhiteSpace();
+  if( entry.isEmpty() ) return;
 
   QString email;
   QString name;
+  QString comment;
+
+  if( entry.at( entry.length() -1 ) == ')' ){
+    int br = entry.findRev( '(' );
+    if( br >= 0 ){
+      comment = entry.mid( br + 1, entry.length() - br - 2 );
+      entry.truncate( br );
+      if( entry.at( entry.length() - 1 ).isSpace() ){
+	entry.truncate( br - 1 );
+      }
+    }
+  }
 
   int posSpace = entry.findRev( ' ' );
-  if ( posSpace < 0 ) email = entry;
-  else {
+  if ( posSpace < 0 ){
+    email = entry;
+    if( !comment.isEmpty() ){
+      name = comment;
+      comment = "";
+    }
+  }else{
     email = entry.mid( posSpace + 1 );
     name = entry.left( posSpace );
   }
@@ -66,15 +84,31 @@
   if ( name.at( 0 ) == '"' && name.at( name.length() - 1) == '"' ) {
     name = name.mid( 1, name.length() - 2 );
   }
+  if ( name.at( 0 ) == '\'' && name.at( name.length() - 1) == '\'' ) {
+    name = name.mid( 1, name.length() - 2 );
+  }
 
-  kdDebug() << "  EMAIL: " << email << endl;
-  kdDebug() << "  NAME : " << name << endl;
+  if( name.at( name.length() -1 ) == ')' ){
+    int br = name.findRev( '(' );
+    if( br >= 0 ){
+      comment = name.mid( br + 1, name.length() - br - 2 ) + " " + comment;
+      name.truncate( br );
+      if( name.at( name.length() - 1 ).isSpace() ){
+	name.truncate( br - 1 );
+      }
+    }
+  }
+
+  kdDebug() << "  EMAIL   : " << email   << endl;
+  kdDebug() << "  NAME    : " << name    << endl;
+  kdDebug() << "  COMMENT : " << comment << endl;
 
   KABC::Addressee::List al = ab->findByEmail( email );
   if ( al.isEmpty() ) {
     KABC::Addressee a;
     a.setNameFromString( name );
     a.insertEmail( email );
+    a.setNote( comment );
 
     ab->insertAddressee( a );
     
@@ -113,11 +147,28 @@
   QStringList::ConstIterator it;
   for( it = kmailEntries.begin(); it != kmailEntries.end(); ++it ) {
     if ( (*it).at( 0 ) == '#' ) continue;
+    bool insideQuote = false;
+    int end = (*it).length() - 1;
+    for(int i = end; i; i--) {
+      if( (*it).at( i ) == '"' ) {
+	if(insideQuote)
+	  insideQuote=false;
+	else
+	  insideQuote=true;
+      }else if( (*it).at( i ) == ',' && !insideQuote ){
+	readKMailEntry( (*it).mid( i + 1, end - i ), ab );
+	end = i - 1;
+      }
+    } 
+    readKMailEntry( (*it).mid( 0, end + 1 ), ab );
+
+    /*
     QStringList addresses = QStringList::split( ",", *it );
     QStringList::ConstIterator it2;
     for( it2 = addresses.begin(); it2 != addresses.end(); ++it2 ) {
       readKMailEntry( *it2, ab );
     }
+    */
   }
 }
 
--- addressee.cpp.orig	Sun Feb 24 12:10:07 2002
+++ addressee.cpp	Sun Feb 24 23:17:14 2002
@@ -346,26 +346,51 @@
 
 void Addressee::setNameFromString( const QString &str )
 {
+  int i;
+
   setFormattedName( str );
   setName( str );
 
-  QStringList nameParts = QStringList::split( " ", str );
-  switch( nameParts.count() ) {
-    case 1:
-      setFamilyName( nameParts[ 0 ] );
-      break;
-    case 2:
-      setGivenName( nameParts[ 0 ] );
-      setFamilyName( nameParts[ 1 ] );
-      break;
-    case 3:
-      setGivenName( nameParts[ 0 ] );
-      setAdditionalName( nameParts[ 1 ] );
-      setFamilyName( nameParts[ 2 ] );
-      break;
-    default:
-      setFamilyName( str );
-      break;
+  i = str.find(',');
+  if( i < 0 ){
+    // "Given [Additional] Family"
+    QStringList nameParts = QStringList::split( " ", str );
+    switch( nameParts.count() ) {
+      case 1:
+	setFamilyName( nameParts[ 0 ] );
+	break;
+      case 2:
+	setGivenName( nameParts[ 0 ] );
+	setFamilyName( nameParts[ 1 ] );
+	break;
+      case 3:
+	setGivenName( nameParts[ 0 ] );
+	setAdditionalName( nameParts[ 1 ] );
+	setFamilyName( nameParts[ 2 ] );
+	break;
+      default:
+	setFamilyName( str );
+	break;
+    }
+  }else{
+    // "Family, Given [Additional]"
+    setFamilyName( str.left( i ) );
+    QString part2 = str.mid( i + 1 );
+    part2.stripWhiteSpace();
+
+    QStringList nameParts = QStringList::split( " ", part2 );
+    switch( nameParts.count() ) {
+      case 1:
+	setGivenName( nameParts[ 0 ] );
+	break;
+      case 2:
+	setGivenName( nameParts[ 0 ] );
+	setAdditionalName( nameParts[ 1 ] );
+	break;
+      default:
+	setGivenName( part2 );
+	break;
+    }
   }
 }
 
--- scripts/addressee.src.cpp.orig	Sun Feb 24 11:45:37 2002
+++ scripts/addressee.src.cpp	Sun Feb 24 23:16:58 2002
@@ -74,26 +74,51 @@
 
 void Addressee::setNameFromString( const QString &str )
 {
+  int i;
+
   setFormattedName( str );
   setName( str );
 
-  QStringList nameParts = QStringList::split( " ", str );
-  switch( nameParts.count() ) {
-    case 1:
-      setFamilyName( nameParts[ 0 ] );
-      break;
-    case 2:
-      setGivenName( nameParts[ 0 ] );
-      setFamilyName( nameParts[ 1 ] );
-      break;
-    case 3:
-      setGivenName( nameParts[ 0 ] );
-      setAdditionalName( nameParts[ 1 ] );
-      setFamilyName( nameParts[ 2 ] );
-      break;
-    default:
-      setFamilyName( str );
-      break;
+  i = str.find(',');
+  if( i < 0 ){
+    // "Given [Additional] Family"
+    QStringList nameParts = QStringList::split( " ", str );
+    switch( nameParts.count() ) {
+      case 1:
+	setFamilyName( nameParts[ 0 ] );
+	break;
+      case 2:
+	setGivenName( nameParts[ 0 ] );
+	setFamilyName( nameParts[ 1 ] );
+	break;
+      case 3:
+	setGivenName( nameParts[ 0 ] );
+	setAdditionalName( nameParts[ 1 ] );
+	setFamilyName( nameParts[ 2 ] );
+	break;
+      default:
+	setFamilyName( str );
+	break;
+    }
+  }else{
+    // "Family, Given [Additional]"
+    setFamilyName( str.left( i ) );
+    QString part2 = str.mid( i + 1 );
+    part2.stripWhiteSpace();
+
+    QStringList nameParts = QStringList::split( " ", part2 );
+    switch( nameParts.count() ) {
+      case 1:
+	setGivenName( nameParts[ 0 ] );
+	break;
+      case 2:
+	setGivenName( nameParts[ 0 ] );
+	setAdditionalName( nameParts[ 1 ] );
+	break;
+      default:
+	setGivenName( part2 );
+	break;
+    }
   }
 }
 

_______________________________________________
kde-pim mailing list
kde-pim@mail.kde.org
http://mail.kde.org/mailman/listinfo/kde-pim
kde-pim home page at http://pim.kde.org/

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic