summaryrefslogtreecommitdiffstats
path: root/kopete/libkopete/kabcpersistence.cpp
diff options
context:
space:
mode:
authorSlávek Banko <[email protected]>2013-09-03 20:02:44 +0200
committerSlávek Banko <[email protected]>2013-09-03 21:01:29 +0200
commit45971e65a6114fbd1f91ae354da485450001166f (patch)
treeb607ce9f3b683a89478b8c21c6bc9a53bf6b7a44 /kopete/libkopete/kabcpersistence.cpp
parentc26bb519a8aebc04ffe39d0b6c784a1c1e915202 (diff)
downloadtdenetwork-45971e65a6114fbd1f91ae354da485450001166f.tar.gz
tdenetwork-45971e65a6114fbd1f91ae354da485450001166f.zip
Additional k => tde renaming and fixes
Diffstat (limited to 'kopete/libkopete/kabcpersistence.cpp')
-rw-r--r--kopete/libkopete/kabcpersistence.cpp452
1 files changed, 0 insertions, 452 deletions
diff --git a/kopete/libkopete/kabcpersistence.cpp b/kopete/libkopete/kabcpersistence.cpp
deleted file mode 100644
index 0d03fc07..00000000
--- a/kopete/libkopete/kabcpersistence.cpp
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- addressbooklink.cpp - Manages operations involving the KDE Address Book
-
- Copyright (c) 2005 Will Stephenson <[email protected]>
-
- Kopete (c) 2002-2004 by the Kopete developers <[email protected]>
-
- *************************************************************************
- * *
- * 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 <tqstring.h>
-#include <tqtimer.h>
-
-#include <tdeabc/addressbook.h>
-#include <tdeabc/addressee.h>
-#include <tdeabc/resource.h>
-#include <tdeabc/stdaddressbook.h>
-
-// UI related includes used for importing from KABC
-#include <kdialogbase.h>
-#include <tdelocale.h>
-#include <tdemessagebox.h>
-#include "accountselector.h"
-#include "kopeteuiglobal.h"
-
-#include <kstaticdeleter.h>
-
-#include "kopeteaccount.h"
-#include "kopeteaccountmanager.h"
-#include "kopetecontact.h"
-#include "kopetemetacontact.h"
-#include "kopetepluginmanager.h"
-#include "kopeteprotocol.h"
-
-#include "kabcpersistence.h"
-
-namespace Kopete
-{
-
-/**
- * utility function to merge two TQStrings containing individual elements separated by 0xE000
- */
-static TQString unionContents( TQString arg1, TQString arg2 )
-{
- TQChar separator( 0xE000 );
- TQStringList outList = TQStringList::split( separator, arg1 );
- TQStringList arg2List = TQStringList::split( separator, arg2 );
- for ( TQStringList::iterator it = arg2List.begin(); it != arg2List.end(); ++it )
- if ( !outList.contains( *it ) )
- outList.append( *it );
- TQString out = outList.join( separator );
- return out;
-}
-
-KABCPersistence::KABCPersistence( TQObject * parent, const char * name ) : TQObject( parent, name )
-{
- s_pendingResources.setAutoDelete( false );
-}
-
-KABCPersistence::~KABCPersistence()
-{
-}
-
-KABCPersistence *KABCPersistence::s_self = 0L;
-
-bool KABCPersistence::s_addrBookWritePending = false;
-
-TQPtrList<TDEABC::Resource> KABCPersistence::s_pendingResources;
-
-TDEABC::AddressBook* KABCPersistence::s_addressBook = 0;
-
-KABCPersistence *KABCPersistence::self()
-{
- static KStaticDeleter<KABCPersistence> deleter;
- if(!s_self)
- deleter.setObject( s_self, new KABCPersistence() );
- return s_self;
-}
-
-TDEABC::AddressBook* KABCPersistence::addressBook()
-{
- if ( s_addressBook == 0L )
- {
- s_addressBook = TDEABC::StdAddressBook::self();
- TDEABC::StdAddressBook::setAutomaticSave( false );
- }
- return s_addressBook;
-}
-
-void KABCPersistence::write( MetaContact * mc )
-{
- // Save any changes in each contact's addressBookFields to KABC
- TDEABC::AddressBook* ab = addressBook();
-
- kdDebug( 14010 ) << k_funcinfo << "looking up Addressee for " << mc->displayName() << "..." << endl;
- // Look up the address book entry
- TDEABC::Addressee theAddressee = ab->findByUid( mc->metaContactId() );
- // Check that if addressee is not deleted or if the link is spurious
- // (inherited from Kopete < 0.8, where all metacontacts had random ids)
- if ( theAddressee.isEmpty() )
- {
- // not found in currently enabled addressbooks - may be in a disabled resource...
- return;
- }
- else
- {
- // collate the instant messaging data to be inserted into the address book
- TQMap<TQString, TQStringList> addressMap;
- TQPtrList<Contact> contacts = mc->contacts();
- TQPtrListIterator<Contact> cIt( contacts );
- while ( Contact * c = cIt.current() )
- {
- TQStringList addresses = addressMap[ c->protocol()->addressBookIndexField() ];
- addresses.append( c->contactId() );
- addressMap.insert( c->protocol()->addressBookIndexField(), addresses );
- ++cIt;
- }
-
- // insert a custom field for each protocol
- TQMap<TQString, TQStringList>::ConstIterator it = addressMap.begin();
- for ( ; it != addressMap.end(); ++it )
- {
- // read existing data for this key
- TQString currentCustomForProtocol = theAddressee.custom( it.key(), TQString::fromLatin1( "All" ) );
- // merge without duplicating
- TQString toWrite = unionContents( currentCustomForProtocol, it.data().join( TQChar( 0xE000 ) ) );
- // 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: " << it.key() << ", " << "All" << ", " << toWrite << endl;
- theAddressee.insertCustom( it.key(), TQString::fromLatin1( "All" ), toWrite );
- TQString check = theAddressee.custom( it.key(), TQString::fromLatin1( "All" ) );
- }
- ab->insertAddressee( theAddressee );
- //kdDebug( 14010 ) << k_funcinfo << "dumping addressbook before write " << endl;
- //dumpAB();
- writeAddressBook( theAddressee.resource() );
- //theAddressee.dump();
- }
-
-/* // Wipe out the existing addressBook entries
- d->addressBook.clear();
- // This causes each Kopete::Protocol subclass to serialise its contacts' data into the metacontact's plugin data and address book data
- emit aboutToSave(this);
-
- kdDebug( 14010 ) << k_funcinfo << "...FOUND ONE!" << endl;
- // Store address book fields
- TQMap<TQString, TQMap<TQString, TQString> >::ConstIterator appIt = d->addressBook.begin();
- for( ; appIt != d->addressBook.end(); ++appIt )
- {
- TQMap<TQString, TQString>::ConstIterator addrIt = appIt.data().begin();
- for( ; addrIt != appIt.data().end(); ++addrIt )
- {
- // read existing data for this key
- TQString currentCustom = theAddressee.custom( appIt.key(), addrIt.key() );
- // merge without duplicating
- TQString 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() << ", " << toWrite << endl;
- theAddressee.insertCustom( appIt.key(), addrIt.key(), toWrite );
- }
- }
- ab->insertAddressee( theAddressee );
- writeAddressBook();
- }*/
-}
-
-void KABCPersistence::writeAddressBook( const TDEABC::Resource * res)
-{
- if ( !s_pendingResources.containsRef( res ) )
- s_pendingResources.append( res );
- if ( !s_addrBookWritePending )
- {
- s_addrBookWritePending = true;
- TQTimer::singleShot( 2000, this, TQT_SLOT( slotWriteAddressBook() ) );
- }
-}
-
-void KABCPersistence::slotWriteAddressBook()
-{
- //kdDebug( 14010 ) << k_funcinfo << endl;
- TDEABC::AddressBook* ab = addressBook();
- TQPtrListIterator<TDEABC::Resource> it( s_pendingResources );
- for ( ; it.current(); ++it )
- {
- //kdDebug( 14010 ) << "Writing resource " << it.current()->resourceName() << endl;
- TDEABC::Ticket *ticket = ab->requestSaveTicket( it.current() );
- if ( !ticket )
- kdWarning( 14010 ) << "WARNING: Resource is locked by other application!" << endl;
- else
- {
- if ( !ab->save( ticket ) )
- {
- kdWarning( 14010 ) << "ERROR: Saving failed!" << endl;
- ab->releaseSaveTicket( ticket );
- }
- }
- //kdDebug( 14010 ) << "Finished writing KABC" << endl;
- }
- s_pendingResources.clear();
- s_addrBookWritePending = false;
-}
-
-void KABCPersistence::removeKABC( MetaContact *)
-{
-/* // remove any data this KMC has written to the TDE address book
- // Save any changes in each contact's addressBookFields to KABC
- TDEABC::AddressBook* ab = addressBook();
-
- // Wipe out the existing addressBook entries
- d->addressBook.clear();
- // This causes each Kopete::Protocol subclass to serialise its contacts' data into the metacontact's plugin data and address book data
- emit aboutToSave(this);
-
- // If the metacontact is linked to a kabc entry
- if ( !d->metaContactId.isEmpty() )
- {
- //kdDebug( 14010 ) << k_funcinfo << "looking up Addressee for " << displayName() << "..." << endl;
- // Look up the address book entry
- TDEABC::Addressee theAddressee = ab->findByUid( metaContactId() );
-
- if ( theAddressee.isEmpty() )
- {
- // remove the link
- //kdDebug( 14010 ) << k_funcinfo << "...not found." << endl;
- d->metaContactId=TQString();
- }
- else
- {
- //kdDebug( 14010 ) << k_funcinfo << "...FOUND ONE!" << endl;
- // Remove address book fields
- TQMap<TQString, TQMap<TQString, TQString> >::ConstIterator appIt = d->addressBook.begin();
- for( ; appIt != d->addressBook.end(); ++appIt )
- {
- TQMap<TQString, TQString>::ConstIterator addrIt = appIt.data().begin();
- for( ; addrIt != appIt.data().end(); ++addrIt )
- {
- // FIXME: This assumes Kopete is the only app writing these fields
- kdDebug( 14010 ) << k_funcinfo << "Removing: " << appIt.key() << ", " << addrIt.key() << endl;
- theAddressee.removeCustom( appIt.key(), addrIt.key() );
- }
- }
- ab->insertAddressee( theAddressee );
-
- writeAddressBook();
- }
- }
-// kdDebug(14010) << k_funcinfo << kdBacktrace() <<endl;*/
-}
-
-bool KABCPersistence::syncWithKABC( MetaContact * mc )
-{
- kdDebug(14010) << k_funcinfo << endl;
- bool contactAdded = false;
- // check whether the dontShowAgain was checked
- TDEABC::AddressBook* ab = addressBook();
- TDEABC::Addressee addr = ab->findByUid( mc->metaContactId() );
-
- if ( !addr.isEmpty() ) // if we are associated with KABC
- {
-// load the set of addresses from KABC
- TQStringList customs = addr.customs();
-
- TQStringList::ConstIterator it;
- for ( it = customs.begin(); it != customs.end(); ++it )
- {
- TQString app, name, value;
- splitField( *it, app, name, value );
- kdDebug( 14010 ) << "app=" << app << " name=" << name << " value=" << value << endl;
-
- if ( app.startsWith( TQString::fromLatin1( "messaging/" ) ) )
- {
- if ( name == TQString::fromLatin1( "All" ) )
- {
- kdDebug( 14010 ) << " syncing \"" << app << ":" << name << " with contactlist " << endl;
- // Get the protocol name from the custom field
- // by chopping the 'messaging/' prefix from the custom field app name
- TQString protocolName = app.right( app.length() - 10 );
- // munge Jabber hack
- if ( protocolName == TQString::fromLatin1( "xmpp" ) )
- protocolName = TQString::fromLatin1( "jabber" );
-
- // Check Kopete supports it
- Protocol * proto = dynamic_cast<Protocol*>( PluginManager::self()->loadPlugin( TQString::fromLatin1( "kopete_" ) + protocolName ) );
- if ( !proto )
- {
- KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry,
- i18n( "<qt>\"%1\" is not supported by Kopete.</qt>" ).arg( protocolName ),
- i18n( "Could Not Sync with TDE Address Book" ) );
- continue;
- }
-
- // See if we need to add each contact in this protocol
- TQStringList addresses = TQStringList::split( TQChar( 0xE000 ), value );
- TQStringList::iterator end = addresses.end();
- for ( TQStringList::iterator it = addresses.begin(); it != end; ++it )
- {
- // check whether each one is present in Kopete
- // Is it in the contact list?
- // First discard anything after an 0xE120, this is used by IRC to separate nick and server group name, but
- // IRC doesn't support this properly yet, so the user will have to select an appropriate account manually
- int separatorPos = (*it).find( TQChar( 0xE120 ) );
- if ( separatorPos != -1 )
- *it = (*it).left( separatorPos );
-
- TQDict<Kopete::Account> accounts = Kopete::AccountManager::self()->accounts( proto );
- TQDictIterator<Kopete::Account> acs(accounts);
- Kopete::MetaContact *otherMc = 0;
- for ( acs.toFirst(); acs.current(); ++acs )
- {
- Kopete::Contact *c= acs.current()->contacts()[*it];
- if(c)
- {
- otherMc=c->metaContact();
- break;
- }
- }
-
- if ( otherMc ) // Is it in another metacontact?
- {
- // Is it already in this metacontact? If so, we needn't do anything
- if ( otherMc == mc )
- {
- kdDebug( 14010 ) << *it << " already a child of this metacontact." << endl;
- continue;
- }
- kdDebug( 14010 ) << *it << " already exists in OTHER metacontact, move here?" << endl;
- // find the Kopete::Contact and attempt to move it to this metacontact.
- otherMc->findContact( proto->pluginId(), TQString(), *it )->setMetaContact( mc );
- }
- else
- {
- // if not, prompt to add it
- kdDebug( 14010 ) << proto->pluginId() << "://" << *it << " was not found in the contact list. Prompting to add..." << endl;
- if ( KMessageBox::Yes == KMessageBox::questionYesNo( Kopete::UI::Global::mainWidget(),
- i18n( "<qt>An address was added to this contact by another application.<br>Would you like to use it in Kopete?<br><b>Protocol:</b> %1<br><b>Address:</b> %2</qt>" ).arg( proto->displayName() ).arg( *it ), i18n( "Import Address From Address Book" ), i18n("Use"), i18n("Do Not Use"), TQString::fromLatin1( "ImportFromKABC" ) ) )
- {
- // Check the accounts for this protocol are all connected
- // Most protocols do not allow you to add contacts while offline
- // Would be better to have a virtual bool Kopete::Account::readyToAddContact()
- bool allAccountsConnected = true;
- for ( acs.toFirst(); acs.current(); ++acs )
- if ( !acs.current()->isConnected() )
- { allAccountsConnected = false;
- break;
- }
- if ( !allAccountsConnected )
- {
- KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry,
- i18n( "<qt>One or more of your accounts using %1 are offline. Most systems have to be connected to add contacts. Please connect these accounts and try again.</qt>" ).arg( protocolName ),
- i18n( "Not Connected" ) );
- continue;
- }
-
- // we have got a contact to add, our accounts are connected, so add it.
- // Do we need to choose an account
- Kopete::Account *chosen = 0;
- if ( accounts.count() > 1 )
- { // if we have >1 account in this protocol, prompt for the protocol.
- KDialogBase *chooser = new KDialogBase(0, "chooser", true,
- i18n("Choose Account"), KDialogBase::Ok|KDialogBase::Cancel,
- KDialogBase::Ok, false);
- AccountSelector *accSelector = new AccountSelector(proto, chooser,
- "accSelector");
- chooser->setMainWidget(accSelector);
- if ( chooser->exec() == TQDialog::Rejected )
- continue;
- chosen = accSelector->selectedItem();
-
- delete chooser;
- }
- else if ( accounts.isEmpty() )
- {
- KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry,
- i18n( "<qt>You do not have an account configured for <b>%1</b> yet. Please create an account, connect it, and try again.</qt>" ).arg( protocolName ),
- i18n( "No Account Found" ) );
- continue;
- }
- else // if we have 1 account in this protocol, choose it
- {
- chosen = acs.toFirst();
- }
-
- // add the contact to the chosen account
- if ( chosen )
- {
- kdDebug( 14010 ) << "Adding " << *it << " to " << chosen->accountId() << endl;
- if ( chosen->addContact( *it, mc ) )
- contactAdded = true;
- else
- KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry,
- i18n( "<qt>It was not possible to add the contact.</qt>" ),
- i18n( "Could Not Add Contact") ) ;
- }
- }
- else
- kdDebug( 14010 ) << " user declined to add " << *it << " to contactlist " << endl;
- }
- }
- kdDebug( 14010 ) << " all " << addresses.count() << " contacts in " << proto->pluginId() << " checked " << endl;
- }
- else
- kdDebug( 14010 ) << "not interested in name=" << name << endl;
-
- }
- else
- kdDebug( 14010 ) << "not interested in app=" << app << endl;
- }
- }
- return contactAdded;
- return false;
-}
-
-// FIXME: Remove when IM address API is in KABC (KDE 4)
-void KABCPersistence::splitField( const TQString &str, TQString &app, TQString &name, TQString &value )
-{
- int colon = str.find( ':' );
- if ( colon != -1 ) {
- TQString tmp = str.left( colon );
- value = str.mid( colon + 1 );
-
- int dash = tmp.find( '-' );
- if ( dash != -1 ) {
- app = tmp.left( dash );
- name = tmp.mid( dash + 1 );
- }
- }
-}
-
-void KABCPersistence::dumpAB()
-{
- TDEABC::AddressBook * ab = addressBook();
- kdDebug( 14010 ) << k_funcinfo << " DUMPING ADDRESSBOOK" << endl;
- TDEABC::AddressBook::ConstIterator dumpit = ab->begin();
- for ( ; dumpit != ab->end(); ++dumpit )
- {
- (*dumpit).dump();
- }
-}
-
-
-} // end namespace Kopete
-
- // dump addressbook contents
-
-#include "kabcpersistence.moc"