00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <qlayout.h>
00025
00026
#include <kabc/addressbook.h>
00027
#include <kabc/resource.h>
00028
#include <kdebug.h>
00029
#include <klocale.h>
00030
#include <kmessagebox.h>
00031
#include <ktrader.h>
00032
00033
#include "core.h"
00034
#include "kablock.h"
00035
#include "undocmds.h"
00036
#include "xxportselectdialog.h"
00037
00038
#include "xxportmanager.h"
00039
00040 KURL XXPortManager::importURL = KURL();
00041 QString XXPortManager::importData = QString::null;
00042
00043 XXPortManager::XXPortManager( KAB::Core *core, QObject *parent,
const char *name )
00044 : QObject( parent, name ), mCore( core )
00045 {
00046 loadPlugins();
00047 }
00048
00049 XXPortManager::~XXPortManager()
00050 {
00051 }
00052
00053
void XXPortManager::restoreSettings()
00054 {
00055 }
00056
00057
void XXPortManager::saveSettings()
00058 {
00059 }
00060
00061
void XXPortManager::importVCard(
const KURL &url )
00062 {
00063 importURL = url;
00064 slotImport(
"vcard",
"<empty>" );
00065 importURL = KURL();
00066 }
00067
00068
void XXPortManager::importVCard(
const QString &vCard )
00069 {
00070 importData = vCard;
00071 slotImport(
"vcard",
"<empty>" );
00072 importData =
"";
00073 }
00074
00075
void XXPortManager::slotImport(
const QString &identifier,
const QString &data )
00076 {
00077 KAB::XXPort *obj = mXXPortObjects[ identifier ];
00078
if ( !obj ) {
00079 KMessageBox::error( mCore->widget(), i18n(
"<qt>No import plugin available for <b>%1</b>.</qt>" ).arg( identifier ) );
00080
return;
00081 }
00082
00083 KABC::Resource *resource = mCore->requestResource( mCore->widget() );
00084
if ( !resource )
00085
return;
00086
00087 KABLock::self( mCore->addressBook() )->lock( resource );
00088
00089 KABC::AddresseeList list = obj->importContacts( data );
00090 KABC::AddresseeList::Iterator it;
00091
bool imported =
false;
00092
for ( it = list.begin(); it != list.end(); ++it ) {
00093 (*it).setResource( resource );
00094
00095 PwNewCommand *command =
new PwNewCommand( mCore->addressBook(), *it );
00096 UndoStack::instance()->push( command );
00097 RedoStack::instance()->clear();
00098 imported =
true;
00099 }
00100
00101 KABLock::self( mCore->addressBook() )->unlock( resource );
00102
00103
if ( imported )
00104 emit
modified();
00105 }
00106
00107
void XXPortManager::slotExport(
const QString &identifier,
const QString &data )
00108 {
00109 KAB::XXPort *obj = mXXPortObjects[ identifier ];
00110
if ( !obj ) {
00111 KMessageBox::error( mCore->widget(), i18n(
"<qt>No export plugin available for <b>%1</b>.</qt>" ).arg( identifier ) );
00112
return;
00113 }
00114
00115 KABC::AddresseeList addrList;
00116 XXPortSelectDialog dlg( mCore, obj->requiresSorting(), mCore->widget() );
00117
if ( dlg.exec() )
00118 addrList = dlg.contacts();
00119
else
00120
return;
00121
00122
if ( !obj->exportContacts( addrList, data ) )
00123 KMessageBox::error( mCore->widget(), i18n(
"Unable to export contacts." ) );
00124 }
00125
00126
void XXPortManager::loadPlugins()
00127 {
00128 mXXPortObjects.clear();
00129
00130 KTrader::OfferList plugins = KTrader::self()->query(
"KAddressBook/XXPort" );
00131 KTrader::OfferList::ConstIterator it;
00132
for ( it = plugins.begin(); it != plugins.end(); ++it ) {
00133
if ( !(*it)->hasServiceType(
"KAddressBook/XXPort" ) )
00134
continue;
00135
00136 KLibFactory *factory = KLibLoader::self()->factory( (*it)->library().latin1() );
00137
if ( !factory ) {
00138 kdDebug(5720) <<
"XXPortManager::loadExtensions(): Factory creation failed" << endl;
00139
continue;
00140 }
00141
00142 KAB::XXPortFactory *xxportFactory = static_cast<KAB::XXPortFactory*>( factory );
00143
00144
if ( !xxportFactory ) {
00145 kdDebug(5720) <<
"XXPortManager::loadExtensions(): Cast failed" << endl;
00146
continue;
00147 }
00148
00149 KAB::XXPort *obj = xxportFactory->xxportObject( mCore->addressBook(), mCore->widget() );
00150
if ( obj ) {
00151
if ( mCore->guiClient() )
00152 mCore->guiClient()->insertChildClient( obj );
00153
00154 mXXPortObjects.insert( obj->identifier(), obj );
00155 connect( obj, SIGNAL( exportActivated(
const QString&,
const QString& ) ),
00156
this, SLOT( slotExport(
const QString&,
const QString& ) ) );
00157 connect( obj, SIGNAL( importActivated(
const QString&,
const QString& ) ),
00158
this, SLOT( slotImport(
const QString&,
const QString& ) ) );
00159 }
00160 }
00161 }
00162
00163
#include "xxportmanager.moc"