[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdenetwork/kopete/libkopete
From: Will Stephenson <lists () stevello ! free-online ! co ! uk>
Date: 2004-07-31 19:47:42
Message-ID: 20040731194742.1850F99F5 () office ! kde ! org
[Download RAW message or body]
CVS commit by wstephens:
Merge our data with any existing data when writing a kabc field
Solves a couple of ancient FIXMEs and makes Kopete play nicely now that Konversation \
is joining the addressbook integration game.
M +26 -5 kopetemetacontact.cpp 1.221
--- kdenetwork/kopete/libkopete/kopetemetacontact.cpp #1.220:1.221
@@ -67,4 +67,19 @@ KABC::AddressBook* KopeteMetaContact::m_
bool KopeteMetaContactPrivate::s_addrBookWritePending = false;
+/**
+ * utility function to merge two QStrings containing individual elements separated \
by 0xE000 + */
+QString unionContents( QString arg1, QString arg2 )
+{
+ QChar separator( 0xE000 );
+ QStringList outList = QStringList::split( separator, arg1 );
+ QStringList arg2List = QStringList::split( separator, arg2 );
+ for ( QStringList::iterator it = arg2List.begin(); it != arg2List.end(); \
++it ) + if ( !outList.contains( *it ) )
+ outList.append( *it );
+ QString out = outList.join( separator );
+ return out;
+}
+
KopeteMetaContact::KopeteMetaContact()
: KopetePluginDataObject( KopeteContactList::contactList() ), \
KopeteNotifyDataObject() @@ -827,4 +842,7 @@ void KopeteMetaContact::setMetaContactId
// 5) Is called when reading the saved contact list
+ // only remove kabc data if we are changing contacts; other programs may \
have written that data, + // and kopete will not pick up on it if no other MC \
is associated with the data left behind + if ( !newMetaContactId.isNull() )
removeKABC();
d->metaContactId = newMetaContactId;
@@ -853,5 +871,4 @@ void KopeteMetaContact::updateKABC()
// (inherited from Kopete < 0.8, where all metacontacts had random \
ids)
- // FIXME: this no longer gets called when reading all contacts but \
we need something similar to update from 0.7 if ( theAddressee.isEmpty() )
{
@@ -869,8 +886,12 @@ void KopeteMetaContact::updateKABC()
for( ; addrIt != appIt.data().end(); ++addrIt )
{
- // FIXME: This assumes Kopete is the only \
app writing these fields + // read existing \
data for this key + QString currentCustom = \
theAddressee.custom( appIt.key(), addrIt.key() ); + \
// merge without duplicating + QString toWrite \
= unionContents( currentCustom, addrIt.data() ); + \
// write the result
// Note if nothing ends up in the KABC data, \
this is because insertCustom does nothing if any param is empty.
- kdDebug( 14010 ) << k_funcinfo << "Writing: \
" << appIt.key() << ", " << addrIt.key() << ", " << addrIt.data() << \
endl;
- theAddressee.insertCustom( appIt.key(), \
addrIt.key(), addrIt.data() ); + kdDebug( \
14010 ) << k_funcinfo << "Writing: " << appIt.key() << ", " << addrIt.key() << ", " \
<< toWrite << endl; + \
theAddressee.insertCustom( appIt.key(), addrIt.key(), toWrite ); }
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic