You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdenetwork/kopete/kopete/kconf_update/kopete-nameTracking.cpp

136 lines
4.6 KiB

/*
kconf_update app for updating the contactlist format ( <= 0.9.0) for MetaContacts to
track the name of a subcontact.
Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
*************************************************************************
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
*************************************************************************
*/
#include <tqdir.h>
#include <tqtextstream.h>
#include <tqdom.h>
#include <kstandarddirs.h>
static TQTextStream qcerr( stderr, IO_WriteOnly );
int main()
{
TDEInstance* inst = new TDEInstance( "Update script" );
TQString filename = locateLocal( "data", TQString::fromLatin1( "kopete/contactlist.xml" ) );
// Load contact list & save backup.
TQFile contactListFile( filename );
contactListFile.open( IO_ReadOnly );
TQDomDocument contactList;
contactList.setContent( &contactListFile );
contactListFile.close();
TQDir().rename( filename, filename + TQString::fromLatin1( ".bak" ) );
// parse the XML file
TQDomElement list = contactList.documentElement();
TQDomElement mcElement = list.firstChild().toElement();
while( !mcElement.isNull() )
{
// update all the MetaContacts
if( mcElement.tagName() == TQString::fromLatin1("meta-contact") )
{
TQDomElement displayName;
TQDomElement subcontact;
TQDomElement elem = mcElement.firstChild().toElement();
while( !elem.isNull() )
{
if( elem.tagName() == TQString::fromLatin1( "display-name" ) )
displayName = elem;
if( elem.tagName() == TQString::fromLatin1( "plugin-data" ) )
{
// check if it's a contact by checking for "protocol" substring in the tag,
// and the presence of a contactId child element.
TQString pluginId = elem.attribute( TQString::fromLatin1( "plugin-id" ) );
bool isProtocol = ( pluginId.contains( "protocol", false ) > 0 ); // case-insensitive search
bool hasContactId = false;
TQDomNode field = elem.firstChild();
while( !field.isNull() )
{
TQDomElement fieldElem = field.toElement();
if( !fieldElem.isNull() &&
fieldElem.tagName() == TQString::fromLatin1( "plugin-data-field" ) &&
fieldElem.attribute( TQString::fromLatin1( "key" ) ) == TQString::fromLatin1( "contactId" ) )
{
hasContactId = true;
break;
}
field = field.nextSibling();
}
if( isProtocol && hasContactId )
subcontact = elem;
}
elem = elem.nextSibling().toElement();
} // end while
// check if we're even tracking the subcontact's name
// if displayName.isNull(), it simply won't find the attribute; no harm done
bool tracking =
( displayName.attribute( TQString::fromLatin1( "trackChildNameChanges" ),
TQString::fromLatin1( "0" ) ) == TQString::fromLatin1( "1" ) );
if( !displayName.isNull() && !subcontact.isNull() && tracking )
{
// collect info
TQString nsCID;
TQString nsPID;
TQString nsAID;
nsPID = subcontact.attribute( TQString::fromLatin1( "plugin-id" ) );
TQDomNode field = subcontact.firstChild();
while( !field.isNull() )
{
TQDomElement fieldElem = field.toElement();
if( !fieldElem.isNull() && fieldElem.tagName() == TQString::fromLatin1( "plugin-data-field" ) )
{
if( fieldElem.attribute( TQString::fromLatin1( "key" ) ) == TQString::fromLatin1( "contactId" ) )
nsCID = fieldElem.text();
if( fieldElem.attribute( TQString::fromLatin1( "key" ) ) == TQString::fromLatin1( "accountId" ) )
nsAID = fieldElem.text();
}
field = field.nextSibling();
}
// create the tracking info
displayName.setAttribute( TQString::fromLatin1( "nameSourceContactId" ), nsCID );
displayName.setAttribute( TQString::fromLatin1( "nameSourcePluginId" ), nsPID );
displayName.setAttribute( TQString::fromLatin1( "nameSourceAccountId" ), nsAID );
}
}
mcElement = mcElement.nextSibling().toElement();
}
// Save converted contactlist
contactListFile.open( IO_WriteOnly );
TQTextStream stream( &contactListFile );
stream.setEncoding( TQTextStream::UnicodeUTF8 );
stream << contactList.toString( 4 );
contactListFile.flush();
contactListFile.close();
return 0;
}
// vim: set noet ts=4 sts=4 sw=4: